Skip to content

Case studyLive

Mentor Z

A coaching panel that replaced a stack of per-grade Excel workbooks — running entirely on Cloudflare’s free tier.

Role
Sole engineer — product, backend, frontend, Cloudflare
When
2026
  • Backend
  • Full-stack

The panel holds real students’ data, so it is invite-only and only public pages are shown here. The source is private.

Who it’s for

  • Education coaches preparing students for LGS and YKS who ran every student out of a per-grade Excel workbook — assignments, completed work, topic checklists and exam results.
  • Students, mostly on their phones, who need today’s homework and a quick way to log what they actually did.
  • Coaching organisations where one admin coach oversees the others and every student.

What I built

  • Designed and built it alone, from the domain model to the screens: thirteen of them, mobile-first for students and desktop-first for coaches.
  • A Hono API on Cloudflare Workers with D1 (SQLite) and Drizzle migrations, custom session auth with manual approval, and per-organisation data isolation.
  • A curriculum (grades → subjects → topics) extracted once from the coaches’ workbooks into committed seed SQL, so the workbooks are never needed again.
  • A nightly cron that rebuilds a demo organisation, guarded by a test that derives the real foreign-key graph and a check on the Worker’s subrequest budget; plus printable weekly programmes and academic-year terms that keep every student’s history.

How it works

  1. 1Plan the week

    The coach opens a student’s week and adds per-day assignments — subject, topic, publisher, question target — or copies last week and adjusts.

  2. 2Log the work

    On their phone the student logs what they did: type, pages, minutes, questions, correct and wrong. Totals and the study streak are computed, not typed.

  3. 3Track topics

    Every topic of the student’s grade moves from not started to done, with progress per subject.

  4. 4Analyse exams

    Practice-exam results go in per subject (correct / wrong / blank); nets and trends are calculated for the coach.

  5. 5Spot who’s behind

    The coach’s home shows who is behind on homework this week; a printable weekly programme goes home with the student.

Key decisions

  1. 01

    Edge-only, on the free tier

    Instead of: A small VM with Node and PostgreSQL.

    Why: For a coaching business the right running cost is zero and the right number of servers to patch is none. Workers + D1 + Pages give that; the price is a CPU and subrequest budget per request, so heavy jobs are batched and measured.

  2. 02

    Multi-tenant, but no self-signup and no payments

    Instead of: A self-serve SaaS with sign-up and billing.

    Why: Organisations and coaches are created and approved by the platform owner. That keeps abuse, billing and onboarding out of v1, while the data model is already isolated per organisation for when self-serve makes sense.

  3. 03

    One shared curriculum, seeded once

    Instead of: Keep importing each coach’s Excel files, or let every coach edit their own curriculum.

    Why: The workflow is identical across grades — only the topics differ. One clean grade → subject → topic taxonomy, generated once and committed, plus free-text topics per assignment for the odd case.

  4. 04

    Compute the numbers, don’t store them

    Instead of: Denormalised counters for totals, nets and streaks.

    Why: Question totals, nets (correct − wrong ÷ 4), completion and streaks are derived from the logged work, so they can never drift from it — and at this scale SQLite computes them comfortably.

Architecture

CLIENTSStudent appReact · mobile-firstCoach & adminReact · Vite · TailwindHTTPS · JSONEDGECloudflarePages · WorkersAPPLICATIONHono APIsession auth · orgscopingCron triggernightly demo reseedSQL · batchedDATAD1SQLite · DrizzlemigrationsCurriculum seedgenerated SQL,committed↑ ships everything aboveDELIVERYWorker testsVitest · WorkersruntimeUI testsVitest · jsdomSeed budgetsubrequest checkwrangler deploymigrate · seed

Everything runs on Cloudflare’s free tier — no servers to patch. Everything here is mine.

Numbers

monthly hosting (Cloudflare free tier)
$0
screens for students, coaches and admins
13
test files, worker tests on the real runtime
120+
grade levels in one shared curriculum
8

Tech stack

Backend

  • Hono
  • TypeScript
  • Cloudflare Workers
  • D1 (SQLite)
  • Drizzle ORM
  • Cron Triggers

Frontend

  • React
  • Vite
  • Tailwind CSS

Quality

  • Vitest (Workers runtime)
  • Miniflare
  • jsdom
  • tsc project references

Want the longer version — the code, the pipeline, the trade-offs?

Email me
Next case studyHockey Pick’em & Sub PulseTwo apps on Reddit’s Developer Platform: a free-to-play hockey prediction game, and a weekly health report with alerts for moderators.