My Job Odyssey — Devpost About
Gemini Live Agent Challenge 2026 · Live Agents Category Live app: https://myjobodyssey.com · GitHub: https://github.com/flegare/myjobodyssey-agent
Inspiration
Most people can't tell their own career story.
Not because they haven't done meaningful work — but because careers happen in real time, and humans aren't wired to stop and document. The wins go uncelebrated. The hard lessons fade. The pivots that built resilience? Never written down. And then one day, you open a blank résumé or sit in front of an interviewer and realize: you've forgotten most of what made you good at your job.
I've lived this. As a developer and team lead, I've shipped features, navigated chaos, mentored engineers, and learned from failures — none of which lived anywhere except my own fading memory. Every time I needed to update my résumé or prep for a role change, I was starting from scratch, trying to reconstruct a career that deserved better than that.
My Job Odyssey started as an answer to one question: What if there was an AI that remembered your career for you — and helped you grow it, one week at a time?
What it does
My Job Odyssey is a voice-first career growth companion powered by the Gemini Live API. It works in four layers:
🎙️ Live Career Agent (Weekly Voice Check-In)
Every week, you open the app and have a real-time voice conversation with your AI career coach. The agent doesn't just listen — it interviews you. It asks about what you shipped, what blocked you, what you learned, and what you're proud of. It handles natural speech, barge-in, follow-up questions, and long pauses like a real coach would.
These conversations are transcribed, extracted, and stored as structured career memories in Firestore — timestamped, tagged, and searchable.
🧠 Living Career Memory
Every experience captured by the agent becomes part of your career memory graph — a personal knowledge base of skills demonstrated, projects delivered, lessons learned, and goals pursued. A D3.js career timeline gives you a visual history of your entire professional journey.
Over time, the agent builds context that makes each future session smarter — referencing past projects, noticing skill patterns, and asking follow-up questions on threads from weeks ago, like a coach who actually remembers you.
📄 Voice Resume Editor
This is where memory becomes output. Open the Voice Resume Editor to have a live voice session with Alex, your AI resume coach — while watching your résumé update in real time. Alex has already analyzed your résumé before the session starts: a pre-session AI Critique scores each section and flags the highest-priority improvements. Alex then works through them one by one, asking for your input, proposing rewrites, and — when you approve — making the edits live.
Every change is color-coded as it happens: green for additions, yellow for modifications, amber for sections flagged for review. Alex can rewrite your summary, strengthen bullet points, add certifications you mention mid-conversation, and build out new project entries — all in a single voice session.
🎯 Resume Tuner
Given a job posting, the Resume Tuner tailors your résumé to that specific role. It uses your career memory graph to surface relevant achievements, scores how well each bullet maps to the job's requirements, and applies LLM-powered rewrites that preserve your authentic voice while maximizing relevance.
How we built it
| Layer | Technology |
|---|---|
| Voice Agent | Gemini Live API (gemini-2.5-flash-native-audio-preview) via @google/genai SDK |
| Audio Pipeline | AudioWorklet (PCM 16kHz capture), PCM 24kHz playback, gapless scheduling |
| Voice Resume Editor | useGeminiLiveResume hook + Gemini function calling (8 declared resume edit tools) |
| AI Critique | critiqueResume Cloud Function → scored suggestions → injected into voice session context |
| Resume Tuner | LLM-powered tailoring with career graph context (gemini-2.5-pro for judgment-heavy steps) |
| Career Timeline | D3.js swimlane visualization over structured Firestore graph |
| Backend | Firebase Cloud Functions (Node.js 20), Firestore |
| Frontend | React, Firebase Hosting |
| Auth | Firebase Auth (Google sign-in) |
| Context Building | Custom contextBuilder — injects career memory + critique findings into agent system prompt |
| i18n | English + French locale support throughout |
The voice loop runs entirely on Google Cloud:
getVoiceContext/getResumeVoiceContextCloud Functions authenticate the user, query their career memory from Firestore, and issue short-lived ephemeral tokens via the Gemini v1alpha API — the real API key never reaches the browser- PCM audio streams bidirectionally via WebSocket in real time; the agent speaks back at 24kHz with gapless buffer scheduling
- Gemini function calling during live voice sessions drives the resume editor — the agent calls tools like
updateResumeSummary,addCertification, andaddExperienceBulletmid-conversation while continuing to speak - Post-session,
experienceExtractorparses the transcript into structured STAR-format career events and writes them back to Firestore
A centralized model config (GEMINI_FAST / GEMINI_SMART / GEMINI_LIVE_AUDIO) ensures every function uses the right model tier for its task.
Build Timeline
| Period | Milestone |
|---|---|
| Before hackathon | Career memory infrastructure — Firestore schema, weekly check-in UI (text), experience storage, résumé data model |
| Feb 18–19 | First Gemini Live API integration: useGeminiLive.ts, AudioWorklet PCM pipeline, VoiceMode.tsx, getVoiceContext Cloud Function, ephemeral token pattern |
| Late Feb | Barge-in handling, session resumption, transcript extraction, live waveform UI |
| Early March | AI Critique (critiqueResume Cloud Function), Resume Tuner with career graph context, D3.js career timeline |
| Mid March | Voice Resume Editor (useGeminiLiveResume, getResumeVoiceContext, 8 Gemini tools, color-coded live highlights), Safari AudioWorklet fix, reconnect stability |
Per contest rules section 6: the Gemini Live API integration was built entirely within the hackathon window (Feb 18 onward). The pre-existing career memory infrastructure is disclosed transparently as the foundation the agent runs on.
Challenges we ran into
Real-time audio on the browser is unforgiving. Getting PCM capture (16kHz) and playback (24kHz) to work reliably across devices required inlining the AudioWorklet as a Blob — Firebase Hosting doesn't serve workers from arbitrary paths. Safari adds a further constraint: it rejects AudioWorklet.addModule() on blob: URLs entirely, requiring a switch to data:application/javascript;base64,... URLs. Managing buffer timing to avoid crackling or dropouts took significant iteration.
Live editing while talking. The Voice Resume Editor has to stream audio, receive Gemini function calls, mutate React state, and re-render color-coded diff highlights — all simultaneously without blocking the audio pipeline. Keeping the UI responsive while Gemini is mid-sentence required careful ref-based patterns to avoid stale closures in tool handlers, and a session-snapshot approach to prevent tool responses being dropped during concurrent connection resets.
Grounding the agent, not just prompting it. The resume coach can't invent plausible achievements — every edit must trace to what the user actually said. Building a context injection system that surfaces relevant memories and pre-session critique findings without flooding the token budget required careful retrieval and prompt engineering.
Making voice feel like a conversation, not a form. Early versions felt transactional — the agent would ask one question, wait, move on. Getting it to probe naturally, handle tangents, reference prior sessions, and pivot on interruption required deep system prompt work and persona iteration across dozens of test sessions.
Session reconnect stability. Gemini Live WebSocket sessions occasionally drop — especially during long conversations or after function calls. The auto-reconnect logic had multiple subtle failure modes: consumed ephemeral tokens being reused, stale session resumption handles causing immediate server rejections and tight reconnect loops, and tool responses being silently dropped during concurrent session resets. Each required careful isolation and a targeted fix.
Firebase Auth + COOP headers. signInWithPopup requires careful COOP configuration (same-origin-allow-popups) and an exactly matching OAuth redirect URI. One wrong character = broken login for all users in production.
Accomplishments that we're proud of
A voice session that rewrites your résumé live. Watching your résumé update in real time — green highlights appearing as Alex adds a certification you mentioned mid-sentence, yellow as a bullet gets sharpened — is the kind of interaction that feels genuinely new. It's not a chatbot. It's a collaborative editing session where one participant speaks in natural language.
The critique-to-session chain. Running AI Critique before starting a voice session means Alex arrives briefed — not starting from scratch. The agent knows your résumé's weak spots, prioritizes them, and works through them systematically. The critique cards on screen serve as a live to-do list that gets checked off as Alex makes each fix.
The agent actually listens. Barge-in works — users can interrupt mid-sentence and the agent pivots naturally. This is what separates a voice agent from a voice-controlled chatbot, and getting it right with Gemini Live was the moment the product clicked.
Memory that compounds. Each session makes the next one smarter. By session three or four, the agent is referencing specific past projects, noticing skill patterns, and asking follow-up questions on threads from weeks ago.
Voice unlocks honesty. Testers consistently shared things they'd never type. The spoken format drops the filter. One user described it as "the first time I felt like someone actually asked about my week at work." That reaction — from a chatbot — was unexpected and meaningful.
Full Google Cloud architecture. The entire stack — voice streaming, memory storage, experience extraction, context enrichment, auth — runs on Firebase and Google Cloud with no third-party dependencies in the critical path.
What we learned
- Gemini Live's barge-in is genuinely good — users don't feel trapped in rigid turn structure, which is critical for a coaching dynamic
- Function calling in voice sessions is powerful but requires explicit grounding — without prescriptive tool instructions, the agent would flag sections for review instead of actually adding certifications; the system prompt has to be explicit about when to call each tool
- Grounding matters more than raw capability — a voice agent that invents plausible career details is worse than useless for résumé generation; every output must trace to a real memory
- Career reflection is emotionally meaningful — the weekly check-in became the most-valued part of the product, not the résumé export
- Voice-first is an honesty unlock — people say things out loud they'd never type, which makes the data richer and the insights more accurate
- Session stability is a product problem, not just an infrastructure one — a voice session that silently drops and hangs is worse than one that clearly fails and recovers; every reconnect failure mode needs an explicit, visible recovery path
What's next for My Job Odyssey
- Psychometric assessments — structured tests (values, work style, strengths) interpreted by the agent conversationally, surfacing blind spots and career fit signals
- Personalized training paths — the agent recommends specific courses, certifications, and resources to bridge skill gaps between where you are and where you want to go
- Growth challenges — weekly and monthly action prompts tailored to your skills, location, and goals (open source, volunteering, public speaking, writing)
- Team edition — managers use the agent to run structured 1:1s that feed into a shared team growth ledger
- Mobile native — lower the capture friction; a quick voice note after a tough meeting should be all it takes
Built for the Gemini Live Agent Challenge 2026 · #GeminiLiveAgentChallenge
Built With
- audioworklet
- firebase
- firebase-auth
- firebase-cloud-functions
- firestore
- flash2.5
- gemini
- google-cloud
- live
- react
- typescript
Log in or sign up for Devpost to join the conversation.