Skip to content
All work

ResuLens

Scores the match before you apply, and won't pad your résumé.

Career tooling · SaaSClosed source

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.
Next.js 15React 19PrismaPostgreSQLNextAuth v5OpenAIStripeCloudflare R2BullMQ

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

  1. /api/tailoring
    Next.js route handler
  2. BullMQ
    Upstash Redis
  3. Worker
    drafter → reviewer → revision
  4. LaTeX → PDF
    typeset on the worker
  5. Cloudflare R2
    live status polling to the client
Résumé generation is queued rather than inline. The route handler enqueues, a worker compiles LaTeX, and the finished PDF lands in object storage while the client polls for status.

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.