I've been building AI-powered developer tools solo for the past few months, and I want to share some of the architecture decisions behind my latest one: ResumeIQ AI, a resume analyzer and interview prep tool.
The core problem I wanted to solve
Most AI resume tools are SaaS products tied to one AI provider, usually OpenAI. That means:
You're locked into their pricing
If you're privacy-conscious, your resume data goes through a service you don't control
You can't swap providers if a cheaper or better one comes along
I wanted something a developer could self-host and plug in their own choice of provider — OpenAI, Gemini, or a local Ollama instance.
Design decision: config-only provider switching
Instead of hardcoding model names anywhere in business logic, every model name lives in application.properties. Swapping from gpt-4 to gemini-1.5-pro to a local Ollama model is a config change, not a code change. This also made it trivial to add new providers later without touching the analysis logic.
A subtle bug this caught: forcing JSON mode where it doesn't belong
Some endpoints need structured JSON output (resume scoring breakdowns), others need free-text generation (interview prep questions, feedback). Early on I had JSON mode forced globally on the AI provider interface — which silently broke the free-text responses, since forcing JSON mode on a prompt that wants prose either truncates or garbles the output.
Fix was a jsonMode boolean on the provider interface itself, set per-call rather than globally. Small change, but it's the kind of thing that's invisible until you're staring at broken output wondering why your prompt is fine but the response isn't.
What's actually in it
Full auth system with user history and resume versioning
Side-by-side resume comparison across versions
AI-generated interview prep tied to the resume + target role
Freemium gating built in, so it's ready to sell as-is
Admin panel for managing users/tiers
Where it's at now
It's live and for sale as source code on Gumroad — self-hosted, one-time purchase, bring your own API key. https://javacoder716.gumroad.com/l/resumeiq-ai
Still very early — this is my first real push on distribution after building solo for a while. If you've built anything similar or have thoughts on the provider-switching approach, I'd love to hear it in the comments.
Top comments (0)