ApplyOS: A Local-First Command Center for the Job Hunt
A Local-First Command Center for the Job Hunt
Store every field, bullet and answer once, tailor in seconds, autofill any application with one click, and track every pipeline. Everything lives in your browser's IndexedDB, with no accounts, servers or telemetry, and a Chrome extension fills Greenhouse, Lever, Workday, Ashby and more.

- Year
- May 2026
- Timeline
- 10 weeks
- Type
- Developer Tools
- Status
- Live
Overview
Applying to jobs means re-typing the same 40 fields and re-answering the same 5 questions hundreds of times, then losing track of where you applied. ApplyOS removes that loop with four local-first parts: a Vault that stores every field and snippet once (with {{company}}/{{role}} variables that resolve when you copy), a Tailor that scores a job description offline and drafts tailored bullets, a Tracker for the full pipeline, and a one-click autofill extension. Job-hunt data is sensitive, so there is no backend state at all, only local IndexedDB with JSON export.
The hard parts
- 01
Setting input.value directly is ignored by React-controlled forms, so autofill does nothing and reports no error.
- 02
Per-site scrapers break the moment an ATS changes its CSS.
- 03
Auto-capturing the company and role of a job even while the app is closed.
- 04
Storing passwords properly, or not claiming to store them at all.
The approach
Autofill is heuristic rather than per-site: every input is scored by its surrounding signals (label, placeholder, name, aria-*, autocomplete) against an ordered pattern table, so it works on ATSs it has never seen. For React-controlled forms it writes through the native prototype value setter and dispatches input/change/blur events, so frameworks register the change like a keystroke. Auto-capture parses JSON-LD JobPosting first (then URL slugs, then the <h1>) and queues captures in a chrome.storage outbox that drains into IndexedDB the next time the app opens. Passwords are encrypted with AES-256-GCM under a PBKDF2 key that is non-extractable, held in memory only, wiped after 5 idle minutes, and never synced to the extension.
Outcome
Fill your vault once (about 15 minutes), paste a job description for an offline match score, then fill an application in one click and have it logged to your tracker, with an amber "already applied 4 days ago" warning if you've been here before. The dashboard shows which profile and which portal convert best.
What I'd do differently
Long-form answers stay manual on purpose: you copy from the vault with variables resolved, and nothing is auto-submitted. Next: resume-PDF parsing to populate the vault, fuzzy dropdown filling for degree and country pickers, and a Firefox port (MV3 is nearly compatible).
Stack
Like what you see?
Let's build the next one.
Hiring, or have a problem that needs this kind of engineering? I read every message myself.

