{project.title}
++ {project.impact || project.description[0]} +
+ +diff --git a/src/components/ProjectCard.astro b/src/components/ProjectCard.astro
new file mode 100644
index 0000000..acb266d
--- /dev/null
+++ b/src/components/ProjectCard.astro
@@ -0,0 +1,123 @@
+---
+import { useTranslations } from "@/i18n/utils";
+import type { Lang } from "@/types/i18n";
+
+interface Props {
+ project: {
+ id: string;
+ title: string;
+ icon: string;
+ type: string;
+ status: string;
+ impact?: string;
+ description: string[];
+ tech: string[];
+ link: string;
+ featured?: boolean;
+ image?: {
+ bg: string;
+ hover?: string;
+ text?: string;
+ };
+ links?: {
+ github?: string;
+ demo?: string;
+ };
+ };
+ lang: Lang;
+ showStatus?: boolean;
+}
+
+const { project, lang, showStatus = false } = Astro.props;
+const t = useTranslations(lang);
+
+const statusClassMap = {
+ building: "bg-amber-500/15 text-amber-700 dark:text-amber-300 border-amber-500/30",
+ completed: "bg-emerald-500/15 text-emerald-700 dark:text-emerald-300 border-emerald-500/30",
+ archived: "bg-slate-500/15 text-slate-700 dark:text-slate-300 border-slate-500/30",
+} as const;
+
+const statusColor = statusClassMap[project.status as keyof typeof statusClassMap] ?? statusClassMap.completed;
+---
+
+
+ {project.impact || project.description[0]}
+ {project.title}
+
- {project.impact} -
- -{t(`project.type.${project.type}`)}
-{desc}
- ))} -{t(`project.type.${project.type}`)}
-{desc}
- ))} -