Inspiration
Mock interview prep is one of those things everyone knows they should do more of, and almost nobody does well. Practicing alone means either talking to a wall or using an AI tool that just writes you the "perfect" answer — which teaches you nothing, because the real interview isn't going to hand you a script.
What actually helps is a real interviewer who won't let a vague answer slide. Someone who asks "how much faster, exactly?" until you're forced to remember the number. We wanted to build that — an agent that behaves less like a chatbot and more like a genuinely demanding interview partner, one that also does the tedious work of turning your rambling answers into a clean, reusable STAR-format cheat sheet while you talk.
That's S.A.G.E. — Socratic Agent for Growth & Excellence.
What it does
S.A.G.E. runs a mock interview session and refuses to accept vague answers. When you respond to a question, it evaluates whether your answer actually contains a concrete situation, action, and measurable result — and if it doesn't, it asks a targeted Socratic follow-up aimed at exactly what's missing, rather than a generic "can you elaborate?"
While you talk, S.A.G.E. is working in the background: once an answer is concrete enough, it's automatically extracted into STAR format (Situation, Task, Action, Result) and saved to your Candidate Profile — visible live, updating in real time as you go. Over the course of a session, S.A.G.E. also tracks your communication patterns (do you tend to be vague? do you ramble?) so it can adapt how it prompts you.
You can also choose who's interviewing you. Switching between personas — a Standard interviewer, a fast-paced Startup Founder, or a skeptical Strict Bar-Raiser — changes not just the tone but what the agent probes for: speed and impact versus edge cases and scale. At the end of a session, S.A.G.E. shows you a summary of how you sharpened over the course of your answers, and your STAR entries are tagged with which persona surfaced them, so you know which stories hold up under pressure.
How we built it
The core reasoning runs on Gemini, accessed through the GenAI SDK, with two decoupled responsibilities: an assessment step that judges whether an answer is concrete and generates a follow-up if not, and a separate extraction step that only fires once an answer is finalized, converting it into a structured STAR entry. Keeping these as distinct calls made the system much easier to debug and extend independently as we added features.
The backend is a FastAPI service deployed on Cloud Run. Cloud Firestore handles persistence — Candidate Profile entries, session history, and communication-pattern data all live there, which is also what lets S.A.G.E. remember a user across sessions rather than just within one conversation. The frontend is a Next.js app using the Firebase Web SDK's real-time listeners, so the Candidate Profile panel updates the instant a STAR entry is written, with no page refresh. We added Google Sign-In via Firebase Auth so that persistence is tied to a real identity rather than a single hardcoded session.
We built the system incrementally and deliberately in this order: the core assess-and-follow-up loop first (proven entirely from the terminal before any UI existed), then Firestore persistence, then the frontend, then the dynamic layer (persona switching), and only then visual design and the session summary / persona-tagging features — testing the full flow end-to-end after every addition to catch regressions early.
Challenges we ran into
Getting the Socratic follow-up to feel genuinely targeted — not a generic "tell me more" — took real prompt iteration. Early versions of the assessment step would flag an answer as vague but generate a follow-up that didn't point at the actual missing detail; we had to be explicit in the system prompt about identifying which STAR component was weak before generating the question.
Chaining multiple follow-ups reliably (rather than stopping after one) also needed care, since each turn had to preserve enough conversational context for the next follow-up to build on the previous one instead of repeating it.
On the infrastructure side, connecting an existing GCP project to Firebase wasn't automatic — a GCP project has to be explicitly registered with Firebase before you can use Firestore's real-time listeners or Firebase Auth on top of it, which cost us some early setup time. We also had to walk back an initially wide-open Firestore ruleset once the app moved from local development to a public Cloud Run URL, tightening access as real users (rather than just our own test scripts) could reach the database.
Accomplishments that we're proud of
The thing we're most proud of is that the differentiation isn't cosmetic — it's in the agent's actual behavior. S.A.G.E. genuinely refuses to move on from a vague answer, genuinely asks different kinds of questions depending on persona, and genuinely builds a usable artifact (the STAR cheat sheet) without the user doing any extra work. In testing, watching the same question produce clearly different follow-ups under different personas, and watching a STAR entry populate the profile panel in real time the instant an answer is accepted, made the "collaborative partner" concept feel real rather than theoretical.
We're also proud of how cleanly the system holds together end to end — Gemini reasoning, Cloud Run hosting, and Firestore persistence working as one coherent pipeline, deployed and reachable at a public URL, not just a local demo.
What we learned
The biggest lesson was that "adaptive" and "collaborative" are earned through what an agent remembers and acts on over time, not through how it phrases things within a single exchange. Tracking a user's tendency toward vague answers only became meaningful once we used that signal to actually change the agent's behavior in later sessions — the data alone wasn't enough.
We also learned to be disciplined about scope. It was tempting to keep adding features, but the build that ended up feeling most complete came from sequencing carefully: prove the core loop in isolation, then persistence, then UI, then dynamic layers, testing the full flow after every step rather than building everything in parallel and integrating at the end.
What's next for S.A.G.E
- Expand the persona library beyond three, and let users define a custom persona matched to a specific company or role they're targeting.
- Add voice-based delivery feedback — not just what was said, but how it was said (pacing, filler words, hesitation before key numbers).
- Build a genuinely adaptive opening: using accumulated communication-pattern data to proactively coach a returning user before they even answer the first question, rather than only reacting within a session.
- Let users track progress across many sessions over time, not just within one, with trends on how their concreteness and story strength are improving.
- Explore a lightweight Gemma-powered practice mode for quick, low-cost warm-up rounds before a full session.
Built With
- fastapi
- firebase
- firebase-auth
- gemini
- google-adk
- google-cloud-firestore
- google-cloud-run
- google-genai-sdk
- javascript
- nextjs
- python
- react
- tailwindcss
- typescript



Log in or sign up for Devpost to join the conversation.