Threads scoped by relationship
Not everyone can message everyone. A teacher reaches their own students and those students' parents; a center reaches the people subscribed to it. No relationship, no door.
Mathematics — Grade 12 · Wednesday session
Edura runs a center or a tutor from the first booking to the last pound: check-in recorded at the counter, cash or online collection, and each lesson's takings split the moment it closes — written once, and beyond anyone's reach to erase.
What a single lesson is worth is derived by one function for the whole system. The screen that shows you the split before you confirm, and the engine that writes it into the ledger afterwards, call that same function. There is no second copy to disagree with the first.
On a 12-lesson course at 1,200 EGP with a single-lesson price of 120 EGP, one lesson is worth:
The first two differ because both numbers are real: a full-term enrolment amortises cheaper per lesson than a drop-in. That is why the choice is recorded on the group, rather than decided by whichever function reads the row first.
Distributing zero to everyone looks like a success and is a permanent loss: the ledger is append-only, so the lesson stays closed and nobody was ever paid. The system refuses and rolls the whole thing back until a price exists.

Online — the amount is read from the server-side payment intent, never from the browser.
Cash at the counter — written into the same ledger, in the same moment. Not a lesser second record.
How much came in today, and who still owes?
Halls and schedules, front-desk staff on bounded permissions, collection sheets, and off-system teachers entered by hand who still land in the same reports as everyone else.

What have I earned on the lessons I delivered?
Your groups, your schedule, your attendance, and a wallet that moves only when a lesson closes. Hand the daily running to an assistant; the money authority stays with you.
Is my child actually attending, and what am I paying for?
Attendance, absence and grades, payment for a lesson or a month from your own wallet, and read-only sight of your child's threads with adults.
What do I have, and when?
Subjects assigned automatically from your year and track, your schedule, your wallet, and a card carrying an eight-character code the counter can read.
What exactly am I delegated?
Everything the teacher does, except the money. And every action is recorded under your name on their behalf — never under theirs.
Can I see only my own job, not the whole center?
A preset decides the screen: receptionist, manager or accountant. A receptionist cannot reach finance, and an accountant cannot reach collaboration requests.

The clerk opens it and the lesson running right now is already selected. Search by name or code, or read the card, take the cash, and record the check-in — one flow, without leaving the page.

Messaging inside the product is not a nicety: it is what lets a teacher keep their personal number private, a parent ask a question, and a minor stay within their guardian's sight.
Not everyone can message everyone. A teacher reaches their own students and those students' parents; a center reaches the people subscribed to it. No relationship, no door.
If the student is a minor, their guardian can read their threads with adults — read-only, never writing as them. And minor is the default: without a verified date of birth, the account is treated as a minor.
A student registered at the counter gets a WhatsApp message with their student ID and a secure link to finish their own details — instead of standing at the desk filling in forms.
A weekly summary of the week that ended: lessons, collections, and who still owes. Not a report you open when you remember — it arrives.
The money and audit tables have UPDATE and DELETE revoked at the database level — for the whole application, back office included. A correction is written as a new entry, and the wrong one stays visible.
Isolation is enforced as row-level policies inside the database, not as a clause every query must remember. One endpoint that forgets its condition still cannot reach another center's rows.
Every administrative operation writes its row in the same transaction that performs it — so a change cannot commit without leaving a trail.
A student is a minor unless a date of birth exists, is verified, and puts them at 18 or over. Otherwise adult-facing messaging stays locked until a guardian address is confirmed — without stopping a single lesson, payment or sign-in.
Registration is free, and commission is only ever charged on lessons actually delivered.