feat: update layout metadata and add icons for data panel
This commit is contained in:
@@ -1,20 +1,61 @@
|
|||||||
# Portfolio New
|
# Portfolio New
|
||||||
|
|
||||||
Poyraz Avsever icin hazirlanmis, `Next.js + poyraz-ui` tabanli portfolyo ve ayni repoda yer alan Electron tabanli veri yonetim paneli.
|
Bu monorepo, Next.js tabanlı portfolyo web uygulaması ve Electron ile geliştirilen veri yönetim panelini bir arada sunar.
|
||||||
|
|
||||||
## Monorepo Yapisi
|
## Mimari
|
||||||
|
|
||||||
```text
|
```mermaid
|
||||||
.
|
flowchart TD
|
||||||
|- app/ # Next.js route'lari
|
subgraph Web Uygulama (Next.js)
|
||||||
|- components/ # UI component'leri
|
A[app/] --> B[components/]
|
||||||
|- content/ # Markdown icerikleri (blog, podcast)
|
A --> C[content/]
|
||||||
|- data/ # TypeScript veri kaynaklari
|
A --> D[data/]
|
||||||
|- public/ # Statik dosyalar
|
A --> E[public/]
|
||||||
|- apps/
|
B --> F[UI Bilesenleri]
|
||||||
| |- data-panel/ # Electron dashboard (icerik yonetimi + publish)
|
C --> G[Markdown Blog/Podcast]
|
||||||
|
D --> H[TypeScript Veri Kaynaklari]
|
||||||
|
E --> I[Statik Dosyalar]
|
||||||
|
end
|
||||||
|
subgraph Electron Data Panel
|
||||||
|
J[apps/data-panel/]
|
||||||
|
J --> K[renderer/]
|
||||||
|
J --> L[main.cjs]
|
||||||
|
J --> M[preload.cjs]
|
||||||
|
K --> N[configs.js]
|
||||||
|
J --> O[assets/]
|
||||||
|
J --> P[Electron build scripts]
|
||||||
|
end
|
||||||
|
J --> D
|
||||||
|
J --> E
|
||||||
|
J --> C
|
||||||
|
J --> Q[Git ile publish]
|
||||||
|
Q --> D
|
||||||
|
Q --> E
|
||||||
|
Q --> C
|
||||||
|
A -.-> E
|
||||||
|
A -.-> D
|
||||||
|
A -.-> C
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Klasörler ve Akış
|
||||||
|
|
||||||
|
- **app/**: Next.js route ve sayfa yapısı
|
||||||
|
- **components/**: UI bileşenleri (React)
|
||||||
|
- **content/**: Markdown içerikler (blog, podcast)
|
||||||
|
- **data/**: TypeScript veri kaynakları (projeler, referanslar, eğitim vb.)
|
||||||
|
- **public/**: Statik dosyalar (görseller, pdf, avatar)
|
||||||
|
- **apps/data-panel/**: Electron tabanlı içerik yönetim paneli
|
||||||
|
- **renderer/**: Panelin arayüzü ve form konfigürasyonları
|
||||||
|
- **main.cjs**: Electron ana süreç, dosya ve git işlemleri
|
||||||
|
- **configs.js**: Koleksiyon ve form alanı yönetimi
|
||||||
|
|
||||||
|
### Akış
|
||||||
|
|
||||||
|
1. Web uygulaması Next.js ile çalışır, içerik ve veri dosyalarını okur.
|
||||||
|
2. Electron paneli ile içerik (blog/podcast), veri (data/\*.ts) ve medya (public/) yönetimi yapılır.
|
||||||
|
3. Panelde yapılan değişiklikler git ile commit/push edilerek yayınlanır.
|
||||||
|
4. Paneldeki koleksiyonlar ve form alanları configs.js ile özelleştirilebilir.
|
||||||
|
|
||||||
## Gereksinimler
|
## Gereksinimler
|
||||||
|
|
||||||
- Node.js 20+
|
- Node.js 20+
|
||||||
@@ -27,7 +68,7 @@ Poyraz Avsever icin hazirlanmis, `Next.js + poyraz-ui` tabanli portfolyo ve ayni
|
|||||||
pnpm install
|
pnpm install
|
||||||
```
|
```
|
||||||
|
|
||||||
## Frontend Komutlari
|
## Frontend Komutları
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pnpm dev # Next.js local
|
pnpm dev # Next.js local
|
||||||
@@ -36,18 +77,18 @@ pnpm build # Production build
|
|||||||
pnpm start # Production run
|
pnpm start # Production run
|
||||||
```
|
```
|
||||||
|
|
||||||
## Electron Data Panel Komutlari
|
## Electron Data Panel Komutları
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pnpm panel:dev # Electron panel (development)
|
pnpm panel:dev # Electron panel (development)
|
||||||
pnpm panel:clean # apps/data-panel/dist temizle
|
pnpm panel:clean # apps/data-panel/dist temizle
|
||||||
pnpm panel:pack # Paket test (unpacked)
|
pnpm panel:pack # Paket test (unpacked)
|
||||||
pnpm panel:dist # Tum hedefler icin distributable
|
pnpm panel:dist # Tüm hedefler için distributable
|
||||||
pnpm panel:dist:win # Windows NSIS installer
|
pnpm panel:dist:win # Windows NSIS installer
|
||||||
pnpm panel:dist:portable # Windows portable exe
|
pnpm panel:dist:portable # Windows portable exe
|
||||||
```
|
```
|
||||||
|
|
||||||
## Icerik Kaynaklari
|
## İçerik Kaynakları
|
||||||
|
|
||||||
- Blog markdown: `content/blog/*.md`
|
- Blog markdown: `content/blog/*.md`
|
||||||
- Podcast markdown:
|
- Podcast markdown:
|
||||||
@@ -55,71 +96,66 @@ pnpm panel:dist:portable # Windows portable exe
|
|||||||
- `content/podcasts/masa-basi/*.md`
|
- `content/podcasts/masa-basi/*.md`
|
||||||
- Site verileri: `data/*.ts`
|
- Site verileri: `data/*.ts`
|
||||||
|
|
||||||
## Electron Panel Neleri Yapar?
|
## Electron Panel Özellikleri
|
||||||
|
|
||||||
- Blog/podcast icerigi olusturma-guncelleme-silme
|
- Blog/podcast içeriği oluşturma-güncelleme-silme
|
||||||
- `data/*.ts` export dizilerini form tabanli yonetme
|
- `data/*.ts` export dizilerini form tabanlı yönetme
|
||||||
- `public/` altina medya yukleme/silme
|
- `public/` altına medya yükleme/silme
|
||||||
- `git add + commit + push` ile yayinlama akisi
|
- `git add + commit + push` ile yayınlama akışı
|
||||||
|
|
||||||
## Open-Source ve Ozellestirme Rehberi
|
## Özelleştirme ve Açık Kaynak
|
||||||
|
|
||||||
### 1) Dashboard tab/field ozellestirme
|
### Dashboard tab/field özelleştirme
|
||||||
|
|
||||||
Paneldeki koleksiyonlar ve form alanlari su dosyadan yonetilir:
|
Paneldeki koleksiyonlar ve form alanları `apps/data-panel/renderer/configs.js` dosyasından yönetilir.
|
||||||
|
|
||||||
- `apps/data-panel/renderer/configs.js`
|
- Yeni tab/collection ekleyebilir
|
||||||
|
- Alan tiplerini (`text`, `textarea`, `number`, `url`) değiştirebilir
|
||||||
|
- Kart görünümünü özelleştirebilirsin
|
||||||
|
|
||||||
Buradan:
|
### Farklı repo kökü ile çalıştırma
|
||||||
|
|
||||||
- yeni tab/collection ekleyebilir,
|
Panel varsayılan olarak bu monorepo kökünü kullanır. Farklı klasör için:
|
||||||
- alan tiplerini (`text`, `textarea`, `number`, `url`) degistirebilir,
|
|
||||||
- kart gorunumunu (`card`) ozellestirebilirsin.
|
|
||||||
|
|
||||||
### 2) Farkli repo koku ile calistirma
|
- Çevresel değişken: `PORTFOLIO_WORKSPACE_ROOT`
|
||||||
|
- veya CLI argüman: `--workspace-root=<path>`
|
||||||
|
|
||||||
Panel varsayilan olarak bu monorepo kokunu kullanir. Farkli klasor icin:
|
Örnek (PowerShell):
|
||||||
|
|
||||||
- Cevresel degisken: `PORTFOLIO_WORKSPACE_ROOT`
|
|
||||||
- veya CLI arguman: `--workspace-root=<path>`
|
|
||||||
|
|
||||||
Ornek (PowerShell):
|
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:PORTFOLIO_WORKSPACE_ROOT = "D:\my-portfolio-repo"
|
$env:PORTFOLIO_WORKSPACE_ROOT = "D:\my-portfolio-repo"
|
||||||
pnpm panel:dev
|
pnpm panel:dev
|
||||||
```
|
```
|
||||||
|
|
||||||
Ornek (packaged exe):
|
Örnek (packaged exe):
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
.\apps\data-panel\dist\portfolio-data-panel-0.1.0-x64-portable.exe --workspace-root="D:\my-portfolio-repo"
|
.\apps\data-panel\dist\portfolio-data-panel-0.1.0-x64-portable.exe --workspace-root="D:\my-portfolio-repo"
|
||||||
```
|
```
|
||||||
|
|
||||||
Panel baslarken `data`, `public`, `content/blog`, `content/podcasts` klasorlerini dogrular.
|
Panel başlarken `data`, `public`, `content/blog`, `content/podcasts` klasörlerini doğrular.
|
||||||
|
|
||||||
### 3) Publish akisini degistirme
|
### Publish akışını değiştirme
|
||||||
|
|
||||||
Git publish akisi `apps/data-panel/main.cjs` icindeki `publishChanges` fonksiyonunda.
|
Git publish akışı `apps/data-panel/main.cjs` içindeki `publishChanges` fonksiyonunda yönetilir.
|
||||||
Varsayilan akista:
|
Varsayılan akış:
|
||||||
|
|
||||||
- `git add data public content`
|
- `git add data public content`
|
||||||
- otomatik/manuel commit message
|
- Otomatik/manuel commit message
|
||||||
- `git push`
|
- `git push`
|
||||||
|
Branch seçimi, PR tabanlı akış veya sadece commit modları eklenebilir.
|
||||||
|
|
||||||
Istersen branch secimi, PR tabanli akış, veya sadece commit modlari ekleyebilirsin.
|
## Yayın ve Kontrol Listesi
|
||||||
|
|
||||||
## Release Checklist
|
|
||||||
|
|
||||||
1. `pnpm lint`
|
1. `pnpm lint`
|
||||||
2. `pnpm build`
|
2. `pnpm build`
|
||||||
3. Icerik/veri kontrolu (`content/`, `data/`, `public/`)
|
3. İçerik/veri kontrolü (`content/`, `data/`, `public/`)
|
||||||
4. Electron panel akisi kontrolu (`pnpm panel:dev`)
|
4. Electron panel akışı kontrolü (`pnpm panel:dev`)
|
||||||
5. Gerekirse distributable kontrolu (`pnpm panel:pack` / `pnpm panel:dist`)
|
5. Gerekirse distributable kontrolü (`pnpm panel:pack` / `pnpm panel:dist`)
|
||||||
|
|
||||||
## Troubleshooting
|
## Sorun Giderme
|
||||||
|
|
||||||
### YouTube cookie/SameSite uyarilari
|
### YouTube cookie/SameSite uyarıları
|
||||||
|
|
||||||
Embed URL'ler `youtube-nocookie.com` formatina cekildi. Bu degisiklik cross-site cookie kaynakli konsol gurultusunu azaltir.
|
Embed URL'ler `youtube-nocookie.com` formatına çekildi. Bu değişiklik cross-site cookie kaynaklı konsol gürültüsünü azaltır.
|
||||||
Tarayici guvenlik politikasi nedeniyle bazi 3rd-party loglar tamamen sifirlanamayabilir; bu durumda uygulama davranisi etkilenmez.
|
Tarayıcı güvenlik politikası nedeniyle bazı 3rd-party loglar tamamen sıfırlanamayabilir; bu durumda uygulama davranışı etkilenmez.
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 240 KiB After Width: | Height: | Size: 279 KiB |
+44
-5
@@ -1,4 +1,4 @@
|
|||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import "./globals.css";
|
import "./globals.css";
|
||||||
|
|
||||||
import { SiteNavbar } from "@/components/site-navbar";
|
import { SiteNavbar } from "@/components/site-navbar";
|
||||||
@@ -9,14 +9,53 @@ import Link from "next/link";
|
|||||||
import { AnnouncementBar } from "poyraz-ui/organisms";
|
import { AnnouncementBar } from "poyraz-ui/organisms";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title:
|
metadataBase: new URL("https://poyrazavsever.com"),
|
||||||
"Poyraz Avsever | Portfolyo | Freelancer | Full-stack Geliştirici | Web Geliştirici",
|
title: {
|
||||||
|
default: "Poyraz Avsever | Portfolyo",
|
||||||
|
template: "%s | Poyraz Avsever",
|
||||||
|
},
|
||||||
description:
|
description:
|
||||||
"Poyraz Avsever'in projelerini, yetkinliklerini ve hizmetlerini sergilediği kişisel portfolyo sitesi.",
|
"Poyraz Avsever'in projelerini, yazılım içeriklerini ve teknik çalışmalarını paylaştığı kişisel portfolyo sitesi.",
|
||||||
|
applicationName: "Poyraz Avsever Portfolyo",
|
||||||
|
alternates: {
|
||||||
|
canonical: "/",
|
||||||
|
},
|
||||||
icons: {
|
icons: {
|
||||||
icon: "/favicon.ico",
|
icon: [
|
||||||
|
{ url: "/favicon.ico", sizes: "any" },
|
||||||
|
{ url: "/logo/logo.jpeg", type: "image/jpeg" },
|
||||||
|
],
|
||||||
|
shortcut: "/favicon.ico",
|
||||||
|
apple: "/logo/logo.jpeg",
|
||||||
},
|
},
|
||||||
authors: [{ name: "Poyraz Avsever" }],
|
authors: [{ name: "Poyraz Avsever" }],
|
||||||
|
creator: "Poyraz Avsever",
|
||||||
|
publisher: "Poyraz Avsever",
|
||||||
|
openGraph: {
|
||||||
|
type: "website",
|
||||||
|
locale: "tr_TR",
|
||||||
|
url: "https://poyrazavsever.com",
|
||||||
|
siteName: "Poyraz Avsever Portfolyo",
|
||||||
|
title: "Poyraz Avsever | Portfolyo",
|
||||||
|
description:
|
||||||
|
"Poyraz Avsever'in projelerini, yazılım içeriklerini ve teknik çalışmalarını paylaştığı kişisel portfolyo sitesi.",
|
||||||
|
images: [
|
||||||
|
{
|
||||||
|
url: "/logo/logo.jpeg",
|
||||||
|
width: 1200,
|
||||||
|
height: 1200,
|
||||||
|
alt: "Poyraz Avsever Logo",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
twitter: {
|
||||||
|
card: "summary_large_image",
|
||||||
|
title: "Poyraz Avsever | Portfolyo",
|
||||||
|
description:
|
||||||
|
"Poyraz Avsever'in projelerini, yazılım içeriklerini ve teknik çalışmalarını paylaştığı kişisel portfolyo sitesi.",
|
||||||
|
images: ["/logo/logo.jpeg"],
|
||||||
|
creator: "@poyrazavsever",
|
||||||
|
},
|
||||||
keywords: [
|
keywords: [
|
||||||
"Poyraz Avsever",
|
"Poyraz Avsever",
|
||||||
"Portfolio",
|
"Portfolio",
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 279 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 601 KiB |
@@ -28,6 +28,7 @@
|
|||||||
"appId": "com.poyraz.portfolio.datapanel",
|
"appId": "com.poyraz.portfolio.datapanel",
|
||||||
"productName": "Portfolio Data Panel",
|
"productName": "Portfolio Data Panel",
|
||||||
"asar": true,
|
"asar": true,
|
||||||
|
"icon": "assets/icon.png",
|
||||||
"directories": {
|
"directories": {
|
||||||
"output": "dist"
|
"output": "dist"
|
||||||
},
|
},
|
||||||
@@ -38,6 +39,7 @@
|
|||||||
"package.json"
|
"package.json"
|
||||||
],
|
],
|
||||||
"win": {
|
"win": {
|
||||||
|
"icon": "assets/icon.ico",
|
||||||
"signAndEditExecutable": false,
|
"signAndEditExecutable": false,
|
||||||
"target": [
|
"target": [
|
||||||
{
|
{
|
||||||
@@ -51,7 +53,9 @@
|
|||||||
"nsis": {
|
"nsis": {
|
||||||
"oneClick": false,
|
"oneClick": false,
|
||||||
"allowToChangeInstallationDirectory": true,
|
"allowToChangeInstallationDirectory": true,
|
||||||
"perMachine": false
|
"perMachine": false,
|
||||||
|
"installerIcon": "assets/icon.ico",
|
||||||
|
"uninstallerIcon": "assets/icon.ico"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import Image from "next/image";
|
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
import Image from "next/image";
|
||||||
import ReactMarkdown from "react-markdown";
|
import ReactMarkdown from "react-markdown";
|
||||||
import remarkGfm from "remark-gfm";
|
import remarkGfm from "remark-gfm";
|
||||||
import { useEffect, useMemo, useRef, useState } from "react";
|
import { useEffect, useMemo, useRef, useState } from "react";
|
||||||
@@ -122,7 +122,7 @@ export function BlogDetailContent({ post }: BlogDetailContentProps) {
|
|||||||
</Typography>
|
</Typography>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<Card className="relative aspect-[16/8] overflow-hidden rounded-sm border-border">
|
<Card className="relative aspect-16/8 overflow-hidden rounded-sm border-border">
|
||||||
<Image
|
<Image
|
||||||
src={post.coverImage}
|
src={post.coverImage}
|
||||||
alt={post.title}
|
alt={post.title}
|
||||||
|
|||||||
Reference in New Issue
Block a user