πŸŽ™οΈ CoachMic


1. Inspiration

In exactly one month, January 2026, I will graduate from triOS College with my Information Technology diploma. After two years of late nights, certifications, hackathons, and hands-on projects, I am about to face the moment every student dreads: the job hunt.

Am I terrified? Not if I am prepared. Everyone, at some point, has experienced interview anxiety of some sort, which is even worse than public speaking or writing a proctored certification exam. During this period, I have built production-grade AI solutions, won hackathons, and am currently working as a Backend Tester for an AI-driven recruitment platform. I have written secure code, found security vulnerabilities, and shipped real products, all in less than one years. I am confident I can do the job very well.

But how well am I able to talk about the things I do?

Can I clearly articulate my experiences under pressure, with a hiring manager staring at me, waiting for an answer? Can I avoid saying "um" or pausing a few times in a row while explaining complex concepts? How confident can I sound when explaining a theory? These are the gaps everyone tries to fill when preparing for a job interview.

The Gap in the Recruitment Pipeline

During the past three months, I have been working at a recruitment platform. I test systems that help employers find suitable candidates and candidates find suitable jobs. I have seen the full hiring pipeline from job posting, to applications, to screening, to invitations, and the interview process. When I analyzed the job seekers' workflow critically, I realized most solutions help connect candidates to job interviews. But what happens next?

Candidates are on their own to Google common interview questions, rehearse silently, or maybe ask a friend, neighbor, or relative to read them questions they found online. The recruitment industry has optimized everything from job matching to resume screening to salary negotiation but has done very little to help candidates during the moment that matters most: the conversation itself.

The Spark

I had just completed a previous project requiring integration with ElevenLabs Conversational AI and had created several AI agents using TTS/STT that conduct business conversations. While scrolling the web and sending applications to eBay, Affirm, and a few other companies, I learned about the AI Partners "Catalyst Accelerate Innovation" hackathon. I knew this was the moment to build the missing piece of the job seekers' workflow the part that will stop candidates from fending for themselves and transform them into confident professionals.

What if there was an AI Interview Coach that could actually talk to you, listen to your answers, and give you real-time feedback and advice to help you practice your way to perfectionβ€”exactly how a real interview happens?

I was not thinking of a chatbot or a static list of pre-generated interview questions with voice playback. I envisioned a voice-first interview coach that simulates the real thing.

The Research

After that idea, I looked into the research, and the numbers validated what I was thinking:

  • 93% of job seekers experience anxiety before interviews, more stressful than public speaking or first dates
  • 70% practice their responses out loud, confirming that verbal rehearsal matters in interview preparation

Top fears include:

  • 17% being too nervous
  • 15% getting stumped by questions
  • 10% not being prepared

Most people practice alone. Some talk to a mirror. Others rehearse with friends or family who may not understand the industry well enough to probe effectively. Some use apps that display questions on a screen but never actually listen to their answers or guide them on how they speak.

Here is the disconnect: Interviews are verbal conversations requiring active listening and speaking, yet most preparation tools are text-based in a world where interviews are voice-based.

The Access Problem

The problem is access, not motivation. Some people can afford professional interview coaches at $100–$200 per session. College career services are often overbooked. And even when support exists, it is difficult to simulate a technical interview for roles like cybersecurity.

What if everyone had access to a patient, intelligent career service and interview coach who is available 24/7, can work with you at any time, requires no booking, and is tailored to any role and any company?

Building for Myself

I am building this tool for something I personally need, so others will not have to struggle alone anymore. I uploaded my own resume and configured it to ask me questions about my experiences. It could even have an agent that searches the web for opportunities, recommends jobs that accurately match the candidate's resume, applies to jobs, and helps candidates seize those opportunities through interview coaching.

A recruitment pipeline is only as strong as its weakest link. What is the point of a perfect match if the candidate cannot communicate their value effectively?

I am building an AI that believes talent should not be filtered out by anxiety. That way, employers get the best candidate for the job not just the best interviewer because all candidates will be prepared by the AI.

I will be the first user because I will need it after I graduate in a month or less, so it fits a hackathon development timeline. Even if I win the hackathon, great. But I will still consider this a success if this tool helps me prepare to land my first job in January.


2. What It Does

CoachMic is a complete AI-powered career preparation ecosystem that transforms how job seekers prepare for interviews. Built on ElevenLabs Conversational AI and Google Gemini 2.5, it delivers the full candidate success pipeline from resume optimization to interview mastery to job discovery.

The Complete Career Preparation Ecosystem

CoachMic addresses every stage of job preparation through three integrated phases:


Phase 1: PREPARE

Smart Resume Analysis

  • Upload your resume (PDF/DOCX) and watch AI analyze it in real-time with streaming feedback
  • Extract STAR stories, skills, and key talking points from your experience
  • Get your ATS (Applicant Tracking System) compatibility score
  • Receive keyword gap analysis to optimize for job requirements
  • View skill graphs showing proficiency levels across domains

AI Resume Enhancement

  • Generate an AI-improved version of your resume with one click
  • Better phrasing, action verbs, and quantified achievements
  • Keyword optimization based on target role and industry
  • Side-by-side comparison with your original

Company Intelligence

  • Research any target company with AI-curated insights grounded in real-time Google Search
  • Recent news, press releases, and strategic initiatives
  • Leadership information and company culture signals
  • Predicted interview questions based on company context
  • STAR story mapping to align your experience with company needs

Phase 2: PRACTICE

Voice Interviews (ElevenLabs Conversational AI)

  • Conduct realistic mock interviews with natural, human-like voice conversation
  • Sub-100ms latency for seamless turn-takingβ€”feels like talking to a real person
  • Resume-aware questions tailored to YOUR actual experience
  • Intelligent follow-up questions based on your responses
  • Pause, resume, or end the interview at any time
  • Full transcript recording for review

Text Interview Mode

  • Alternative chat-based interview for quiet environments or accessibility needs
  • Same AI interviewer logic and question generation as voice mode
  • Real-time typing indicators and progress tracking
  • TTS reader mode with Gemini 2.5 Flash to listen to AI responses
  • Hybrid input: type or use voice-to-text transcription

AI Career Coach

  • Pre-interview coaching: Refine your answers before the mock interview
  • Post-interview coaching: Work through areas for improvement after feedback
  • Switch seamlessly between text and voice coaching modes
  • Cross-mode memoryβ€”context persists when switching
  • Suggestion chips for common coaching topics
  • Session notes and action items for follow-up

Phase 3: SUCCEED

Job Discovery

  • Search real job listings powered by Google and JSearch API
  • AI-powered fit analysis comparing your resume to job requirements
  • Career trajectory insights and recommendations
  • Save jobs and track application status
  • AI-recommended jobs based on your resume profile

Smart Cover Letters

  • Generate personalized cover letters for any job with AI
  • Match your experience directly to job requirements
  • Streaming generation for real-time preview
  • Edit and refine with AI assistance

Performance Analytics

  • Comprehensive feedback after every interview session
  • STAR method scoring (Situation, Task, Action, Result) per answer
  • Filler word detection and counting ("um," "like," "you know")
  • Speaking pace and response length analysis
  • Question-by-question feedback with improvement suggestions
  • Sample improved answers using the STAR framework
  • Export feedback as a professional PDF report

The User Journey

  1. Upload Your Resume - AI analyzes your experience in real-time, extracting STAR stories and skills
  2. Discover Matched Jobs (Optional) - Browse real opportunities with AI-powered fit analysis
  3. Research Your Target Company (Optional) - Get AI-curated insights from Google Search
  4. Configure Your Interview - Select role, company, interview type, length, and difficulty
  5. Get Pre-Interview Coaching (Optional) - Refine answers with AI guidance
  6. Conduct the Interview - Voice or text, 5–7 questions tailored to your profile
  7. Review Your Feedback - Detailed scores, STAR analysis, and improvement areas
  8. Continue with Coaching (Optional) - Work on weak areas with AI career coach
  9. Generate Cover Letters - Apply to matched jobs with AI-personalized letters

Key Differentiators

Traditional Prep Tools CoachMic
Read questions, type answers Speak naturally in real-time voice conversation
Generic question banks Role, company, and resume-specific questions
No feedback on delivery Analyzes filler words, pacing, and confidence
Static experience Dynamic follow-up questions based on your answers
Separate tools for each step Complete ecosystem: resume β†’ jobs β†’ prep β†’ interview β†’ feedback
Expensive coaching ($100+/hr) Accessible to everyone, available 24/7

What Makes Us Different

  1. Voice-Native Design - Built from the ground up for spoken conversation with ElevenLabs AI, not text adapted for speech
  2. Resume Intelligence - Every question connects to YOUR actual experience, not generic templates
  3. End-to-End Pipeline - From resume upload to job discovery to interview practice to feedbackβ€”all in one platform
  4. Holistic Feedback - We evaluate what you say AND how you say it using STAR methodology
  5. Real Company Context - Gemini's Google Search grounding provides accurate, current company intelligence
  6. Dual Interview Modes - Voice for realistic practice, text for accessibility and quiet environments
  7. Built by Someone Who Needs It - The creator is the first user, preparing for graduation in January 2026

Technology Integration

ElevenLabs Conversational AI

  • Real-time speech-to-text (STT) transcription
  • Natural text-to-speech (TTS) with human-like voice
  • Intelligent turn-taking model for natural conversation flow
  • Sub-100ms latency for seamless dialogue

Google Gemini 2.5

  • Resume parsing and career analysis (gemini-2.5-flash-lite, gemini-2.5-pro)
  • Interview question generation tailored to role and experience
  • Comprehensive feedback analysis with STAR methodology
  • Company intelligence with Google Search grounding
  • Cover letter generation personalized to job requirements
  • Gemini TTS for text interview reader mode

Google Cloud Platform

  • Cloud Run for serverless backend deployment
  • Firestore database for session, feedback, and coaching data
  • Firebase Authentication for secure user accounts
  • Secret Manager for API key protection

The Impact

Personal Impact

  • Helps me prepare for job search starting January 2026
  • Provides practice articulating real experiences under pressure
  • Builds confidence to communicate value effectively

Individual Impact

  • Democratizes access to interview coaching (no longer reserved for $100+/hour coaches)
  • Reduces interview anxiety through repeated, low-stakes practice
  • Helps candidates articulate their experience more effectively
  • Particularly valuable for:
    • First-generation professionals without network access
    • Career changers entering unfamiliar industries
    • Non-native English speakers practicing fluency
    • Introverts who need extra verbal practice

Societal Impact

  • Levels the playing field by giving everyone access to quality preparation
  • Helps qualified candidates avoid being filtered out due to nerves rather than ability
  • Reduces economic inefficiency of talent mismatch caused by interview anxiety

Broad Scale Potential

  • 70+ million Americans actively job searching in any given year
  • Global applicability across all cultures, landuages and industries
  • Natural expansion to other high-stakes verbal scenarios
    • College admission interview
    • visa interviews
    • sales pitches practice

3. How We Built It

Architecture Overview

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                              CLIENT LAYER                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚                    React 18 + TypeScript + Vite                         β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚
β”‚  β”‚  β”‚ Landing  β”‚  β”‚  Setup   β”‚  β”‚Interview β”‚  β”‚ Feedback β”‚  β”‚   Coach  β”‚ β”‚  β”‚
β”‚  β”‚  β”‚   Page   β”‚  β”‚  Wizard  β”‚  β”‚  Screen  β”‚  β”‚Dashboard β”‚  β”‚  Screen  β”‚ β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚
β”‚  β”‚  β”‚   Text   β”‚  β”‚   Job    β”‚  β”‚  Company β”‚  β”‚  Session β”‚  β”‚  Resume  β”‚ β”‚  β”‚
β”‚  β”‚  β”‚Interview β”‚  β”‚  Board   β”‚  β”‚  Intel   β”‚  β”‚  History β”‚  β”‚ Manager  β”‚ β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                      β”‚
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β–Ό                       β–Ό                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  ElevenLabs React SDK   β”‚  β”‚   Firebase Auth   β”‚  β”‚    REST API / SSE       β”‚
β”‚  (Voice Conversation)   β”‚  β”‚                   β”‚  β”‚    (FastAPI Backend)    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
              β”‚                                                β”‚
              β–Ό                                                β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                           SERVICE LAYER                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  ElevenLabs Conversational  β”‚  β”‚      Google Cloud Run               β”‚   β”‚
β”‚  β”‚          AI Platform        β”‚  β”‚      (FastAPI + Python 3.11)        β”‚   β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚   β”‚
β”‚  β”‚  β”‚ STT (Speech-to-Text)  β”‚  β”‚  β”‚  β”‚  Resume Parser (Streaming)    β”‚  β”‚   β”‚
β”‚  β”‚  β”‚ TTS (Text-to-Speech)  β”‚  β”‚  β”‚  β”‚  Resume Version Manager       β”‚  β”‚   β”‚
β”‚  β”‚  β”‚ Turn-Taking Model     β”‚  β”‚  β”‚  β”‚  Text Interview Service       β”‚  β”‚   β”‚
β”‚  β”‚  β”‚ Conversation State    β”‚  β”‚  β”‚  β”‚  Feedback Generator           β”‚  β”‚   β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚  β”‚  Job Matcher + Cover Letter   β”‚  β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚  Company Intel (Search)       β”‚  β”‚   β”‚
β”‚                                   β”‚  β”‚  AI Coach Service             β”‚  β”‚   β”‚
β”‚                                   β”‚  β”‚  Session History Service      β”‚  β”‚   β”‚
β”‚                                   β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚   β”‚
β”‚                                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                β”‚                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚                    Google Vertex AI / Gemini 2.5                       β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚
β”‚  β”‚  β”‚   Resume     β”‚  β”‚   Question   β”‚  β”‚   Feedback   β”‚  β”‚  Company   β”‚ β”‚  β”‚
β”‚  β”‚  β”‚   Analysis   β”‚  β”‚   Generation β”‚  β”‚   Analysis   β”‚  β”‚   Intel    β”‚ β”‚  β”‚
β”‚  β”‚  β”‚ (2.5-flash)  β”‚  β”‚  (2.5-pro)   β”‚  β”‚  (2.5-pro)   β”‚  β”‚ (grounded) β”‚ β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                 β”‚  β”‚
β”‚  β”‚  β”‚   Job        β”‚  β”‚    Cover     β”‚  β”‚   Gemini     β”‚                 β”‚  β”‚
β”‚  β”‚  β”‚   Matching   β”‚  β”‚    Letter    β”‚  β”‚    TTS       β”‚                 β”‚  β”‚
β”‚  β”‚  β”‚(2.5-flash-   β”‚  β”‚  (2.5-pro)   β”‚  β”‚ (2.5-flash)  β”‚                 β”‚  β”‚
β”‚  β”‚  β”‚    lite)     β”‚  β”‚              β”‚  β”‚              β”‚                 β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                 β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚                         DATA LAYER                                      β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚
β”‚  β”‚  β”‚   Firestore  β”‚  β”‚   Firebase   β”‚  β”‚    Secret    β”‚  β”‚  Firebase  β”‚ β”‚  β”‚
β”‚  β”‚  β”‚  (Sessions,  β”‚  β”‚   Storage    β”‚  β”‚   Manager    β”‚  β”‚    Auth    β”‚ β”‚  β”‚
β”‚  β”‚  β”‚   Feedback)  β”‚  β”‚  (Resumes)   β”‚  β”‚  (API Keys)  β”‚  β”‚            β”‚ β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Technology Stack

Layer Technology Purpose
Frontend React 18, TypeScript 5.3, Vite 5, Tailwind CSS Modern web application with strict typing
Voice SDK @elevenlabs/react 0.12.1 Real-time voice conversation
State Management React Context + useReducer + localStorage Session persistence across refreshes
Backend Python 3.11, FastAPI, Pydantic v2 Async API with type validation
AI/LLM Google Gemini 2.5 (Pro, Flash, Flash-Lite) Multi-model task routing
Voice AI ElevenLabs Conversational AI STT, TTS, turn-taking
TTS Gemini 2.5 Flash TTS Reader mode for text interviews
Company Research Gemini + Google Search Grounding Real-time company intelligence
Job Search JSearch API (RapidAPI) Real job listings
Database Firestore NoSQL document storage
File Storage Firebase Storage Resume binary storage
Authentication Firebase Auth OAuth (Google, GitHub, Microsoft, Apple)
Secrets Google Secret Manager + KMS API key encryption
Hosting Cloud Run + Firebase Hosting Serverless deployment

ElevenLabs Integration

The voice interview system leverages ElevenLabs Conversational AI with dynamic prompt injection:

User speaks β†’ ElevenLabs STT β†’ Turn-Taking Model β†’ LLM Response β†’ ElevenLabs TTS β†’ User hears
                                      ↑
                            CoachMic Prompt Overrides
                            (Resume + Role + Company context)

Using the React SDK

// Frontend: useConversation hook with full event handling
const conversation = useConversation({
  onConnect: ({ conversationId }) => {
    // Start timing for metrics
    currentAnswerStartTimeRef.current = Date.now();
  },

  onMessage: (message) => {
    // Build transcript entry
    const entry: TranscriptEntry = {
      speaker: message.source === 'ai' ? 'agent' : 'user',
      text: message.message,
      timestamp: Date.now(),
    };

    // Queue for debounced persistence
    pendingEntriesRef.current.push(entry);

    // Real-time metrics: filler words, word count
    updateFillerWordCount(message.message);

    // Auto-detect interview closing
    if (isClosingStatement(message.message)) {
      setShouldAutoEnd(true);
    }
  },

  onDisconnect: () => {
    flushPendingEntries(); // Persist remaining transcript
    if (state.transcript.length > 0 && !isEnding) {
      markInterviewInterrupted(sessionId, transcript);
    }
  },
});

// Start with backend-generated overrides
const { signedUrl, overrides } = await startInterview(sessionId);
await conversation.startSession({ signedUrl, overrides });

Dynamic Prompt Override System

The backend builds context-rich prompts for each interview session:

# Backend: Build system prompt with full candidate context
def build_prompt_overrides(session, resume_data, questions):
    system_prompt = f"""You are a professional interviewer conducting a
    {session.interview_type} interview for {session.target_role}
    at {session.target_company}.

    CANDIDATE BACKGROUND:
    {format_resume_summary(resume_data)}

    KEY ACHIEVEMENTS:
    {format_achievements(resume_data.achievements[:3])}

    QUESTIONS TO ASK:
    {format_questions(questions)}

    GUIDELINES:
    - Ask questions one at a time
    - Listen actively and ask follow-ups
    - Acknowledge responses naturally
    - Stay in character throughout
    """

    return {
        "system_prompt": system_prompt,
        "first_message": f"Hi {resume_data.name}, thank you for joining...",
        "interview_config": {
            "min_questions": session.question_count,
            "max_questions": session.question_count + 2
        }
    }

Security Configuration (ElevenLabs Agent)

Overrides require explicit enablement in the ElevenLabs Dashboard:

  • System prompt override: Allows custom interviewer instructions
  • First message override: Personalized greeting with candidate name
  • Agent language override: Support for multilingual interviews

Google Gemini Integration

We use different Gemini models optimized for each task:

Task Model Rationale
Resume Basic Parsing gemini-2.5-flash-lite Fast extraction, simple structure
Resume Career Analysis gemini-2.5-pro Deep STAR story extraction
ATS Score Calculation gemini-2.5-pro Complex analysis
Text Interview gemini-2.5-pro Natural conversation
Feedback Generation gemini-2.5-pro Comprehensive analysis
Job Matching gemini-2.5-flash-lite Quick fit scoring
Company Intelligence gemini-2.5-pro + Google Search Grounded research
Cover Letter gemini-2.5-pro Personalized writing
Gemini TTS gemini-2.5-flash-tts Text-to-speech

Parallel Resume Processing

Resume parsing uses parallel Gemini calls for 40% faster processing:

async def parse_resume_with_gemini(raw_text: str) -> ResumeData:
    # Run basic and career analysis in parallel
    results = await asyncio.gather(
        _parse_resume_basic(raw_text),        # gemini-2.5-flash-lite
        _parse_resume_career_analysis(raw_text),  # gemini-2.5-pro
        return_exceptions=True
    )

    basic_data, career_data = results

    # Merge results (career data takes precedence)
    return merge_resume_data(basic_data, career_data)

Google Search for Company Intel

The company intel leverages Gemini's Google Search Grounding:

async def generate_company_intel(company_name: str) -> CompanyIntel:
    """Use Gemini with Google Search grounding for real-time research."""
    from google.genai import types

    # Create Google Search tool
    google_search_tool = types.Tool(
        google_search=types.GoogleSearch()
    )

    prompt = f"""Research {company_name} thoroughly for interview preparation.

    Find and analyze:
    1. Recent news and press releases (last 6 months)
    2. Leadership team and recent changes
    3. Strategic initiatives and company direction
    4. Culture signals from reviews and job postings
    5. Common interview questions for this company

    Provide actionable insights for a candidate preparing for an interview."""

    response = await client.models.generate_content_async(
        model="gemini-2.5-pro",
        contents=prompt,
        config=types.GenerateContentConfig(
            tools=[google_search_tool],
            response_mime_type="application/json"
        )
    )

    return parse_company_intel(response.text)

4. Challenges We Ran Into

Building CoachMic required solving complex real-time voice, AI integration, and state management problems. Here are the significant challenges we overcame:

Challenge 1: ElevenLabs Dynamic Prompt Injection

The Problem: We needed the AI interviewer to ask questions specific to each user's resume and target role, but ElevenLabs agents are configured with static prompts in the dashboard.

The Challenge: How do you make a pre-configured voice agent dynamically aware of user context without creating a new agent for every session?

Our Solution: We discovered ElevenLabs' conversation override system. The backend generates a complete overrides object containing:

  • System prompt with resume context, STAR stories, and target role
  • First message customized to the user's name and position
  • Agent language settings

This required enabling "Allow Overrides" in the ElevenLabs Security settings and passing the signed URL with overrides from our backend to the frontend SDK.

Code Pattern:

overrides = {
    "agent": {
        "prompt": {"prompt": dynamic_system_prompt},
        "first_message": f"Hi {user_name}, I'm your interviewer...",
        "language": "en"
    }
}
return {"signedUrl": signed_url, "overrides": overrides}

Challenge 2: Browser Audio Autoplay Restrictions

The Problem: Modern browsers block autoplay of audio without user interaction. The ElevenLabs conversation would fail silently when we tried to auto-start it.

The Challenge: Users expected the interview to start when they clicked "Start Interview," but the browser's autoplay policy blocked the audio stream.

Our Solution: We implemented a multi-step initialization flow:

  1. User clicks "Start Interview" (satisfies user gesture requirement)
  2. We call getUserMedia() to request microphone permission
  3. Only after microphone access is granted do we call conversation.startSession()
  4. We added explicit error handling for the "NotAllowedError" case

Key Insight: The microphone permission request itself counts as user interaction, unlocking audio playback for the session.


Challenge 3: Streaming Resume Analysis with Three-Stage Pipeline

The Problem: Resume parsing with comprehensive career analysis takes 15–20 seconds. Users thought the app was frozen.

The Challenge: Provide immediate feedback while processing continues in the background.

Our Solution: We built a Server-Sent Events (SSE) streaming pipeline with three stages:

  1. Stage 1 (2–3 sec): Basic info extraction with gemini-2.5-flash-lite
  • Name, contact, education, skills list
  • UI immediately shows "Resume Uploaded" with basic info

    1. Stage 2 (8–10 sec): Career analysis with gemini-2.5-pro
  • STAR stories, skill proficiency graphs, career trajectory

  • UI progressively reveals career insights

    1. Stage 3 (5–7 sec): ATS analysis with gemini-2.5-pro
  • Compatibility score, keyword gaps, improvement suggestions

  • UI completes with optimization recommendations

Result: Users see meaningful content within 3 seconds instead of waiting 20 seconds for everything.


Challenge 4: Cross-Mode Memory for AI Coach

The Problem: Users switch between text and voice coaching modes. Each mode created separate conversation histories, losing context.

The Challenge: Maintain conversation continuity when users switch from typing to speaking (or vice versa).

Our Solution: We implemented a unified coaching session model:

  • Single coaching_sessions Firestore collection stores all messages
  • Each message tagged with mode: "text" | "voice"
  • When generating responses, we include full history regardless of mode
  • Mode switches are logged but don't reset context

Code Pattern:

history = get_full_coaching_history(session_id)  # Both modes
prompt = build_coach_prompt(history, current_mode, feedback_context)
response = gemini.generate(prompt)  # Full context awareness

Challenge 5: Google Search Grounding for Company Intelligence

The Problem: Company information in Gemini's training data is outdated. Users need current news, recent leadership changes, and live company updates.

The Challenge: Gemini can hallucinate company facts if not grounded in real data.

Our Solution: We leveraged Gemini's Google Search grounding feature:

  • Company research requests use tools=[Tool(google_search={"enable_search": True})]
  • Responses include citations to source URLs
  • We parse and display grounding metadata separately from content
  • Frontend shows "Sources" section with clickable references

Result: Company intelligence reflects real-time information with verifiable sources.

Challenge 6: State Management Complexity

The Problem: CoachMic has deeply nested state: session config, resume data, interview transcript, feedback results, coaching history, and saved jobs. React's default state patterns couldn't handle it cleanly.

The Challenge: Avoid prop drilling through 15+ levels while maintaining type safety and predictable updates.

Our Solution: We implemented a dual-state architecture:

  • React Context + useReducer: Core application state with typed actions
  • localStorage Persistence: 24-hour TTL cache for session recovery
  • Selective Hydration: Only restore valid, non-expired state

State Structure:

interface AppState {
  session: Session | null;
  resume: ResumeAnalysis | null;
  interview: InterviewState;
  feedback: Feedback | null;
  coaching: CoachingState;
  jobs: JobBoardState;
}

Result: Clean, predictable state management with automatic session recovery after browser refresh.


Challenge 7: PDF Export with Dynamic Content

The Problem: Users wanted to download their interview feedback as a professional PDF report.

The Challenge: PDFs need to be generated server-side with proper formatting, charts, and branding while handling variable-length content (transcripts, feedback lists).

Our Solution: We built a Python PDF generator using ReportLab:

  • Custom page templates with CoachMic branding
  • Dynamic table generation for STAR scores
  • Automatic page breaks for long transcripts
  • Embedded charts for skill visualization
  • Streaming download response for large files

Challenge 8: Hackathon Time Constraint

The Problem: Building a complete career preparation ecosystem in a hackathon timeline.

The Challenge: Feature scope was ambitious: voice interviews, text interviews, resume parsing, job matching, company research, AI coaching, cover letters, feedback analysis, and PDF export.

Our Solution:

  • Ruthless prioritization: Voice interview first (core differentiator)
  • Incremental delivery: Each feature works standalone
  • Reusable patterns: Streaming, state management, API structure
  • Documentation-driven: Clear interfaces enabled parallel work

Result: All nine major features successfully implemented and functional within the hackathon period.


What We Would Do Differently

  1. WebSocket for all real-time features - SSE worked well for the hackathon scope and time constraints, but WebSocket would provide bidirectional communication for features like collaborative interview review.
  2. Redis for session caching - To reduce Firestore reads and enable sub-millisecond session lookups.
  3. Dedicated audio processing service - The current AudioWorklet approach works, but a dedicated service would handle edge cases better.
  4. Comprehensive E2E testing - Time constraints limited our test coverage; we would add Playwright tests for critical flows.

5. Accomplishments That We're Proud Of

Building CoachMic in a hackathon timeline pushed us to deliver production-quality features under pressure. Here are the accomplishments that make us proud:

Accomplishment 1: Voice-Native Interview Experience

What We Built: A genuinely conversational AI interviewer that speaks and listens naturally not a chatbot with voice synthesis bolted on.

Why It Matters: Most interview prep tools display questions on screen. CoachMic creates the actual pressure of speaking under time, maintaining eye contact (with a camera), and thinking on your feet. This is how real interviews work.

Technical Achievement:

  • Sub-100ms response latency using ElevenLabs Conversational AI
  • Natural turn-taking that knows when you're done speaking
  • Dynamic follow-up questions based on your actual answers
  • Resume-aware context injected via secure signed URLs

Accomplishment 2: Complete Career Preparation Ecosystem

What We Built: A unified platform covering the entire job seeker journey:

Phase Features
PREPARE Resume analysis, AI enhancement, company research
PRACTICE Voice interviews, text interviews, AI coaching
SUCCEED Job discovery, cover letters, performance analytics

Why It Matters: Job seekers currently juggle 5–10 different tools. CoachMic unifies everything so your resume informs your interview prep, which informs your coaching, which produces better cover letters for matched jobs.

Technical Achievement: Nine major features sharing unified state, with data flowing seamlessly between resume analysis, interview generation, feedback analysis, and job matching.


Accomplishment 3: Real-Time Streaming Resume Analysis

What We Built: A three-stage streaming pipeline that shows results progressively as they're generated.

Why It Matters: Users see their basic info within 3 seconds instead of waiting 20 seconds for comprehensive analysis. The progressive reveal keeps users engaged and provides immediate validation that their upload worked.

Technical Achievement:

  • Server-Sent Events (SSE) streaming from FastAPI to React
  • Parallel Gemini model calls (flash-lite for speed, pro for depth)
  • React state updates that smoothly append streamed content
  • Error recovery that preserves partial results

Accomplishment 4: STAR Method Feedback System

What We Built: Comprehensive post-interview feedback that scores each answer on the STAR framework (Situation, Task, Action, Result).

Why It Matters: Generic feedback like "good answer" doesn't help you improve. Our system identifies exactly which STAR components were missing and provides sample improved answers demonstrating the full framework.

Technical Achievement:

  • Per-answer scoring with 0–100 metrics for each STAR component
  • Filler word detection and counting ("um," "like," "you know")
  • Speaking pace analysis (words per minute)
  • AI-generated improved versions using the same content with better structure
  • PDF export for sharing with mentors or career coaches

Accomplishment 5: Cross-Mode AI Coaching

What We Built: An AI career coach that maintains context whether you're typing or speaking.

Why It Matters: Sometimes you want to type quietly. Sometimes you want to practice speaking. The coach remembers everything you've discussed regardless of how you communicated.

Technical Achievement:

  • Unified message storage with mode tagging
  • Full history context on every response generation
  • Seamless mode switching without losing thread
  • Post-interview coaching that references your actual performance

Accomplishment 6: Google Search-Grounded Company Intelligence

What We Built: Company research powered by live Google Search results, not stale training data.

Why It Matters: Walking into an interview knowing yesterday's news about the company shows genuine interest and preparation. Our company intel is current because it's grounded in real-time search.

Technical Achievement:

  • Gemini with google_search tool integration
  • Source citation extraction and display
  • Structured output for recent news, leadership, and culture signals
  • Predicted interview questions based on company context

Accomplishment 7: Production-Ready Architecture

What We Built: A full-stack agentic AI application that's deployed and running in production, not just a demo.

Why It Matters: Hackathon projects often work locally but fail in production. CoachMic is live at coachmic.com with a real backend running live on Cloud Run.

Technical Achievement:

  • Fully typed TypeScript frontend (React 18 + Vite)
  • FastAPI backend with Pydantic validation
  • Firebase Authentication for secure user accounts
  • Google Cloud Secret Manager for credential security
  • Firestore for persistent data storage
  • Cloud Run for auto-scaling serverless deployment

Accomplishment 8: Built by Someone Who Needs It

What We Built: A tool that will be used by its creator to prepare for actual job interviews.

Why It Matters: The best products are built by people solving their own problems. The creator graduates in January 2026 and will be using CoachMic to prepare for the job search. Every feature was designed with real interview anxiety in mind from a real user.

Personal Achievement: This isn't just a hackathon project. It's a career tool that will continue to be developed and improved because its creator depends on it.


The Bigger Picture

What We're Most Proud Of: CoachMic democratizes access to interview coaching. It is available 24/7, costs almost nothing, and adapts to any role and any company. We believe talent should not be filtered out by anxiety, and we built the tool to prove it.


6. What We Learned

Building CoachMic taught us invaluable lessons about real-time AI applications with voice interfaces. Here are our key takeaways:

Lesson 1: Real-Time Voice AI Is Fundamentally Different

What We Discovered:

  • Turn-taking is an art. The AI needs to know when you're pausing to think versus when you're done speaking.
  • Error recovery in voice is harder than just showing somethingβ€”you need verbal acknowledgment.
  • Audio context (echo, background noise, accents) affects everything.

Applied Learning:

  • We use ElevenLabs specifically for its ultra-low latency and natural voice turn-taking capabilities.
  • We built a text-based fallback with TTS for environments where talking may not be feasible but headphones can be used to practice active listening.

Lesson 2: AI Model Selection Is a Product Decision

Choosing the right model for each task is as important as the prompt.

What We Discovered:

  • gemini-2.5-pro gives better answers but costs 20x more than flash-lite
  • Speed differences compound: flash-lite responds in 500ms; pro takes 3–5 seconds
  • Quality differences are task-dependent: extraction doesn't need pro; but reasoning does
  • Model capabilities matter: only certain models support Google Search grounding

Applied Learning:

  • Created a model routing table mapping features to optimal models
  • Used flash-lite for high-volume, simple tasks (job fit scoring)
  • Reserved pro for complex reasoning (feedback analysis, STAR story synthesis)
  • Documented rationale for each model choice in code comments

Lesson 3: Interview Anxiety Is Real and Universal

The problem we're solving affects almost everyone.

What We Discovered:

  • 93% of job seekers experience interview anxiety
  • Anxiety disproportionately affects first-generation professionals, non-native speakers, and career changers
  • Most people practice alone, which doesn't simulate real pressure
  • Verbal rehearsal (talking out loud) is proven more effective than mental rehearsal

Applied Learning:

  • Designed CoachMic to create realistic pressure without real stakes
  • Built features specifically for voice practice, not just question review
  • Emphasized the "voice-native" differentiator in our messaging

Lesson 4: The Full Journey Matters More Than Individual Features

Job seekers don't want point solutions; they want an end-to-end experience.

What We Discovered:

  • Users currently juggle 5–10 different tools for job preparation
  • Data doesn't flow between tools (resume analysis, interview prep, job applications)
  • Context switching breaks flow and causes information loss
  • Unified experience is a competitive advantage

Applied Learning:

  • Built the complete ecosystem: PREPARE β†’ PRACTICE β†’ SUCCEED
  • Made resume data flow into interview questions, coaching context, and cover letters
  • Designed saved jobs to connect with cover letter generation

Lesson 5: Building for Yourself Creates Better Products

Dogfooding isn't optional. Using your own product reveals gaps, and you cannot avoid the rough edges.

What We Discovered:

  • Most features that seem complete on paper have UX gaps in practice
  • Edge cases become obvious when you're the user
  • Motivation stays high when building what you genuinely need
  • Real usage patterns differ from imagined usage patterns

Applied Learning:

  • The creator will use CoachMic for actual job interview prep in January 2026
  • Every frustrating moment during development became a feature improvement
  • "Would I actually use or need this?" became the quality bar

Lesson 6: Google Cloud Services Work Well Together

Choosing a unified cloud platform reduces integration friction.

What We Discovered:

  • Firestore + Firebase Auth + Cloud Run share authentication seamlessly
  • Secret Manager integrates naturally with Cloud Run + Firebase
  • ADC (Application Default Credentials) simplifies local development
  • Gemini API is just another Google Cloud service

Applied Learning:

  • Used Firebase Auth for both frontend and backend authentication
  • Deployed to Cloud Run with automatic Secret Manager integration
  • Leveraged ADC for local development without credential files

These lessons not only inform CoachMic's development but every product we build in the future.


7. What's Next for CoachMic

CoachMic has achieved its core mission: a complete AI-powered interview preparation ecosystem with voice-native practice. But our journey does not end here.

Immediate Priorities (Post-Hackathon)

Personal Usage and Refinement

The creator graduates in January 2026 and will be the first power user:

  • Daily interview practice sessions
  • Real job applications using the platform
  • Continuous bug fixes and UX improvements based on actual usage
  • Building a track record of successful interview outcomes

Production Hardening

  • Enhanced error recovery for voice connection drops
  • Offline mode for reviewing feedback and saved jobs
  • Performance optimization for mobile devices
  • Accessibility improvements (screen reader support, keyboard navigation)

Analytics Dashboard

  • Track improvement over time (STAR scores trending)
  • Visualize practice frequency and consistency
  • Compare performance across interview types
  • Set goals and track progress

Near-Term Features

Interview Type Expansion

Technical Interviews:

  • Live coding problems with voice explanation
  • System design interview practice
  • Whiteboard simulation with screen sharing

Case Interviews:

  • Consulting-style case studies
  • Market sizing questions
  • Framework-based problem solving

Industry-Specific:

  • Healthcare compliance scenarios
  • Finance behavioral questions
  • Engineering technical depth

Collaborative Features

Peer Practice:

  • Match with other job seekers for mutual practice
  • Take turns being interviewer and candidate
  • Peer feedback alongside AI feedback

Mentor Mode:

  • Share sessions with career coaches
  • Annotated feedback from human mentors
  • Hybrid AI + human coaching

Enhanced AI Capabilities

Video Analysis:

  • Body language feedback from webcam
  • Eye contact and posture coaching
  • Facial expression analysis for confidence signals

Voice Tone Analysis:

  • Detect nervousness in speech patterns
  • Identify rushed or unclear articulation
  • Coach on vocal variety and energy

Personalized Learning:

  • Adaptive difficulty based on performance
  • Focus areas identified from patterns across sessions
  • Spaced repetition for weak STAR components

Medium-Term Vision

Enterprise Features

Recruiting Teams:

  • Standardized candidate screening interviews
  • Consistent evaluation across interviewers
  • Interview question bank management

Career Services:

  • University career center integration
  • Bulk student account management
  • Aggregated analytics for program improvement

Corporate Training:

  • Internal promotion interview practice
  • Leadership assessment preparation
  • Sales pitch and presentation training

Platform Expansion

Mobile App:

  • Native iOS and Android applications
  • Practice during commute or downtime
  • Push notifications for practice reminders

Browser Extension:

  • One-click practice from job listing pages
  • Automatic company research when viewing postings
  • Quick cover letter generation

Slack/Teams Integration:

  • Practice reminders in work chat
  • Team interview prep channels
  • Shared feedback and encouragement

Language Support

Multilingual Interviews:

  • Practice in Spanish, French, German, Mandarin
  • Non-native English speaker coaching
  • Accent reduction and clarity training

Cultural Adaptation:

  • Country-specific interview norms
  • Regional question patterns
  • Localized STAR examples

Long-Term Opportunities

Beyond Interviews

CoachMic's voice-first coaching approach applies to many high-stakes verbal scenarios:

Academic:

  • Graduate school admission interviews
  • PhD dissertation defenses
  • Scholarship interviews

Immigration:

  • Visa interview preparation
  • Citizenship interview practice
  • Embassy appointment simulation

Sales:

  • Client pitch practice
  • Objection handling training
  • Discovery call simulation

Public Speaking:

  • Presentation practice
  • Conference talk preparation
  • Media interview training

Marketplace Model

Expert Coaches:

  • Human coaches offering premium sessions
  • Industry-specific expert matching Company Partnerships:
  • HR offer CoachMic to candidates they're interviewing

Built With

Share this project:

Updates