Education

Lessons and payments for a music school

A music school schedules weekly lessons between teachers and students, bills monthly in advance, and tracks what each student practised. A cancelled lesson with enough notice becomes a credit; one without notice does not.

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

Managing weekly music lesson scheduling and monthly advance billing while tracking student practice logs and enforcing cancellation credit windows.

Section 03 · Screens

Every screen, and what it is for.

  • ›Dashboard — teacher or student views upcoming lessons and practice logs, instant load of current week.
  • ›Schedule Manager — admin or teacher books recurring weekly time slots, instant calendar conflict check.
  • ›Billing Portal — admin views monthly invoices and payment statuses, instant total calculation.
  • ›Practice Tracker — student logs daily repetition and notes, instant submission confirmation.
  • ›Cancellation Desk — teacher or admin processes absences and triggers credit rules, instant status update.

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, role enum(admin, teacher, student), email text, created_at timestamptz

Access · Users read their own record; admins read all rows.

lesson

id uuid, teacher_id uuid, student_id uuid, starts_at timestamptz, ends_at timestamptz, status enum(scheduled, completed, cancelled_credited, cancelled_forfeited), created_at timestamptz

Access · Teachers and students read rows where they are assigned; admins read all.

practice_log

id uuid, student_id uuid, lesson_id uuid, practice_date date, duration_minutes int, notes text, created_at timestamptz

Access · Students read their own logs; assigned teachers and admins read all.

invoice

id uuid, student_id uuid, billing_month date, total_amount numeric(10,2), status enum(pending, paid, void), created_at timestamptz

Access · Students read their own invoices; admins read all rows.

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

scheduled → completed | cancelled_credited | cancelled_forfeited

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 between teachers and students cause missed lesson windows and disputed cancellation credits.

Store all lesson timestamps in UTC and convert to user local time on the client.

Concurrent lesson bookings for the same teacher create double-booked time slots.

Enforce strict exclusion constraints at the database level for overlapping teacher schedules.

Section 08 · Deliberately left out

What version one does not do.

  • ×Automated Stripe payment collection — manual invoice generation in v1 keeps scope tight, add Stripe when payment failure handling is needed.
  • ×Detailed parent-child multi-user accounts — direct student logins suffice for v1, add family grouping when multi-student management becomes mandatory.

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 is the exact notice threshold in hours required to turn a cancelled lesson into a credit?
  • How are monthly advance billing amounts calculated when students join mid-month or take scheduled breaks?

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