Photo by Christopher Campbell on Unsplash
Three weeks ago I shipped an AI resume checker app to Google Play. Solo dev, weekend evenings, zero infrastructure cost. Here's the full technical breakdown of what I built, why I made the calls I did, and what I learned.
The problem I was solving
Roughly 75% of resumes get filtered out by ATS software before a human ever sees them. Every paid tool that helps with this (Jobscan, Resume Worded, Enhancv) costs $30-50/month — absurd when your target user is currently unemployed.
I wanted to build a mobile-first, free alternative. Ad-supported. No paywall. Ship it in weeks, not months.
The stack
- React Native 0.76.9 (bare CLI, not Expo — I wanted native module control)
- Supabase — Postgres + Auth + Edge Functions
- Gemini API — for AI analysis
- AdMob — rewarded ads for monetization
- Zustand — client state
- TanStack Query — server state (though most of the app uses Zustand directly)
Total monthly cost: ~$0. Supabase free tier covers it. Gemini free tier covered launch. AdMob pays out instead of costing.
The architecture
Three Edge Functions on Supabase do all the AI work:
-
analyze-resume— takes a base64 PDF, sends to Gemini, returns structured JSON (overall score, per-section scores, ranked improvements) -
ats-match— takes a resume + a job description, returns match % + keyword breakdown -
unlock-with-ad— verifies AdMob rewarded-ad completion, increments user's quota
Client-side flow:
- User uploads PDF/Word/photo via
react-native-document-picker - Reads as base64 via
react-native-blob-util - Sends to Edge Function
- Gets back structured analysis
- Renders in a native results screen with animated score ring (SVG + Reanimated)
Everything's typed with TypeScript strict. Zod validates responses.
Why Supabase Edge Functions instead of a backend
I considered spinning up a small Node backend on Fly.io. Killed the idea for three reasons:
- Cost — Edge Functions on Supabase are free up to 500K invocations/month
- Auth is baked in — I get JWT verification for free
- No infrastructure to babysit — one less thing to fail at 2 AM
Each Edge Function is ~150 lines. If I outgrow Supabase, I can port these to any serverless runtime in an afternoon.
Why Gemini over OpenAI
Practical reasons:
- Free tier is more generous (2M tokens/day at launch vs. OpenAI's paid-only structure)
- Gemini Pro handles PDFs natively — I can send raw resume bytes
- Response quality on structured JSON output is comparable to GPT-4 for this specific task
- I can switch models later by changing ~20 lines of code
Monetization: rewarded ads (for now)
Users get 5 free analyses. Then a rewarded AdMob unlock grants +2 more.
The reasoning: job seekers CAN'T afford $30/month. But they can watch a 30-second ad. It filters for high-intent users and pays a predictable eCPM.
Long-term I'll add a subscription tier for power users. At launch, ad-only is right for this audience.
Play Store launch reality check
10+ installs in the first few days. Not viral. This is what most solo launches look like.
Everything I've been doing since — ASO optimization, Reddit posts, LinkedIn, TikTok — is downstream of understanding this: the app being good is table stakes. Distribution is the actual work.
Lessons for other solo devs
Free tiers are your co-founder. Supabase + Gemini + AdMob + Play Store = a $0/mo stack that scales to tens of thousands of users before you need to pay anyone anything.
Ship in 3 weeks or don't ship. The temptation to polish forever kills solo projects. My first version had visible bugs. I shipped anyway. Now I fix them based on which ones users actually hit — much more efficient signal than trying to predict problems.
State management should be boring. Zustand + TanStack Query covers 95% of what most apps need. Skip Redux, skip context gymnastics.
Play Store honeymoon is real. Google's algorithm gives new apps a 30-day boost. Every hour of launch-window ASO work is worth 10 hours of month-3 ASO work.
Don't invent a backend if a BaaS covers you. I saved an entire month by not writing auth code.
What's next
Cover letter generation. LinkedIn profile analysis. Localizations (Hindi, Portuguese-BR, Spanish LatAm shipping this week). A premium tier that removes ads and adds PDF report export.
If you want to see the app or check your own resume, it's on Google Play — search "Crux" or use this link: https://play.google.com/store/apps/details?id=com.crux.ai.resume
If you want to build something similar and have questions about the stack, drop them in the comments. Happy to help.
Follow if you want more posts like this — I'm going to keep sharing what I learn as this grows.
Top comments (0)