import { motion } from "framer-motion"; import React, { useState } from "react"; interface TechItem { name: string; description: string; category: | "frontend" | "backend" | "database" | "tooling" | "deployment" | "core"; } const techStack: TechItem[] = [ { name: "Bun", description: "Fast all-in-one JavaScript runtime", category: "core", }, { name: "TypeScript", description: "Type safety across the stack", category: "core", }, { name: "tRPC", description: "End-to-end type-safe APIs", category: "core", }, { name: "React (Vite)", description: "JavaScript library for user interfaces", category: "frontend", }, { name: "TanStack Router", description: "Type-safe routing", category: "frontend", }, { name: "Tailwind CSS", description: "Utility-first CSS framework", category: "frontend", }, { name: "shadcn/ui", description: "Re-usable components", category: "frontend", }, { name: "Hono", description: "Ultrafast web framework", category: "backend", }, { name: "Better-Auth", description: "Modern authentication solution", category: "backend", }, { name: "Drizzle ORM", description: "TypeScript ORM", category: "database", }, { name: "Prisma", description: "Next-generation ORM", category: "database", }, { name: "libSQL", description: "SQLite-compatible database engine", category: "database", }, ]; const categoryIcons = { frontend: "🖥️", backend: "⚙️", database: "🗄️", tooling: "🔧", deployment: "🚀", core: "🔑", }; export default function TechShowcase() { const [activeCategory, setActiveCategory] = useState(null); const categories = Array.from( new Set(techStack.map((item) => item.category)), ); const filteredTech = activeCategory ? techStack.filter((tech) => tech.category === activeCategory) : techStack; const groupedTech = !activeCategory ? categories.map((category) => ({ category, items: techStack.filter((tech) => tech.category === category), })) : null; return (
{/* biome-ignore lint/a11y/useButtonType: */} {categories.map((category) => ( // biome-ignore lint/a11y/useButtonType: ))}
{activeCategory && (
{filteredTech.map((tech) => (

{tech.name}

{tech.description}

--package={tech.name.toLowerCase()}
))}
)} {!activeCategory && groupedTech && (
{groupedTech.map((group) => (
{categoryIcons[group.category as keyof typeof categoryIcons]}

{group.category}/

{group.items.map((tech) => (

{tech.name}

core

{tech.description}

include: true {/* biome-ignore lint/style/useSelfClosingElements: */}
))}
))}
)}
$ The perfect tech stack, carefully selected for{" "} maximum developer happiness
); }