A full-stack AI-powered meeting summarizer that turns raw transcripts into structured summaries with action items, key decisions, and follow-up questions.
Stack: Next.js 16 + Tailwind CSS + Shadcn/ui + Anthropic SDK (Claude) + Supabase
- Paste or upload meeting transcripts (.txt, .md)
- AI-generated summaries with structured sections: Summary, Key Decisions, Action Items, Follow-ups
- Real-time streaming — see the summary generate token by token
- History sidebar — past summaries saved in Supabase (optional)
- Export — copy to clipboard or download as .md
- Sample transcripts — try it instantly with built-in demo data
- Dark mode UI
cd meeting-summarizer
npm installEdit .env.local:
ANTHROPIC_API_KEY=your-anthropic-api-key
# Optional — Supabase for saving history
NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-keyCreate a free project at supabase.com, then run this SQL in the SQL Editor:
CREATE TABLE summaries (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
title TEXT NOT NULL,
transcript_preview TEXT,
summary_markdown TEXT NOT NULL,
action_items JSONB,
created_at TIMESTAMPTZ DEFAULT now()
);
ALTER TABLE summaries ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Allow anonymous read" ON summaries FOR SELECT USING (true);
CREATE POLICY "Allow anonymous insert" ON summaries FOR INSERT WITH CHECK (true);The app works without Supabase — you just won't have the history feature.
npm run devOpen http://localhost:3000.
Streams an AI-generated meeting summary.
Request body:
{ "transcript": "Sarah: Let's start the meeting..." }Response: Server-Sent Events stream with chunks:
data: {"type": "chunk", "content": "## Summary\n"}
data: {"type": "chunk", "content": "The team discussed..."}
data: {"type": "done"}
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| Styling | Tailwind CSS + Shadcn/ui |
| AI | Anthropic SDK (Claude claude-opus-4-6) |
| Database | Supabase (PostgreSQL) |
| Deployment | Vercel (recommended) |
- System prompt: Edit
lib/prompts.tsto change summary format or style - Sample transcripts: Add your own in
lib/prompts.ts→SAMPLE_TRANSCRIPTS - Model: Change
MODELinlib/prompts.ts(default:claude-opus-4-6) - Theme: Toggle dark/light in
app/layout.tsx(removedarkclass for light mode)
- Push to GitHub
- Import in Vercel
- Add environment variables in Vercel dashboard
- Deploy