Formerly codename FastApply; renamed after ASO research (fastapply.co is an existing competitor — see docs/ASO-REPORT.md). Internal storage keys and the IndexedDB name keep the old identifier for data compatibility.
One-click job application autofill, deterministic-first, local-only. See
PLAN.md for the full design and CLAUDE.md for agent/contributor rules.
Install: Chrome Web Store · Firefox: build from source
(npm run build:firefox, see "Load in Firefox") until the AMO listing is live.
Version 0.2 adds layout-aware resume parsing, on-device OCR for scans, resume
re-import, and an optional on-device question classifier (PLAN.md Part 9).
npm install
npm run typecheck # tsc --noEmit
npm test # unit tests (vitest + jsdom)
npm run eval # fixture eval: detection recall + mapping precision gates
npm run build # production build (Chrome) → dist/
npm run build:firefox # Firefox build → dist-firefox/
npm run e2e:firefox # live Firefox e2e (Playwright Firefox + RDP sideload)
npm run release:firefox # dist-firefox + AMO upload zip + source zip → release/
npm run buildchrome://extensions → enable Developer mode → Load unpacked → select dist/The extension never submits an application — you always click submit yourself.
npm run build:firefoxabout:debugging#/runtime/this-firefox → Load Temporary Add-on… →
select dist-firefox/manifest.json.about:addons → ApplyOnce → Permissions). Auto-detection is silent until
then.Differences from Chrome are all runtime feature-detected in
src/shared/platform.ts: no offscreen document (resume parsing runs in the
background event page), sidebar_action instead of side_panel, and
Firefox's install-time data-collection consent gates telemetry. See
docs/FIREFOX.md for the AMO submission steps.
src/content/ — scanner (shadow-DOM aware, radio grouping, widget hints) +
filler (native setters, DataTransfer file attach, widget playbook). Only
code with page-DOM access; injected on demand via activeTab.src/shared/ — pure logic: zod schemas, canonical field ontology, matching
cascade (ATS adapter rules → autocomplete tokens → label lexicon → saved
answers exact/fuzzy → abstain), confidence + hard risk gates, CV text parser.src/storage/ — Dexie vault (profile, documents, saved answers, fill log),
optional passphrase AES-GCM encryption, JSON export/import.src/background/ — stateless MV3 service worker: routing, job ids in
chrome.storage.session, offscreen lifecycle.src/offscreen/ — PDF.js / Mammoth resume parsing.src/sidepanel/ — React UI: onboarding, profile vault, review-and-fill
loop, settings, diagnostics.fixtures/ + evals/ — the eval corpus is the product spec. Launch gates:
detection recall > 0.95, mapping precision > 0.98, zero forbidden fills.e2e/ (verify-extension.mjs for
Chromium, verify-firefox.mjs for Firefox); they run against the
synthetic fixtures. Filler behavior on real ATS widgets still needs the
10-application live gate (PLAN.md Phase 4) before launch.1 commits
TypeScript
81.6%
JavaScript
11.5%
HTML
5.3%
CSS
1.6%
Formerly codename FastApply; renamed after ASO research (fastapply.co is an existing competitor — see docs/ASO-REPORT.md). Internal storage keys and the IndexedDB name keep the old identifier for data compatibility.
One-click job application autofill, deterministic-first, local-only. See
PLAN.md for the full design and CLAUDE.md for agent/contributor rules.
Install: Chrome Web Store · Firefox: build from source
(npm run build:firefox, see "Load in Firefox") until the AMO listing is live.
Version 0.2 adds layout-aware resume parsing, on-device OCR for scans, resume
re-import, and an optional on-device question classifier (PLAN.md Part 9).
npm install
npm run typecheck # tsc --noEmit
npm test # unit tests (vitest + jsdom)
npm run eval # fixture eval: detection recall + mapping precision gates
npm run build # production build (Chrome) → dist/
npm run build:firefox # Firefox build → dist-firefox/
npm run e2e:firefox # live Firefox e2e (Playwright Firefox + RDP sideload)
npm run release:firefox # dist-firefox + AMO upload zip + source zip → release/
npm run buildchrome://extensions → enable Developer mode → Load unpacked → select dist/The extension never submits an application — you always click submit yourself.
npm run build:firefoxabout:debugging#/runtime/this-firefox → Load Temporary Add-on… →
select dist-firefox/manifest.json.about:addons → ApplyOnce → Permissions). Auto-detection is silent until
then.Differences from Chrome are all runtime feature-detected in
src/shared/platform.ts: no offscreen document (resume parsing runs in the
background event page), sidebar_action instead of side_panel, and
Firefox's install-time data-collection consent gates telemetry. See
docs/FIREFOX.md for the AMO submission steps.
src/content/ — scanner (shadow-DOM aware, radio grouping, widget hints) +
filler (native setters, DataTransfer file attach, widget playbook). Only
code with page-DOM access; injected on demand via activeTab.src/shared/ — pure logic: zod schemas, canonical field ontology, matching
cascade (ATS adapter rules → autocomplete tokens → label lexicon → saved
answers exact/fuzzy → abstain), confidence + hard risk gates, CV text parser.src/storage/ — Dexie vault (profile, documents, saved answers, fill log),
optional passphrase AES-GCM encryption, JSON export/import.src/background/ — stateless MV3 service worker: routing, job ids in
chrome.storage.session, offscreen lifecycle.src/offscreen/ — PDF.js / Mammoth resume parsing.src/sidepanel/ — React UI: onboarding, profile vault, review-and-fill
loop, settings, diagnostics.fixtures/ + evals/ — the eval corpus is the product spec. Launch gates:
detection recall > 0.95, mapping precision > 0.98, zero forbidden fills.e2e/ (verify-extension.mjs for
Chromium, verify-firefox.mjs for Firefox); they run against the
synthetic fixtures. Filler behavior on real ATS widgets still needs the
10-application live gate (PLAN.md Phase 4) before launch.1 commits
TypeScript
81.6%
JavaScript
11.5%
HTML
5.3%
CSS
1.6%