Project
ResuPals
An ATS-optimized resume and cover letter builder with friendly mascot characters. Guest mode stays entirely in your browser; accounts add cloud sync, AI job tailoring, and paid plans. Launched with Stripe billing in August 2026.
Overview
ResuPals is a resume and cover letter builder with a personality. Three mascots guide the work: Resu for resumes, Cova for cover letters, and Polly for polish and export.
It started in January 2026 as a purely client-side tool. No accounts, no server, everything in localStorage. That version still exists and is still the front door: you can land on the site and build a resume without creating anything. In August 2026 it became a real product on top of that, with accounts, cloud sync, AI job tailoring, and paid plans.
Two modes
Guest mode is the original app, unchanged in spirit. Your work is saved to browser storage, nothing is sent anywhere, and you never make an account. If that is all you want, that is all you get charged with.
Accounts add what browser storage cannot: your documents on every device, a master career profile you fill in once and reuse, more than three templates, more than a couple of document slots, a public resume link, and AI tailoring.
I want to be precise about this, because the earlier version of this page was not. Guest data is local. Account data lives in a database I run. It is not mined and it is not sold, but "nothing ever leaves your browser" stopped being true the day accounts shipped, and saying otherwise would be a lie.
AI job tailoring
Paste a job description, get a resume and cover letter tailored to it. This runs on a credit system rather than a flat rate, because inference is the one part of the product with a real marginal cost, and pretending otherwise leads to either a bad product or a bad business.
The tailoring endpoints are hardened against prompt abuse, and the models are pinned to an allowlist that matches what the API actually supports. A retried run does not double charge, which took a fix after it happened to somebody.
Plans and billing
Four paid tiers plus a free one, with monthly credit allocations and a top-up pack. Stripe handles checkout and subscriptions. The launch taught me most of what I know about billing edge cases:
- A plan must be granted after the money confirms, not when checkout starts. Otherwise a failed payment leaves a free user on a paid plan.
- Checkout events race. A customer can pay and land back on the site before the webhook arrives, so the UI has to reconcile the two instead of trusting whichever arrives first.
- Consumer subscription law is specific about what you owe people. There is a published refund policy, explicit withdrawal consent, and a renewal warning before annual plans charge again.
Free tools
Several standalone tools sit outside the builder as their own pages, each solving one small problem and each a real entry point, not a marketing shell. The templates also get a page each, so somebody searching for a particular resume style can land directly on it.
How it is built
Next.js with the App Router and TypeScript in strict mode, Tailwind, TipTap for rich text, dnd-kit for reordering, Drizzle for the database layer, BetterAuth for accounts and sessions, Stripe for payments, and jsPDF and docx.js for export. It runs on Cloudflare Workers with D1, with PostHog and Sentry wired in as optional observability.
The Workers migration produced my favorite operational lesson of the year: applying a migration outside the tracked path records nothing, so the next tracked apply dies on "already exists" and blocks every deploy. The fix was not to be more careful. It was to delete the commands that made the careless path possible.
ATS compliance
All templates follow the rules that actually matter for machine parsing:
- Single column layouts, no tables and no multi-column CSS
- Standard section headers that parsers recognize
- Fonts that survive extraction (Arial, Calibri, Times New Roman, Helvetica, Georgia, Garamond)
- No text boxes, graphics, or images inside content
- Contact details in the body rather than a header or footer
- Consistent date formatting and sane margins
The mascots
Resu, Cova, and Polly are not decoration. Writing a resume is a stressful, slightly humiliating task, and having something on screen that is visibly on your side changes how it feels. Each one has mood states that respond to progress, which is a small thing that does a lot of work.
What is next
More templates, deeper tailoring, and continued work on the parts of the funnel that convert a curious guest into somebody who actually finishes a resume.