BagWork

BagWork

AI resume tailoring: paste a job link, get a keyword-matched resume PDF

February 2026 - Present
Live

Project Overview

BagWork (bagwork.ai) tailors a resume to a specific job posting, and has 750+ users. Users build a library of experiences, projects, and skills once. For each application they paste a job link, and BagWork scrapes the posting, extracts the keywords that matter, picks the most relevant library entries, rewrites bullets toward the job description, and renders a PDF with live keyword readiness feedback.

It also tracks each application through a pipeline (Applied, OA, Phone Screen, Onsite, Offer) and keeps every tailored resume attached to the job it was made for.

bagwork.ai

BagWork landing page: Paste a job link. Get a tailored resume.

The public landing page.

Tailoring Pipeline

One job link starts a streamed (server-sent events) pipeline: verify the posting, extract keywords from the job description with GPT-4o-mini, score every library entry by text-embedding-3-small cosine similarity to the job description, select the top experiences and projects, then batch-rewrite bullets toward the job with GPT-4.1-mini, which LLM evals showed matched GPT-4.1 at about 1/5 the cost.

Each step reports progress to the client. From the result, users can drop into a line-by-line editor with a per-section entry picker sorted by score.

From job link to tailored resume

BagWork resume library with sections for education, work experience, honors, projects, skills, and leadership
1/4

The library: every experience, project, and skill is entered once.

Line editor

BagWork line editor: AI bullet rewrites shown as inline diffs with Accept and Reject buttons, beside a live PDF preview and a Keywords 80% tab

Each AI rewrite shows as a diff and waits for Accept or Reject, next to the live PDF preview and keyword score. Product screenshots use BagWork's sample profile.

Keyword Readiness

Keyword readiness measures how much of the job description the resume actually covers. Matching runs against a cached set of skill embeddings, so semantically equivalent terms count, and the score updates live as bullets change.

PDF Rendering

Resumes were first generated as LaTeX and compiled by a hosted LaTeX service. In June 2026 I moved compilation to a self-hosted Typst microservice (Docker on EC2): it takes the resume as JSON, runs it through Typst templates, caches the output, and returns the PDF. New templates ship without redeploying the app.

Request flow

BagWork request flow: paste a job link, fetch the posting, a streamed five-step pipeline backed by the OpenAI API, the line editor, PDF compilation on the Typst compiler, and saving the PDF to S3, with PostgreSQL on RDS alongside

Drawn from the BagWork and bagwork-typst-compiler repos.

Application tracker

BagWork application tracker: cards per application with company, role, date, keyword match score, and status such as Applied, OA, Interviewing, or Rejected
1/2

Every application with its status and keyword match score.

Stack

Next.js 16 App Router, React 19, and TypeScript on AWS Amplify; PostgreSQL 16 on AWS RDS through Prisma; S3 for stored PDFs; Supabase Auth; Stripe billing.

The idea started as resume-agent (June 2025): put in a job description, get a tailored resume.

Skills & Technologies

Next.jsReactTypeScriptOpenAI GPT-4.1-miniOpenAI EmbeddingsPostgreSQLpgvectorPrismaAWS (RDS, S3, Amplify, EC2)TypstLaTeXStripe

Project Info

Duration:

February 2026 - Present

Status:

Live