Software
2025
ShippedSchool ERP for a private educational institution
Context
A private educational institution needed to run its operations beyond spreadsheets: students, subscriptions, teachers, attendance, purchases, and finances were managed manually across disconnected files.
Problem
No single system tracked a student from registration to yearly renewal. Subscription status was unclear, attendance was manual, teacher session compensation was hard to reconcile, and every new school year meant re-entering student data by hand.
Constraints
The school operates offline in parts of the building, so a cloud-only system was not acceptable. Staff work in three languages, so the interface had to be fully localized — not partially translated.
Solution
A desktop ERP built with Electron, React, and TypeScript that runs locally with no cloud dependency. Sixteen domain modules cover students, subscriptions, branches, modules, groups, teacher sessions, purchases, QR check-in attendance, activity logging, and pricing. Creating a student automatically creates their yearly subscription, assigns fundamental modules, and sets up default groups.
Technology
Key decisions
- Local-first storage with a documented SQLite schema — data persists on-device and can run in plain browser mode for fast development.
- QR check-in gates on yearly fee validity before allowing attendance, so expired subscriptions surface immediately at the door.
- Full RTL support for Arabic with document direction switched by locale.
Outcome
- Twenty screens covering the full operational cycle from registration to payroll reporting.
- A student can be registered, subscribed, assigned to groups, checked in by QR, and issued a printed ID card within one system.
- Complete audit trail of create, update, delete, and login actions.
- Trilingual interface: English, Arabic (full RTL), and French.
- Three run modes: browser, desktop, and full-stack with ID card generation.
Lessons
- Local-first was the right call for an offline environment — a cloud-only product would have been rejected on day one.
- Auto-creating the yearly subscription at student creation removed a whole class of missed-renewal errors.