"use client"; import Image from "next/image"; import { FadeIn } from "./fade-in"; import { getCvData, type Lang, type SpokenLanguage } from "@/lib/cv-data"; const DEVICONS = "https://cdn.jsdelivr.net/gh/devicons/devicon/icons"; const SIMPLE = "https://cdn.simpleicons.org"; const FLAGS = "https://cdn.jsdelivr.net/gh/lipis/flag-icons/flags/4x3"; const SKILL_ICONS: Record = { // Languages Python: `${DEVICONS}/python/python-original.svg`, TypeScript: `${DEVICONS}/typescript/typescript-original.svg`, JavaScript: `${DEVICONS}/javascript/javascript-original.svg`, "C#": `${DEVICONS}/csharp/csharp-original.svg`, C: `${DEVICONS}/c/c-original.svg`, "C++": `${DEVICONS}/cplusplus/cplusplus-original.svg`, HTML: `${DEVICONS}/html5/html5-original.svg`, CSS: `${DEVICONS}/css3/css3-original.svg`, // Frameworks "Next.js": `${DEVICONS}/nextjs/nextjs-original.svg`, React: `${DEVICONS}/react/react-original.svg`, "Tailwind CSS": `${SIMPLE}/tailwindcss/06B6D4`, Angular: `${DEVICONS}/angularjs/angularjs-original.svg`, "Angular Material": `${SIMPLE}/angular/DD0031`, Redux: `${SIMPLE}/redux/764ABC`, "ASP.NET": `${SIMPLE}/dotnet/512BD4`, "ASP.NET Core": `${SIMPLE}/dotnet/512BD4`, // Databases "Microsoft SQL Server": `${DEVICONS}/microsoftsqlserver/microsoftsqlserver-plain.svg`, Oracle: `${DEVICONS}/oracle/oracle-original.svg`, MySQL: `${DEVICONS}/mysql/mysql-original.svg`, MariaDB: `${DEVICONS}/mariadb/mariadb-original.svg`, // Tools Claude: `${SIMPLE}/anthropic/c5a880`, "Claude Code": `${SIMPLE}/anthropic/c5a880`, Git: `${DEVICONS}/git/git-original.svg`, GitHub: `${SIMPLE}/github/ffffff`, Supabase: `${SIMPLE}/supabase/3ECF8E`, Obsidian: `${SIMPLE}/obsidian/7C3AED`, NotebookLM: `${SIMPLE}/googlegemini/8E75B2`, }; const BADGE_ICONS: Record = { ChatGPT: "AI", Neon: "N", Vercel: "▲", }; function SkillPill({ label }: { label: string }) { const icon = SKILL_ICONS[label]; const badge = BADGE_ICONS[label]; return ( {icon && ( {label} )} {!icon && badge && ( {badge} )} {label} ); } function LanguageProgress({ spoken }: { spoken: SpokenLanguage }) { const flagSrc = `${FLAGS}/${spoken.flag}.svg`; return (
{spoken.label} {spoken.label}
); } export function SkillsSection({ lang }: { lang: Lang }) { const data = getCvData(lang); const { label, groupTitles, interestsHeading } = data.ui.skills; const SKILL_GROUPS = [ { id: "languages", title: groupTitles.languages, items: data.skills.languages }, { id: "frameworks", title: groupTitles.frameworks, items: data.skills.frameworks }, { id: "databases", title: groupTitles.databases, items: data.skills.databases }, { id: "aiTools", title: groupTitles.aiTools, items: data.skills.aiTools }, { id: "spoken", title: groupTitles.spoken, items: [] }, ]; return (

{label}

Skills & Tools

{SKILL_GROUPS.map((group, i) => (

{group.title}

{group.id === "spoken" ? data.skills.spoken.map((s) => ( )) : group.items.map((s) => )}
))}

{interestsHeading}

{data.interests.map((interest) => ( {interest} ))}
); }