Skip to main content

Milestone 2: Building the EOHA Prototype

Β· 2 min read
Msesenyane Makhongela
Co-founder & Systems Engineer, MED Consortium
Simamnkele Mlisana
Co-founder & EO Data Engineer, MED Consortium

Milestone 1 laid the architectural foundation β€” every service zone mapped, every data store specified, every use case documented. Now we build.

What Milestone 2 means​

The prototype phase (March–August 2026) is where the EOHA platform transitions from a design artefact into a running system. The core deliverables are:

  • Automated GEE pipeline β€” a Python-triggered Cloud Function that pulls Sentinel-2 and MODIS imagery on an 8-day cycle, runs zonal statistics against ward boundaries, and writes directly to the Ward Risk store without manual intervention.
  • Server-side risk scoring β€” calculateDynamicRisk() moves from the browser to a Cloud Run service, enabling real-time scoring for all 9 Limpopo municipalities and laying the groundwork for multi-country expansion.
  • XGBoost ML forecasting β€” the first live run of the Malaria Risk Forecast pipeline against the baseline dataset, producing outbreak_probability_score values per zone per prediction period.
  • NCD live data β€” replacing the static NCD baseline with live GEE-computed scores using Copernicus/Sentinel atmospheric data (NO2, SO2, aerosol index, UV radiation).

Design artefacts carried into M2​

The Design Specification Document (v2) produced in M1 defines the full entity model the prototype must implement:

EntityKey fieldsM2 target
Zonezone_id, boundary_polygon, base_populationGeoJSON sync automated
Malaria_Observationlst_surface_temp_c, soil_moisture_pct, ndwi_water_indexGEE pipeline live
Malaria_Risk_Forecastoutbreak_probability_score, environmental_lag_daysXGBoost v1 deployed
NCD_Observationno2_density, so2_density, aerosol_indexCopernicus pipeline live
User_Risk_Alertalert_status, forecast_idAlert engine wired to forecasts

What's shipping first​

Our first sprint targets the Malaria pipeline end-to-end: GEE ingest β†’ zonal statistics β†’ XGBoost score β†’ alert threshold check β†’ USER_RISK_ALERT insert. Once that loop is closed on Limpopo data, we extend to NCD and begin multi-country boundary ingestion.

Follow progress on the Milestones page and in the live platform.