Cyca/Communities/Schools and classes
Schools
The problem with a school in a chat app is never the chatting. It is that somebody has to build Class 8 by hand every year, know which of the four Rahims is in it, and prove to a parent that the teacher in there is a teacher.
When the school is created, its classes are named at the same time — Class 6, Class 7, Class 8, or whatever the school calls them. Each becomes a room inside the school with its own members, its own count, and its own admin.
The school room stays the school room: notices, the whole community, everyone. A class room is the thirty people it concerns.
A school is created with its teachers already named — a list of seats, each with a name and a title. Nothing about that requires the teachers to be on Cyca yet, or to be online, or to be anywhere near the phone that made the school.
Each seat gets an eight-character code. The teacher opens the school, finds their own name in the staff list, taps This is me, types the code, and the seat is theirs — along with admin of the class that matches their title. The code stops working the moment it is used.
"Mr. Karim — Class 8" exists before Mr. Karim does.
Eight characters. Only an admin of the school can see them.
Their name plus the code, once.
No one had to be promoted by hand, and no one had to guess who the message was from.
A claim only ever grants. Someone who already owns or administers the school does not get demoted to staff by claiming a teaching seat — that was a real bug, caught in testing, and the rule now is that roles are never taken away by a claim.
A student in the school asks to join Class 8 and says who they are — a roll number, a name, whatever the teacher needs. The request lands under the class row on the teacher's phone. They approve it, and the student is in.
That is the whole admissions problem, solved in the room where the answer is known, by the person who knows it.