Inspiration
The job search process is universally stressful. Navigating career transitions, understanding shifting market demands, and identifying personal skill gaps often requires the guidance of a professional career coach—a resource that is expensive and inaccessible to many. We were inspired to democratize career counseling by building CareerForge Live, an empathetic, highly adaptive AI coach. We wanted an experience that wasn't just another text chatbot, but a voice-first, interruptible conversation that feels like sitting across the table from a real mentor who understands your burnout, your financial constraints, and your ambitions.
What it does
CareerForge is an end-to-end AI career coaching platform. The user journey is highly personalized:
- Resume Vision Analysis: Users upload their resume (PDF/Image), which is instantly parsed using Gemini 2.5 Flash's multimodal capabilities to extract skills, experience, and education.
- Live Voice Coaching: Users enter a live, bi-directional voice session. Powered by the Gemini Live API, the conversation is natural and interruptible. "Forge" asks about the user's career goals, current burnout levels, risk tolerance, and salary expectations.
- Real-time Market Research: While talking, the agent uses Google Search grounding to pull live data on salary trends, high-demand skills, and active employers for the user's specific target role.
- Actionable Deliverables: After the session, a specialized Report Generator agent synthesizes the entire transcript and tool outputs to generate a highly personalized, branded PDF career roadmap using ReportLab, which the user can download.
Conceptually, the system evaluates the user's readiness by analyzing the weighted delta between their current state and the market demands: $$ ReadinessScore = \sum_{i=1}^{n} \left( 1 - \frac{\max(0, Required_i - User_i)}{Required_i} \right) \cdot w_i $$ Where $w_i$ is the market weight of skill $i$ determined via real-time search grounding.
How we built it
We built CareerForge using a robust Multi-Agent Architecture powered by the Google ADK (Agent Development Kit) and the Gemini 2.5 Flash family of models.
The Frontend:
Built with React 19, Vite, and Framer Motion for a sleek, glassmorphic UI. The core innovation here is the WebSocket-based audio streaming. We implemented a custom AudioWorklet for raw microphone capture and an AudioBufferSourceNode queue for seamless, continuous playback of 16kHz PCM audio coming from the Gemini Live API.
The Backend: We used FastAPI hosted on Google Cloud Run. The backend manages the state and orchestrates the ADK agents:
-
forge_live: The native audio agent that handles the real-time WebSocket communication. -
report_generator: A discrete, text-based background agent equipped with all the analytical tools (skill gap analysis, course recommendations, PDF generation) that runs post-session.
The Tools:
We integrated Google Search grounding directly into our search_job_market tool to ensure the agent gives advice based on today's job market, not generic pre-trained advice.
Challenges we ran into
Building a stable, voice-first multi-agent system with real-time tool execution was incredibly challenging.
- Live Session Disconnects & Event Loop Blocking: Initially, our live voice sessions would drop abruptly. We discovered that long-running tool calls (like our web search grounding) were blocking the Python async event loop. We had to heavily refactor our tools to be completely asynchronous (
async def) and carefully configure the ADK'sToolThreadPoolConfigto handle execution safely without starving the WebSocket. - Native Audio API integration: We encountered severe
APIError: 1008crashes when combining native audio models with function calling. Debugging the interaction between the ADK, the Gemini API, and JSON Schema generation revealed that strict Python type hinting (e.g., usinglist[str]instead of justlistin our tool arguments) was mandatory to prevent schema validation failures on Google's end. - Agent State and Tool Context Loss: We realized that the nuanced information shared verbally—like a user admitting to high burnout or specifying a strict salary floor—was getting lost before the final report was generated. We had to engineer a system to extract a rich
user_profiledictionary directly from the live chat transcript and explicitly pass this contextual state into thegenerate_career_roadmapandsearch_job_markettools. - Orchestrator Limitations: Initially, we tried routing all post-session tasks through an orchestrator agent that delegated to sub-agents. This resulted in
ValueError: Tool not founderrors because the sub-agents lacked direct access to execution context. We solved this by flattening the architecture for the post-session processing, creating a monolithicreport_generatoragent equipped with every tool it needed.
Accomplishments that we're proud of
- True Interruptible Voice with Tools: We successfully married the Gemini Live API's bi-directional audio streaming with complex, grounded tool execution. Meaning the agent can literally "think" and search the web while maintaining a conversational audio presence.
- The Seamless Handoff: We are incredibly proud of how smoothly the system transitions from a live fluid audio context (the interview) into a highly structured data context (the PDF report generation) without losing the user's emotional state or preferences.
- Fully Serverless Cloud Deployment: We containerized the entire dual-service architecture (FastAPI backend + React frontend) and wrote automated scripts to deploy it seamlessly to Google Cloud Run, automatically handling CORS and environment variable bindings.
What we learned
- Deep ADK & Live API Intricacies: We gained a masterclass in the Google ADK and Gemini API. We learned how to properly manage asynchronous generators (
runner.run_async), structuretypes.Contentmessage histories for multimodal models, and the vital importance of strict JSON schemas for reliable function calling. - Audio Engineering in the Browser: Capturing, chunking, and playing back raw PCM audio buffers via WebSockets in React is non-trivial. We learned a vast amount about the Web Audio API and
AudioWorklets. - Prompting for Empathy: Getting an AI to sound professional is easy; getting it to sound like an empathetic career counselor who respects your burnout limits required extensive system prompt iterations.
What's next for CareerForge Live
- Database Integration: Integrating Firebase or Firestore to save user profiles, allowing for continuous, multi-session coaching over months or years.
- OAuth & Integrations: Adding LinkedIn and GitHub OAuth to instantly ingest a user's professional footprint without requiring a manual PDF upload.
- Mock Interviews: Expanding the Live Agent's persona capabilities so users can practice technical or behavioral interviews directly with Forge, complete with real-time feedback and scoring.
Built With
- audio
- docker
- framer-motion
- frameworks
- gemini-2.5-flash
- gemini-live-api-(native-audio)
- google-adk-(agent-development-kit)
- google-cloud-run
- google-genai-sdk
- google-search-grounding-backend:-fastapi
- html/css
- platforms
- python
- react-19
- reportlab
- typescript
- vite
- websockets
Log in or sign up for Devpost to join the conversation.