Inspiration

Interview preparation is often generic. Candidates practice common questions, but those questions may have little connection to their actual experience or the role they want. Useful coaching can also be expensive or difficult to access.

I built AI Interview Coach to make interview practice more personal and actionable. Instead of giving every user the same question list, the application connects the candidate’s résumé, target role, experience level, and job description to create a focused practice session.

What it does

AI Interview Coach creates a complete interview-practice loop:

  1. The user uploads a résumé as a PDF, DOCX, TXT, PNG, or JPG, or selects the sample profile.
  2. They enter a target role, experience level, and optionally paste or upload a job description.
  3. Gemini produces a role-aware candidate briefing that identifies relevant experience, transferable strengths, confirmed matches, and areas to prepare.
  4. The application generates five personalized technical, behavioral, and situational interview questions.
  5. The user answers each question using text or voice.
  6. Gemini evaluates the answer and returns a score, strengths, improvements, and a clearer answer structure.
  7. Local Python analysis measures transparent communication signals such as word count, speaking pace, and filler words.
  8. After all five questions, the application creates a downloadable interview report with overall results and practical recommendations.

The interface also includes an accessibility mode with larger text and controls, improved contrast, visible keyboard focus, and reduced motion.

How I built it

The application is built with Python and Streamlit. I separated the system into small modules for résumé extraction, Gemini access, summarization, question generation, answer evaluation, speech transcription, communication analysis, report generation, and optional score history.

Gemini handles the résumé-aware reasoning, job-description comparison, personalized question generation, and qualitative answer feedback. Generated feedback is parsed into a validated structure so the interface does not depend on unpredictable free-form output.

Whisper transcribes recorded answers locally. Separate Python logic calculates filler-word counts, word count, speaking rate, session progress, and report statistics. This distinction was important: the AI provides qualitative coaching, while measurable communication signals remain transparent and testable.

Uploaded résumés are processed in memory, API credentials are stored outside the repository, and saving score history is disabled by default. The project also includes Docker support, automated GitHub Actions checks, and a test suite running on Python 3.12.

Challenges I ran into

One major challenge was supporting different résumé formats. Text-based PDFs, DOCX files, and TXT files require different extraction methods, while screenshots and scanned résumés cannot be handled by ordinary text extractors. I added format validation and routed PNG and JPG résumés to Gemini as image inputs with the correct MIME type.

Another challenge was unreliable AI response formatting. A model may not always return exactly the structure requested. The application therefore rejects question-generation responses that do not contain exactly five numbered questions and validates answer-feedback data before displaying it.

Voice support created deployment challenges because Whisper expects an executable named ffmpeg. I added logic that discovers the bundled FFmpeg binary locally while allowing the deployed environment to use the system package.

Streamlit reruns also made multi-step state management difficult. I used session state to preserve the candidate profile, questions, completed answers, progress, accessibility preferences, and current interview stage without losing information during navigation.

Accomplishments that I’m proud of

I am proud that the final project is more than a single AI prompt. It combines document processing, image understanding, grounded generation, voice transcription, deterministic communication analysis, session state, reporting, accessibility, testing, and deployment into one working product.

The application supports a complete five-question practice session, works with both typed and recorded answers, produces a downloadable report, and is deployed publicly for users to try.

The repository currently includes 15 automated tests covering document extraction, prompt grounding, question validation, communication metrics, report aggregation, database isolation, speech dependencies, and the initial Streamlit interface.

What I learned

This project taught me that building an AI product involves much more than calling a model. Model output must be validated, failures need useful messages, state must survive interface reruns, private information needs careful handling, and AI-generated scores should not be presented as objective truth.

I also learned that adding more interface elements does not automatically improve a product. The experience became clearer when I prioritised one main action, moved explanatory content to dedicated pages, and made progress visible without distracting from the interview itself.

What’s next

Future improvements include adaptive follow-up questions based on previous answers, custom interview rubrics, authenticated user-owned progress tracking, stronger data-retention controls, and end-to-end browser testing.

I would also like to evaluate question relevance and feedback quality with human reviewers, compare Whisper performance across different accents and environments, and measure whether repeated practice improves independently scored interview answers.

AI Interview Coach is intended for practice and self-reflection. It does not make hiring decisions or claim to predict interview outcomes.

Built With

Share this project:

Updates

Submission history