VaxLink¶
A Chrome extension that parses GS1 vaccine barcodes and auto-fills them into
Ontario immunization EMRs (Panorama, InputHealth), plus a Next.js marketing
site (apps/web-next). Built by Wellington-Dufferin-Guelph Public Health.
Client-side by design
Scanned barcode data is parsed locally in the browser and never sent to a server VaxLink controls. The only outbound call is fetching the public NVC vaccine metadata bundle. See the Security Policy for the full data-handling model.
What it does¶
- Parses GS1 Application Identifiers (
01,10,17,21) from scanned barcode strings - Looks up vaccine metadata from the NVC FHIR bundle
- Auto-fills CHR fields — trade name, manufacturer, route, dose, strength, DIN/drug code, lot, expiry
- Flags expiry state (
Expired,Expiring soon,Valid) - Supports single, multiple, and inventory scan workflows with CSV export
Get started¶
-
Architecture
The three extension execution contexts, key storage schema, and the Panorama autofill sequence.
-
Adding a new EMR
How the platform registry works and what a new adapter profile needs before it can ship.
-
Release process
Alpha vs. prod channels, versioning, and how
package-extension.shstamps channel identity at build time. -
Roadmap
The planned platform-registry refactor and the backlog beyond it.
-
Contributing
Repository layout, local dev setup, and the rules around Panorama DOM fixtures.
Repository structure¶
apps/extension/ Chrome extension (Manifest V3), no build step
apps/extension-tests/ Extension test suite (kept out of the packaged zip)
apps/web-next/ Next.js marketing site, deployed to GitHub Pages
scripts/ Shell utilities (packaging, NVC bundle fetch)
skills/ Claude Code skill definitions for extension workflows
docs/ This documentation site