Parent-teacher conferences.
Report-card night is the one evening a term when every parent wants ten minutes with a teacher — and the classroom door becomes a queue. YESS turns that queue into a diary. A teacher opens a set of bookable time slots; parents reserve one from their portal; both sides get a reminder the day before and an hour before. The booking itself is race-safe — two parents cannot claim the last slot at once. This handbook walks the whole flow, and is honest about what is built today versus what is still on the roadmap.
- 2core tables
- 4migrations
- T-24h · T-1hauto reminders
- ≈8 minto read
Prologue
The queue at the classroom door#
The parent-teacher conference is a small, high-stakes surface. A family gives up an evening; a teacher has thirty of those conversations back to back; a five-minute overrun cascades into a forty-minute wait by the end of the corridor. The old fix was a paper sign-up sheet on the classroom door — first come, first served, illegible by 6pm.
YESS replaces the sheet with a booking diary. The teacher decides when they are available and how many families each window holds; the parent picks a time from their phone; the platform enforces the capacity, sends the reminders, and tells each side when the other cancels. This chapter is deliberately scoped: it documents the booking spine that is live today, and names — plainly — the confirm / complete / no-show lifecycle and the post-meeting outcomes that are still to come.
A diary the teacher owns, a slot the parent claims, a reminder nobody has to send by hand.
Chapter one
One conference evening#
Follow one Form-4 report-card night end to end and the rest of the book is detail.
Monday, 10:00. Mrs Tanoh, the Form-4 maths teacher, opens /dashboard/conferences. She clicks New slot and creates six windows on Saturday: 09:00 to 12:00, each twenty minutes long, one family per window, in person, in Room 14. She repeats for the afternoon. The slots appear under her Open slots tab; the Bookings tab is empty for now.
Monday, 20:15. Mr Mensah, a Form-4 parent, opens /portal/conferences. He sees Mrs Tanoh's open windows — only the ones that still have room. He taps the 09:20 slot, types a short agenda ("I'd like to talk about the mock-exam result and homework routine"), and confirms. The booking is his; the slot's remaining capacity drops by one. If another parent had been tapping the same window a second later, the platform would have handed them the next free slot instead.
Monday, 20:15 + 1s. Mrs Tanoh's phone shows a New conference booking notification. Her Bookings tab now carries Mr Mensah's reservation with his agenda attached, so she walks into Saturday already knowing what he wants to discuss.
Friday, 09:20 (24 hours before). A reminder lands with both of them — parent and teacher — through their preferred notification channels. Saturday, 08:20 (one hour before), a second reminder fires. Neither Mrs Tanoh nor Mr Mensah had to set an alarm.
Chapter two
The teacher opens the diary#
Everything starts with a slot. A slot is a bookable window the teacher owns: a date and time, a duration, a capacity, a mode, and (for in-person meetings) a location. Slots live in the conference_slots table and are created from the New slot dialog at /dashboard/conferences.
What a slot carries
- 1
Opens-at time
The date and start time of the window. This is copied onto every booking made against the slot, so the parent's reservation and the teacher's diary always agree.
- 2
Duration
Slot length in minutes, constrained between 5 and 180, default 20. Twenty minutes is the sensible report-card-night default; a pastoral or SEN meeting may want longer.
- 3
Capacity
Maximum bookings per slot, constrained between 1 and 50, default 1. Set it to 1 for a private one-to-one; raise it if you run a small-group review where several families sit in together.
- 4
Mode
In-person or virtual. In-person slots also take a free-text location — a room number or building. Virtual slots skip the location field.
- 5
Owner + school
Every slot is stamped with the creating teacher and the school. The database only lets a teacher manage their own slots — or a communication moderator manage across teachers.
The dashboard has two tabs. Open slots lists the teacher's own upcoming windows; Bookings lists the reservations parents have made against them, with a count badge. The Bookings tab is a read-only review surface: it shows the scheduled time, duration, mode, the parent's agenda, and a status badge, so the teacher can prepare for each conversation.
Chapter three
The parent claims a slot#
A parent opens /portal/conferences and sees the school's open slots — filtered so only windows that still have room appear. Tapping one opens a booking dialog with an optional agenda box; confirming reserves the slot. The reservation is written to the parent_teacher_conferences table with status = booked, the scheduled time and duration copied from the slot, and the parent's agenda attached.
Why the last slot never double-books
Booking does not write the row directly. It calls a database function, book_conference_slot, which runs inside a single transaction and locks the slot row before counting its reservations. That row lock is what makes the last slot safe: when two parents tap the same 09:20 window in the same instant, the function serialises them — the first claims the slot, and the second is rejected because the capacity is now full. The same function also refuses to book a slot that is inactive or in the past, and stops a parent from booking the same slot twice.
Cancelling
Each of the parent's own bookings carries a cancel control (until it is already cancelled or completed). Cancelling sets the booking's status = cancelled and records an optional reason. The other side is told automatically — see the next chapter.
Chapter four
Reminders nobody has to send#
A conference is only useful if both people remember it. YESS drives three automatic touchpoints, all through the notifications fabric, so each recipient gets them on whichever channels they prefer.
Three automatic touchpoints
- 1
On booking
The moment a parent reserves a slot, a database trigger writes a 'New conference booking' notification to the teacher, deep-linked back to the conferences dashboard. The teacher never has to check the board to know a family has booked.
- 2
On cancellation
When a booking is cancelled, a trigger notifies the other party — parent tells teacher, or teacher / moderator tells parent — carrying the cancellation reason when one was given, deep-linked to the right side's screen.
- 3
Timed reminders
A scheduled job runs every fifteen minutes and fires two reminders per booking: one twenty-four hours before, one an hour before. Both parties get both. Each reminder is stamped so it is never sent twice.
The reminder job (enqueue_conference_reminders) only touches future, non-cancelled bookings, and writes one notification to the teacher and one to the parent for each. Which channels actually fire — in-app, push, WhatsApp, SMS, email — is decided per recipient by their notification preferences, exactly as every other signal in the platform is routed.
Chapter five
The parent's conference mini-world#
Each booking a parent makes has its own detail page at /portal/conferences/[id]. It gathers what the family needs before they walk in, across three tabs.
- Overview. The agenda the parent wrote, the mode of the meeting, and — if the booking was cancelled — the reason.
- Counterparty. Who the meeting is with. Today this shows a placeholder reference to the teacher; the full teacher profile card links in with the staff-profile work in a later release.
- History. A simple timeline — booked, scheduled, and the current status — so the family can see where the reservation stands.
The same booking flow runs on the mobile app, where a parent can browse open slots and reserve one from their phone. The teacher's diary is web-only.
Chapter six
What makes conference booking careful#
Four things done properly
- 1
Race-safe by row lock
The booking function locks the slot row and counts live reservations inside one transaction, so the last window in a fully-booked evening can never be handed to two families. This closed a real over-booking bug — it is not an assumption.
- 2
Capacity the teacher sets
A slot holds between one and fifty families, chosen by the teacher. A private one-to-one and a small-group review use the same primitive — capacity is a number, not a separate feature.
- 3
Both sides, both reminders
Every booking earns a T-24h and a T-1h reminder to the parent AND the teacher, deduplicated so neither is nagged twice. On top of instant booking and cancellation notifications, no one has to remember the meeting on their own.
- 4
Privacy at the row
A conference row is visible only to the booking parent, the teacher it is with, and communication moderators — enforced by the database, not the screen. A parent can never see another family's booking.
Planned features
What is still to come#
Conference booking is deliberately documented as a focused, working spine. Several natural next steps are scaffolded in the schema but not yet wired to a screen. They appear here so you can plan around them and are not surprised by their absence.
Five honest gaps
- 1
The full status lifecycle
A booking can technically be booked, confirmed, cancelled, completed, or no-show — but today only 'booked' (on reservation) and 'cancelled' (by the parent) are ever written. There is no teacher control yet to acknowledge (confirm), close out (complete), or flag a no-show. The lifecycle is defined; the buttons are the planned work.
- 2
Post-meeting outcomes
There is a pre-meeting agenda, but no place yet to record what was agreed afterwards — action points, follow-ups, a shared summary. Outcome capture is planned; today the record ends at the agenda and the status badge.
- 3
Linking the child
A booking can reference the specific student it concerns, but the booking dialog does not yet ask which child, so the link is generally left empty. Wiring the child picker into the booking flow is a small, planned addition.
- 4
Virtual rooms
A slot can be marked virtual, and a booking has a slot for a linked meeting room — but nothing provisions that room yet, so a virtual conference has no join link at present. Auto-creating the room at booking time is the planned step.
- 5
Slot management + admin oversight
Teachers can create slots but cannot yet edit, delete, or deactivate them, and there is no dedicated admin screen that oversees every teacher's diary across the school. Both are planned; today slot management is create-only and cross-teacher oversight is via moderator permissions.
Adjacent modules
Where conferences connect#
Conferences are one chapter of the wider communication cluster — they lean on the same notification fabric, the same portals, and the same calendar the rest of the school reads from.
Adjacent modules
- 15Communication hubConferences are one of the thirteen chapters of the communication cluster; the dashboard entry point is a card on the communication hub.
- 17NotificationsEvery booking, cancellation, and T-24h / T-1h reminder is routed by the notifications fabric on each recipient's preferred channels.
- 16Parent & student portalsParents browse open slots, book, and open the conference mini-world entirely from the parent portal, on web and mobile.
- 31Calendar & eventsReport-card evenings and parent-teacher nights sit alongside terms and holidays on the school's shared calendar.
- 09Report cardsConference evenings usually follow a reporting cycle — the report card is the document the conversation is built around.
Tutorial
Do it step by step#
Run one conference evening end to end, from the teacher opening the diary to the reminder that lands the day before. Four steps, in the order the term actually works.
- 1
Open the diary
As a teacher, open /dashboard/conferences and click New slot. Set the date and time, a duration (5-180 minutes, 20 is a good default), a capacity (1 for a private meeting), the mode, and — for in-person — a room. Repeat for each window. Your slots appear under Open slots.Set capacity to 1 for one-to-one report-card meetings; raise it only for a small-group review where several families sit in together.
- 2
Let parents book
Parents open /portal/conferences, see only the windows that still have room, pick one, and add an optional agenda. The booking is written race-safely — the platform locks the slot and enforces its capacity, so the last window is never handed to two families. - 3
See the bookings roll in
Each reservation notifies you instantly and lands in your Bookings tab with the parent's agenda attached, so you can prepare for each conversation. If a family cancels, you are told automatically, with their reason if they left one.Read the agenda before Saturday — a parent who wrote 'homework routine and mock result' has told you how to spend the twenty minutes.
- 4
Let the reminders do the chasing
You do nothing here. A day before and an hour before each booking, both you and the parent get a reminder on your preferred channels — in the parent's language, outside their quiet hours. Nobody has to send a "see you tomorrow" message by hand.
The queue at the classroom door is now a diary — booked, reminded, and ready before Saturday morning.