Skip to content

v1.0

Choose a tag to compare

@MichelleFindlay MichelleFindlay released this 30 Aug 19:20
· 4 commits to main since this release
9608a4c

ICE v1.0

A single-page, self-hosted "In Case of Emergency" medical info page — meant to be linked from a QR code on a wristband, phone case, or wallet card. First responders get critical medical info instantly, with no login; your address, phone numbers, and NHS/policy number stay hidden until unlocked.

Highlights
Open by default, locked where it matters — conditions, allergies, medications, blood type, implants, MRI flags, and resuscitation status render with no gate at all. Home address, phone numbers, and NHS/policy number are masked until the correct unlock word is submitted.

Server-side unlock gate — the check happens entirely in PHP (index.php) using hash_equals(); sensitive data is never loaded into memory, let alone sent to the browser, until the word is verified. Viewing source or the network tab while locked reveals nothing extra.

Post/Redirect/Get unlock flow — submitting the word redirects immediately, so a page refresh never resubmits it.
Client-side QR code generator — a footer button renders a QR code for the page's own URL entirely in-browser via a vendored copy of qrcode-generator (qrcode.lib.js); no third party ever sees the URL.

Printable wallet card — generates a true credit-card-sized (85.6 × 53.98mm) card with the page URL, QR code, and an optional, opt-in field to write in the unlock word before printing.

Content/config separated from the template — all personal data lives in three gitignored files (profile-data.php, sensitive-data.php, config.php) loaded by index.php, so index.php never needs editing and future template updates won't clobber your data. Each ships with a committed *.example.php counterpart.

No-cache, no-index by design — Cache-Control/Pragma/Expires headers stop the rendered (possibly unlocked) HTML from being cached anywhere, and X-Robots-Tag plus plus robots.txt keep the page out of search engines.

Light/dark theme with a pre-paint inline script (no flash of the wrong theme) and a mobile-first, safe-area-aware layout.
Zero dependencies — no database, no build step, no PHP extensions beyond built-in session support. One index.php plus a vendored JS file.

Requirements
PHP 7.4+ on any PHP-enabled web server, deployed over HTTPS.

Security notes
The unlock word has no rate limiting — it's a privacy screen against a casual glance, not a security boundary. Don't reuse a password you care about.
Printing the unlock word onto the wallet card is optional and off by default, since anyone holding that card (or a saved PDF of it) could then unlock full details.
Credits
QR generation uses qrcode-generator by Kazuhiko Arase (MIT), vendored client-side.

License
GPL-3.0