NORMAL
← cd ~/work
in progress Co-founder · Full-Stack Engineer · 2026 — Present

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.