Prepnest — offline-first WASSCE Study OS for Ghana. Public architecture and design docs; the app is private and pre-release.
# Prepnest
> Offline-first WASSCE Study OS for Ghana — architecture and design documentation.
Prepnest is an independent product. It is **not affiliated with or endorsed by WAEC**, and it does not distribute official examination material.
---
## What It Is
Prepnest is a mobile study companion for students preparing for the WASSCE in Ghana. The whole product is built around one constraint that matters in this market: **it must work without internet**, on mid-range Android phones, with data costs near zero after install.
Three principles drive the design:
| Principle | What it means in the product |
|---|---|
| **Offline-first** | The study library, search index, and all personal study state live on the device. No account required to study. |
| **Governed content** | Every study item passes through a governed pipeline — sourcing, human examiner review, and release gates that fail closed. Content that hasn't cleared review does not ship. |
| **Honest UX** | The app never fakes availability. If a paper, narration, or answer isn't ready, the interface says so plainly instead of showing empty promises. |
The concept in one picture — a student studying offline, the on-device engine behind the app, and the governed pipeline study material must pass before it ships:
Beginner-friendly overview. The Architecture diagram below is the more technical view. PNG fallback: `diagrams/prepnest-concept.png`
---
## Architecture
```mermaid
flowchart TB
subgraph Pipeline["Governed Content Pipeline (private)"]
SRC[Curriculum-aligned sourcing] --> REV[Human examiner review]
REV --> GATE{Release gates fail closed}
end
GATE -->|released content only| DB[(Bundled SQLite content database)]
subgraph App["Mobile App (Expo / React Native)"]
DB --> FTS[Local full-text search]
DB --> READ[Lesson reader · practice questions formulas · glossary]
STATE[(Local-only user state notes · highlights · saved items)] --- READ
FTS --> READ
end
subgraph Media["Media Factory (private)"]
MANI …