Kenya's unified citizen engagement platform.
# JUKWA
Kenya's unified citizen engagement platform.
## Architecture
- **Android App**: Kotlin 2.0.0, Jetpack Compose, Room (offline-first), Hilt, MapLibre. Built with Android Gradle Plugin 8.4.0.
- **Backend Services**: Node.js, Fastify, TypeScript
- **Database**: PostgreSQL with PostGIS
- **Real-Time**: MQTT via Mosquitto, Firebase Cloud Messaging
- **Object Storage**: MinIO (S3-compatible)
- **Edge**: OpenResty/NGINX
Reference docs: `Docs/Start Build/` — Master Prompt, Architecture Framework, Technical Build Bible, BARAZA spec.
## Monorepo layout
```text
android/ Kotlin / Jetpack Compose app (Phase 2)
services/ Independent backend microservices, one folder each
incident/ Fastify — incident management (port 3001)
pwa/ Next.js progressive web app (Phase 2)
ussd/ USSD / SMS handler (Phase 2)
whatsapp/ WhatsApp bot (Phase 2)
shared/ Cross-service TypeScript types & contracts (Phase 2)
infra/ docker-compose, nginx, mosquitto, postgres init
data/ Static seed data (wards.geojson, agencies.json, …)
docs/ Setup, API, architecture
.github/ CI workflows, CODEOWNERS, PR template, Dependabot
```
Each `services/ /` is a self-contained Node project with its own `package.json`, `Dockerfile`, and `HEALTHCHECK`. Adding a service means: new folder under `services/`, new entry in `infra/docker-compose.yml`, new row in the CI `build-images` matrix, new Dependabot block.
## Quick start
```bash
cp .env.example .env
cd infra && docker compose up -d --build
curl
localhost
```
Full instructions: docs/SETUP.md.