shiping
An interview assistant and an exam assistant that uses AI to provide solution ideas in real time during 「面试」 or 「在线考试」.
AI translation
Upload a speech and get coaching on your pace, filler words and pauses.
EducationGitHub @Learn2SpeechOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A speech coaching web app for the 2026 Congressional App Challenge. Upload a recording of yourself speaking and get your transcript, your pace (words per minute), your filler words and long pauses, and personal coaching feedback.
Live app: https://learn2speech.vercel.app
Every library, API and tool, with its license, is listed in docs/CREDITS.md.
git clone https://github.com/Learn2Speech/Learn2Speech.git
cd Learn2Speech
npm install
supabase/migrations/ in order, one at a time:
0001_recordings_bucket.sql: the private storage bucket for audio files and its access rules0002_recordings_table.sql: the recordings table with Row Level Security0003_recordings_results.sql: columns for the status, transcript, metrics and feedbackhttp://localhost:3000, so the email confirmation link brings new users back to your local app.Copy the example file, then fill in the values in .env.local:
cp .env.example .env.local
| Variable | Where to find it |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase → Project Settings → API → Project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase → Project Settings → API Keys → the anon public key (newer projects call it the publishable key; either works) |
ASSEMBLYAI_API_KEY | AssemblyAI dashboard → API Keys |
ANTHROPIC_API_KEY | Anthropic Console → API Keys |
.env.local is git-ignored, so keys never get committed. The two API keys are only used in server code; never rename them to start with NEXT_PUBLIC_, which would send them to the browser.
npm run dev
Open http://localhost:3000, sign up, confirm your email, and upload a short recording (10 to 30 seconds is plenty for a test).
npm run lint # check the code for mistakes
npm run build # production build; must pass before pushing
https://learn2speech.vercel.app) to Authentication → URL Configuration.Analysis can take a minute or more, so the analysis route allows up to 200 seconds (maxDuration). Shorter recordings finish faster.
app/: pages and API routes (app/api/recordings/[id]/analyze runs the full analysis for one recording)lib/transcription/: the AssemblyAI request and response handlinglib/metrics/: words per minute, filler words, pauses and their ratings, as plain functionslib/feedback/: the Claude prompt, request and reply checkingsupabase/migrations/: the database setup, in orderdocs/: credits and AI usage logsWe used AI tools while building this app, as allowed by the Congressional App Challenge rules. Every use is logged, by person and by session, in docs/ai-log/, and commits Claude was involved in say how in their messages. The app itself uses Claude (Anthropic API) to write the coaching feedback.
Recordings and transcripts are personal data. They are stored in a private Supabase bucket and table protected by Row Level Security: the database only returns rows that belong to the logged-in user.