ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Real-time AI interview copilot — coach yourself through the interview, not after it.
Translation pending
EducationTypeScript · HTMLGitHub @expand-appOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Interview Coach Project
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Real-time AI commentary on interview answers. Listens to your mic, detects
the interviewer's questions, streams per-question commentary from DeepSeek,
and lets you replay the whole session afterwards with timestamped notes.
Current version uses the browser's built-in Web Speech API for transcription
(free, no extra API key needed). For a production deployment with longer
sessions and better multi-language accuracy, swap lib/audioSession.ts for
a Deepgram streaming implementation.Read the full README ↗Real-time AI commentary on interview answers. Listens to your mic, detects the interviewer's questions, streams per-question commentary from GPT-6 Luna, and lets you replay the whole session afterwards with timestamped notes.
Current version uses the browser's built-in Web Speech API for transcription
(free, no extra API key needed). For a production deployment with longer
sessions and better multi-language accuracy, swap lib/audioSession.ts for
a Deepgram streaming implementation.
📘 Setting this up for the first time? See DEPLOY.md for step-by-step instructions on running locally, pushing to GitHub, and deploying to Vercel.
Browser mic
│
├─► MediaRecorder ─────────► Blob (saved for playback)
│
└─► Web Speech API ────► transcript stream
│
▼
┌─────────────────────────────┐
│ Orchestrator │
│ │
│ every final utterance → │
│ POST /api/detect-question │──► gpt-6-luna (is this a Q?)
│ │
│ every ~220 chars of answer →│
│ POST /api/commentary (SSE) │──► gpt-6-luna (streamed comment)
└─────────────────────────────┘
│
▼
Zustand store
│
▼
React UI
npm install
https://platform.openai.com/api-keys → Create new API key
cp .env.local.example .env.local
# Edit .env.local and paste your key
npm run dev
Open http://localhost:3000 in Chrome or Edge (Safari's Web Speech API is unreliable). Click Start, paste a JD, and start talking. First time, the browser will ask for microphone permission.
/api/detect-question.
GPT-6 Luna decides if it's a new question. If yes → a new Question
block appears at the top. If no → the utterance is added to the current
Question's running answer buffer./api/commentary. This
streams a one-sentence observation back via SSE; the frontend appends
deltas as they arrive.Click any past session in the sidebar. You get:
None. Sessions live in Zustand + memory only. Refresh the page and it's gone. This was a deliberate choice to ship faster — add IndexedDB or a backend DB later.
In lib/orchestrator.ts:
COMMENT_TRIGGER_CHARS (default 220) — how much new answer text
triggers a comment. Lower = more frequent, chattier.COMMENT_MIN_GAP_MS (default 8000) — minimum time between comments on
the same question, to prevent over-commenting during a long answer.Replace lib/audioSession.ts with a streaming version (it needs to:
open a wss://api.deepgram.com/v1/listen socket, pipe MediaRecorder
chunks into it, and call the same four callbacks). Add a
/api/deepgram-token route that mints short-lived project keys so the
browser never sees your main Deepgram key. Everything else stays the same.