{"id":50383398,"url":"https://github.com/clay-good/sophiewell.com","last_synced_at":"2026-05-30T13:30:20.326Z","repository":{"id":355683907,"uuid":"1229134151","full_name":"clay-good/sophiewell.com","owner":"clay-good","description":"A privacy-first, zero-dependency suite of offline-capable healthcare utilities for medical billing, clinical scoring, and field medicine, delivering fast, deterministic answers with no servers, no AI, and no data tracking.","archived":false,"fork":false,"pushed_at":"2026-05-29T19:51:51.000Z","size":7363,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T21:07:39.809Z","etag":null,"topics":["clinical-decision-support","clinical-math","deterministic","ems-tools","field-medicine","hcpcs","healthcare","icd-10","medical-billing","medical-calculators","medical-coding","medication-safety","nursing-reference","offline-first","open-source-healthcare","patient-tools","privacy-focused","pwa","static-site","zero-dependencies"],"latest_commit_sha":null,"homepage":"https://sophiewell.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/clay-good.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-04T18:27:44.000Z","updated_at":"2026-05-29T19:51:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/clay-good/sophiewell.com","commit_stats":null,"previous_names":["clay-good/sophiewell.com"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/clay-good/sophiewell.com","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clay-good%2Fsophiewell.com","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clay-good%2Fsophiewell.com/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clay-good%2Fsophiewell.com/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clay-good%2Fsophiewell.com/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/clay-good","download_url":"https://codeload.github.com/clay-good/sophiewell.com/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clay-good%2Fsophiewell.com/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33694714,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clinical-decision-support","clinical-math","deterministic","ems-tools","field-medicine","hcpcs","healthcare","icd-10","medical-billing","medical-calculators","medical-coding","medication-safety","nursing-reference","offline-first","open-source-healthcare","patient-tools","privacy-focused","pwa","static-site","zero-dependencies"],"created_at":"2026-05-30T13:30:16.151Z","updated_at":"2026-05-30T13:30:20.301Z","avatar_url":"https://github.com/clay-good.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sophiewell.com\n\nDeterministic healthcare utilities, free forever, no servers, no accounts.\n\nsophiewell.com is a single-page static website built for the **nurse on\nshift** — primarily ICU and acute-care RN (CCRN / PCCN), then ED RN\n(CEN), then floor / med-surg RN, then OR / PACU RN, then L\u0026D / NICU RN —\nwith every relevant tile still served to doctors, pharmacists, RTs,\nbillers, coders, and EMS providers. It is, in posture, MDCalc with no\nads, no login, no upsell, no cookie banner, no email capture, and no\nnetwork call after first paint. Everything runs in the browser. There\nis no AI of any kind. The data sources are public, bundled with the\npage, and refreshed on a schedule. The site costs nothing to operate\nbeyond the domain renewal, so it can be free forever. The product\nthesis, in one sentence: **MDCalc, but free, login-less, ad-less,\noffline-capable, with a catalog tuned to the nurse on shift**\n(see [docs/spec-v29.md](docs/spec-v29.md)). The one-line scope test:\na tile must consume at least one user input and produce a computed\noutput; \"searchable lookup of static facts\" does not qualify. See\n[docs/spec-v10.md](docs/spec-v10.md) for the audience and\ndependency-budget commitments and\n[docs/spec-v29.md](docs/spec-v29.md) for the nurse-first pivot\nand the v29 catalog ledger. At v52 close the catalog is 255\ndeterministic tiles — every one of them computes from at least\none user input (the new `pa-lint` tile in spec-v52 consumes\ndropped files instead of form fields and produces a\ndeterministic findings report, the first instance of the\n`shape: 'document-linter'` tile shape). Catalog-truth invariants\n([docs/spec-v46.md](docs/spec-v46.md)) fail CI on any drift\nbetween `UTILITIES.length` and the public marketing copy.\nSophie's eight posture commitments\n([docs/spec-v50.md](docs/spec-v50.md)) — no ads, no login, no\ntelemetry, no third-party fetch, no AI, no cookies, no paid\ntier, MIT-licensed forever — are listed at\n[/commitments/](https://sophiewell.com/commitments/) and\nenforced by automated checks on every commit. Select tiles\nexpose a collapsed \"where does this come from?\" derivation\nblock ([docs/spec-v48.md](docs/spec-v48.md)) with the verbatim\nsource formula, study cohort, and limits of validity.\n\n## The problem\n\nBedside math — drug dose, drip rate, anion gap, eGFR adjustment,\nsepsis-bundle clock, restraint re-check, Braden re-score —\nlives in published clinical literature and institutional protocols.\nThe nurse on shift, the resident at 3 a.m., the medic in the\nambulance, and the pharmacist verifying a renal dose all reach\nfor the same calculators and arrive at the same number from the\nsame inputs. Existing options are paywalled, ad-laden, login-\ngated, account-tied, or quietly telemetered — every one of which\nadds friction to a 30-second decision at the bedside.\n\nThe meta-problem is that the workers who would benefit most from\nfast, free, deterministic math are the ones least likely to have\na paid app handy at the moment they need it.\n\n## The solution\n\nTake the public datasets and the published clinical formulas, ship them to\nthe browser, do the lookups and math locally, and never phone home. A\nsingle static page, a Content Security Policy that forbids outbound network\nconnections, and a service worker that caches the page for offline use.\n\n## Quick start\n\nVisit https://sophiewell.com. Save the page for offline use if desired. To\nrun locally, clone the repository and run `npm run dev`, which starts a\nzero-dependency static server on http://localhost:4173 that applies the\nproduction security headers. Any static file server will also work.\n\n## How it works and how to use it\n\nAfter the spec-v29 nurse-first prune (plus the spec-v30\nthermal-emergency decision tiles, the spec-v31 Beers\ndeprescribing checker, the spec-v32 non-verbal pain scales, the\nspec-v33 opioid-sedation + neonatal-pain extensions, the\nspec-v34 pediatric-ICU bedside extensions, the spec-v35\nSOS withdrawal companion, the spec-v36 MEOWS maternal\ntrack-and-trigger, the spec-v37 CPSS + LAMS prehospital stroke\ntriage scales, the spec-v38 RACE prehospital LVO predictor, and\nthe spec-v39 ROSIER ED stroke-recognition scale, and the\nspec-v40 GUSS post-stroke bedside dysphagia screen, and the\nspec-v41 FOUR Score ICU coma scale, and the spec-v42 Katz ADL\ndischarge-planning functional-status index, and the spec-v43\nLawton IADL instrumental-ADL companion, and the spec-v44 Barthel\nIndex rehab-nursing weighted ADL, and the spec-v45 C-SSRS\nbedside suicide-risk screener added on top), the\nsite organizes 255 deterministic calculators\nacross the bedside-shift surfaces a\nnurse, doctor, pharmacist, RT, EMS provider, biller-coder, or\neducator actually reaches for. Every tile takes at least one\nuser input and produces a computed output; searchable indexes\nof static facts are explicitly out of scope (see\n[docs/spec-v29.md §3](docs/spec-v29.md) and\n[docs/spec-v10.md §2.3](docs/spec-v10.md)).\n\n**Clinical math \u0026 conversions** covers BMI, BSA suite, MAP /\npulse pressure / shock index, anion gap with delta-delta,\ncorrected Ca / Na, osmolal gap, A-a gradient and P/F suite,\nWinter's formula, eGFR suite (CKD-EPI 2021 / MDRD / Cockcroft-\nGault), FENa / FEUrea, maintenance fluids (4-2-1), QTc suite,\npregnancy dating, pack-years, the universal unit converter,\nsodium-correction planner (Adrogue-Madias), free water deficit,\npredicted body weight + ARDSnet tidal volume, and RSBI.\n**Medication \u0026 infusion** covers drip rate, weight-based dose,\nconcentration-to-rate, pediatric dose bounds, insulin drip,\nanticoagulant reversal, opioid MME (CDC 2022), steroid and\nbenzodiazepine equivalence, antibiotic renal-dose adjustment,\nvasopressor dose-to-rate (with VIS / Wernovsky IS), TPN\nmacronutrient, iron deficit (Ganzoni), and the v29 nursing-\nshift additions for insulin correction, electrolyte\nreplacement ladders, CRRT dose, ECMO titration, and the MTP\nratio tracker.\n**Clinical scoring \u0026 risk** covers GCS, APGAR, NIHSS / mNIHSS,\nWells PE / DVT, CHA2DS2-VASc, HAS-BLED, TIMI, GRACE, HEART,\nPERC, Geneva, CURB-65, PSI, qSOFA / SOFA, MELD-3.0 / Child-\nPugh, Ranson / BISAP, Centor / McIsaac, Caprini, Bishop,\nAlvarado / PAS, PHQ-9, GAD-7, AUDIT-C, CAGE, EPDS, Mini-Cog,\nCIWA-Ar, COWS, ASCVD PCE, PREVENT 2023, Light's criteria,\nMentzer index, SAAG, R-factor liver injury, KDIGO AKI, ICH\nScore, Hunt-Hess / WFNS, plus modified Sgarbossa, revised\ncardiac risk index, PEWS / NEWS2 / NEWS2-escalation, every\nv17-v28 risk-score tile, and the v29 bedside nursing screens\n(Braden, Morse, Hendrich II, RASS, BPS, CPOT, ICDSC, CAM,\nCAM-ICU, Aldrete / PADSS).\n**Clinical criteria \u0026 diagnostic bundles** packages NPIAP\npressure-injury staging, Norton / PUSH wound assessment, the\nVIP / INS extravasation criteria, ABO / Rh blood-product\ncompatibility, and the v17-v28 diagnostic bundles.\n**Workflow \u0026 templates** carries the patient-visit generators\nthat survive v29 (appeal letter, HIPAA Right of Access, HIPAA\nauthorization, ROI request, discharge instructions, specialty-\nvisit questions, the wallet-card generator, and the SBAR\nhandoff template), plus the v29 nursing-shift workflow timers:\nrestraint timer, sepsis-bundle clock, code-blue clock, device-\nday counter, Bristol / abdominal-girth tracker, and the vent\nSBT readiness / ARDSnet PEEP-FiO2 ladder.\n**Field medicine** covers NEXUS / Canadian C-Spine, CDC Field\nTriage, START / JumpSTART, peds-weight-dose, burn surface area\nand fluid resuscitation (Parkland / modified Brooke),\npediatric ETT sizing, naloxone dosing, the EMS documentation\nhelper, and the AVPU / GCS quick reference.\n**Public health \u0026 infectious disease** covers tetanus\nprophylaxis, rabies PEP, bloodborne pathogen exposure, TB\ntesting interpretation, and STI screening intervals. **Billing\n\u0026 coding** is now sparse — the time-based E/M code selector,\nthe NDC 10 ↔ 11 digit converter, and the HIPAA 60-day breach\nclock. Every static index (ICD-10-CM, HCPCS, CPT, NDC, POS,\nmodifier, revenue, CARC / RARC, NUBC, DRG, APC, ICD-10-PCS,\nRxNorm, NDC↔RxNorm) was retired in spec-v29 wave 29-2 §2.1;\nuse your EHR, CMS, FDA, or NUBC source instead.\n\nThe user flow is simple: type what you need into the hero search\n(\"wells PE\", \"CHA2DS2-VASc\", \"ICD-10\", \"magnesium replacement\") or\npick a tile from the disclosure-collapsible home grid, enter input,\nread output. The hero consults a hand-curated synonym table\n(`data/synonyms.json`, spec-v7 section 3.2) before falling back to\nfuzzy matching, and shows a one-line breadcrumb explaining why a\ntile is recommended. (The spec-v7 §3.1 patient-artifact dropzone was\nretired in the 2026-05-18 clinical-staff-first pivot; the\ndeterministic classifier under `lib/artifact-*.js` is retained for\npossible future reuse on a clinical-input surface, but the home view\nno longer wears it.) Every utility opens with its\ninputs pre-filled from a worked example so the empty state is never\nempty (a \"Reset to example\" link restores them after editing), and\nthe References region at the bottom shows the formula citation or\ndataset stamp the result came from (spec-v9). Calculator state is\nencoded in the URL hash so any view can be bookmarked or shared as\na permalink.\n\nAll computation happens in the browser. For the full picture, see\n[docs/architecture.md](docs/architecture.md).\n\n## System design and architecture overview\n\nThe application is one HTML file, one CSS file, one JavaScript module set,\na service worker, and a data folder of sharded JSON. There is no backend.\nThe browser receives static files from the same origin and runs everything\nlocally. Data shards are loaded only when a utility that needs them is\nopened. The service worker pre-caches the application shell on first load and\ncaches data shards on first access, keyed to the build hash so new\ndeployments invalidate old caches cleanly. The\napplication has zero runtime dependencies. A weekly CI job runs the data\nrefresh pipeline and opens a pull request with any updated data. For the\nlong version, see [docs/architecture.md](docs/architecture.md).\n\n## Deterministic logic versus LLM usage\n\nThe product uses zero LLM inference and zero AI of any kind. All operations\nare deterministic functions over public datasets and published formulas.\nThere is no model in the loop, no embedding, no inference call, no API\nkey. If a future sibling project explores AI-driven workflows, it will be\na separate, clearly labeled product. sophiewell.com itself never calls a\nlanguage model.\n\n## Stability commitments\n\nThe site is stable and predictable by design. These commitments are hard\nrules, not soft preferences.\n\n- **No A/B testing, ever.** Every user sees the same version of every\n  utility. A clinician who used a calculator on Monday and got one result,\n  then got a slightly different result on Tuesday because they were in a\n  treatment group, would correctly stop trusting the site.\n- **No feature flags visible to users.** No \"experimental\" toggle, no\n  \"beta\" feature. If something is on the site, it is for everyone.\n- **No tracking.** No analytics script, no tracking pixel, no heatmap, no\n  session replay, no error reporter, no third-party telemetry. The CSP\n  enforces this with `connect-src 'self'`. The site never logs user-agent\n  strings or IP addresses.\n- **No notifications, no email capture.** The site never asks for an\n  email address, never displays a notification permission request, never\n  shows a \"Sign up for updates\" form. There is no newsletter and no\n  account system, because there are no accounts.\n- **Versioned releases.** Every release is tagged with a semantic version\n  and described in [CHANGELOG.md](CHANGELOG.md), linked from the footer.\n\n## CLI reference\n\n| Command                  | Description                                                       |\n|--------------------------|-------------------------------------------------------------------|\n| `npm run dev`            | Serve the directory locally on http://localhost:4173              |\n| `npm run build`          | Copy static files into `dist/` for deployment                     |\n| `npm test`               | Run the full test suite (unit, a11y, grep, data integrity)        |\n| `npm run test:unit`      | Run Node's built-in unit tests (1,782 tests)                      |\n| `npm run test:e2e`       | Run Playwright integration tests against a real browser           |\n| `npm run test:a11y`      | Run accessibility checks on every utility view                    |\n| `npm run lint`           | Run ESLint with the project rules (bans innerHTML, eval, others)  |\n| `npm run data:refresh`   | Re-fetch and re-shard every public dataset                        |\n| `npm run data:verify`    | Verify shard SHA-256 hashes against the manifests                 |\n| `npm run sbom`           | Regenerate the CycloneDX SBOM (`sbom.json`, `sbom.md`)            |\n| `npm run release:check`  | One-shot pre-release gate: lint + test + sbom + build             |\n| `npm run clean`          | Remove `dist/` and other build artifacts                          |\n\n## Safety guarantees\n\n- The application makes no outbound network requests at runtime.\n- The application does not store user input anywhere.\n- The application is read-only with respect to all bundled data.\n- The application does not write to any storage location other than the\n  service worker's own cache of its own static files.\n- Clinical input is processed in memory and discarded when the page\n  is closed.\n- There is no `localStorage`, no `sessionStorage`, no cookies, and no\n  IndexedDB. All four are verified empty by the integration test suite.\n- `innerHTML`, `outerHTML`, `insertAdjacentHTML`, `eval`, and the\n  `Function` constructor are banned by the ESLint config and a grep\n  check; the `el()` DOM helper throws on any attempt to set raw HTML.\n- A CycloneDX SBOM (`sbom.json`, `sbom.md`) is regenerated on every\n  build and ships with the site, hashing every runtime asset and source\n  module with SHA-256 plus a per-build buildId.\n\n## Limitations\n\n- The Field Medicine layer reproduces only the *numeric facts* (drug\n  doses, intervals, energy levels, weight ranges) from AHA ACLS/PALS/BLS\n  guidelines, with attribution to the AHA guideline edition. AHA\n  algorithm flowcharts are *not* reproduced. The Broselow-Luten\n  color-band system is *not* bundled (licensed by Vital Signs); the\n  pediatric dose calculator works in straight kilograms instead. See\n  [docs/field-medicine-citations.md](docs/field-medicine-citations.md).\n- Static code indexes (ICD-10-CM, HCPCS, CPT, NDC, POS, modifier,\n  revenue, CARC / RARC, NUBC, DRG, APC, ICD-10-PCS, RxNorm,\n  NDC↔RxNorm) and reference tables (adult / pediatric lab ranges,\n  TDM, tox levels, ISMP high-alert wallet, AHA CPR wallet card,\n  NIOSH Pocket Guide, DOT ERG, AGS Beers Criteria, ASA Physical\n  Status, Mallampati, Modified Rankin) were retired in spec-v29\n  wave 29-2 — Sophie's edge is computation, not indexing. Use your\n  EHR, the upstream source, or your institutional protocol.\n- The Appointment Prep Question Generator uses deterministic keyword\n  matching against a hand-curated bank, not language understanding.\n- The site is not medical, legal, or financial advice. It does not\n  replace clinician judgment, institutional protocols, professional\n  billing review, or legal counsel.\n- Clinical calculators are math aids only. Institutional protocols\n  govern any clinical decision. Field-medicine utilities additionally\n  defer to local protocols and online medical direction.\n## Security\n\nVulnerability reports: see [SECURITY.md](SECURITY.md) for the private\ndisclosure channel and the threat model summary. The CSP, security\nheaders, and supply-chain posture (pinned dev deps, SBOM on every\nbuild, integrity-verified data shards) are documented in\n[docs/threat-model.md](docs/threat-model.md).\n\n## Documentation\n\n- [docs/spec-v10.md](docs/spec-v10.md) — current positioning spec:\n  clinical-first audience, runtime-dependency budget, permanent\n  out-of-scope list\n- [docs/spec-v11.md](docs/spec-v11.md) — correctness-floor spec:\n  per-tile audit protocol, specialty-named groups, optional\n  source-quoted `interpretation` field\n- [docs/scope-mdcalc-parity.md](docs/scope-mdcalc-parity.md) —\n  long-horizon scope: every actionable clinical calculator a\n  healthcare worker would otherwise reach for MDCalc to find,\n  shipped slowly at the v11 quality bar\n- [docs/architecture.md](docs/architecture.md) — runtime architecture,\n  data flow, no-backend rationale\n- [docs/data-sources.md](docs/data-sources.md) — every bundled dataset\n  with canonical URL and refresh cadence\n- [docs/clinical-citations.md](docs/clinical-citations.md) — every\n  formula and scoring system with citations\n- [docs/field-medicine-citations.md](docs/field-medicine-citations.md) —\n  Group I citations, including AHA non-derivation posture\n- [docs/legal.md](docs/legal.md) — data sourcing posture, AMA CPT\n  handling, attributions\n- [docs/accessibility.md](docs/accessibility.md) — WCAG 2.2 AA checklist\n- [docs/threat-model.md](docs/threat-model.md) — threats considered and\n  the controls that mitigate each\n- [docs/stability.md](docs/stability.md) — full stability policy\n- [docs/performance.md](docs/performance.md) — performance budget and\n  measurement methodology\n- [docs/operations.md](docs/operations.md) — data refresh workflow,\n  manifest format, integrity verification\n- [docs/release.md](docs/release.md) — Cloudflare Pages release runbook\n- [docs/deployment.md](docs/deployment.md) — deployment configuration\n- [CHANGELOG.md](CHANGELOG.md) — every release with date, version, and\n  user-visible changes\n- [SECURITY.md](SECURITY.md) — vulnerability disclosure policy\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclay-good%2Fsophiewell.com","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclay-good%2Fsophiewell.com","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclay-good%2Fsophiewell.com/lists"}