Case study · SaaS · 2024

JobbyAIresume scoring · job match · interview prep

An AI SaaS that helps job seekers make outsized progress in their careers — resume scoring, job-match ranking, and interview prep, all built on top of Gemini with a surprisingly small code surface.

3
Core flows
score · match · prep
< 2s
Time-to-first-suggestion
after paste
MIT
Open source
on GitHub
10×
User-reported lift
self-reported
JobbyAI architecture — three parallel lanes (resume score, job match, interview prep), each a pure function from pasted input through a prompt to Gemini, Zod-validated JSON, and a rendered card.
Three parallel lanes: score · match · prep — each a pure function
How it works · step by step

The diagram, walked through in plain language

  1. 1
    Three tools, no accounts needed

    A Next.js website offers three buttons: 'score my resume', 'match me to this job', 'prep me for this interview'. Pick one, paste text in.

  2. 2
    Each button calls Gemini once

    The pasted text is wrapped in a carefully-tuned prompt and sent to Google's Gemini model as a single call. No chatbot loop, no back-and-forth — anxious users do not want to converse with a bot.

  3. 3
    The reply comes back as structured data

    Gemini is asked to reply in a specific JSON shape (e.g. score, reasons behind the score, concrete fixes), which the app validates before showing it.

  4. 4
    The UI renders a card, not a wall of text

    The structured reply becomes a clean card with the score, the reasons, and concrete suggestions — fast enough that the first useful suggestion appears in under two seconds.

  5. 5
    Nothing is stored unless you sign in

    Each request is independent; the app does not keep your resume or job description on its servers if you don't ask it to.

  6. 6
    The whole thing runs on a free tier

    The site is hosted on Vercel; the codebase is open source under MIT on GitHub for anyone to fork or audit.

The brief

The original question was “what would a minimum useful career-coach look like if it had access to a capable LLM and nothing else?” The answer we arrived at was three tightly-scoped tools that a job seeker would reach for in the same session: score my resume, rank me against these postings, prepare me for this interview.

Deliberately not a chatbot. Chatbots are easy to build, easy to show off, and a poor fit for someone who is already anxious about the conversation they're preparing for.

The constraints

  • Time-to-first-suggestion under 2 seconds. Anxious users do not wait.
  • The product has to feel trustworthy: every score needs a reason, not a vibes-based number.
  • Keep the dependency surface small — this is a side project that has to be maintainable in an afternoon a month.
  • Free to try, transparent about costs, no dark patterns on upgrade prompts.

The shape we built

A Next.js app on Vercel, a single well-prompted Gemini call per flow with structured output validated against a schema, and a Tailwind-driven UI that is deliberately quiet — white space, legible type, one accent color per section.

Each flow is a pure function of pasted text in, structured JSON out, React component render. No session state, no “chat history,” no stored user data unless the user signs in. The code surface is small enough that you can read the whole thing in a sitting.

What was hard

  • Prompt stability. Gemini's structured output mode was still young when we built; one in a hundred responses would return near-valid JSON that had to be coaxed, not rejected.
  • Job-match ranking is almost entirely a prompt engineering problem, not a classical ML problem. Getting the model to produce a defensible rationale without hallucinating matching requirements took more iteration than everything else combined.

What it does today

Running on Vercel, open source under MIT. Users report the resume scoring and interview-prep flows are the ones they come back to — the interview prep was almost cut in week two and turned into the most-used feature by week six.

What I'd do differently

I'd ship a structured feedback loop from day one — a thumbs up/down with an optional “why?” — and feed it into prompt iteration. The version we have works because we read every piece of user feedback by hand; that doesn't scale past a weekend project.

Stack
  • Next.js · TypeScript
  • Tailwind CSS
  • Gemini API
  • Vercel (hosting · edge)
  • Playwright (e2e tests)
More work

Continue the tour

Algo Trading · 2025

Order Router & Execution Engine

$80M routed · 38ms p99 · zero downtime

A trading desk's chart fires a buy or sell signal; this system safely turns each signal into a real order at the right brokerage in milliseconds — while quietly making sure they never trade more than they meant to or place an order they can't afford.

Read case study
AI / LLM · 2024

AI Content Platform

10K daily users · 12 models · 35% lower cost

A SaaS that generates marketing-style writing (articles, ads, product copy) for thousands of paying users — intelligently picking the cheapest AI model that can do each job well, and switching providers in seconds when one of them goes down.

Read case study
Fintech · 2024

Fintech Reporting Dashboard

200M rows · 60% faster · sub-second queries

A financial dashboard that used to take seven seconds to show 'this month's profit and loss' now takes half a second — because we moved the heavy reports off the live database without changing a single number the customer's accountant sees.

Read case study
Algo Trading · 2023

Quant Backtest Harness

50K parameter combos · 3 engines · one CLI

A single command-line tool that lets a quant team test trading strategies on three different simulation engines without rewriting any strategy code — and then compares the results in one shared format, so 'which strategy is actually better' becomes a question with a real answer.

Read case study
Fintech · 2023

Accounting API Sync

4 providers · one trait · zero drift

A behind-the-scenes service that keeps an accounting SaaS in sync with QuickBooks, Xero, Wave, and AccountEdge — when a customer edits an invoice in either place, the change shows up on the other side within 30 seconds, without ever silently overwriting work.

Read case study
AI / LLM · 2025

Multi-LLM Agent Runtime

OpenAI · Claude · Gemini · Grok

A small, stateless service that lets non-engineers wire up AI 'agents' (which can call tools, look things up, and reply) — running across four AI providers so a single outage never takes a customer offline, and replay-able to the byte for debugging.

Read case study
Algo Trading · 2024

TradingView ↔ Plaid Bridge

webhook in · broker-native out · 4 signal types

A bridge that takes 'buy' or 'sell' alerts from TradingView charts, checks the user actually has the cash via their bank link (Plaid), then sends the order to their brokerage — all in under a fifth of a second, so the price they wanted is still the price they get.

Read case study
DevTools · 2023

Figma + Chrome Plugin Suite

design · engineering · less friction

Three small browser plugins that quietly fix the slow, fiddly hand-off between designers (working in Figma) and engineers (writing code) — saving each engineer about four hours a week of busywork that nobody was tracking, but everyone resented.

Read case study

Have a similar problem?

If this shape of engagement fits what you're working on, I'd be happy to scope it.