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
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.
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.
3Track topics
Every topic of the student’s grade moves from not started to done, with progress per subject.
4Analyse exams
Practice-exam results go in per subject (correct / wrong / blank); nets and trends are calculated for the coach.
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
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.
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.
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.
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
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
Gallery

The sign-in screen — the panel is invite-only. 
The business’s public site, which I also built (meetmentorz.com).
Want the longer version — the code, the pipeline, the trade-offs?
Email me