Zeqah
Offline-First Exam Prep Mobile App + Admin Platform
The Challenge
Most exam prep tools assume stable internet and are painful to use in low-connectivity regions. I needed to build a study experience that stays useful offline, keeps progress consistent after reconnect, and avoids the manual overhead of typing thousands of past questions into a database.

The Approach
Built two connected products: (1) an Expo/React Native student app with local-first progress tracking and queued sync, and (2) a Next.js admin portal for question ingestion, review, and publishing. I used Prisma + PostgreSQL for the backend and added an AI-assisted parsing pipeline so admins can review generated question JSON instead of entering everything manually.
System Architecture
The architecture centers on an append-only offline change log in the mobile app. User actions (quiz attempts, progress updates, mission events) are recorded locally and replayed to the API when connectivity returns. The API applies idempotent writes and conflict rules before committing to PostgreSQL. Gamification state (XP, badges, points) is computed server-side to keep scoring logic tamper-resistant. On the content side, admins upload raw PDFs/images, the parser generates structured questions, and the admin approves records before release to students.
System architecture overview
Built For
Secondary school and university-entry exam candidates who study with intermittent internet access. Secondary users are content editors who curate and publish past-question material through the admin portal.
Design Decisions
Why implement a custom offline-sync engine?
Offline behavior is the core product requirement, not a nice-to-have. A custom sync log let me explicitly model retries, ordering, deduplication, and conflict handling for study progress events instead of depending on black-box sync behavior.
How does AI-assisted content minting work?
Admins upload scans/PDFs of exam material, the parser extracts candidate question objects (prompt, options, answer, explanation), and the admin validates each record before publish. This keeps a human quality gate while reducing manual data entry time.
Why use a Points Wallet and XP system?
I separated progression from rewards: XP reflects learning activity and unlock progression states, while points are spendable in-app. Keeping both on the server makes it easier to audit behavior and prevent client-side score inflation.
Tech Stack
Outcomes & Impact
- Delivered a working React Native app with offline progress logging and reconnect sync
- Built an admin workflow for ingesting raw past-question files and publishing reviewed content
- Implemented server-side gamification ledger (XP, badges, missions, points)
- Defined a schema that supports content versioning, quiz attempts, and replay-safe sync events
💬 Behind the Scenes
“The hardest part was database modeling, not UI. Designing for network partitions forced me to treat every student action as an event that might arrive late, twice, or out of order, then make the backend deterministic anyway.”