Back
BoltPrep

Project 05

BoltPrep


Most interview prep tools give you generic questions. BoltPrep generates questions from the specific job you are applying to, transcribes your spoken answer in real time, and evaluates each response with feedback precise enough to act on.

The pipeline: paste a job URL, Firecrawl scrapes the JD, Gemini 1.5 Flash generates role-specific questions from the description, Deepgram real-time STT transcribes your spoken answer, and Gemini evaluates the response.

Each answer gets its own evaluation, not an end-of-session summary. The response uses Gemini JSON mode for a typed output: score, what you got right, what you missed, what a strong answer includes, and a follow-up question. The follow-up keeps the session going past the generated question set.

Gemini is called via direct REST, not the flutter_gemini package. Auth runs on Supabase OTP, no passwords. Razorpay handles subscriptions. Firebase and OneSignal push reminders between sessions. PostHog tracks session frequency and feature usage to guide product decisions.

The backend is deliberately minimal: Supabase for everything data-related, direct Gemini REST, Firecrawl with a two-stage fallback. Simple enough to iterate fast. Stable enough for 1,000+ users on the Play Store.

#2 Product of the Week on Peerlist, 110+ upvotes.

What I Learned

  • Direct REST beats SDK wrappers on latency-sensitive pathsThe flutter_gemini package abstracts the API but adds serialization overhead and hides the request body. For the evaluation path where every 100ms adds to perceived lag, direct REST calls are faster and give complete control over system prompts, JSON mode schemas, and token budgets. The abstraction is not free.
  • Deepgram interim_results changes the user experience more than accuracy doesBatch STT waits for silence before returning anything. Users perceive 1-2s of dead time after every answer. Deepgram's interim_results=true streams partial transcripts as the user speaks. The UI shows live transcription immediately. For an interview simulation, the real-time feedback loop is as important as the final accuracy.
  • JSON mode is not optional for production LLM outputAsking Gemini to return JSON in a freeform prompt produces markdown-wrapped objects, truncated responses, or missing keys, all requiring defensive parsing. JSON mode with an explicit schema returns a guaranteed-valid typed object every time. The schema definition is worth the upfront work.
  • Push notifications are a retention mechanism, not a polish featureSession frequency correlates directly with skill improvement. Users who got practice reminders came back significantly more often than those who did not. Firebase and OneSignal took a day to wire up and had a measurable effect on core engagement metrics. Retention features are infrastructure decisions.

Tech Stack

FlutterDeepgramGemini APIFirecrawlSupabaseRazorpay

Links