Product Designer & Frontend Engineer
Solo ProjectEnd-to-end (UX, UI, Dev)
React · Next.js · Gemini 2.5 Flash · Figma

Job searching is chaotic by default. Most people manage their job search across 4–5 different tools simultaneously — a spreadsheet to track applications, a Word doc for their resume, a notes app for JD highlights, and their inbox to follow up. None of these talk to each other. Nothing is connected.
The result: candidates apply with the same generic resume to every role, lose track of where they applied, forget to follow up, and have no idea why they're not hearing back.
There are two separate problems here — and no single tool was solving both.
A generic resume fails ATS filters before a human ever reads it. Tailoring manually takes 30–60 minutes per application. Most candidates don't bother.
There's no single source of truth for a job search. Candidates forget what stage each application is at, lose the JD, and can't connect their tailored resume back to the job.
The insight: These two problems are the same problem. The resume and the job belong together — in one place, linked from the start.

Build a unified job search platform where candidates can track every application and generate a tailored resume for each role — all from one dashboard. The job and its resume are always connected.
Rather than traditional personas, I focused on three job search behaviors:
Sends 15–20 applications a week with the same resume. High volume, low conversion. Needs keyword optimization and a way to manage the chaos that volume creates.
Applies to fewer roles but invests more per application. Already tailors manually. Needs to reclaim the time that tailoring costs them without sacrificing quality.
Has been searching for 2–3 months. Losing track of what's active, what's dead, what needs follow-up. Needs clarity and a way to feel back in control.
Resumei is built around two tightly integrated systems:

This means a user applying to 10 jobs has 10 tailored resumes, each attached to the job it was written for. No file naming confusion. No "which version did I send?" No lost documents.

The landing had one job: communicate a two-part value proposition clearly without making it feel like two separate products. I structured it around the outcome — "Landing your dream job just got easier" — and let the three-step "How it works" section handle the education.
Single primary CTA above the fold. Feature trust signals (ATS-friendly, instant optimization, multi-industry) as scannable anchors, not body copy.
The board is the heart of the product. Key decisions included making drag-and-drop the primary interaction, establishing the "Card as the unit of truth" (nothing exists outside the card), and utilizing stage columns as progress signals indicating overall funnel health.
The tailoring flow lives inside the job card — not on a separate page. Navigating away from the card to tailor a resume breaks the mental context. Keeping it in-card means the user is always looking at the job while the AI rewrites their resume for it.
The dashboard provides two views natively: a Board view (Kanban) and a List view (Compact table) for easy scanning. A single click shifts the UI while persisting the same data source. This specifically caters to the "Mid-Search Burnout" persona by offering clean organization and clarity over their active pipeline.


This is the product's core insight. A tailored resume without the job it was tailored for is just a file. A job card without its tailored resume is just a note. Together they're a complete application record. Separating them would be a UX failure that defeats the entire purpose of building both systems.
Status dropdowns are invisible. A Kanban board makes the entire job search visible at once. Candidates who can see their pipeline move forward keep going. Candidates who just update a dropdown in a list feel like they're doing admin work.
Because job searching is a decision-making process, not just an application-tracking process. Salary and location are factors candidates weigh when comparing offers. Notes capture the intangible stuff. This data has nowhere to live in a spreadsheet that doesn't collapse under its own weight.
Integrated the Gemini 2.5 Flash API with strict system prompts to rewrite base resumes based on specific job descriptions. Enforced structured formats to ensure bullet points and formatting stayed intact.
Built the drag-and-drop Kanban board using dnd-kit alongside Zustand for state management, enabling instant optimistic UI updates and a seamless experience.
Leveraged Supabase (PostgreSQL) for reliable real-time database storage and authentication. This ensures that a user's customized resumes, job cards, and pipeline stages are safely preserved.
The moment you realize the resume belongs to the job — not beside it — the product design becomes obvious.
Drag-and-drop feels like a small interaction detail, but making motion and structure into UX features turns overwhelming admin into manageable progress.
Add a match score before generation. Add a follow-up reminder per card (nudging after 7 days in "Applied"). Build a diff view post-generation for side-by-side original/tailored verification.
"A job search isn't just about finding a job. It's about managing a process under uncertainty. Resumei gives that process a home."