SuivEdu
Attendance tracking for schools. Teachers take the register, and parents hear about an absence by SMS or email instead of at the end of the term.
- Role
- Design, backend, frontend, deployment
- Platform
- Web app, installable as a PWA
- Status
- Live
- Links
- suivedu.com
Overview
SuivEdu digitises the attendance register. Teachers mark who is missing, the school sees it the same day, and parents are notified automatically. Around that core sit the things a school actually asks for once it relies on the register: class and student management, custom messages to parents, statistics, printable weekly reports and billing.
It is built for school groups rather than single schools. A head administrator sees every school in the group; administrators, teachers and students see only their own.
Screens
Engineering notes
Tenant isolation in one place
A school group (MotherSchool in the code) owns several schools. Instead of re-implementing access checks in every view, permissions.py holds a small set of decorators, and any view that takes a school_id, class_id, user_id or bill_id is expected to use one of them.
Reports off the request path
Weekly attendance reports are rendered with ReportLab in a Celery worker, and the page polls an export job for its status. On Heroku the web and worker dynos don’t share a filesystem, so the finished PDF or ZIP is handed back through Redis — already there as the Celery broker — with a 15-minute expiry, rather than making a round trip through S3.
Reports that point back to the source
There are three distinct report templates. Each generated report gets a stable UUID, and the PDF carries a QR code that opens a live web version of the same report.
Right-to-left in PDFs
Reports include Arabic text, which ReportLab doesn’t shape on its own. Text is reshaped and reordered with arabic-reshaper and python-bidi before it is drawn.
Explicit access to money
Billing and reports used to be granted implicitly to certain administrators. That rule was replaced with an explicit per-account permission that a head administrator switches on, so access to financial views is always a deliberate decision.
Stack
- Backend
- Python, Django, PostgreSQL
- Background work
- Celery, Redis
- Interface
- Server-rendered Django templates, Tailwind CSS, Alpine.js
- Documents
- ReportLab, qrcode, openpyxl
- Hosting
- Heroku (web and worker dynos)