diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx index 49bcde5..e629d8a 100644 --- a/app/[locale]/page.tsx +++ b/app/[locale]/page.tsx @@ -1,5 +1,6 @@ import { HomeHero } from "@/components/home-hero"; import { HomeProjectsSection } from "@/components/home-projects-section"; +import { HomeTechnologyStack } from "@/components/home-technology-stack"; import { HomeVideosSection } from "@/components/home-videos-section"; import { ReferencesSection } from "@/components/references-section"; import { getHomeBlogNews } from "@/data/blog"; @@ -29,7 +30,9 @@ export default async function Home({ return (
- + + + diff --git a/components/home-hero.tsx b/components/home-hero.tsx index d1b6ab1..4eb4c5c 100644 --- a/components/home-hero.tsx +++ b/components/home-hero.tsx @@ -1,5 +1,6 @@ "use client"; +import type { ReactNode } from "react"; import { Icon } from "@iconify/react"; import { useLocale, useTranslations } from "next-intl"; import { useRouter } from "@/i18n/routing"; @@ -10,10 +11,11 @@ import { TextEffect, Typography, } from "poyraz-ui/atoms"; -import { NewsCard } from "poyraz-ui/molecules"; import { getResumeHref } from "@/lib/links"; +import { HomeNewsCard } from "@/components/home-news-card"; type HomeHeroProps = { + children?: ReactNode; news: { id: string; category: string; @@ -24,7 +26,7 @@ type HomeHeroProps = { }[]; }; -export function HomeHero({ news }: HomeHeroProps) { +export function HomeHero({ children, news }: HomeHeroProps) { const t = useTranslations("Home"); const locale = useLocale(); const router = useRouter(); @@ -89,6 +91,8 @@ export function HomeHero({ news }: HomeHeroProps) { + {children} +
- {news.map((item) => ( - ( + ))}
diff --git a/components/home-news-card.tsx b/components/home-news-card.tsx new file mode 100644 index 0000000..f65c144 --- /dev/null +++ b/components/home-news-card.tsx @@ -0,0 +1,52 @@ +import Image from "next/image"; +import { Badge, Card } from "poyraz-ui/atoms"; +import { Link } from "@/i18n/routing"; + +type HomeNewsCardProps = { + category: string; + title: string; + date: string; + image: string; + href: string; + priority?: boolean; +}; + +export function HomeNewsCard({ + category, + title, + date, + image, + href, + priority = false, +}: HomeNewsCardProps) { + return ( + + +
+
+ +
+
+ + {category} + +

+ {title} +

+ {date} +
+
+
+ + ); +} diff --git a/components/home-technology-stack.tsx b/components/home-technology-stack.tsx new file mode 100644 index 0000000..17a6ef0 --- /dev/null +++ b/components/home-technology-stack.tsx @@ -0,0 +1,62 @@ +"use client"; + +import { Icon } from "@iconify/react"; +import { useLocale, useTranslations } from "next-intl"; +import { Badge, Typography } from "poyraz-ui/atoms"; +import { TECHNOLOGY_STACK } from "@/data/technology-stack"; +import { getLocalizedValue } from "@/lib/locale"; + +export function HomeTechnologyStack() { + const t = useTranslations("Home"); + const locale = useLocale(); + + return ( +
+ + {t("technologiesTitle")} + + +
+ {TECHNOLOGY_STACK.map((group) => ( +
+ + {t(`technologyCategories.${group.id}`)} + + +
+ {group.items.map((technology) => ( + + + ))} +
+
+ ))} +
+
+ ); +} diff --git a/data/technology-stack.ts b/data/technology-stack.ts new file mode 100644 index 0000000..150be11 --- /dev/null +++ b/data/technology-stack.ts @@ -0,0 +1,109 @@ +import type { Localized } from "@/lib/locale"; + +export type TechnologyStackItem = { + id: string; + label: string | Localized; + icon: string; +}; + +export type TechnologyStackGroup = { + id: "frontend" | "backend" | "languages" | "designTools"; + items: readonly TechnologyStackItem[]; +}; + +export const TECHNOLOGY_STACK: readonly TechnologyStackGroup[] = [ + { + id: "frontend", + items: [ + { id: "react", label: "React.js", icon: "simple-icons:react" }, + { id: "nextjs", label: "Next.js", icon: "simple-icons:nextdotjs" }, + { id: "angular", label: "Angular", icon: "simple-icons:angular" }, + { + id: "react-native", + label: "React Native", + icon: "mdi:react", + }, + { id: "electron", label: "Electron.js", icon: "simple-icons:electron" }, + { + id: "tailwindcss", + label: "Tailwind CSS", + icon: "simple-icons:tailwindcss", + }, + { + id: "bootstrap", + label: "Bootstrap", + icon: "simple-icons:bootstrap", + }, + { id: "redux", label: "Redux", icon: "simple-icons:redux" }, + { id: "zustand", label: "Zustand", icon: "devicon:zustand" }, + ], + }, + { + id: "backend", + items: [ + { id: "nodejs", label: "Node.js", icon: "simple-icons:nodedotjs" }, + { id: "express", label: "Express.js", icon: "simple-icons:express" }, + { id: "nestjs", label: "Nest.js", icon: "simple-icons:nestjs" }, + { id: "dotnet", label: ".NET", icon: "simple-icons:dotnet" }, + { + id: "rest-api", + label: { tr: "REST API'ler", en: "REST APIs" }, + icon: "mdi:api", + }, + { + id: "jwt-auth", + label: "JWT Auth", + icon: "simple-icons:jsonwebtokens", + }, + { id: "prisma", label: "Prisma", icon: "simple-icons:prisma" }, + { id: "mongoose", label: "Mongoose", icon: "simple-icons:mongoose" }, + { + id: "socket-io", + label: "Socket.io", + icon: "simple-icons:socketdotio", + }, + ], + }, + { + id: "languages", + items: [ + { + id: "javascript", + label: "JavaScript", + icon: "simple-icons:javascript", + }, + { + id: "typescript", + label: "TypeScript", + icon: "simple-icons:typescript", + }, + { id: "csharp", label: "C#", icon: "mdi:language-csharp" }, + ], + }, + { + id: "designTools", + items: [ + { id: "figma", label: "Figma", icon: "simple-icons:figma" }, + { + id: "wireframing", + label: "Wireframing", + icon: "mdi:vector-square", + }, + { + id: "design-systems", + label: { tr: "Tasarım Sistemleri", en: "Design Systems" }, + icon: "mdi:palette-swatch-outline", + }, + { id: "git", label: "Git", icon: "simple-icons:git" }, + { id: "github", label: "GitHub", icon: "simple-icons:github" }, + { id: "firebase", label: "Firebase", icon: "simple-icons:firebase" }, + { id: "supabase", label: "Supabase", icon: "simple-icons:supabase" }, + { + id: "vercel-ai-sdk", + label: "Vercel AI SDK", + icon: "simple-icons:vercel", + }, + { id: "postman", label: "Postman", icon: "simple-icons:postman" }, + ], + }, +]; diff --git a/messages/en.json b/messages/en.json index 8a07f96..2590da8 100644 --- a/messages/en.json +++ b/messages/en.json @@ -33,6 +33,13 @@ "allProjects": "All projects", "reviewsAndReferences": "Reviews & References", "allReferences": "All references", + "technologiesTitle": "Technologies I use", + "technologyCategories": { + "frontend": "Front End", + "backend": "Back End", + "languages": "Programming Languages", + "designTools": "Design & Tools" + }, "sections": { "recentPosts": "Recent Posts", "references": "References", diff --git a/messages/tr.json b/messages/tr.json index 3d97293..ca62470 100644 --- a/messages/tr.json +++ b/messages/tr.json @@ -33,6 +33,13 @@ "allProjects": "Tüm projeler", "reviewsAndReferences": "Yorumlar & Referanslar", "allReferences": "Tüm referanslar", + "technologiesTitle": "Ben bu teknolojileri kullanıyorum", + "technologyCategories": { + "frontend": "Ön Yüz", + "backend": "Arka Yüz", + "languages": "Programlama Dilleri", + "designTools": "Tasarım ve Araçlar" + }, "sections": { "recentPosts": "Son Yazılar", "references": "Referanslar",