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_hashvalidation —python-josevalidates theat_hashclaim in the ID token against the access token. We were only passing the ID token tojwt.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
SubscriptionRequiredExceptionwith 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-2due to the activation issue, then migrated everything tous-east-1once 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
- amazon-cognito
- amazon-dynamodb
- amazon-ecr
- amazon-nova-sonic
- amazon-polly
- aws-app-runner
- aws-bedrock-nova-2-lite
- css
- docker
- fastapi
- html5
- javascript
- python
- python-jose
- report-lab
Log in or sign up for Devpost to join the conversation.