NurseApply is a Chrome extension that fills hospital application portals from a profile it builds out of your resume, on your machine, with no account and no API key: licenses, certifications, trauma level, bed count, typical ratio, EMR systems, immunization dates. It fills. You review and submit.
Manifest V3, unpacked install, no backend, no accounts, no telemetry.
Everything stays in chrome.storage.local on your machine.
The part that matters more than the autofill.
Every application asks a handful of questions that a credentialing office later verifies against the state board, your prior employer's HR file and federal exclusion lists. A wrong answer on one of those is not a typo, it is a false statement on an employment application. NurseApply never answers them, no matter how confident the mapper is. They go to a drawer with the reason attached, and they wait for you.
It also never clicks Submit, never solves a CAPTCHA, never advances a wizard on its own, and never overwrites a field you have already typed into.
Three routes, because one is not enough.
Reading a free-form document with rules is wrong often enough, and plausibly enough, that it cannot be the only path. A blank field is harmless. An employer that reads perfectly well and is actually a line from your duties is not. So there are three independent ways in, and none of them writes anything to your profile without showing you first.
Nothing is invented on any of these routes. A license number, an expiration date, an NPI or a graduation date that is not written in your resume stays empty, and an NPI that fails its check digit is rejected with the reason shown.
The step that makes the rest safe.
Every import opens a review panel rather than filling your profile. It shows what it read, and makes the two corrections that actually happen take one click each.
Three tiers, most specific first.
Keyed on stable attributes such as Workday's data-automation-id. Adapters also
handle the things that break naive autofillers: Workday splits every date into three separate
spinbuttons, and almost every dropdown is a button plus a popup listbox rather than a
<select>.
Around ninety weighted rules over the resolved label, assembled from the label element,
aria-label, aria-labelledby, placeholder, name, id and, for radios,
the enclosing fieldset legend. Without that last one, "Have you ever been convicted of a felony?"
reads to a scraper as a field labelled "Yes".
When you switch it on with your own Anthropic key, it sends the structure of the form only: control type, visible label, dropdown options. The model returns a key name, never a value, and the extension resolves that key locally. Answers are cached per form layout, so a hospital template costs one call, once.
Explicit host permissions. No <all_urls>, so it cannot read anything else.
iCIMS and Taleo usually host the application inside an iframe on the employer's own domain, so content scripts run in every frame. The floating status pill moves itself out of the way when a Next or Submit button is underneath it.
Two minutes, unpacked.
manifest.json.chrome://extensions and turn on Developer mode, top right.Includes a headless harness that fills a synthetic React-style form and asserts the result field by field.
git clone https://github.com/upham51/nurse-apply.git
cd nurse-apply && npm install
npm run check # syntax, manifest integrity, safety invariants
npm test # resume parser, fill harness, options page, real PDF
npm run package # dist/nurseapply-1.6.3.zip
The test suite includes a negative control: a naive element.value = assignment on an
identically guarded input, which the simulated React component must discard. If that control ever passes,
the harness is not reproducing the failure mode and the positive results mean nothing. The PDF test
runs behind a request interceptor that fails if anything leaves the local origin, which is what makes
"no network" a checked claim rather than an assertion.