TutorHub — Tutor-Booking Platform (spec-driven build)
A greenfield tutor-booking platform for the Indian community, currently in the spec-driven planning stage — a full product brief and eight phase gate/plan docs, adversarially reviewed, ahead of any code.
- NestJS
- Prisma
- PostgreSQL
- React Router v7
- Tailwind
- LiveKit
- Razorpay
- Stripe
TutorHub (working name) is a two-person greenfield build: a tutor-booking platform with live online sessions for the Indian community, in India and abroad. Students find and book tutors for 1:1 or group sessions and attend them in-app over live video, rather than through an external meeting link.
What it is
Three roles at launch — student, tutor, admin (parent role planned, not yet scoped) — on a single platform, no multi-tenancy. Students discover tutors by subject, availability, price, and rating; book a seat in a 1:1 or group session; pay through a provider-agnostic adapter (Razorpay for India, Stripe for international); and join the session inside the product on a self-hosted LiveKit SFU. Tutors manage their own profile, availability, and bookings and get paid out; admins approve tutor applications and hold platform-wide oversight.
Where it actually is right now
There’s no running code yet — software/backend and software/frontend are still empty
skeletons. What exists is the planning layer, treated as the real first deliverable: a product
brief with every open business decision marked [TBD] instead of guessed at, and eight phase
gate/plan documents (Foundations through Admin Oversight & Polish) written gate-first, each citing
the brief section it traces back to. Every phase gate went through a dedicated adversarial review
pass — hunting cross-phase inconsistencies, seat-model bugs, and lock-sharing gaps — before the
matching implementation plan was allowed to exist.
How it’s being built
- NestJS + Prisma + PostgreSQL on the backend, React Router v7 (SSR) + TypeScript + Tailwind + shadcn/ui on the web frontend, React Native (Expo) planned for mobile — chosen and written up in a dedicated tech-stack decision doc rather than defaulted into.
- Seats, not sessions. Booking is modeled as reserving a seat in a session with capacity ≥ 1 from day one, so pricing, refunds, and cancellation apply per seat and a batch class survives a partial cancellation — instead of retrofitting group classes onto a 1:1-only model later. Live video runs on a self-hosted LiveKit SFU (OSS-first, per the project’s hard $0-tooling constraint), with Jitsi Meet planned as a fallback.
- Money as integers, always. Paise/cents only, formatted for display at the edge, across both Razorpay and Stripe paths behind one payment adapter.
- An archived prototype for reference. An earlier Express + MongoDB / React Router prototype
(with a working P2P WebRTC session room) is preserved read-only in
legacy/— informing the rewrite without being built on top of.
What’s next
Scaffolding software/backend and software/frontend against the Phase 0 (Foundations) plan,
then working phase by phase through identity/onboarding, tutor discovery, booking, payments, and
live video — with the monetization model and late-cancellation payout policy resolved as blocking
decisions before the Payments phase gate is finalized.