Appearance
Institution types and features
Institutions work differently. A school runs on classes, subjects, a timetable and term examinations. A Hifz academy has none of those: each Ustadh has a Halqa of students and records their progress every day until the course is complete. Qurtuba serves both, and mixtures of both, from one codebase.
Types
| Type | Starts with |
|---|---|
| School | Classes, subjects, timetable, attendance, examinations, and the rest of the school toolkit |
| Hifz | Course tracking: groups (Halqas), mentors (Ustadh), daily Sabaq / Sabaqi / Manzil logs, Juz tests |
| Hybrid | Both |
Coaching and seminary are planned.
A type also sets the institution's vocabulary. In a Hifz academy the menus say Ustadh, Halqa and Hifz Progress rather than teacher, group and progress. It also sets defaults: target pages, log-column labels, Halqa capacity, and whether pages mean Mushaf pages.
Features
A feature owns a set of pages (Examinations, Course Tracking, Library, Store…). Pages in no feature are core and always on: dashboard, students, staff, calendar, settings.
An institution's effective features are its type's defaults, plus any overrides. A school that doesn't use the store can switch the store off. A Hifz academy that sets written exams can switch Examinations on.
Who can change them
Only a super admin, from the institution's page in Super Admin. Institution administrators see the type and features read-only under Settings.
What switching a feature off does
- Its pages disappear from every menu, for every role.
- Its pages are refused, not just hidden. The permission bits for a disabled feature's pages are cleared from every session, so the database denies them too.
- The change reaches signed-in users on their next request. Nobody needs to sign out.
Data is never deleted. Switch the feature back on and everything is where it was.
For developers
Screens branch on features, never on the type's name, and use the vocabulary rather than hard-coded words. Adding a type or a feature is a migration, with no application code. See Adding a module.