Ubora is a primary-healthcare operations app for coastal Kenya that turns evening stock reports into audit-ready redistribution - not an AI doctor.
# Ubora
**Edge-AI primary healthcare operations** for coastal Kenya — not an AI doctor.
Nurses report the evening shift in Swahili or English. Ubora reconciles what left the pharmacy shelf against the day's case load, matches verified surplus to a nearby stockout, and drafts a Kenya MoH **Form S11** for a human to authorize.
**Competition:** Build with Gemma · GDG Pwani · Track 3 (PHC / Smart Health)
```
Nurse report → Gemma 4 extract → Edge audit → Micro-swap match → Draft Form S11 → DHO / pharmacist authorize
```
## What it does
| Step | Who | What |
|------|-----|------|
| **1. Edge audit** | Nurse Fatuma (Wasini) | Voice/text shift report → cases vs drawdown → flags unexplained issues and verified surplus |
| **2. Micro-swap** | Dr. Farida (DHO) | Surplus↔deficit matches ranked by expiry loss avoided − boda transport cost |
| **3. Governance** | Pharmacist Wanjiku | Pre-filled Form S11 → issuer, receiver and pharmacist sign in order → print |
### What Gemma does, and what it does not
**Gemma 4 turns nurse language into structured fields** — commodity, quantity, unit, batch, expiry, case counts, drawdown reason. That is its whole job.
**Deterministic TypeScript owns every consequence:** the audit arithmetic, the surplus gate, the match ranking, the civic-value maths, and the Form S11 fill. The model never computes a number that reaches a voucher, and it cannot authorize anything. Three humans still sign each transfer.
If a report omits the batch or expiry, Ubora asks for it rather than letting the model invent one. If a spoken shelf count contradicts the bin card, the lot is held for recount instead of being offered for transfer.
## Stack
- **Next.js 16** (App Router) + **React 19** + TypeScript
- Custom CSS design system — no UI framework
- **Primary model:** `gemma-4-26b-a4b-it` via Google AI Studio / Gemini API
- **Offline fallback:** `gemma4:e2b` via local Ollama
- **Domain adaptation:** QLoRA notebook in-repo for strict JSON extraction from Swahi …