work / mbprep

MBPrep

Exam prep for Nigerian medical students: answered question banks, timed mocks and a Telegram bot on one account.

Years
2026
Status
live
Live
mbprep.app

What it is

MBPrep turns past MBBS exam papers into answered, topic-mapped question banks. Students practise them on the web, in an Expo app, and through @MBPrepBot on Telegram, all against the same account: timed mocks marked like the real paper, spaced revision, an intel view of what examiners keep setting, and payments in naira.

Read more

One Elysia API Worker serves all three surfaces from one D1 database, answers included; question pictures sit in private R2. On Telegram a timed mock is held by a Durable Object alarm per exam, with a cron sweep every five minutes as a backstop; on the web and the app the paper keeps its own clock and the server accepts it up to 60 seconds past the limit. New banks arrive as drafts, are validated and approved, and publish through a Cloudflare Workflow that can roll back.

The business runs through an admin dashboard and an admin MCP server with 134 tools: students, payments, programmes, discount codes, bank drafts and publishing. Every write needs a reason and lands in an audit log, so an agent can operate it without anyone wondering who changed what.

Stack

  • TypeScript
  • Bun
  • Elysia
  • Next.js
  • Expo
  • Cloudflare Workers
  • D1
  • R2
  • Durable Objects
  • Cloudflare Workflows
  • Telegram Bot API
  • MCP
  • Python

Counted

  • 874commits in the monorepo
    git rev-list, to 2026-10-11
  • 7apps
    api, web, admin, mcp, hypatia, mobile, admin-mobile
  • 134admin MCP tools
    apps/mcp tool registry, 2026-10-12
  • 66D1 migrations
    apps/api/migrations
  • 109test files
    repo count

How it works

The system as a machine on a bench. Hover or use the arrow keys to drive it.

mbprep
The paper: one card from each format, sent down one chuteShutters: open while the paper's clock runsSweep hand: 6° a minute; the ratchet clicks every 5 minutesOne API Worker serves the web site, the app and @MBPrepBot on Telegram from one D1 question bank. A mock (four formats: true/false, single best answer, EMQ, picture test) closes on time: on Telegram an ExamTimer Durable Object's alarm hands it in, with the 5-minute cron as its net; banks go live through a publish Workflow that can roll back. The tour runs each mock sped up.

The path through it

  1. Document intakeExam corpora in Google Drive are listed, matched against registered source documents, and only new or changed files are downloaded.
  2. HypatiaThe content engine extracts, classifies, solves and blind-verifies each question into a bank draft. It has its own page.
  3. Validate · approve · publishA founder approves the draft; a Workflow in the admin MCP Worker publishes it on schedule (prepare, batches, finish, wait, flip) and can roll it back.
  4. One API, three surfacesThe Elysia Worker serves mbprep.app, the Expo app and the Telegram webhook from the same D1 bank.
  5. Timed mocksFour formats: true/false, single best answer, EMQ, picture test. On Telegram a Durable Object alarm per exam plus a five-minute cron sweep; on web and app the paper's own clock, with 60 s of grace.
  6. Operateadmin.mbprep.app and mcp.mbprep.app (134 tools); every change carries a reason in the audit log.