Education
Lesson scheduling for a driving school
A driving school with eight instructors. Students book lessons against a specific instructor and car, pay per lesson or with a package, and the instructor records what was practised and the student's progress against the test syllabus.
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 system must ensure a student can book an available lesson slot with a specific instructor and that the booking is instantly confirmed across the school's schedule.
Section 03 · Screens
Every screen, and what it is for.
- ›Booking Calendar — Student/Admin books a lesson against an instructor's real-time schedule, which must update instantly. — Student, Admin, Select an available slot, confirm booking, Instructor availability
- ›Student Dashboard — Student views upcoming lessons, remaining package credits, and past progress notes, with credits updating instantly. — Student, Review progress, navigate to booking, Remaining lesson credits
- ›Instructor Schedule — Instructor sees their daily/weekly lessons and can access a specific lesson's report form. — Instructor, View upcoming lessons, prepare for the day, Today's lesson list
- ›Lesson Report — Instructor records topics practiced and student progress notes after a lesson is complete. — Instructor, Fill out notes, mark lesson complete, Saving the report
- ›Admin Dashboard — Admin views all bookings, payments, and instructor schedules for operational oversight. — Admin, Monitor school activity, manage issues, Revenue for the current day
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
id uuid, email text, full_name text, role enum('student', 'instructor', 'admin')
Access · Admin reads all. Users read their own row.
Lesson
id uuid, student_id uuid, instructor_id uuid, car_id uuid, start_time timestamptz, end_time timestamptz, status enum('booked', 'confirmed', 'completed', 'cancelled'), notes text, syllabus_progress jsonb
Access · Admin reads all. Instructor reads lessons they teach. Student reads their lessons.
Transaction
id uuid, student_id uuid, amount numeric(10,2), type enum('package', 'single_lesson'), created_at timestamptz, lesson_id uuid
Access · Admin reads all. Student reads their own transactions.
PackagePurchase
id uuid, student_id uuid, package_name text, total_lessons int, used_lessons int
Access · Admin reads all. Student reads their own purchased packages.
InstructorAvailability
id uuid, instructor_id uuid, start_time timestamptz, end_time timestamptz
Access · Admin reads all. The owning instructor reads their own availability.
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 → confirmed → completed | cancelled(reason)
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.
An instructor's availability is booked by two students simultaneously, creating a conflict.
Use database-level exclusion constraints on the Lesson table for instructor_id and time range.
An instructor has poor connectivity in the car and will not be able to submit the post-lesson report.
Build the report form to save locally on the device and sync when connection returns.
A student cancels a lesson but the instructor's availability slot does not become bookable again.
Use a transactional database operation to update lesson status and delete the associated booking hold.
Section 08 · Deliberately left out
What version one does not do.
- ×Structured syllabus progress tracking, using the 'syllabus_progress' JSON field for free text notes in v1. — Defining the syllabus structure is a separate project; a text field is sufficient for launch., When the school has formalized its curriculum into discrete, trackable skills and milestones.
- ×Automated payment for single lessons upon booking. All payments handled manually by Admin in v1. — Payment gateway integration adds significant work; manual reconciliation is faster for an MVP., When the volume of individual bookings makes manual payment confirmation a bottleneck for the admin.
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.
- How is instructor availability defined: are they fixed shifts or ad-hoc blocks of time they open up?
- What is the payment processing flow for new students buying packages? Is it online via card, or an offline process?
- What are the business rules and penalties for student cancellations, and do they differ based on notice period?
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.