Career Copilot AI takes a resume and a job posting and returns an applicant tracking system (ATS) compatibility score, a summary, the skills and keywords the resume is missing, a fully rewritten resume, and a personalized cover letter — all saved to a history page. It was built by Digibase Media, a channel that tests AI build workflows end to end, and the video opens with them saying they can't code like a pro.
What makes it worth opening up is how little was iterated on. They wrote one long prompt — assembled with help from ChatGPT, Momen's plugin tutorial, and a transcript of a reference video — then let Claude Code run for 30 to 40 minutes against an empty Momen project, roughly 43,000 tokens, reviewing each permission request as it came. There was never a second prompt. That's a story about prompt quality more than model quality, which is the argument in why AI-generated apps break at 80%: the architecture has to be decided before the agent starts, not discovered afterwards.
The backend is public: open it in the Momen editor / Clone project, or try the deployed app at career-copilot-ai-sooty.vercel.app.
Takes a resume file, a company, a job title, a pasted job description, and a desired tone — Professional, Friendly, or Confident
Returns an ATS compatibility score from 0 to 100 for that specific posting
Lists the skills the posting requires that the resume doesn't mention, plus the keywords to add
Rewrites the whole resume in plain text, in the requested tone, without inventing anything
Drafts a cover letter addressed to the hiring team at that company for that role
Saves every run, so the history page can reopen any past optimization
Momen ships the account table. Claude Code added exactly one more, resume_optimization, and it carries a whole run in a single row.
The input half, written by the frontend:
company, job_title, job_description, desired_tone
resume_file — the uploaded original
resume_text — the resume as plain text
user_id
The output half, written by the backend:
ats_score — an integer
resume_summary, optimized_resume, cover_letter
missing_skills and suggested_keywords, both comma-separated lists
status — processing, then completed
The split between resume_file and resume_text is worth a note: the file is retained as the user's original, but nothing server-side opens it. The agent is fed resume_text, which the frontend supplies at insert time, so document parsing happens before the row exists. Moving that extraction server-side is a different build — the approach is in building an AI resume parser.
One table really is all this app needs, which is the less common half of data modeling discipline: knowing when not to add structure.
The frontend never calls the optimization. It inserts a row, and a database trigger named On resume optimization request created fires on every INSERT into resume_optimization, passing the new row's id into the Actionflow.
That one decision is why the interface can show "analyzing the resume" and survive a closed tab. The work is already running server-side; the client is just watching status. Momen's trigger list covers the other events a flow can hang off.
Six nodes, no code steps and no branches, and it only ever touches the row it was handed:
Input — receives resume_optimization_id, and nothing else
Query optimization request — loads that row by ID
Mark request as processing — sets status before the slow part starts, so the frontend has something to poll
Run resume optimization agent — hands the agent five fields off the row: resume_text, job_description, company, job_title, desired_tone
Save optimization results — writes the agent's six output fields back to the same row and flips status to completed
Output — returns the results
All six live in Momen's Actionflow editor as a visual graph rather than a file. There are no third-party APIs, no scheduled jobs and no payment provider anywhere in this project.
One agent, Resume Optimization Agent, on azure/gpt-5.4 at temperature 0.4, with maxRound set to 1 — a single turn, no tool loop. No tools, no database access, no knowledge base.
Its output is a typed object with six required fields, each carrying its own description in the schema: the score bounded to 0–100, the summary specified as 3 to 5 sentences, the rewritten resume, the cover letter, and the two comma-separated lists. Because Momen's AI integration enforces that shape, the flow's save step maps field to column with no parsing in between.
The system prompt is where the real product decision sits. The agent is told never to fabricate work experience, job titles, employers, dates, certifications, or skills the candidate doesn't already have — only to rephrase, reorganize, quantify, and emphasize what's already in the resume, and to weave in missing keywords only where they legitimately apply. It's also told to write ATS-friendly plain text with no markdown tables or images, and to match the requested tone precisely.
That's what separates a resume tool from a liability: the model may change how the truth is presented, not what the truth is.
Momen's built-in authentication handles signup and login. Email, username, and phone number sign-in are enabled; no single sign-on is configured.
The permissions on resume_optimization are the tightest part of this project. The Logged-in User role gets exactly two operations:
Select, filtered to the logged-in user's own rows
Insert, checked against the logged-in user, and limited to the seven input columns — company, job_title, job_description, desired_tone, resume_file, resume_text, user_id
No update, no delete, and the six result columns and status aren't insertable either. A user can start a run and read his own results, but cannot touch the ATS score, the generated resume, or the run's state — those are writable only by the Actionflow. The Anonymous User role gets no access to the table at all, and neither role is granted direct access to the Actionflow or the agent, so inserting a row is the only way in. Momen's permissions documentation covers how the role, table, and column layers compose.
The interface is React and Vite, on Vercel, and that was specified rather than assumed. Digibase Media told Claude Code in the prompt to build the frontend separately against Momen as a backend, because the plugin's generated-frontend path doesn't target Momen's native visual editor — without that instruction, the agent may try to build the interface inside Momen instead. The project's Momen web client bears it out: a single empty page.
That also means no Momen one-click deploy, which is for frontends built in the Momen editor. The separation is what Digibase Media calls out as the real payoff — the backend stayed visual and inspectable instead of disappearing into generated code, and the two halves can change independently.
Building this project on Momen comes to about $61.92/month on the Basic plan. The resource counts don't force the tier — one Actionflow, one AI agent, no external APIs, no custom permission roles — so what puts it above Free is running as a public product: ongoing public publishing, external branding, and SEO on public pages.
Sized for a pool of roughly 800 registered users accumulating over 225 equivalent operating days, that $61.92 is $39 of plan plus two add-ons: $20 for AI points and $2.92 for object storage. AI points dominate the variable side, because of the shape of the call — a full resume plus a full job description in, a rewritten resume plus a cover letter out — which works out to 7.2 million points a month against Basic's 1 million, filled by two 6-million-point add-ons. Object storage is the retained resume files, 4 GB against Basic's 2. Database storage, egress and peak load all sit comfortably inside the plan. You can estimate the cost of your own project using Momen's pricing calculator.
Digibase Media walks through the whole build — the plugin setup, how the prompt was assembled, watching Claude Code create the table and the flow live in the editor, and the finished app — in the video. The backend is open in the Momen editor and the app is at career-copilot-ai-sooty.vercel.app. For a different take on the same problem, Rajeevdaz's resume-to-job match scorer scores and diagnoses rather than rewriting.
To build along these lines: install the Momen plugin, say explicitly in the prompt that the frontend is React and Vite against Momen as a backend, let a database trigger start the slow work instead of having the client call it, give the agent structured output, and grant the client insert and select only — so the numbers it displays are numbers it cannot write.