haste.health, built with Docusaurus.
Part of the pnpm workspace in frontend/, so install from there (pnpm install).
pnpm start
Starts a dev server on port 8000 and opens it in a browser. Most changes are reflected live without restarting.
pnpm build
Writes the static site to build/, server-rendering every page and failing on
broken internal links. pnpm serve serves that build locally.
Everything on the site that is derived from somewhere else is regenerated by one command:
pnpm generate
It runs these steps in order, each reading what the ones before it wrote, and stops at the first failure:
| Step | Reads | Writes |
|---|---|---|
test-support |
backend/testscripts/core, backend/testreports/*.json |
static/test-reports/support.json (the conformance report) |
test-suites |
the US Core, g10 and access control TestScripts and reports | static/test-reports/suites/*.json (one per suite), static/test-reports/suites.json (totals) |
server |
the local server (HASTE_HEALTH_*, see .env.example) |
static/fhir/R4/metadata.json, static/fhir/R4/OperationDefinition/*.json, static/mcp/tools.json |
fhir |
artifacts/r4, the conformance report, the server snapshot |
docs/reference/fhir/** pages, src/fhir-model/*.json, static/fhir/R4/<Type>.json |
social-card |
the conformance report | static/img/social-card.{svg,png} |
pricing |
the backend's subscription tiers (cargo run) |
static/pricing/tiers.json |
Run a subset by naming steps, pnpm generate server fhir, and check that the
committed outputs are current with pnpm check-generated (the steps that can
tell: social-card, pricing). The server step needs a running Haste Health
server; the others run offline. Each step is a module in scripts/generate/,
and the generated pages carry a "Do not edit" comment: change the generator
and run it again instead.
The site is deployed to Cloudflare by the deploy-website job in
.github/workflows/test_e2e.yml on every push to main, after refreshing
the conformance report from that run's core TestReports.
pnpm wrangler builds and deploys from a local checkout.