Inspiration
Every week, a developer in Lagos spends 40+ hours copying and pasting the same information into job application forms across Indeed, LinkedIn, and Glassdoor — the same developer who could be building, learning, or interviewing. We watched friends and colleagues in Nigeria, Kenya, and Ghana lose out on roles not because they lacked skills, but because the application process is a full-time job in itself.
When Amazon announced Nova Act for browser automation, Nova 2 Lite for intelligent analysis, and Nova 2 Sonic for real-time voice AI, we saw the perfect trifecta: an agent that searches, an intelligence layer that matches and writes, and a voice coach that prepares you for the interview. We wanted to build the tool we wished existed — one that gives every developer in an emerging market the same unfair advantage that candidates in San Francisco have with their networks and expensive career services.
What it does
AutoApply is an AI agent fleet that automates the entire job application lifecycle:
Resume Intelligence — Upload a PDF and Nova 2 Lite extracts 34+ data points: skills, experience, education, and contact info. No manual data entry.
Parallel Job Search — Nova Act launches headless browser sessions across Indeed, LinkedIn, and Glassdoor simultaneously, searching, filtering by location and date, and extracting structured job listings in real time.
Smart Matching & Coaching — Nova 2 Lite scores every job 0–100 against your resume, identifies exact skill gaps, and provides actionable coaching on how to reframe your existing experience to address each gap.
Tailored Cover Letters — Every matched job gets a unique, cliché-free cover letter that highlights your most relevant accomplishments for that specific role and company.
Automated Application — Nova Act fills out application forms, uploads your resume, and answers screening questions. When it encounters a CAPTCHA, it escalates to you rather than trying to bypass security — responsible AI by design.
Voice Interview Coach — Nova 2 Sonic conducts a 4-question mock interview tailored to each job listing, with real-time spoken feedback after each answer and personalized coaching tips at the end.
Live Agent Feed — A WebSocket-powered terminal shows every agent action as it happens. Full transparency — you see exactly what your AI agents are doing at every step.
How we built it
Architecture: Next.js 16 frontend communicating with a FastAPI Python backend via REST APIs and WebSocket connections.
Nova Act (Browser Automation): We used atomic act() calls for reliability — each browser action is a single, focused instruction like "Find the search bar and type 'Software Engineer'" rather than complex multi-step commands. We ran parallel sessions using Python threading, with one Nova Act instance per job board. For job data extraction, we used JSON schema-constrained output to get structured data directly. Playwright interop handled file uploads reliably.
Nova 2 Lite (Intelligence Layer): All AI analysis runs through Amazon Bedrock's Converse API. We built specialized prompts for four distinct tasks: resume parsing, job matching with scoring rubrics, skill gap coaching that reframes existing experience, and cover letter generation with anti-cliché constraints.
Nova 2 Sonic (Voice AI): We architected a bidirectional WebSocket pipeline — browser microphone captures 16kHz PCM audio, streams it to our FastAPI backend, which relays it to Nova 2 Sonic via Bedrock's streaming API. The AI interviewer's spoken responses stream back the same path. System prompts are dynamically generated per job listing, incorporating the role title, company, requirements, and candidate background.
Resilience: Every AI service has a graceful fallback. Nova Act falls back to curated mock job data. Nova 2 Lite falls back to regex-based resume parsing and keyword-overlap matching. Nova 2 Sonic falls back to an interactive text-based mock interview. The app works end-to-end with zero API credentials configured.
Stack: Python 3.11, FastAPI, Next.js 16, Tailwind CSS, Amazon Bedrock, S3, pdfplumber, WebSockets, deployed on Vercel (frontend) and Render (backend).
Challenges we ran into
CAPTCHAs everywhere. Indeed, LinkedIn, and Glassdoor all aggressively block automated browsers. Our initial approach of searching all three platforms in parallel meant 2 out of 3 sessions would hit CAPTCHAs immediately. We solved this by making CAPTCHA escalation a first-class feature — the agent pauses, surfaces the devtools URL to the user, and waits for human intervention. This turned a limitation into a responsible AI design decision.
Nova Act token limits. The free tier has strict token limits on extraction prompts. Our original approach of extracting 10 jobs with full Pydantic schema validation exceeded the limit every time. We simplified to a minimal JSON schema extracting 5 jobs with only essential fields, and added a "read what's visible without clicking" instruction to prevent the agent from navigating away and consuming more tokens.
Bedrock throttling. "Too many tokens per day" errors would kill the entire pipeline mid-run. We built fallback logic at every layer — if match scoring fails, a keyword-overlap algorithm provides reasonable default scores. If cover letter generation fails, a template-based generator fills in. The pipeline never returns zero results.
Nova 2 Sonic SDK gap. The invoke_model_with_bidirectional_stream method exists in botocore's service model but isn't exposed as a public boto3 method yet. We explored _make_api_call, raw HTTP/2 event streaming, and AWS CRT — ultimately discovering this is a brand-new API that requires SDK support not yet publicly available. We built an interactive fallback that maintains the same WebSocket protocol, mic input detection, and UI experience.
Timing and timeouts. The full search-match-cover letter pipeline takes 3-5 minutes. Our frontend Axios timeout was set to 5 minutes, and the pipeline would complete at 5 minutes and 25 seconds — just past the timeout. The WebSocket would show "Ready to apply" but the HTTP response would fail. We increased the timeout and optimized to single-platform searches.
Accomplishments that we're proud of
It actually works end-to-end. From uploading a real PDF resume to seeing parsed skills, watching Nova Act search LinkedIn in real time, getting match scores and tailored cover letters, and practicing a job-specific mock interview — the entire pipeline runs. We watched our agent type "Smart contract developer" into LinkedIn's search bar, navigate to Nigeria, extract results, and generate cover letters — all live.
Graceful degradation as a design philosophy. Instead of building a demo that breaks when an API is unavailable, we built a production system that adapts. Every failure mode has a meaningful fallback. Judges can run the app with zero credentials and still experience the full workflow.
The voice coach actually listens. The Nova 2 Sonic integration captures real microphone input, detects when you start and stop speaking, and advances the interview naturally. Even in fallback mode, the silence detection creates a realistic conversational flow.
34 skills parsed from a single PDF. Nova 2 Lite didn't just extract keywords — it identified Python, JavaScript, TypeScript, React, Node.js, FastAPI, Express, Docker, PostgreSQL, and 25 more from a real resume, plus years of experience and education history.
Real-time transparency. The WebSocket-powered agent feed shows every action as it happens. Users aren't waiting blindly — they see "[SEARCH] Starting parallel search," "[MATCH] Analyzing 5 jobs," "[COVER] Generating cover letter for Senior Developer at TechCorp." This builds trust in the AI agents.
What we learned
Atomic instructions beat complex ones. Early on, we tried giving Nova Act multi-step instructions like "Search for jobs, filter by location, set date range, and extract results." It would get confused and loop. Breaking each action into a single act() call with one clear objective made the agent dramatically more reliable.
Schema simplicity matters with LLM agents. Passing a full Pydantic model schema to Nova Act caused token limit errors. A minimal JSON schema with just the required fields worked perfectly. The lesson: when working with AI agents under token constraints, less is more.
Fallbacks aren't failure — they're features. We initially felt embarrassed about mock data fallbacks. Then we realized that every production system has graceful degradation. Netflix shows cached content when recommendations fail. Google Maps works offline. Our fallbacks mean the app always demonstrates the full user experience, regardless of API availability.
Voice AI needs infrastructure the SDK hasn't caught up with. Bidirectional streaming is architecturally different from request-response APIs. The boto3 SDK has the operation defined but not yet exposed, which taught us that being on the cutting edge means sometimes building bridges the SDK hasn't built yet.
African job markets have unique patterns. Nigerian salary ranges, local companies, and job board preferences differ significantly from US-centric defaults. We tailored our mock data and matching to reflect Naira salary ranges, Lagos-based companies, and the platforms African developers actually use.
What's next for AutoApply
Full Nova 2 Sonic voice integration. Once AWS exposes the bidirectional streaming method in boto3, we'll enable real-time voice-to-voice interview coaching — the architecture is already built and waiting.
Multi-language support. Expanding beyond English to French (for West Africa), Swahili (for East Africa), and Portuguese (for Lusophone Africa) — using Nova 2 Lite for translation of cover letters and interview coaching.
Browser extension. A Chrome extension that detects when you're on a job listing page and offers one-click "Apply with AutoApply" — sending the job details directly to your agent fleet.
Interview analytics dashboard. Track your mock interview performance over time — response clarity scores, STAR method adherence, filler word detection, and improvement trends across sessions.
Employer partnerships. Working with African tech companies to create a reverse pipeline — where employers can find pre-matched, pre-coached candidates whose resumes have already been optimized for their specific roles.
Built With
- amazon-bedrock
- fastapi
- next.js-16
- nova-2-lite
- nova-2-sonic
- nova-act
- pdfplumber
- python-3.11
- render
- s3
- tailwind-css
- vercel
- websockets
Log in or sign up for Devpost to join the conversation.