Changelog
1.0.0 — School management system
The first SkoolyHub release. A complete school management system: admin panel, public website, and REST APIs for parent, teacher and student apps.
Academics
- Academic years and terms, with one year marked current and used as the scoping key throughout
- Classes, sections with capacity and class teacher, subjects and subject allocation
- Bell schedule and a timetable grid that refuses teacher and room clashes with the reason
- School calendar, syllabus units and dated lesson plans with coverage tracking
Admissions
- Nine-stage pipeline from enquiry to enrolled, with waiting-list positions
- Applicant photo, carried onto the student record at conversion
- Conversion creates the student and links or reuses the family's guardian account; running it twice returns the same student
Students, guardians and staff
- The roll with photo, placement, medical notes and category
- Server-side admission-number allocation, so two clerks admitting at once cannot collide
- Guardians linked many-to-many, with primary and can-collect flags
- Bulk CSV import, ID-card printing, cohort promotion with per-year enrolment history
- Staff directory, qualifications, documents, salary structures and payroll
Attendance
- Day and per-period registers with five statuses
- A roll-wide default with only the exceptions listed — a class of forty is one small request
- Day absences notify guardians automatically; period absences do not
- Staff attendance with check-in/out times, filterable by staff type and department
Fees
- Heads, per-class structures, concessions, invoice generation and counter collection
- Online payment driven by whichever gateway add-on the school connects — twenty ship
- The charge is computed from the invoice, never read from the request
- The ledger is untouched until the gateway confirms, and confirming twice returns the original receipt
Examinations
- Exams, per-subject papers, marks clamped to the paper maximum
- Grade scale, computed report cards with class rank
- Results gated on both the report card and its exam being published
Communication
- Circulars targeted at everyone, parents, a class or a section, with read receipts
- Leave requests from guardians and staff, approved with a note
- Per-recipient notification feed with per-channel preferences
Parent app
- A home feed merging eleven sources into one chronological stream, each card naming the screen it opens
- Cursor pagination, so a card never duplicates while the school keeps publishing
- Attendance appears only as an exception, never as a daily "present"
Teacher app
- One call for the day: lessons, outstanding registers, homework to grade, pending leave
- Self-service password reset by a code to the school email — no admin ever handles a teacher's credential
- Profile and notification preferences, with employment fields deliberately read-only
Platform
- Idempotent schema provisioning; no migration files
- Role-scoped JWTs; cross-role replay rejected
- Opaque
public_idin every URL - Money in minor units end to end
- Storage across R2, S3, Spaces and GCS, with server-side WebP variants
- Integration credentials encrypted in the database
- An API reference generated from the route handlers, so it cannot drift