'use client'; import { Reveal } from '@/components/ui/Reveal'; import { SectionHeader } from '@/components/ui/SectionHeader'; import { Card } from '@/components/ui/Card'; const STACK = [ { category: 'Frontend', items: [ { name: 'Next.js 14', role: 'App Router dashboard' }, { name: 'React 18 + TypeScript', role: 'Typed UI components' }, { name: 'Tailwind CSS', role: 'Design system & layout' }, { name: 'Zustand', role: 'Pipeline state management' }, { name: 'Framer Motion + Lenis', role: 'Motion & smooth scroll' }, { name: 'React Three Fiber', role: 'Hero visualization' }, ], }, { category: 'API & Services', items: [ { name: 'FastAPI', role: 'REST API & job polling' }, { name: 'Uvicorn', role: 'ASGI server' }, { name: 'SQLite', role: 'Jobs, conversations, alerts' }, { name: 'Structured logging', role: 'Request ID + JSON logs' }, ], }, { category: 'Audio & ML Pipeline', items: [ { name: 'Whisper', role: 'Speech-to-text transcription' }, { name: 'Pyannote', role: 'Speaker diarization' }, { name: 'LLaMA 3 (Groq)', role: 'Feature extraction & summaries' }, { name: 'XGBoost', role: 'Conversion probability scoring' }, { name: 'spaCy + VADER', role: 'NLP fallback & sentiment' }, ], }, { category: 'Infrastructure', items: [ { name: 'Docker Compose', role: 'Multi-service orchestration' }, { name: 'Split Dockerfiles', role: 'API, audio, ML, frontend images' }, { name: 'Persistent volumes', role: 'Uploads, database, logs' }, { name: 'Background workers', role: 'Queued audio & ML processing' }, ], }, ]; export function TechnologyStackSection() { return (
{STACK.map((group, groupIndex) => (

{group.category}

    {group.items.map((item) => (
  • {item.name} {item.role}
  • ))}
))}
); }