Skip to content

Latest commit

 

History

99 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mawu (MVDC), Crisis Emergency Dashboard

A web platform for Mawu (MVDC, Malawi Voice Data Commons). Mawu is the Chichewa word for voice; the project is named in the language it exists to serve, and the full form is carried at first mention (see RESEARCH-REPORT.md §2.4). Mawu is a shared, community-governed repository of spoken-language data, starting with Chichewa, being built so Malawian languages have a place in the AI systems designed around us. Its purpose is a community response system: someone calls a toll-free line, reports an incident in their own language, and the system understands it, triages it, and routes it to a trusted responder.

This app is the Crisis Emergency Dashboard, thematic analysis of violent conflicts and human-rights violations across Malawi. Today it is powered by news and monitoring sources; in future it can be powered by MVDC voice reports.

Where to see it

Link Who can open it What it shows
The platform https://mawu-mvdc-dashboard.netlify.app username + password The full platform, with internal field-research contacts redacted
Internal site https://mawu-support.netlify.app password Everything, unredacted. Serving a July 2026 build; on a different Netlify account
GitHub Pages carolina-moron.github.io/MVDC Retired 2026-08-19. Serves a notice pointing to the site above

Access is enforced by netlify/edge-functions/auth.ts, which runs at the edge before any file is served, so pages, assets and data files are all covered — a client-side gate would ship the content and then hide it. Credentials live in the SITE_USER and SITE_PASSWORD environment variables on the Netlify site and are never committed.

⚠️ If SITE_PASSWORD is unset the site serves to anyone, and logs an error. That is deliberate — a config mistake should not brick the site — but it means an unset password is an open site, not a locked one. Verify with:

curl -I https://mawu-mvdc-dashboard.netlify.app   # expect: 401

⚠️ The repository is public, so the source is readable by anyone, including src/data/fieldwork.ts with partner focal points and contact details, and the whole git history. Authentication on the site does not change that.

The build is still redacted even behind the password. Defence in depth: the redaction is what protects the material if the password leaks, is shared, or is unset by mistake.

Documentation

Start with the one that matches what you need.

Document For Length
USER-GUIDE.md Using the platform, assuming no prior knowledge. What the three working screens do, how to filter and share a view, and what the numbers do and do not mean short
TECHNICAL-SPEC.md How it is built: architecture, stack, data model, the build and check scripts, deployment and its traps, and an honest list of what is not built medium
GUIDE.md Working on it day to day: every tab in detail, the two certainty scales, adding data, running the checks long
RESEARCH-REPORT.md The academic report: the problem, the method, the taxonomy, the frameworks, governance and ethics long
CODING-MANUAL.md Turning a news article into a coded record: categories, tie-breaks, severity, the compromised-authority criteria, de-duplication medium
LIMITATIONS.md Everything the platform cannot do, graded by how much it bounds the claims medium
THESIS-DEFENSE.md Viva preparation: the argument in brief, the variable catalogue, and the questions an examiner would ask long
BACKLOG.md What is done, what is open, and why long
CITATIONS.md The bibliography reference

Features

  • Crisis Emergency Dashboard (map), interactive Leaflet map of Malawi with reports plotted by district, coloured by issue category, sized by severity of harm.
  • Satellite and Map basemaps, high-resolution ESRI World Imagery satellite layer (Malawi-focused, zoomable to street level) with a one-tap Satellite ⇄ Map toggle.
  • Waterways (Fika WaterNet), optional overlay of modelled rivers and streams. Off by default; toggle it in the map's layer panel.
  • Rain & wind (Open-Meteo), optional live overlay: rainfall expected today per district, wind arrows, and a 7-day threshold screen naming districts headed for flood- or gale-force conditions. Off by default; toggle it in the layer panel.
  • Time slider (2022 → 2026), move across months; view a single month or all reports up to a date. Coverage is weighted to 2025 to 2026.
  • Analysis, thematic dashboards: primary issues and violations, specific sub-issues, monitoring channels, most-affected districts, and reports by year.
  • Conflicts, browsable list + detail for each report: sub-issue, district, city, source, recommended responder, and a "local authority compromised" flag.
  • Filters, by issue category, district, and city and town.
  • About and Team, MVDC mission, partners, and governance.

Waterways, Fika WaterNet

Where a river runs decides who can reach help, and Malawi's mapped hydrography is thin outside the Shire and the lakeshore. WaterNet is a machine-learning model Fika (formerly Bridges to Prosperity) ran over satellite imagery to predict waterways worldwide; it roughly tripled the mapped extent, and most of what it added is the small rural drainage that separates a village from a clinic in the rains.

Served as PMTiles from Fika's public bucket under CC-BY 4.0. The global file is 51 GB, but HTTP range requests mean the browser pulls only the tiles covering the current view, so nothing is vendored into this repo. The layer is off by default on purpose: the default view should not depend on a third-party bucket being reachable.

Read it as prediction, not survey:

  • Streams already present in TDX-Hydro draw in blue; streams the model added draw in amber. One confident web would hide which half is inference.
  • A drawn stream may be seasonal, fordable, or absent, and the layer says nothing about whether it is bridged.
  • Lines the model routes across lake surfaces are dropped, drawn, they turn Lake Malawi into a hatched mat that reads as dozens of rivers.
  • Streams thin by Strahler order as you zoom out; zoom in for the small ones.

No trail-bridge layer. Fika also publishes its register of 962 built pedestrian crossings, which would pair naturally with the blockages layer, none of them are in Malawi. Its nearest work is Zambia (13) and Mozambique (1). An empty layer would read as "no crossings here", which is false, so it is not drawn.

Rain & wind, Open-Meteo

Almost every road and bridge cut in the blockages layer was put there by rain or by a cyclone. Weather is therefore an access variable in this platform, not a weather report: what the sky is doing this week is part of whether a survivor can reach the nearest facility at all.

Open-Meteo is a free, key-less, CORS-enabled forecast API (an ECMWF and GFS and ICON blend, CC-BY 4.0), which is what makes it usable from a static export with no server and no secret. One request carries all 28 district centres; nothing is fetched until the layer is switched on, and it re-pulls every 15 minutes while open.

What is drawn:

  • A circle per district, shaded on a single-hue blue ramp by the rainfall expected today (<1 / 1 / 10 / 25 / 50 / 100+ mm). Circle size repeats the same magnitude, so the layer still reads without colour.
  • Wind arrows pointing downwind, length by speed, red at ≥50 km/h.
  • A 7-day hazard screen listing districts that cross a threshold, worst day first, each with the day that triggered it.

Thresholds are calibrated against this platform's own blockage record by npm run build:weather, which reads ERA5 reanalysis for every district-month carrying a recorded road or bridge cut and compares it against the wet-season distribution for all 28 districts since 2000. The evidence and its limits are written into src/data/weatherCalibration.ts.

  • Rain: 25 / 50 / 100 mm in a day, which are the p96.5, p99.5 and p99.93 of Malawi's own wet season. All nine recorded cut district-months had a day above 65 mm and six had a day above 100 mm, so rain alone flags every one of them at alert or worse. The borrowed WMO bands survived the check unchanged.
  • Gusts: 50 / 55 / 65 km/h, the p97, p99 and p99.9 of Malawi's wet-season gusts. These replaced the South-West Indian Ocean cyclone marks (62 and 89 km/h), which describe storms at sea. Cyclones weaken over land: 89 km/h sits above the entire 26-year wet-season record in six of the eight districts Freddy cut, so on wind alone it fired for one of the nine known cuts. It now reaches six.
  • Alert burden: roughly 7.7 watch, 1.7 alert and 0.3 severe days per district per wet season.
  • What the calibration cannot say: nine cut months clustered in three weather events, dated to the month rather than the day, is a small and dependent sample, and because blockages come from media reporting a district-month with no recorded cut is not a district-month with no cut. This measures sensitivity and alert burden, never a false-positive rate.
  • These are point forecasts sampled at each district centroid on a ~11 km model grid. They describe a district the way one rain gauge would, not an areal average.
  • Nothing here is an official warning. Malawi's DCCMS issues those. This is a threshold screen over a public model: good for "look harder at Nsanje this week", never for "a cyclone will hit Nsanje".
  • A failed fetch keeps the last snapshot on screen and says so. A forecast that quietly stops updating must never look like calm weather.

Classification taxonomy

Reports are classified with the MPP taxonomy, eight primary issue and violation categories, each with specific sub-issues:

  1. Violation of right to physical integrity (violent attacks)
  2. Political and electoral misconduct
  3. Violation of right to mental integrity
  4. Violation of right to liberty and security (law-enforcement misconduct)
  5. Discrimination against women and GBV
  6. Restrictions on civil and political rights
  7. Discrimination against disadvantaged groups
  8. Attacks against Persons with Albinism (PWA)

Monitoring channels

Media Monitoring (electronic & print) · Social Media (Facebook, X, TikTok, Instagram) · UNDSS reports · Public Affairs Committee (PAC) · UNDP and UN Women Violence-Against-Women reports · Malawi Police Service (MPS) reports.

Note: The incident records in src/data/reports.ts are real, publicly-reported events (2025 to 2026), each linked to a published source (media monitoring, human-rights bodies, UN Women and UNDP, MISA and others). They are summarised from public reporting; the set is initial and grows as more channels are integrated. Some non-public channels (UNDSS, MPS, PAC) are represented via published coverage.

Tech stack

Next.js (App Router) · TypeScript · Tailwind CSS · React-Leaflet + OpenStreetMap.

Getting started

npm install
npm run dev      # http://localhost:3000
npm run build    # production build

Deployment

Deploys are blocked until 8 August 2026, the Netlify account has exhausted its usage credits (403 — Account credit usage exceeded). The live site serves the 28 July build; everything since is committed and pushed. See GUIDE.md.

Live site: https://mawu-support.netlify.app

The site is a fully static export (output: "export" in next.config.ts), emitted to out/. It is hosted on Netlify, which keeps the source repo private while serving the site publicly.

npm run build                     # static export → out/ (root-relative assets)
npx netlify-cli deploy --prod --dir=out

Netlify serves from the site root, so no base path is needed, a plain npm run build produces a fully clickable and interactive site. Build config lives in netlify.toml (command = npm run build, publish = out).

Retired: GitHub Pages

A gh-pages branch used to serve a second, open copy of the platform at carolina-moron.github.io/MVDC/. It was retired on 19 August 2026 when authentication was added: an unauthenticated public copy of the same platform makes the password on the Netlify site decorative.

GitHub does not permit deactivating Pages on a public repository, so the branch now holds a single notice page pointing at the access-controlled site. Do not republish the build there — restoring it reopens the hole it was closed for.

⚠️ Authentication gates the site, not the source. The repository is public, so src/data/fieldwork.ts and the entire git history are readable at raw.githubusercontent.com by anyone who looks. Making the repository private is the only fix, and it has other consequences, so it is recorded as an open decision in BACKLOG.md rather than assumed here.

Branding

Drop the official MVDC logo at public/logo.png and it is used everywhere automatically. Until then, an on-brand inline SVG mark (src/components/Logo.tsx) is shown as a fallback.

Project structure

src/
  app/                 # Next.js app router (layout, home page → <Platform/>)
  components/
    Platform.tsx       # shell: tabs, time slider, filters, shared state
    MapView.tsx        # Leaflet map (client-only)
    AnalysisTab.tsx    # thematic bar charts + stat tiles
    ConflictsTab.tsx   # list + detail view
    AboutTab.tsx       # MVDC mission, partners, governance
    TeamTab.tsx        # team / partner organisations
    Logo.tsx           # logo (public/logo.png with SVG fallback)
  data/reports.ts      # districts + classified sample reports
  lib/
    types.ts           # taxonomy, categories, sources, Report model
    time.ts            # monthly timeline helpers

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages