Inspiration

Breaking into global tech companies is tough for Latin American engineers — not because of skill gaps, but because of preparation gaps. Most interview resources are in English, oriented to US/EU markets, and offer zero feedback. You practice in a vacuum and never know if you're improving.

We wanted to build something that felt like a real interview: a calm, professional AI that greets you by name, adapts to your level, and tells you exactly what you got right and what to study next — in your language.

##What it does

NovA AI is a full-stack mock interview coach powered by AWS generative AI:

  • Conversational AI interviewer — Nova greets you by time of day, introduces itself, and conducts the interview as a real conversation (not a quiz)
  • 3 technical tracks — Cloud Engineer, DevOps Engineer, and ML Engineer at Junior and Mid-level
  • Adaptive difficulty — questions get harder or easier in real time based on your performance
  • Instant structured feedback — every answer gets a 0–100 score, correct concepts, missing concepts, strengths, and a personalized list of topics to study
  • Bidirectional voice — Amazon Nova Sonic processes audio in real time over WebSocket so you can speak your answers and hear Nova's questions
  • Personal dashboard — session history, score progression chart, and per-area breakdown stored per user in DynamoDB
  • PDF report — a downloadable summary of every interview session
  • Google Sign-In — full auth via Cognito PKCE + Google OAuth, with graceful degradation to demo mode when unauthenticated
  • Fully bilingual — English and Spanish, end to end: prompts, feedback, UI, and voice

##How we built it

Backend: FastAPI on AWS App Runner — chosen specifically because WebSocket (Nova Sonic audio streaming) requires a persistent process that serverless platforms can't provide.

AI layer:

  • AWS Bedrock Nova 2 Lite — question generation and answer evaluation. Every question is generated fresh with a system prompt that instructs Nova to speak in second person, like a real interviewer would.
  • Amazon Nova Sonic — bidirectional speech-to-speech streaming over WebSocket for real-time voice interviews
  • Amazon Polly — TTS for reading questions aloud when Nova Sonic is in text mode

Auth & persistence:

  • Amazon Cognito Hosted UI — Google OAuth via PKCE. The frontend never touches a secret; the hosted UI handles the redirect.
  • Amazon DynamoDB — PAY_PER_REQUEST tables for user profiles and session history. Both are optional — the app silent-fails gracefully without them.

Frontend: Single-file vanilla JS (index.html) — no build step, no framework overhead. The interview room, dashboard, results screen, and auth flow are all client-side state machines.

Infrastructure: Docker on ECR → App Runner. One IAM role with least-privilege access to Bedrock, Polly, and DynamoDB. No hardcoded credentials anywhere.

## Challenges we ran into

  • Nova Sonic Python SDK — the bidirectional streaming API requires an experimental AWS Labs SDK (aws-sdk-bedrock-runtime) that only supports Python 3.12+. Our initial Dockerfile used 3.11 and silently failed to install it. Switching to 3.12 unblocked the voice pipeline.
  • Cognito at_hash validationpython-jose validates the at_hash claim in the ID token against the access token. We were only passing the ID token to jwt.decode(). Passing the access token as well fixed the Google login flow.
  • App Runner regional activation — the AWS account needed to visit the App Runner console at least once to activate the service per region. The CLI returned SubscriptionRequiredException with no clear explanation.
  • DynamoDB Decimal serialization — boto3's Resource API deserializes DynamoDB numbers as Python Decimal, which FastAPI's JSON encoder rejects. We added a recursive _floatify() converter before returning session data.
  • Cross-region consistency — we initially deployed to us-west-2 due to the activation issue, then migrated everything to us-east-1 once resolved. Required coordinating ECR, App Runner, DynamoDB tables, IAM role ARNs, and Cognito redirect URIs simultaneously.

## Accomplishments that we're proud of

  • A genuinely warm, conversational AI interviewer that greets you by time of day and speaks directly to you — not "the candidate"
  • Full Google OAuth working end-to-end in production: PKCE flow, RS256 JWT validation, DynamoDB upsert, and profile picture in the chat bubble
  • Nova Sonic bidirectional voice pipeline fully implemented and deployed — speak your answer, hear Nova's next question
  • Per-user session history with a real score progression chart and area breakdown, all derived from DynamoDB — no in-memory state
  • Zero-credential demo mode: the entire app works without a single AWS credential for anyone who just wants to try it

## What's next for NovA AI — Mock Interview Coach

  • Behavioral interviews — extend beyond technical questions to STAR-format behavioral interviews, common at FAANG-adjacent companies
  • Resume-aware questions — let users upload their CV and generate questions tailored to their specific experience
  • Peer comparison — anonymous benchmarking so you can see how your scores compare to others at the same role and level
  • Mobile app — the voice interview experience is better native; a React Native wrapper over the same FastAPI backend is the natural next step
  • Company-specific tracks — interview prep tuned to the question style of specific companies (AWS, Google, Mercado Libre, Rappi)

Built With

Share this project:

Updates