There's a specific moment every developer hits when building an AI-powered app for the first time.

Not the fun part. Not the part where the model does something impressive and you feel like a genius. The other moment. The one at 1am where you're staring at your client code and you realize your Gemini API key is sitting right there, in plain text, about to be bundled into a JavaScript file that anyone with a browser and ten minutes can open and read.

That moment happened to me while building Sambhav — an AI career platform that did real-time voice transcription via Whisper, resume analysis, and personalized guidance through Gemini. The app had a Next.js 15 frontend talking to a Flask backend, Supabase underneath, and a lot of moving parts that all needed to touch an LLM at some point.

The feature I was most proud of: a real-time mock interview mode where users could speak naturally, get their responses transcribed, and have Gemini evaluate them on the fly. It felt polished. It worked well.

The architecture underneath it was a liability waiting to happen.