Local-first resume and job-application workspace.
Current production status: PRODUCTION_STATUS.md.
Real-user validation protocol: VALIDATION.md.
Validation campaign pack: receipts/CAMPAIGN.md.
cd app
pnpm install
pnpm devProduction checks:
pnpm typecheck
pnpm test:smoke
pnpm buildDeploy to Cloudflare Pages:
pnpm deploy:pagesScore a JSON Resume:
cd app
node cli/resume.mjs score --input resume.jsonExport normalized JSON and PDF:
node cli/resume.mjs export --input resume.json --out exports --json --pdfAudit exported validation receipts:
node app/cli/resume.mjs validate --input receipts --require-completions 5 --require-interviews 10 --window-days 7Write the private owner acceptance manifest after reviewing receipt ids:
node app/cli/resume.mjs accept --input receipts --out receipts/ACCEPTED_RECEIPTS.json --owner "OWNER NAME" --receipt-ids rbv-1234abcd,rbv-5678efabAudit the release decision gate:
node app/cli/resume.mjs release --input receipts --accepted receipts/ACCEPTED_RECEIPTS.json --waiver receipts/VALIDATION_WAIVER.mdcd app
docker build -t resumebuilderapp .
docker run --rm -p 3210:80 resumebuilderappOpen http://localhost:3210.
Templates can be defined with defineTemplate from app/src/lib/plugins.ts.
import { defineTemplate } from "./src/lib/plugins";
export const plain = defineTemplate({
id: "plain",
name: "Plain",
description: "Plain text resume renderer.",
render: (resume) => `${resume.basics.name}\n${resume.summary}`,
});GitHub Actions workflow: .github/workflows/ci.yml.
Current required checks are typecheck, Playwright smoke tests, production build, and Docker image build.
The app has a local Validate page that exports rbv-*.json receipts after a tester completes the core resume/JD/diff/export loop. Receipts are tester-controlled, include a run id plus integrity digest, and do not include the full resume body or pasted job description body.
Owners can import returned receipts into the Validate page to audit them locally and export ACCEPTED_RECEIPTS.json after explicit review. The CLI path remains available: put receipts in receipts, run node app/cli/resume.mjs validate --input receipts --json, then run node app/cli/resume.mjs accept --input receipts --out receipts/ACCEPTED_RECEIPTS.json --owner "OWNER NAME" --receipt-ids rbv-1234abcd after the owner explicitly accepts receipt ids.
Run node app/cli/resume.mjs release --input receipts --accepted receipts/ACCEPTED_RECEIPTS.json --waiver receipts/VALIDATION_WAIVER.md --json to prove whether the external validation gate is satisfied by accepted receipts or an explicit owner waiver. Failed release audits include machine-readable blockers and nextActions.
MIT.