Education

A marketplace for private tutors

Parents find a tutor by subject and level, book a session, and pay through the platform. The tutor is paid after the session is confirmed. Both sides rate each other, and a parent can see the notes from every past session with that tutor.

Automatically generated draft

Written by machine against our own engineering playbook. The company is invented; the decisions are the ones we would make on a real build. A reviewed blueprint goes further — nine sections, agreed line by line, and it is what the build is tested against.

Section 01 · What has to work

The product succeeds if a parent can find, book, and securely pay for a tutoring session, with tutors reliably receiving payment after the session is confirmed complete.

Section 03 · Screens

Every screen, and what it is for.

  • ›Marketplace Search — Parent searches for tutors by subject and level; seeing results must be instant.
  • ›Tutor Profile — Parent views a tutor's details, ratings, and availability; loading their calendar must be instant.
  • ›Booking Checkout — Parent selects a time slot and pays; confirmation of successful payment must be instant.
  • ›Session History — Parent reviews notes from their past sessions with a tutor; loading the session list must be instant.
  • ›Tutor Dashboard — Tutor manages their schedule and sees upcoming bookings; loading their next session must be instant.
  • ›Post-Session Summary — Tutor confirms a session is complete and adds notes; saving the notes must be instant.

Anything not on this list is not in version one. That is what keeps a fixed price fixed.

Section 04 · The data model

What it stores, and who can read a row.

user

uuid, text name, text email, text hashed_password, timestamptz created_at, enum('parent', 'tutor') role

Access · A user can read and write their own row.

tutor_profile

uuid user_id, text bio, numeric(10,2) hourly_rate, text[] subjects, jsonb availability_schedule

Access · Publicly readable. Only the owning tutor can write.

session

uuid, uuid parent_id, uuid tutor_id, timestamptz start_time, int duration_minutes, numeric(10,2) final_cost, text notes_for_parent, enum('booked', 'completed', 'paid_out', 'cancelled', 'disputed') status

Access · The parent or tutor associated with the session can read it.

rating

uuid, uuid session_id, uuid rater_id, uuid ratee_id, int score, text comment, timestamptz created_at

Access · Publicly readable after the associated session is completed.

Those access rules belong in the database, not in the screens. Someone who edits the address bar still cannot read a row that is not theirs — and the test that proves it blocks delivery if it fails.

Section 05 · States

booked → completed → paid_out | cancelled(reason) | disputed

Most scope arguments three weeks into a build are really arguments about a state nobody named at the start.

Section 06 · Where this breaks

What bites products like this one.

Time zone mismatches cause users to miss sessions, leading to disputes.

Store all times as timestamptz (UTC) and always display them in the user's local, labeled timezone.

A parent disputes a session after payment has been released to the tutor.

Hold funds in escrow and release only after a confirmation state is met by both parties or a short grace period expires.

A tutor's availability changes, but a session is booked concurrently, causing a double-booking.

Use database-level transactions with row locking when a parent is booking a specific time slot to prevent race conditions.

Section 08 · Deliberately left out

What version one does not do.

  • ×In-app messaging and video calls — For v1, users bring their own communication tools; we only broker the booking and payment.
  • ×Recurring availability for tutors — Tutors must manually create each available slot. Add recurring rules when booking volume demands the efficiency.

This is the section that protects the date, and the only place in the document where somebody says no. It is also why clients trust the rest of it.

Still open

What we would ask before quoting.

  • What payment gateway will manage holding funds (escrow) and paying out tutors (e.g., Stripe Connect, Adyen for Platforms)?
  • Does the platform provide the video call environment, or do users get a link to an external service like Zoom or Google Meet?
  • What is the exact process for resolving a 'disputed' session, and who has the final say on releasing or refunding payment?

Half of this already exists

Members Circle

The community half of this is a solved problem: paid membership, moderation triaged automatically, and a weekly digest that brings people back.

It is one of our pre-built products: the code is handed over to you, adapted to your own wording and rules, and the rest of the specification above is built on top of it rather than from scratch.

Your product, not this one

Get this written for what you are actually building.

Describe it in a sentence and the generator returns the same sections for your own product. Free, no email, nothing saved to a list.

Next step

Find out if your idea fits in 10 working days.

Tell us what you want to build. We reply the same day with a straight yes, no, or here is what we would cut.

NDA available on request