CryoHealth System Architecture

CryoHealth System Architecture An architecture diagram generated by Archify. Web users · public · admins · CHW leads · Architecture component Web users public · admins · CHW leads CryoHealth-app · Expo RN · WatermelonDB offline · Architecture component · Android CryoHealth-app Expo RN · WatermelonDB offline Android cryohealth dashboard · TanStack Start SSR · Cloudflare Workers · CF Worker · Cloudflare cryohealth dashboard TanStack Start SSR CF Worker cloudflared tunnel · api.cryohealth.io · Hetzner CPX22 · Docker Compose · outbound only cloudflared tunnel api.cryohealth.io outbound only CryoHealth-api · NestJS 11 · auth · alert policy · Hetzner CPX22 · Docker Compose › internal bridge · no inbound ports · :3000 CryoHealth-api NestJS 11 · auth · alert policy :3000 PostgreSQL 16 + PostGIS · schema owned by api migrations · Hetzner CPX22 · Docker Compose › internal bridge · no inbound ports · PostgreSQL PostgreSQL 16 + PostGIS schema owned by api migrations CryoHealth-geo · FastAPI · NDWI · hazard index · Hetzner CPX22 · Docker Compose › internal bridge · no inbound ports · APScheduler CryoHealth-geo FastAPI · NDWI · hazard index APScheduler Sentinel-2 · WorldPop · STAC / CDSE imagery · Architecture component Sentinel-2 · WorldPop STAC / CDSE imagery HTTPS REST + Bearer JWT REST + /sync http://api:3000 TypeORM observations POST /alerts/hazard-scores fetch scenes Cloudflare Workers Hetzner CPX22 · Docker Compose internal bridge · no inbound ports

Policy stays in the API

  • • geo computes NDWI + hazard scores only
  • • api decides tiers with an audited human reason
  • • Open Data routes unauthenticated; the rest go through JWT + RolesGuard

Shared secrets

  • • JWT_SECRET byte-identical in api and dashboard
  • • geo CRYOHEALTH_API_KEY = api GEO_SERVICE_API_KEY

Docs vs code drift

  • • Dashboard db.ts / queries.ts are deprecated stubs: all data via api
  • • Hyperdrive binding still in wrangler.jsonc but unused