
National LMS + SIS platform
Talia
An Arabic-first, multi-tenant education platform (LMS + SIS) for Egyptian schools, built to run a full authority → school hierarchy. Live at its first school, Parkway, and in active development as the platform grows.
The challenge
A school network needed one system for student records, learning, and operations — Arabic-first, RTL, and Hijri-aware — with confidential health, counseling, and special-needs data that not even school admins can override, and a data model that scales from one school to an authority running many.
What it had to do
- One system for student records, learning, and school operations
- Arabic-first, right-to-left, and Hijri-aware
- Confidential health, counselling and special-needs records that not even school admins can override
- A data model that scales from one school to an authority running many
- 25 functional modules and 534 requirements, built against a backend that was still moving
My role
Frontend & integration engineer across the Talia 360 admin/ministry console and the Talia Learn app — wiring screens from mock data to a live Go/REST backend and verifying every one against the deployed environment.
How I built it
- Built and integrated screens for Talia 360 (ministry/admin console) and Talia Learn (learning app) as SvelteKit 5 + Tailwind CSS 4 SPAs over a typed Go/REST backend.
- Wired product screens from mock/seed data to live API reads and writes with a layered datasource → repository → query architecture using TanStack Query.
- Implemented RBAC-aware, role-based views (teacher / student / principal / admin) over a deny-by-default authorization model across a Ministry→School entity tree.
- Ran live in-browser QA to confirm real-data rendering, close mock-vs-live gaps, and file backend contract issues — holding a no-dummy-data standard.
Decisions, and why
Deny by default, across a Ministry → School tree
The records in this system include health, counselling and special-needs notes, and the people most likely to be asked to “just check something” are school admins. So permission is not granted by role and then restricted — nothing is visible until a rule says it is, and a school administrator has no override for confidential records. The failure mode of an allow-by-default model is a quiet leak; the failure mode of this one is someone filing a ticket.
A datasource → repository → query layer, not fetch calls in components
Twenty-five modules were being built against a backend that was still moving. Putting every read and write behind a typed layer with TanStack Query on top meant a changed endpoint was a one-file fix rather than a search across screens, and caching and refetch behaviour were decided once instead of per component.
No dummy data, ever, past the first integration
Screens built against mock fixtures pass review and fail in production, because the mock is always tidier than the API. Every screen was re-verified in-browser against the deployed environment, and the gaps that surfaced were filed as backend contract issues rather than patched in the client.
Stack
Building something like this?
Tell me what you are trying to ship and I will tell you, honestly, whether I am the right person to build it.