DEV Community

Cover image for How I Built an AI Resume Checker with React Native + Gemini + Supabase (in Under a Month, at $0/mo)
Abdul Moiz
Abdul Moiz

Posted on

How I Built an AI Resume Checker with React Native + Gemini + Supabase (in Under a Month, at $0/mo)

 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:

  1. analyze-resume — takes a base64 PDF, sends to Gemini, returns structured JSON (overall score, per-section scores, ranked improvements)
  2. ats-match — takes a resume + a job description, returns match % + keyword breakdown
  3. 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:

  1. Cost — Edge Functions on Supabase are free up to 500K invocations/month
  2. Auth is baked in — I get JWT verification for free
  3. 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

  1. 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.

  2. 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.

  3. State management should be boring. Zustand + TanStack Query covers 95% of what most apps need. Skip Redux, skip context gymnastics.

  4. 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.

  5. 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)