Inspiration
Two groups watch the same stream without ever talking to each other. Volunteers see foam, still green water and mosquito larvae. GPs see diarrhoea after storms, rashes after paddling and fevers in late summer. OneAquaHealth's mission is to connect ecosystem health and human health. We wanted to connect them literally: in the systems clinicians already use.
What it does
StreamReach turns citizen stream checks and the live 7-day forecast into explainable FHIR risk assessments for three One Health hazards: waterborne pathogens, toxic algal blooms and mosquito-borne disease.
- Stream check: residents answer five picture-based questions. Each check is stored as OAH-profiled FHIR Observations and immediately updates the neighbourhood's warnings.
- Monitoring dashboard: a satellite map with each reach's risk zone, a 14-day risk and rain chart, a day-by-day forecast strip and what-if scenarios (storm +40 mm, heatwave +6 °C). Every score has a "why this score" breakdown, with each factor named, sourced and weighted.
- Stream to clinic: a CDS Hooks
patient-viewservice. When a GP opens a chart, StreamReach matches the patient's active SNOMED CT problems to nearby hazards and returns at most two cards, with reasoning, a draft stool-culture order and patient advice. When nothing is relevant, it stays silent. - Clinic to stream: the GP can share an anonymous case. The CDS Hooks feedback endpoint turns it into an OAH health-measure Observation that feeds back into the reach's risk.
- AI duty officer: a Claude agent gathers evidence with read-only tools, then drafts a response plan: a resident advisory in the local language plus English, a GP note, owned time-bound actions, cited evidence and honest uncertainties. A named human approves it before it is published as FHIR Communication with a Provenance naming the AI author and the human approver.
On 28 Sep 2026 Open-Meteo forecast ~27 mm of rain over Heraklion. StreamReach flagged very high waterborne risk at Giofyros Reach A for 1 October, three days ahead.
How we built it
- App: Next.js 16 route handlers serve a FHIR R4 facade (
/fhir) and CDS Hooks endpoints (/cds-services). UI in TypeScript, Tailwind and Leaflet/OpenStreetMap. - Weather: live from Open-Meteo.
- Risk engine: three small logistic models with named, weighted factors. Weights are literature-informed priors (EU Bathing Water Directive thresholds, CSO-gastroenteritis, cyanobacteria-temperature and West Nile-temperature studies), documented in
docs/MODEL.md. - Standards: built on the HL7 Europe OneAquaHealth FHIR IG, plus a small FSH extension IG (StreamExposureRisk profile, risk-factor and confidence extensions). Resources validate against both IGs with the official HL7 validator: 0 errors.
- Persistence: Neon Postgres via the Vercel Marketplace, with a 120-day demo dataset across 10 reaches.
- AI agent: Claude via the Anthropic TypeScript SDK in a manual tool-use loop, with five read-only tools and a strictly typed
submit_response_plantool re-validated with zod. Steps stream to the browser as server-sent events. - Tests: Vitest unit tests and 83 Playwright end-to-end tests with an axe WCAG 2 AA scan, passing against the live deployment.
Challenges we ran into
- The OAH IG isn't published as a package yet, so we built it from the hl7-eu/oah FSH sources to validate against it.
- Keeping the model honest. We chose explainable priors over a black box trained on synthetic data, and report confidence separately from risk.
- Alert fatigue. Cards need a symptom match or high risk, and the service returns at most two.
- Trustworthy AI. The agent only sees StreamReach's own data, must cite evidence, states its uncertainties and cannot publish anything itself.
Accomplishments that we're proud of
The loop is real and demoable in 3 minutes: a citizen check changes a forecast, the forecast raises a card in an EHR, and the GP's feedback changes the forecast again.
What we learned
Standards are what make a hackathon prototype plug into the real world. Explainability matters more than model sophistication when clinicians and officers must trust a score. AI is most useful as a drafter with a human approver.
What's next
- Recalibrate the weights on OneAquaHealth lab campaigns and anonymous syndromic data.
- Plug into the OneAquaHealth app and Open Information Hub as a FHIR endpoint.
- Pilot with one health authority's EHR sandbox.
- Add an
order-selecthook and cyanotoxin/veterinary cards.
Live demo: https://streamreach-health.vercel.app (one-click demo accounts) · CDS Hooks: https://streamreach-health.vercel.app/cds-services · FHIR: https://streamreach-health.vercel.app/fhir/metadata
Built With
- anthropic
- cds-hooks
- claude
- fhir
- fsh-sushi
- hl7
- leaflet.js
- neon
- nextjs
- open-meteo
- openstreetmap
- playwright
- postgresql
- react
- tailwindcss
- typescript
- vitest
- zod
Log in or sign up for Devpost to join the conversation.