Nervy is an AI-powered interview coach that helps you practice behavioral interviews with real-time feedback on verbal and non-verbal skills. Practice with structured questions, get live analysis on eye contact, posture, and expression, and receive AI recommendations to improve.
- Behavioral interview practice: Choose from 6 core topics and 20+ subtopics. Answer with STARR-style responses and configurable question count and timer.
- Real-time video analysis: WebSocket-powered analysis tracks eye contact, posture, facial expression, and confidence using MediaPipe face and pose models. Scores and live feedback appear during recording.
- Audio analysis: Filler-word detection and clarity scoring. Recordings are processed after each answer.
- AI recommendations: Google Gemini generates personalized improvement tips from your performance and transcript.
- Sign Captions: Real-time ASL-to-text captions from your webcam for interview accessibility. Supports ASL alphabet, Yes/No, numbers, and common interview signs.
- Authentication: Sign in and sign up via Clerk.
| Layer | Stack |
|---|---|
| Frontend | Next.js 16, React 19, Tailwind CSS, Clerk, Supabase client |
| Backend | FastAPI, WebSockets, Uvicorn |
| Analysis | MediaPipe (face, pose), OpenCV, custom detection logic |
| Sign (ASL) | PyTorch, Hugging Face (ResNet or LSTM on landmarks), hand/pose models |
| AI | Google Gemini (question generation, recommendations) |
hackhive/
backend/ # FastAPI + WebSocket server
server.py # Main API, /ws/interview and /ws/sign-captions
detection.py # InterviewConfidenceDetector (eye, posture, expression)
audio_detect.py # Filler words, clarity
sign_pipeline.py # ASL caption pipeline
*.task # MediaPipe face/pose/hand assets
requirements.txt
frontend/ # Next.js app
app/
(auth)/ # Clerk sign-in, sign-up
(dashboard)/ # dashboard, question, interview, analyze, sign-captions
page.tsx # Landing
components/ui/ # Navbar, etc.
- Python 3.10+ and pip
- Node.js 18+ and npm
- Google Gemini API key (for AI questions and recommendations)
- ffmpeg / ffprobe (for audio; often via
brew install ffmpeg) - Clerk (and optionally Supabase) configured via env for the frontend
cd backend
pip install -r requirements.txtCreate backend/.env or backend/.env.local (or .env / .env.local in the repo root or frontend/; the server checks several locations):
GEMINI_API_KEY=your_gemini_api_key
# Optional if the default model 404s:
# GEMINI_MODEL=gemini-2.0-flash
To list models available for your key:
python list_gemini_models.pyStart the server:
python server.pyBackend runs at http://localhost:8000.
cd frontend
npm installAdd frontend/.env.local with Clerk (and Supabase if used), e.g.:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=...
CLERK_SECRET_KEY=...
# NEXT_PUBLIC_SUPABASE_URL=...
# NEXT_PUBLIC_SUPABASE_ANON_KEY=...
Run the dev server:
npm run devFrontend runs at http://localhost:3000.
- Dashboard (
/dashboard): Pick a topic, subtopic, number of questions, and answer length. Start a practice run. - Question (
/question): Read the question, use the prep countdown, then you are taken to the recording step. - Interview / Analyze: Camera and microphone record your answer. The app streams frames to the backend over WebSocket. You see live scores for eye contact, posture, expression, and confidence. When the timer ends, you get an overall result plus audio analysis and AI recommendations.
- Sign Captions (
/sign-captions): Turn on the camera and start the session. Signs are recognized and shown as text in near real time for accessibility.
- Camera or mic not working: Grant browser permissions for camera and microphone.
- Backend / WebSocket errors: Ensure the Python server is running on port 8000 and CORS allows
http://localhost:3000(andhttp://127.0.0.1:3000). - No AI suggestions or 404 for Gemini: Set
GEMINI_API_KEYin.envor.env.local. If you get a model 404, runpython list_gemini_models.pyinbackend/and setGEMINI_MODELto a model that works for your key. - ffmpeg / pydub errors: Install ffmpeg (e.g.
brew install ffmpegon macOS) and ensureffprobeandffmpegare onPATHor in common Homebrew locations.
See LICENSE in this repository.