From 28d4b6524fe560a07c7b9b0f54015307e3119fd8 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Sun, 19 Oct 2025 02:23:17 +0000 Subject: [PATCH] Create Projects page to showcase testimonials/projects with empty-state and list rendering cgen-d5468729f2f94d66b62492617db09cd7 --- client/pages/Projects.tsx | 84 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 client/pages/Projects.tsx diff --git a/client/pages/Projects.tsx b/client/pages/Projects.tsx new file mode 100644 index 00000000..e21bf932 --- /dev/null +++ b/client/pages/Projects.tsx @@ -0,0 +1,84 @@ +import Layout from "@/components/Layout"; +import { Badge } from "@/components/ui/badge"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { SHOWCASE } from "@/data/showcase"; +import { cn } from "@/lib/utils"; + +export default function Projects() { + const hasProjects = Array.isArray(SHOWCASE) && SHOWCASE.length > 0; + + return ( + +
+
+ Showcase +

Projects & Testimonials

+

Selected work, outcomes, and words from collaborators.

+
+ +
+ {hasProjects ? ( +
+ {SHOWCASE.map((p) => ( + + {p.image && ( +
+ {p.title} +
+ )} + + {p.title} + + {[p.role, p.timeframe].filter(Boolean).join(" • ")} + + + + {p.description && ( +

{p.description}

+ )} + {p.tags && p.tags.length > 0 && ( +
+ {p.tags.map((t) => ( + {t} + ))} +
+ )} + {p.links && p.links.length > 0 && ( +
+ {p.links.map((l) => ( + + ))} +
+ )} +
+
+ ))} +
+ ) : ( + + + No projects yet + + Add entries in code/client/data/showcase.ts or manage them via CMS. + + + + + + + + )} +
+
+
+ ); +}