Job LedgerSources

The extension fills. You submit.

Below is the real interaction, running live: an application form on the left, the extension on the right. Step through the popup, the review overlay and the post-submit capture.

A real application form

No fields filled yet · the extension inserts values and stops. Submitting is your click.
boards.greenhouse.io/datadog · apply
This submit button is the employer’s. Job Ledger has no code path that presses it.
Job Ledger
0.1.0
This page
Staff Software Engineer, Product Security
Datadog · matched in your ledger
9/9Exact
Never submits a form. Never fills salary or demographic questions.
It never submits
The extension fills fields and stops. There is no code path in it that calls submit or clicks a submit button — the human presses submit. This is a product constraint, not a phase-one limitation.
You see every value first
The overlay lists each proposed value with the confidence it was matched at. Edit any of them, switch any of them off, then press fill.
Some fields are never touched
SSN, date of birth, gender, race, disability, veteran status and salary expectation are on a denylist. The API does not send them and the content script refuses them — two independent guards.
Minimal permissions
host_permissions covers the known ATS domains only. Anything else is requested at the moment you first use it on that domain. A resume-reading extension asking for all_urls deserves to fail review.
Installing the unpacked build
The MV3 source lives in extension/. Load it at chrome://extensions with developer mode on and “Load unpacked”. It talks to this app’s /api/v1 surface using your signed-in session; point API_BASE in extension/background/service-worker.js at your deployment before loading it.