Reed is a memory-first AI mentor for career decisions, applications, and follow-through. The demo is designed around one core behavior: Reed opens a conversation with useful context before the user types, based on prior goals, patterns, and commitments.
Live app: https://ask-reed.vercel.app
- Proactive session opening based on stored commitments and behavioral signals.
- A chat interface that keeps long-running career context visible without replaying raw transcripts into the UI.
- Resume and document attachments, with extracted text stored separately from the visible message content.
- Press-to-record voice input that transcribes speech into the editable message box without auto-sending.
- Past conversations in a read-only transcript viewer, including attachment chips without exposing raw attachment text.
- Supabase-backed authentication and row-level security.
- Next.js 16 App Router
- React 19 and TypeScript
- Vercel AI SDK with Anthropic Claude
- Supabase for auth, Postgres, and row-level security
- Tailwind CSS 4
- Groq Whisper for speech-to-text transcription
- pdf-parse for text-based PDF extraction
app/
api/chat/ streamed chat route and memory persistence
api/extract-pdf/ PDF text extraction endpoint
api/session-context/ current memory snapshot endpoint
api/stt/ voice transcription endpoint
auth/callback/ Supabase auth callback
chat/ authenticated chat page
login/ auth page
components/
login-form.tsx email/password and Google auth
reed-app.tsx main chat experience
session-memory-peek.tsx memory sidebar and transcript viewer
lib/
chat/ model constants and system prompt
coaching-logic/ session context and proactive nudge logic
memory/ structured memory extraction
supabase/ browser, server, and admin clients
supabase/migrations/ database schema
Create .env.local with:
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
ANTHROPIC_API_KEY=
GROQ_API_KEY=SUPABASE_SERVICE_ROLE_KEY is server-only. Do not expose it in the browser or prefix it with NEXT_PUBLIC_.
ANTHROPIC_API_KEY powers chat responses, and GROQ_API_KEY powers voice transcription.
Apply the migrations in order:
supabase/migrations/001_initial_schema.sql
supabase/migrations/002_message_attachments.sql
The second migration adds:
attachment_filename text
attachment_text textto public.messages. These columns are required for attachment persistence and follow-up questions over uploaded content.
For auth, configure:
Site URL: https://ask-reed.vercel.app
Redirect URLs:
https://ask-reed.vercel.app/auth/callback
http://localhost:3000/auth/callback
Install dependencies:
npm installStart the dev server:
npm run devOpen:
http://localhost:3000
Run before shipping:
npm run type-check
npm run lint
npm run build- Sign in with email/password or Google.
- Reed should open with a proactive nudge about the unresolved product-adjacent role commitment.
- Ask a real career or resume question.
- Use the mic button once and confirm the transcript lands in the editable input without sending.
- Upload a text-based resume file.
- Ask about the uploaded content.
- Send an unrelated message.
- Ask about the uploaded content again and confirm Reed still uses the attachment context.
- Open Past Conversations and verify the transcript is read-only, ordered, and renders attachment chips instead of raw attachment text.
The app is deployed on Vercel. After pushing to main, Vercel redeploys the production app at:
https://ask-reed.vercel.app
