ResuLens
Scores the match before you apply, and won't pad your résumé.
An AI career copilot that tailors a résumé to a specific posting, scores ATS match before you apply, tracks every application, and turns real outcomes into insight. A second reviewer pass removes claims the base résumé does not support rather than defending them.
- Problem
- Tailor a résumé to a posting and estimate fit before the applicant commits an application.
- Constraint
- A model can inflate unsupported claims, while an opaque score can imply evidence it does not have.
- Decision
- Use a drafter-reviewer-revision pipeline that removes unsupported claims and compute the final fit verdict in code from named dimensions.
- Evidence
- The fit verdict is weighted 35/30/20/15 with a deterministic location-mismatch flag, and CI tests the pure scoring logic.
What it is
Tailor a résumé to any job, score how well it matches before you apply, track every application, and learn from real outcomes what is actually getting interviews. Built on Next.js 15 with Prisma and Postgres, NextAuth, OpenAI, Stripe, and Cloudflare R2.
The PDF pipeline
/api/tailoringNext.js route handler- BullMQUpstash Redis
- Workerdrafter → reviewer → revision
- LaTeX → PDFtypeset on the worker
- Cloudflare R2live status polling to the client
Tailoring, and the honesty rule
Deep tailoring is a drafter-to-reviewer workflow. A second AI persona critiques the draft against the posting — missed keywords, weak framing, claims the base résumé does not support — and a revision pass fixes what it found. The rule that governs the revision is the point of the feature: unsupported claims are removed, never defended.
Section rewrites run in genuinely distinct modes — more concise, more impact, improve clarity — optionally targeted at a specific job for ATS keyword grounding, with a preview before apply and one-click undo in the editor.
Scoring a posting
The ATS Match Score is a deterministic keyword scan with AI analysis layered on top, not a single model call asked for a number.
- Overall match percentage, keyword coverage, and technical and leadership sub-scores.
- A single Missing Skills view that ranks the most critical gaps first, ahead of the remaining ones.
- A dimensional fit evaluation across technical skills, experience, and career alignment, each carrying its own evidence notes.
- A code-computed verdict from strong to poor fit, weighted 35/30/20/15 with keyword coverage, plus a deterministic location-mismatch flag.
Learning from outcomes
Every application belongs to a job, and jobs move through planned, applied, interviewing, and offer or rejected. Application Intelligence computes company responsiveness, role-type performance, keyword-to-callback correlation, best days to apply, and résumé effectiveness from those real tracked outcomes rather than from generic advice.
The job board scrapes two sources: LinkedIn through an Apify actor, and Greenhouse-hosted boards through Google discovery limited to the past 24 hours plus Greenhouse's official public API for clean descriptions. Refresh is manual, on a 24-hour cooldown.
Plans, and the boring parts that matter
- Plans
- Free and Pro. Pro is $19 per month with a 7-day free trial, sold through Stripe Checkout with signature-verified webhooks.
- Account deletion
- Cancels any active subscription, deletes generated PDFs from R2, and removes all data.
- Password reset
- Email-based, with hashed single-use tokens that expire after one hour.
- Rate limiting
- Upstash-backed limits on signup, password reset, and every AI endpoint, on top of monthly free-tier quotas.
- CI
- Vitest unit tests over the pure logic — skill extraction, ATS keyword match, fit verdict weighting, plan helpers, intelligence aggregation, and password-reset token rules — run by GitHub Actions on every push and pull request.