💡 Inspiration

Most mock interview tools only analyze text transcripts after the interview is complete. Candidates rarely get feedback on their actual presentation—such as eye contact, physical posture, speaking rate, and nervousness. We wanted to build a real-time "AI Cockpit" that provides live, instant telemetry and a brutally honest, actionable performance verdict to help candidates master their presence.

⚙️ How We Built It

We structured Pulse Interviewer with a decoupled client-server architecture:

  • Frontend Cockpit: Built with React and Vite, featuring a premium dark glassmorphic design. We integrated browser-side MediaPipe Face Mesh for local eye-contact and posture tracking, and the Web Speech API for zero-latency voice transcription and cadence tracking.
  • Backend Hub: Developed using Node.js, Express, and TypeScript, with Socket.io streaming real-time visualization coordinates and session records.
  • Database & AI: We used MongoDB for storing interview logs and connected to Gemini 2.5 Flash (via OpenRouter) to analyze the collected telemetry and generate a structured, brutally honest feedback report.

🚧 Challenges We Faced

  • Reducing Latency: Minimizing lag between candidate physical motion/speech and cockpit UI updates. We solved this by using WebSocket streams instead of standard HTTP request-response cycles.
  • Client-Side Optimization: MediaPipe is resource-intensive. We optimized loading by loading files via lightweight CDNs dynamically to prevent blocking React's initial bundle load.
  • Speech Parsing Accuracy: Differentiating natural speech pauses from actual hesitation filler words. We fine-tuned the matching logic to correctly identify specific patterns (uh, um, like, you know).

🧠 What We Learned

  • How to coordinate real-time canvas overlays with computer vision libraries in React.
  • Implementing robust WebSocket message routing for low-latency client-server state synchronization.
  • Managing secret security in public code repos using environment encryption engines like dotenvx.

Built With

Share this project:

Updates

Submission history