Nyensim – Offline-first, voice-enabled maternal and child health toolkit for frontline health workers in Northern Ghana. Designed for the UNICEF Start-up Lab AI for Nurturing Care Hackathon, Nyensim bridges the gap between fragmented paper records and smart, life-saving decision support.
# N-yensim ("Our Wellness")
Offline-first CHW (Community Health Worker) support app for maternal and
child health in Northern Ghana — QR-based patient records, a rule-based
clinical triage engine, local-food nutrition guidance, and translated voice
education, with optional AI-generated supplementary explanations layered on
top of (never instead of) the deterministic clinical rules.
This repo has two parts:
```
android/ Native Android app (Kotlin, Jetpack Compose, Room) — what CHWs use
backend/ Small Node/Express proxy — the only thing holding an AI vendor key
docs/ Architecture, security, and deployment notes
```
See `docs/ARCHITECTURE.md` for how these fit together and what changed from
the original AI-Studio-generated scaffold.
## Prerequisites
| Tool | Version | For |
|---|---|---|
| Android Studio | Ladybug (2024.2) or newer | Android app |
| JDK | 17 | Android Gradle build |
| Node.js | 18.18+ (20 LTS recommended) | Backend |
| npm | bundled with Node | Backend |
| A Gemini or OpenAI API key | — | AI-enrichment feature (optional — the app works without it) |
## 1. Run the backend locally
```bash
cd backend
npm install
cp .env.example .env
# edit .env: set GEMINI_API_KEY (or OPENAI_API_KEY + AI_PROVIDER=openai),
# and set CLIENT_KEYS to a generated value, e.g.:
# openssl rand -hex 32
npm run dev
```
The server starts on `
localhost`. Confirm it's up:
```bash
curl
localhost
# {"status":"ok"}
```
### Run backend tests
```bash
cd backend
npm test
```
## 2. Run the Android app locally
```bash
cd android
cp local.properties.example local.properties
# edit local.properties:
# BACKEND_BASE_URL=
10.0.2.2 (10.0.2.2 = emulator's view of your host machine)
# BACKEND_CLIENT_KEY=
```
Then open the `android/` folder in Android Studio and run the `app`
configuration on an emulator or a connected device (**File → Open**, select
`android/`, wait for Gradle sync, press Run).
Testing on a **physical dev …