Refactor sitemap and project components; remove snippets page; update project data structure and command palette links
This commit is contained in:
+56
-11
@@ -1,22 +1,67 @@
|
||||
import { listBlogDetails } from "@/data/blog-detail";
|
||||
import type { MetadataRoute } from "next";
|
||||
|
||||
const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL || "https://poyrazavsever.com";
|
||||
const SITE_URL =
|
||||
process.env.NEXT_PUBLIC_SITE_URL || "https://poyrazavsever.com";
|
||||
|
||||
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
||||
const posts = await listBlogDetails();
|
||||
|
||||
const staticRoutes: MetadataRoute.Sitemap = [
|
||||
{ url: SITE_URL, lastModified: new Date(), changeFrequency: "weekly", priority: 1.0 },
|
||||
{ url: `${SITE_URL}/about`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 },
|
||||
{ url: `${SITE_URL}/about/references`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.5 },
|
||||
{ url: `${SITE_URL}/about/volunteer-community`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.5 },
|
||||
{ url: `${SITE_URL}/blog`, lastModified: new Date(), changeFrequency: "weekly", priority: 0.9 },
|
||||
{ url: `${SITE_URL}/projects`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 },
|
||||
{ url: `${SITE_URL}/content`, lastModified: new Date(), changeFrequency: "weekly", priority: 0.7 },
|
||||
{ url: `${SITE_URL}/contact`, lastModified: new Date(), changeFrequency: "yearly", priority: 0.5 },
|
||||
{ url: `${SITE_URL}/links`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.4 },
|
||||
{ url: `${SITE_URL}/snippets`, lastModified: new Date(), changeFrequency: "weekly", priority: 0.7 },
|
||||
{
|
||||
url: SITE_URL,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: "weekly",
|
||||
priority: 1.0,
|
||||
},
|
||||
{
|
||||
url: `${SITE_URL}/about`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: "monthly",
|
||||
priority: 0.8,
|
||||
},
|
||||
{
|
||||
url: `${SITE_URL}/about/references`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: "monthly",
|
||||
priority: 0.5,
|
||||
},
|
||||
{
|
||||
url: `${SITE_URL}/about/volunteer-community`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: "monthly",
|
||||
priority: 0.5,
|
||||
},
|
||||
{
|
||||
url: `${SITE_URL}/blog`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: "weekly",
|
||||
priority: 0.9,
|
||||
},
|
||||
{
|
||||
url: `${SITE_URL}/projects`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: "monthly",
|
||||
priority: 0.8,
|
||||
},
|
||||
{
|
||||
url: `${SITE_URL}/content`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: "weekly",
|
||||
priority: 0.7,
|
||||
},
|
||||
{
|
||||
url: `${SITE_URL}/contact`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: "yearly",
|
||||
priority: 0.5,
|
||||
},
|
||||
{
|
||||
url: `${SITE_URL}/links`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: "monthly",
|
||||
priority: 0.4,
|
||||
},
|
||||
];
|
||||
|
||||
const blogRoutes: MetadataRoute.Sitemap = posts.map((post) => ({
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
import { SnippetsContent } from "@/components/snippets-content";
|
||||
import { listSnippets } from "@/data/snippets";
|
||||
|
||||
export default async function SnippetsPage() {
|
||||
const snippets = await listSnippets();
|
||||
const categories = ["All", ...new Set(snippets.map((s) => s.category))];
|
||||
|
||||
return <SnippetsContent snippets={snippets} categories={categories} />;
|
||||
}
|
||||
@@ -1,5 +1,11 @@
|
||||
|
||||
export const BLOG_CATEGORIES = ["Frontend", "UX", "Yazilim", "TypeScript", "Testing", "General"];
|
||||
export const BLOG_CATEGORIES = [
|
||||
"Frontend",
|
||||
"UX",
|
||||
"Yazilim",
|
||||
"TypeScript",
|
||||
"Testing",
|
||||
"General",
|
||||
];
|
||||
|
||||
export const COLLECTION_CONFIGS = {
|
||||
announcement: {
|
||||
@@ -8,10 +14,33 @@ export const COLLECTION_CONFIGS = {
|
||||
fileName: "site-settings.ts",
|
||||
exportName: "ANNOUNCEMENT_ITEMS",
|
||||
fields: [
|
||||
{ key: "id", label: "ID", required: true, placeholder: "main-announcement" },
|
||||
{ key: "text", label: "Text", type: "textarea", full: true, required: true, placeholder: "Bu hafta yeni bilesenler eklendi!" },
|
||||
{ key: "actionLabel", label: "Action Label", required: true, placeholder: "Incele ->" },
|
||||
{ key: "actionHref", label: "Action Link", type: "url", required: true, placeholder: "https://..." },
|
||||
{
|
||||
key: "id",
|
||||
label: "ID",
|
||||
required: true,
|
||||
placeholder: "main-announcement",
|
||||
},
|
||||
{
|
||||
key: "text",
|
||||
label: "Text",
|
||||
type: "textarea",
|
||||
full: true,
|
||||
required: true,
|
||||
placeholder: "Bu hafta yeni bilesenler eklendi!",
|
||||
},
|
||||
{
|
||||
key: "actionLabel",
|
||||
label: "Action Label",
|
||||
required: true,
|
||||
placeholder: "Incele ->",
|
||||
},
|
||||
{
|
||||
key: "actionHref",
|
||||
label: "Action Link",
|
||||
type: "url",
|
||||
required: true,
|
||||
placeholder: "https://...",
|
||||
},
|
||||
],
|
||||
card: (item) => ({
|
||||
title: item.id || "Announcement",
|
||||
@@ -25,11 +54,34 @@ export const COLLECTION_CONFIGS = {
|
||||
fileName: "bookmarks.ts",
|
||||
exportName: "BOOKMARKS",
|
||||
fields: [
|
||||
{ key: "id", label: "ID", required: true, placeholder: "bookmark-poyraz-ui" },
|
||||
{ key: "title", label: "Title", required: true, placeholder: "Poyraz UI" },
|
||||
{ key: "href", label: "Link", type: "url", required: true, placeholder: "https://..." },
|
||||
{
|
||||
key: "id",
|
||||
label: "ID",
|
||||
required: true,
|
||||
placeholder: "bookmark-poyraz-ui",
|
||||
},
|
||||
{
|
||||
key: "title",
|
||||
label: "Title",
|
||||
required: true,
|
||||
placeholder: "Poyraz UI",
|
||||
},
|
||||
{
|
||||
key: "href",
|
||||
label: "Link",
|
||||
type: "url",
|
||||
required: true,
|
||||
placeholder: "https://...",
|
||||
},
|
||||
{ key: "tag", label: "Tag", required: true, placeholder: "UI Kit" },
|
||||
{ key: "description", label: "Description", type: "textarea", full: true, required: true, placeholder: "Short description" },
|
||||
{
|
||||
key: "description",
|
||||
label: "Description",
|
||||
type: "textarea",
|
||||
full: true,
|
||||
required: true,
|
||||
placeholder: "Short description",
|
||||
},
|
||||
],
|
||||
card: (item) => ({
|
||||
title: item.title || item.id || "Untitled bookmark",
|
||||
@@ -43,12 +95,39 @@ export const COLLECTION_CONFIGS = {
|
||||
fileName: "certificates.ts",
|
||||
exportName: "certificates",
|
||||
fields: [
|
||||
{ key: "name", label: "Name", required: true, placeholder: "Certificate name" },
|
||||
{ key: "organization", label: "Organization", required: true, placeholder: "Udemy" },
|
||||
{
|
||||
key: "name",
|
||||
label: "Name",
|
||||
required: true,
|
||||
placeholder: "Certificate name",
|
||||
},
|
||||
{
|
||||
key: "organization",
|
||||
label: "Organization",
|
||||
required: true,
|
||||
placeholder: "Udemy",
|
||||
},
|
||||
{ key: "date", label: "Date", required: true, placeholder: "June 2025" },
|
||||
{ key: "category", label: "Category", required: true, placeholder: "mobile" },
|
||||
{ key: "image", label: "Image Path", required: true, placeholder: "/certificates/reactnative.png" },
|
||||
{ key: "description", label: "Description", type: "textarea", full: true, required: true, placeholder: "What this certificate represents" },
|
||||
{
|
||||
key: "category",
|
||||
label: "Category",
|
||||
required: true,
|
||||
placeholder: "mobile",
|
||||
},
|
||||
{
|
||||
key: "image",
|
||||
label: "Image Path",
|
||||
required: true,
|
||||
placeholder: "/certificates/reactnative.png",
|
||||
},
|
||||
{
|
||||
key: "description",
|
||||
label: "Description",
|
||||
type: "textarea",
|
||||
full: true,
|
||||
required: true,
|
||||
placeholder: "What this certificate represents",
|
||||
},
|
||||
],
|
||||
card: (item) => ({
|
||||
title: item.name || "Untitled certificate",
|
||||
@@ -62,11 +141,38 @@ export const COLLECTION_CONFIGS = {
|
||||
fileName: "education.ts",
|
||||
exportName: "EDUCATION",
|
||||
fields: [
|
||||
{ key: "id", label: "ID", required: true, placeholder: "ostim-university" },
|
||||
{ key: "title", label: "Title", required: true, placeholder: "Software Engineering - 2nd Year Student" },
|
||||
{ key: "institution", label: "Institution", required: true, placeholder: "OSTIM Technical University" },
|
||||
{ key: "period", label: "Period", required: true, placeholder: "2024 - Present" },
|
||||
{ key: "description", label: "Description", type: "textarea", full: true, required: true, placeholder: "Education summary" },
|
||||
{
|
||||
key: "id",
|
||||
label: "ID",
|
||||
required: true,
|
||||
placeholder: "ostim-university",
|
||||
},
|
||||
{
|
||||
key: "title",
|
||||
label: "Title",
|
||||
required: true,
|
||||
placeholder: "Software Engineering - 2nd Year Student",
|
||||
},
|
||||
{
|
||||
key: "institution",
|
||||
label: "Institution",
|
||||
required: true,
|
||||
placeholder: "OSTIM Technical University",
|
||||
},
|
||||
{
|
||||
key: "period",
|
||||
label: "Period",
|
||||
required: true,
|
||||
placeholder: "2024 - Present",
|
||||
},
|
||||
{
|
||||
key: "description",
|
||||
label: "Description",
|
||||
type: "textarea",
|
||||
full: true,
|
||||
required: true,
|
||||
placeholder: "Education summary",
|
||||
},
|
||||
],
|
||||
card: (item) => ({
|
||||
title: item.title || item.id || "Education",
|
||||
@@ -80,10 +186,30 @@ export const COLLECTION_CONFIGS = {
|
||||
fileName: "experience.ts",
|
||||
exportName: "EXPERIENCE",
|
||||
fields: [
|
||||
{ key: "id", label: "ID", required: true, placeholder: "omedya-part-time" },
|
||||
{ key: "role", label: "Role", required: true, placeholder: "Fullstack Developer" },
|
||||
{ key: "company", label: "Company", required: true, placeholder: "Omedya Bilisim A.S" },
|
||||
{ key: "period", label: "Period", required: true, placeholder: "August 2025 - Present" },
|
||||
{
|
||||
key: "id",
|
||||
label: "ID",
|
||||
required: true,
|
||||
placeholder: "omedya-part-time",
|
||||
},
|
||||
{
|
||||
key: "role",
|
||||
label: "Role",
|
||||
required: true,
|
||||
placeholder: "Fullstack Developer",
|
||||
},
|
||||
{
|
||||
key: "company",
|
||||
label: "Company",
|
||||
required: true,
|
||||
placeholder: "Omedya Bilisim A.S",
|
||||
},
|
||||
{
|
||||
key: "period",
|
||||
label: "Period",
|
||||
required: true,
|
||||
placeholder: "August 2025 - Present",
|
||||
},
|
||||
],
|
||||
card: (item) => ({
|
||||
title: item.role || item.id || "Experience",
|
||||
@@ -97,12 +223,47 @@ export const COLLECTION_CONFIGS = {
|
||||
exportName: "REFERENCES",
|
||||
fields: [
|
||||
{ key: "id", label: "ID", required: true, placeholder: "ali-korkmaz" },
|
||||
{ key: "author", label: "Author", required: true, placeholder: "Ali Korkmaz" },
|
||||
{ key: "role", label: "Role", required: true, placeholder: "Musteri - 2025" },
|
||||
{ key: "avatar", label: "Avatar Path", required: true, placeholder: "/avatars/ali.png" },
|
||||
{ key: "rating", label: "Rating", type: "number", min: 1, max: 5, step: 1, placeholder: "5" },
|
||||
{ key: "profileHref", label: "Profile Link", type: "url", placeholder: "https://linkedin.com/in/..." },
|
||||
{ key: "quote", label: "Quote", type: "textarea", full: true, required: true, placeholder: "Reference quote" },
|
||||
{
|
||||
key: "author",
|
||||
label: "Author",
|
||||
required: true,
|
||||
placeholder: "Ali Korkmaz",
|
||||
},
|
||||
{
|
||||
key: "role",
|
||||
label: "Role",
|
||||
required: true,
|
||||
placeholder: "Musteri - 2025",
|
||||
},
|
||||
{
|
||||
key: "avatar",
|
||||
label: "Avatar Path",
|
||||
required: true,
|
||||
placeholder: "/avatars/ali.png",
|
||||
},
|
||||
{
|
||||
key: "rating",
|
||||
label: "Rating",
|
||||
type: "number",
|
||||
min: 1,
|
||||
max: 5,
|
||||
step: 1,
|
||||
placeholder: "5",
|
||||
},
|
||||
{
|
||||
key: "profileHref",
|
||||
label: "Profile Link",
|
||||
type: "url",
|
||||
placeholder: "https://linkedin.com/in/...",
|
||||
},
|
||||
{
|
||||
key: "quote",
|
||||
label: "Quote",
|
||||
type: "textarea",
|
||||
full: true,
|
||||
required: true,
|
||||
placeholder: "Reference quote",
|
||||
},
|
||||
],
|
||||
card: (item) => ({
|
||||
title: item.author || item.id || "Reference",
|
||||
@@ -116,12 +277,34 @@ export const COLLECTION_CONFIGS = {
|
||||
fileName: "projects.ts",
|
||||
exportName: "MOBILE_APPS",
|
||||
fields: [
|
||||
{ key: "id", label: "ID", required: true, placeholder: "mobile-habit-flow" },
|
||||
{ key: "title", label: "Title", required: true, placeholder: "Habit Flow" },
|
||||
{
|
||||
key: "id",
|
||||
label: "ID",
|
||||
required: true,
|
||||
placeholder: "mobile-habit-flow",
|
||||
},
|
||||
{
|
||||
key: "title",
|
||||
label: "Title",
|
||||
required: true,
|
||||
placeholder: "Habit Flow",
|
||||
},
|
||||
{ key: "badge", label: "Badge", placeholder: "React Native" },
|
||||
{ key: "image", label: "Image Path", required: true, placeholder: "/images/hero1.png" },
|
||||
{
|
||||
key: "image",
|
||||
label: "Image Path",
|
||||
required: true,
|
||||
placeholder: "/images/hero1.png",
|
||||
},
|
||||
{ key: "href", label: "Link", type: "url", placeholder: "https://..." },
|
||||
{ key: "description", label: "Description", type: "textarea", full: true, required: true, placeholder: "Project summary" },
|
||||
{
|
||||
key: "description",
|
||||
label: "Description",
|
||||
type: "textarea",
|
||||
full: true,
|
||||
required: true,
|
||||
placeholder: "Project summary",
|
||||
},
|
||||
],
|
||||
card: (item) => ({
|
||||
title: item.title || item.id || "Project",
|
||||
@@ -136,11 +319,69 @@ export const COLLECTION_CONFIGS = {
|
||||
exportName: "WEB_APPS",
|
||||
fields: [
|
||||
{ key: "id", label: "ID", required: true, placeholder: "web-portfolio" },
|
||||
{ key: "title", label: "Title", required: true, placeholder: "Personal Portfolio" },
|
||||
{
|
||||
key: "title",
|
||||
label: "Title",
|
||||
required: true,
|
||||
placeholder: "Personal Portfolio",
|
||||
},
|
||||
{ key: "badge", label: "Badge", placeholder: "Next.js" },
|
||||
{ key: "image", label: "Image Path", required: true, placeholder: "/news/design.svg" },
|
||||
{
|
||||
key: "image",
|
||||
label: "Image Path",
|
||||
required: true,
|
||||
placeholder: "/news/design.svg",
|
||||
},
|
||||
{ key: "href", label: "Link", type: "url", placeholder: "https://..." },
|
||||
{ key: "description", label: "Description", type: "textarea", full: true, required: true, placeholder: "Project summary" },
|
||||
{
|
||||
key: "description",
|
||||
label: "Description",
|
||||
type: "textarea",
|
||||
full: true,
|
||||
required: true,
|
||||
placeholder: "Project summary",
|
||||
},
|
||||
],
|
||||
card: (item) => ({
|
||||
title: item.title || item.id || "Project",
|
||||
meta: [item.badge, item.href],
|
||||
footer: item.description,
|
||||
}),
|
||||
},
|
||||
projectsExtensions: {
|
||||
label: "Projects Extensions",
|
||||
itemLabel: "Extension Project",
|
||||
fileName: "projects.ts",
|
||||
exportName: "EXTENSIONS",
|
||||
fields: [
|
||||
{
|
||||
key: "id",
|
||||
label: "ID",
|
||||
required: true,
|
||||
placeholder: "extension-theme-tuner",
|
||||
},
|
||||
{
|
||||
key: "title",
|
||||
label: "Title",
|
||||
required: true,
|
||||
placeholder: "Theme Tuner",
|
||||
},
|
||||
{ key: "badge", label: "Badge", placeholder: "VS Code Extension" },
|
||||
{
|
||||
key: "image",
|
||||
label: "Image Path",
|
||||
required: true,
|
||||
placeholder: "/news/design.svg",
|
||||
},
|
||||
{ key: "href", label: "Link", type: "url", placeholder: "https://..." },
|
||||
{
|
||||
key: "description",
|
||||
label: "Description",
|
||||
type: "textarea",
|
||||
full: true,
|
||||
required: true,
|
||||
placeholder: "Project summary",
|
||||
},
|
||||
],
|
||||
card: (item) => ({
|
||||
title: item.title || item.id || "Project",
|
||||
@@ -154,12 +395,34 @@ export const COLLECTION_CONFIGS = {
|
||||
fileName: "projects.ts",
|
||||
exportName: "FIGMA_TEMPLATES",
|
||||
fields: [
|
||||
{ key: "id", label: "ID", required: true, placeholder: "figma-minimal-saas" },
|
||||
{ key: "title", label: "Title", required: true, placeholder: "Minimal SaaS Landing Kit" },
|
||||
{
|
||||
key: "id",
|
||||
label: "ID",
|
||||
required: true,
|
||||
placeholder: "figma-minimal-saas",
|
||||
},
|
||||
{
|
||||
key: "title",
|
||||
label: "Title",
|
||||
required: true,
|
||||
placeholder: "Minimal SaaS Landing Kit",
|
||||
},
|
||||
{ key: "badge", label: "Badge", placeholder: "Figma" },
|
||||
{ key: "image", label: "Image Path", required: true, placeholder: "/news/design.svg" },
|
||||
{
|
||||
key: "image",
|
||||
label: "Image Path",
|
||||
required: true,
|
||||
placeholder: "/news/design.svg",
|
||||
},
|
||||
{ key: "href", label: "Link", type: "url", placeholder: "https://..." },
|
||||
{ key: "description", label: "Description", type: "textarea", full: true, required: true, placeholder: "Project summary" },
|
||||
{
|
||||
key: "description",
|
||||
label: "Description",
|
||||
type: "textarea",
|
||||
full: true,
|
||||
required: true,
|
||||
placeholder: "Project summary",
|
||||
},
|
||||
],
|
||||
card: (item) => ({
|
||||
title: item.title || item.id || "Project",
|
||||
@@ -175,9 +438,21 @@ export const COLLECTION_CONFIGS = {
|
||||
fields: [
|
||||
{ key: "id", label: "ID", required: true, placeholder: "youtube" },
|
||||
{ key: "title", label: "Title", required: true, placeholder: "YouTube" },
|
||||
{ key: "timeline", label: "Timeline", required: true, placeholder: "2025 - Present" },
|
||||
{
|
||||
key: "timeline",
|
||||
label: "Timeline",
|
||||
required: true,
|
||||
placeholder: "2025 - Present",
|
||||
},
|
||||
{ key: "link", label: "Link", type: "url", placeholder: "https://..." },
|
||||
{ key: "focus", label: "Focus", type: "textarea", full: true, required: true, placeholder: "Community contribution summary" },
|
||||
{
|
||||
key: "focus",
|
||||
label: "Focus",
|
||||
type: "textarea",
|
||||
full: true,
|
||||
required: true,
|
||||
placeholder: "Community contribution summary",
|
||||
},
|
||||
],
|
||||
card: (item) => ({
|
||||
title: item.title || item.id || "Community",
|
||||
@@ -191,7 +466,13 @@ export const COLLECTION_CONFIGS = {
|
||||
fileName: "youtube-videos.ts",
|
||||
exportName: "YOUTUBE_VIDEO_LINKS",
|
||||
fields: [
|
||||
{ key: "url", label: "Video URL", type: "url", required: true, placeholder: "https://www.youtube.com/watch?v=..." },
|
||||
{
|
||||
key: "url",
|
||||
label: "Video URL",
|
||||
type: "url",
|
||||
required: true,
|
||||
placeholder: "https://www.youtube.com/watch?v=...",
|
||||
},
|
||||
],
|
||||
deserializeItem: (raw) => ({ url: String(raw || "") }),
|
||||
serializeItem: (item) => String(item.url || "").trim(),
|
||||
|
||||
@@ -10,26 +10,106 @@
|
||||
<header class="topbar">
|
||||
<div>
|
||||
<h1>Portfolio Data Panel</h1>
|
||||
<p>Manage blog posts, dashboard collections, media files, and publish updates.</p>
|
||||
<p>
|
||||
Manage blog posts, dashboard collections, media files, and publish
|
||||
updates.
|
||||
</p>
|
||||
</div>
|
||||
<div class="chip">Electron Monorepo</div>
|
||||
</header>
|
||||
|
||||
<nav class="tabs">
|
||||
<button class="tab-btn active" data-tab="blog">Blog</button>
|
||||
<button class="tab-btn" data-tab="collection" data-collection-key="announcement">Announcement</button>
|
||||
<button class="tab-btn" data-tab="podcast" data-podcast-kind="yazilim">Podcast Yazilim</button>
|
||||
<button class="tab-btn" data-tab="podcast" data-podcast-kind="masa-basi">Podcast Masa Basi</button>
|
||||
<button class="tab-btn" data-tab="collection" data-collection-key="bookmarks">Bookmarks</button>
|
||||
<button class="tab-btn" data-tab="collection" data-collection-key="certificates">Certificates</button>
|
||||
<button class="tab-btn" data-tab="collection" data-collection-key="education">Education</button>
|
||||
<button class="tab-btn" data-tab="collection" data-collection-key="experience">Experience</button>
|
||||
<button class="tab-btn" data-tab="collection" data-collection-key="references">References</button>
|
||||
<button class="tab-btn" data-tab="collection" data-collection-key="projectsMobile">Projects Mobile</button>
|
||||
<button class="tab-btn" data-tab="collection" data-collection-key="projectsWeb">Projects Web</button>
|
||||
<button class="tab-btn" data-tab="collection" data-collection-key="projectsFigma">Projects Figma</button>
|
||||
<button class="tab-btn" data-tab="collection" data-collection-key="community">Community</button>
|
||||
<button class="tab-btn" data-tab="collection" data-collection-key="youtube">YouTube</button>
|
||||
<button
|
||||
class="tab-btn"
|
||||
data-tab="collection"
|
||||
data-collection-key="announcement"
|
||||
>
|
||||
Announcement
|
||||
</button>
|
||||
<button class="tab-btn" data-tab="podcast" data-podcast-kind="yazilim">
|
||||
Podcast Yazilim
|
||||
</button>
|
||||
<button class="tab-btn" data-tab="podcast" data-podcast-kind="masa-basi">
|
||||
Podcast Masa Basi
|
||||
</button>
|
||||
<button
|
||||
class="tab-btn"
|
||||
data-tab="collection"
|
||||
data-collection-key="bookmarks"
|
||||
>
|
||||
Bookmarks
|
||||
</button>
|
||||
<button
|
||||
class="tab-btn"
|
||||
data-tab="collection"
|
||||
data-collection-key="certificates"
|
||||
>
|
||||
Certificates
|
||||
</button>
|
||||
<button
|
||||
class="tab-btn"
|
||||
data-tab="collection"
|
||||
data-collection-key="education"
|
||||
>
|
||||
Education
|
||||
</button>
|
||||
<button
|
||||
class="tab-btn"
|
||||
data-tab="collection"
|
||||
data-collection-key="experience"
|
||||
>
|
||||
Experience
|
||||
</button>
|
||||
<button
|
||||
class="tab-btn"
|
||||
data-tab="collection"
|
||||
data-collection-key="references"
|
||||
>
|
||||
References
|
||||
</button>
|
||||
<button
|
||||
class="tab-btn"
|
||||
data-tab="collection"
|
||||
data-collection-key="projectsMobile"
|
||||
>
|
||||
Projects Mobile
|
||||
</button>
|
||||
<button
|
||||
class="tab-btn"
|
||||
data-tab="collection"
|
||||
data-collection-key="projectsWeb"
|
||||
>
|
||||
Projects Web
|
||||
</button>
|
||||
<button
|
||||
class="tab-btn"
|
||||
data-tab="collection"
|
||||
data-collection-key="projectsExtensions"
|
||||
>
|
||||
Projects Extensions
|
||||
</button>
|
||||
<button
|
||||
class="tab-btn"
|
||||
data-tab="collection"
|
||||
data-collection-key="projectsFigma"
|
||||
>
|
||||
Projects Figma
|
||||
</button>
|
||||
<button
|
||||
class="tab-btn"
|
||||
data-tab="collection"
|
||||
data-collection-key="community"
|
||||
>
|
||||
Community
|
||||
</button>
|
||||
<button
|
||||
class="tab-btn"
|
||||
data-tab="collection"
|
||||
data-collection-key="youtube"
|
||||
>
|
||||
YouTube
|
||||
</button>
|
||||
<button class="tab-btn" data-tab="media">Media</button>
|
||||
<button class="tab-btn" data-tab="publish">Publish</button>
|
||||
</nav>
|
||||
@@ -40,7 +120,9 @@
|
||||
<aside class="card sidebar">
|
||||
<div class="sidebar-header">
|
||||
<h2>Blog Posts</h2>
|
||||
<button id="refresh-blog-files" class="btn btn-ghost">Refresh</button>
|
||||
<button id="refresh-blog-files" class="btn btn-ghost">
|
||||
Refresh
|
||||
</button>
|
||||
</div>
|
||||
<div id="blog-card-list" class="blog-card-list"></div>
|
||||
<button id="new-blog-file" class="btn mt-8">New Blog Post</button>
|
||||
@@ -50,7 +132,9 @@
|
||||
<div class="editor-head">
|
||||
<h2 id="blog-editor-title">Create Blog Post</h2>
|
||||
<div class="row">
|
||||
<button id="delete-blog-file" class="btn btn-danger">Delete</button>
|
||||
<button id="delete-blog-file" class="btn btn-danger">
|
||||
Delete
|
||||
</button>
|
||||
<button id="save-blog-file" class="btn">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -58,11 +142,17 @@
|
||||
<div class="blog-form-grid">
|
||||
<div>
|
||||
<label for="blog-slug">Slug</label>
|
||||
<input id="blog-slug" placeholder="building-minimal-design-systems" />
|
||||
<input
|
||||
id="blog-slug"
|
||||
placeholder="building-minimal-design-systems"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label for="blog-title">Title</label>
|
||||
<input id="blog-title" placeholder="Building Minimal Design Systems" />
|
||||
<input
|
||||
id="blog-title"
|
||||
placeholder="Building Minimal Design Systems"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label for="blog-category">Category</label>
|
||||
@@ -86,7 +176,11 @@
|
||||
</div>
|
||||
<div class="full">
|
||||
<label for="blog-excerpt">Excerpt</label>
|
||||
<textarea id="blog-excerpt" class="small-editor" spellcheck="false"></textarea>
|
||||
<textarea
|
||||
id="blog-excerpt"
|
||||
class="small-editor"
|
||||
spellcheck="false"
|
||||
></textarea>
|
||||
</div>
|
||||
<div class="full">
|
||||
<label for="blog-editor">Markdown Content</label>
|
||||
@@ -102,7 +196,9 @@
|
||||
<aside class="card sidebar">
|
||||
<div class="sidebar-header">
|
||||
<h2 id="collection-sidebar-title">Bookmarks</h2>
|
||||
<button id="refresh-collection" class="btn btn-ghost">Refresh</button>
|
||||
<button id="refresh-collection" class="btn btn-ghost">
|
||||
Refresh
|
||||
</button>
|
||||
</div>
|
||||
<div id="collection-card-list" class="blog-card-list"></div>
|
||||
<button id="new-collection-item" class="btn mt-8">New Item</button>
|
||||
@@ -112,12 +208,16 @@
|
||||
<div class="editor-head">
|
||||
<h2 id="collection-editor-title">Create Item</h2>
|
||||
<div class="row">
|
||||
<button id="delete-collection-item" class="btn btn-danger">Delete</button>
|
||||
<button id="delete-collection-item" class="btn btn-danger">
|
||||
Delete
|
||||
</button>
|
||||
<button id="save-collection-item" class="btn">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p id="collection-helper" class="hint">Fill inputs and save to update the related data export.</p>
|
||||
<p id="collection-helper" class="hint">
|
||||
Fill inputs and save to update the related data export.
|
||||
</p>
|
||||
<div id="collection-form-grid" class="blog-form-grid"></div>
|
||||
</section>
|
||||
</div>
|
||||
@@ -128,7 +228,9 @@
|
||||
<aside class="card sidebar">
|
||||
<div class="sidebar-header">
|
||||
<h2 id="podcast-sidebar-title">Podcast Episodes</h2>
|
||||
<button id="refresh-podcast-files" class="btn btn-ghost">Refresh</button>
|
||||
<button id="refresh-podcast-files" class="btn btn-ghost">
|
||||
Refresh
|
||||
</button>
|
||||
</div>
|
||||
<div id="podcast-card-list" class="blog-card-list"></div>
|
||||
<button id="new-podcast-file" class="btn mt-8">New Episode</button>
|
||||
@@ -138,7 +240,9 @@
|
||||
<div class="editor-head">
|
||||
<h2 id="podcast-editor-title">Create Episode</h2>
|
||||
<div class="row">
|
||||
<button id="delete-podcast-file" class="btn btn-danger">Delete</button>
|
||||
<button id="delete-podcast-file" class="btn btn-danger">
|
||||
Delete
|
||||
</button>
|
||||
<button id="save-podcast-file" class="btn">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -146,11 +250,17 @@
|
||||
<div class="blog-form-grid">
|
||||
<div>
|
||||
<label for="podcast-slug">Slug</label>
|
||||
<input id="podcast-slug" placeholder="2026-03-09-foundations-over-tools" />
|
||||
<input
|
||||
id="podcast-slug"
|
||||
placeholder="2026-03-09-foundations-over-tools"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label for="podcast-title">Title</label>
|
||||
<input id="podcast-title" placeholder="Foundations Over Tools" />
|
||||
<input
|
||||
id="podcast-title"
|
||||
placeholder="Foundations Over Tools"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label for="podcast-date">Date</label>
|
||||
@@ -158,11 +268,17 @@
|
||||
</div>
|
||||
<div>
|
||||
<label for="podcast-youtube-url">YouTube URL</label>
|
||||
<input id="podcast-youtube-url" placeholder="https://www.youtube.com/watch?v=..." />
|
||||
<input
|
||||
id="podcast-youtube-url"
|
||||
placeholder="https://www.youtube.com/watch?v=..."
|
||||
/>
|
||||
</div>
|
||||
<div class="full">
|
||||
<label for="podcast-spotify-url">Spotify URL</label>
|
||||
<input id="podcast-spotify-url" placeholder="https://open.spotify.com/show/..." />
|
||||
<input
|
||||
id="podcast-spotify-url"
|
||||
placeholder="https://open.spotify.com/show/..."
|
||||
/>
|
||||
</div>
|
||||
<div class="full">
|
||||
<label for="podcast-editor">Markdown Content</label>
|
||||
@@ -205,10 +321,15 @@
|
||||
<div class="card publish-card">
|
||||
<div class="row between">
|
||||
<h2>Publish Changes</h2>
|
||||
<button id="refresh-status" class="btn btn-ghost">Refresh Status</button>
|
||||
<button id="refresh-status" class="btn btn-ghost">
|
||||
Refresh Status
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<p class="hint">This will stage <code>data/</code>, <code>public/</code> and <code>content/</code>, create commit, and push.</p>
|
||||
<p class="hint">
|
||||
This will stage <code>data/</code>, <code>public/</code> and
|
||||
<code>content/</code>, create commit, and push.
|
||||
</p>
|
||||
|
||||
<label for="commit-message">Commit Message (optional)</label>
|
||||
<input id="commit-message" placeholder="Auto-generated if empty" />
|
||||
|
||||
@@ -4,17 +4,29 @@ import { Icon } from "@iconify/react";
|
||||
import { Badge, Card, Typography } from "poyraz-ui/atoms";
|
||||
import { ImageCard } from "poyraz-ui/molecules";
|
||||
import { StaggerContainer, StaggerItem } from "@/components/motion-wrapper";
|
||||
import { FIGMA_TEMPLATES, MOBILE_APPS, WEB_APPS, type ProjectItem } from "@/data/projects";
|
||||
import {
|
||||
EXTENSIONS,
|
||||
FIGMA_TEMPLATES,
|
||||
MOBILE_APPS,
|
||||
WEB_APPS,
|
||||
type ProjectItem,
|
||||
} from "@/data/projects";
|
||||
import { getGithubRepos, getNpmPackages } from "@/lib/project-feeds";
|
||||
|
||||
function getLanguageMeta(language: string) {
|
||||
const key = language.toLowerCase();
|
||||
|
||||
if (key.includes("typescript")) {
|
||||
return { icon: "vscode-icons:file-type-typescript-official", color: "text-blue-600" };
|
||||
return {
|
||||
icon: "vscode-icons:file-type-typescript-official",
|
||||
color: "text-blue-600",
|
||||
};
|
||||
}
|
||||
if (key.includes("javascript")) {
|
||||
return { icon: "vscode-icons:file-type-js-official", color: "text-amber-500" };
|
||||
return {
|
||||
icon: "vscode-icons:file-type-js-official",
|
||||
color: "text-amber-500",
|
||||
};
|
||||
}
|
||||
if (key.includes("python")) {
|
||||
return { icon: "vscode-icons:file-type-python", color: "text-yellow-600" };
|
||||
@@ -38,7 +50,13 @@ function getLanguageMeta(language: string) {
|
||||
return { icon: "mdi:code-tags", color: "text-zinc-500" };
|
||||
}
|
||||
|
||||
function ProjectSection({ title, items }: { title: string; items: ProjectItem[] }) {
|
||||
function ProjectSection({
|
||||
title,
|
||||
items,
|
||||
}: {
|
||||
title: string;
|
||||
items: ProjectItem[];
|
||||
}) {
|
||||
return (
|
||||
<section className="space-y-2">
|
||||
<Typography variant="large" className="text-base">
|
||||
@@ -63,7 +81,10 @@ function ProjectSection({ title, items }: { title: string; items: ProjectItem[]
|
||||
}
|
||||
|
||||
export async function ProjectsContent() {
|
||||
const [repos, npmPackages] = await Promise.all([getGithubRepos(), getNpmPackages()]);
|
||||
const [repos, npmPackages] = await Promise.all([
|
||||
getGithubRepos(),
|
||||
getNpmPackages(),
|
||||
]);
|
||||
|
||||
return (
|
||||
<section className="flex h-full flex-col gap-3 overflow-y-auto">
|
||||
@@ -82,6 +103,7 @@ export async function ProjectsContent() {
|
||||
|
||||
<ProjectSection title="Mobil Uygulamalar" items={MOBILE_APPS} />
|
||||
<ProjectSection title="Web Uygulamaları" items={WEB_APPS} />
|
||||
<ProjectSection title="Extension'lar" items={EXTENSIONS} />
|
||||
<ProjectSection title="Figma Tasarımları" items={FIGMA_TEMPLATES} />
|
||||
|
||||
<section className="space-y-2">
|
||||
@@ -105,10 +127,16 @@ export async function ProjectsContent() {
|
||||
className="block h-full no-underline text-inherit"
|
||||
>
|
||||
<Card className="flex h-full flex-col rounded-sm border-border p-3 transition-colors hover:border-zinc-700">
|
||||
<Typography variant="large" className="text-base leading-tight">
|
||||
<Typography
|
||||
variant="large"
|
||||
className="text-base leading-tight"
|
||||
>
|
||||
{pkg.name}
|
||||
</Typography>
|
||||
<Typography variant="small" className="mt-1 flex-1 line-clamp-3 text-muted-foreground">
|
||||
<Typography
|
||||
variant="small"
|
||||
className="mt-1 flex-1 line-clamp-3 text-muted-foreground"
|
||||
>
|
||||
{pkg.description}
|
||||
</Typography>
|
||||
<div className="mt-2">
|
||||
@@ -145,10 +173,16 @@ export async function ProjectsContent() {
|
||||
className="block h-full no-underline text-inherit"
|
||||
>
|
||||
<Card className="flex h-full flex-col rounded-sm border-border p-3 transition-colors hover:border-zinc-700">
|
||||
<Typography variant="large" className="text-base leading-tight">
|
||||
<Typography
|
||||
variant="large"
|
||||
className="text-base leading-tight"
|
||||
>
|
||||
{repo.name}
|
||||
</Typography>
|
||||
<Typography variant="small" className="mt-1 flex-1 line-clamp-4 text-muted-foreground">
|
||||
<Typography
|
||||
variant="small"
|
||||
className="mt-1 flex-1 line-clamp-4 text-muted-foreground"
|
||||
>
|
||||
{repo.description}
|
||||
</Typography>
|
||||
<div className="mt-2 flex flex-wrap gap-1.5">
|
||||
@@ -165,7 +199,12 @@ export async function ProjectsContent() {
|
||||
</Badge>
|
||||
<Badge variant="outline" className="rounded-sm">
|
||||
<span className="inline-flex items-center gap-1">
|
||||
<Icon icon="mdi:star" width={14} height={14} className="text-amber-500" />
|
||||
<Icon
|
||||
icon="mdi:star"
|
||||
width={14}
|
||||
height={14}
|
||||
className="text-amber-500"
|
||||
/>
|
||||
<span>{repo.stars}</span>
|
||||
</span>
|
||||
</Badge>
|
||||
|
||||
+16
-9
@@ -14,8 +14,9 @@ export const MOBILE_APPS: ProjectItem[] = [
|
||||
badge: "Agritech",
|
||||
image: "/projects/targiz.png",
|
||||
href: "https://targiz.com",
|
||||
description: "Ottoqua ekibiyle birlikte geliştirdiğimiz, küçük ölçekli üreticilere sahada destek veren yapay zeka destekli tarım uygulaması."
|
||||
}
|
||||
description:
|
||||
"Ottoqua ekibiyle birlikte geliştirdiğimiz, küçük ölçekli üreticilere sahada destek veren yapay zeka destekli tarım uygulaması.",
|
||||
},
|
||||
];
|
||||
|
||||
export const WEB_APPS: ProjectItem[] = [
|
||||
@@ -25,7 +26,8 @@ export const WEB_APPS: ProjectItem[] = [
|
||||
badge: "Freelance",
|
||||
image: "/projects/arc.png",
|
||||
href: "https://arcforeigntrade.com",
|
||||
description: "Ankara merkezli ihracat odaklı bir üretici firma için kurumsal web sitesi yenileme projesi."
|
||||
description:
|
||||
"Ankara merkezli ihracat odaklı bir üretici firma için kurumsal web sitesi yenileme projesi.",
|
||||
},
|
||||
{
|
||||
id: "ataturk-chronology",
|
||||
@@ -33,7 +35,8 @@ export const WEB_APPS: ProjectItem[] = [
|
||||
badge: "Open Source",
|
||||
image: "/projects/ataturk.png",
|
||||
href: "https://ataturk-kronolojisi.org",
|
||||
description: "Atatürk’ün hayatındaki önemli olayları, konuşmaları ve reformları etkileşimli bir zaman çizelgesiyle sunan web deneyimi."
|
||||
description:
|
||||
"Atatürk’ün hayatındaki önemli olayları, konuşmaları ve reformları etkileşimli bir zaman çizelgesiyle sunan web deneyimi.",
|
||||
},
|
||||
{
|
||||
id: "mockup-factory",
|
||||
@@ -41,10 +44,13 @@ export const WEB_APPS: ProjectItem[] = [
|
||||
badge: "Open Source",
|
||||
image: "/projects/mockup.png",
|
||||
href: "https://mockup-factory-mu.vercel.app/",
|
||||
description: "Görsellerin cihaz mockup’larına saniyeler içinde dönüştürüldüğü, tamamen tarayıcı üzerinde çalışan açık kaynak araç."
|
||||
}
|
||||
description:
|
||||
"Görsellerin cihaz mockup’larına saniyeler içinde dönüştürüldüğü, tamamen tarayıcı üzerinde çalışan açık kaynak araç.",
|
||||
},
|
||||
];
|
||||
|
||||
export const EXTENSIONS: ProjectItem[] = [];
|
||||
|
||||
export const FIGMA_TEMPLATES: ProjectItem[] = [
|
||||
{
|
||||
id: "hsd-website",
|
||||
@@ -52,7 +58,8 @@ export const FIGMA_TEMPLATES: ProjectItem[] = [
|
||||
badge: "figma",
|
||||
image: "/projects/hsd.png",
|
||||
href: "https://www.figma.com/community/file/1613511833232376739",
|
||||
description: "HSD Community için Web Site tasarımı. Component, dashboard, landing page, profile sayfaları"
|
||||
description:
|
||||
"HSD Community için Web Site tasarımı. Component, dashboard, landing page, profile sayfaları",
|
||||
},
|
||||
{
|
||||
id: "restaurant-menu",
|
||||
@@ -60,6 +67,6 @@ export const FIGMA_TEMPLATES: ProjectItem[] = [
|
||||
badge: "Figma",
|
||||
image: "/projects/menu.png",
|
||||
href: "https://www.figma.com/community/file/1613577450975840169/restaurant-menu-ui-design",
|
||||
description: "Restaurant Menu UI Design Template for community"
|
||||
}
|
||||
description: "Restaurant Menu UI Design Template for community",
|
||||
},
|
||||
];
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
import { certificates } from "@/data/certificates";
|
||||
import { EDUCATION } from "@/data/education";
|
||||
import { EXPERIENCE } from "@/data/experience";
|
||||
import { FIGMA_TEMPLATES, MOBILE_APPS, WEB_APPS } from "@/data/projects";
|
||||
import {
|
||||
EXTENSIONS,
|
||||
FIGMA_TEMPLATES,
|
||||
MOBILE_APPS,
|
||||
WEB_APPS,
|
||||
} from "@/data/projects";
|
||||
import { REFERENCES } from "@/data/references";
|
||||
import { VOLUNTEER_COMMUNITY_ITEMS } from "@/data/volunteer-community";
|
||||
import { YOUTUBE_VIDEO_LINKS } from "@/data/youtube-videos";
|
||||
@@ -27,7 +32,14 @@ const navigationItems: CommandPaletteItem[] = NAV_LINKS.map((item) => ({
|
||||
label: item.label,
|
||||
href: item.href,
|
||||
icon: "mdi:compass-outline",
|
||||
keywords: [item.label, item.href, "sayfa", "navigasyon", "page", "navigation"],
|
||||
keywords: [
|
||||
item.label,
|
||||
item.href,
|
||||
"sayfa",
|
||||
"navigasyon",
|
||||
"page",
|
||||
"navigation",
|
||||
],
|
||||
}));
|
||||
|
||||
const socialItems: CommandPaletteItem[] = SOCIAL_LINKS.map((item) => ({
|
||||
@@ -62,7 +74,14 @@ const aboutItems: CommandPaletteItem[] = [
|
||||
label: item.title,
|
||||
href: "/about",
|
||||
icon: "mdi:school-outline",
|
||||
keywords: [item.institution, item.period, item.description, "eğitim", "education", "about"],
|
||||
keywords: [
|
||||
item.institution,
|
||||
item.period,
|
||||
item.description,
|
||||
"eğitim",
|
||||
"education",
|
||||
"about",
|
||||
],
|
||||
})),
|
||||
...EXPERIENCE.map((item) => ({
|
||||
id: `experience-${item.id}`,
|
||||
@@ -76,21 +95,43 @@ const aboutItems: CommandPaletteItem[] = [
|
||||
label: item.name,
|
||||
href: "/about",
|
||||
icon: "mdi:certificate-outline",
|
||||
keywords: [item.organization, item.date, item.category, item.description, "sertifika", "certificate"],
|
||||
keywords: [
|
||||
item.organization,
|
||||
item.date,
|
||||
item.category,
|
||||
item.description,
|
||||
"sertifika",
|
||||
"certificate",
|
||||
],
|
||||
})),
|
||||
...REFERENCES.map((item) => ({
|
||||
id: `reference-${item.id}`,
|
||||
label: `Referans: ${item.author}`,
|
||||
href: "/about/references",
|
||||
icon: "mdi:account-voice-outline",
|
||||
keywords: [item.role, item.quote, "referans", "yorum", "reference", "testimonial"],
|
||||
keywords: [
|
||||
item.role,
|
||||
item.quote,
|
||||
"referans",
|
||||
"yorum",
|
||||
"reference",
|
||||
"testimonial",
|
||||
],
|
||||
})),
|
||||
...VOLUNTEER_COMMUNITY_ITEMS.map((item) => ({
|
||||
id: `volunteer-${item.id}`,
|
||||
label: item.title,
|
||||
href: "/about/volunteer-community",
|
||||
icon: "mdi:hand-heart-outline",
|
||||
keywords: [item.timeline, item.focus, item.link ?? "", "gönüllülük", "topluluk", "volunteer", "community"],
|
||||
keywords: [
|
||||
item.timeline,
|
||||
item.focus,
|
||||
item.link ?? "",
|
||||
"gönüllülük",
|
||||
"topluluk",
|
||||
"volunteer",
|
||||
"community",
|
||||
],
|
||||
})),
|
||||
];
|
||||
|
||||
@@ -100,7 +141,14 @@ const projectItems: CommandPaletteItem[] = [
|
||||
label: item.title,
|
||||
href: "/projects",
|
||||
icon: "mdi:cellphone",
|
||||
keywords: [item.description, item.badge ?? "", "mobil", "proje", "mobile", "project"],
|
||||
keywords: [
|
||||
item.description,
|
||||
item.badge ?? "",
|
||||
"mobil",
|
||||
"proje",
|
||||
"mobile",
|
||||
"project",
|
||||
],
|
||||
})),
|
||||
...WEB_APPS.map((item) => ({
|
||||
id: `web-project-${item.id}`,
|
||||
@@ -110,24 +158,47 @@ const projectItems: CommandPaletteItem[] = [
|
||||
external: Boolean(item.href),
|
||||
keywords: [item.description, item.badge ?? "", "web", "proje", "project"],
|
||||
})),
|
||||
...EXTENSIONS.map((item) => ({
|
||||
id: `extension-project-${item.id}`,
|
||||
label: item.title,
|
||||
href: item.href ?? "/projects",
|
||||
icon: "mdi:puzzle-outline",
|
||||
external: Boolean(item.href),
|
||||
keywords: [
|
||||
item.description,
|
||||
item.badge ?? "",
|
||||
"extension",
|
||||
"eklenti",
|
||||
"proje",
|
||||
"project",
|
||||
],
|
||||
})),
|
||||
...FIGMA_TEMPLATES.map((item) => ({
|
||||
id: `figma-project-${item.id}`,
|
||||
label: item.title,
|
||||
href: item.href ?? "/projects",
|
||||
icon: "mdi:figma",
|
||||
external: Boolean(item.href),
|
||||
keywords: [item.description, item.badge ?? "", "figma", "şablon", "template"],
|
||||
keywords: [
|
||||
item.description,
|
||||
item.badge ?? "",
|
||||
"figma",
|
||||
"şablon",
|
||||
"template",
|
||||
],
|
||||
})),
|
||||
];
|
||||
|
||||
const contentItems: CommandPaletteItem[] = YOUTUBE_VIDEO_LINKS.map((item, index) => ({
|
||||
const contentItems: CommandPaletteItem[] = YOUTUBE_VIDEO_LINKS.map(
|
||||
(item, index) => ({
|
||||
id: `youtube-video-${index + 1}`,
|
||||
label: `YouTube Videosu ${index + 1}`,
|
||||
href: item,
|
||||
icon: "mdi:youtube",
|
||||
external: true,
|
||||
keywords: [item, "youtube", "video", "içerik", "content"],
|
||||
}));
|
||||
}),
|
||||
);
|
||||
|
||||
export const COMMAND_PALETTE_GROUPS: CommandPaletteGroup[] = [
|
||||
{
|
||||
|
||||
@@ -3,7 +3,6 @@ export const NAV_LINKS = [
|
||||
{ id: "blog", label: "Blog", href: "/blog" },
|
||||
{ id: "content", label: "İçerikler", href: "/content" },
|
||||
{ id: "projects", label: "Projeler", href: "/projects" },
|
||||
{ id: "snippets", label: "Snippets", href: "/snippets" },
|
||||
{ id: "contact", label: "İletişim", href: "/contact" },
|
||||
] as const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user