Safa Khier
Back to Projects
Full Stack2023

iScore — Multi-Tenant SaaS Platform for Schools

Lead developer of a multi-tenant school management platform serving ~300 schools and 110,000+ users.

Overview

iScore is a multi-tenant SaaS platform for school management, serving ~300 schools and 110,000+ users across 4 role types, with 17 distinct permissions for the teacher role alone.

Problem

Schools needed a single platform to manage students, staff, and permissions across many independent tenants — each with different roles and access needs — without duplicating infrastructure per school.

Requirements

  • Support ~300 independent school tenants and 110,000+ users on shared infrastructure
  • Model 4 distinct role types, including 17 granular permissions for the teacher role alone
  • Unify the mobile experience after years of divergence between separate Angular and React Native codebases

Architecture

A multi-tenant Node.js/Express backend serves all school tenants from shared infrastructure, with MongoDB as the primary data store and a role/permission model supporting 4 role types across tenants. The client layer was consolidated from separate Angular (web) and React Native (mobile) codebases into a single Flutter codebase shared across platforms.

Technical Challenges

Migrating two legacy client codebases without disrupting active schools

The Angular and React Native apps had diverged over time; consolidating them into Flutter had to happen without breaking the experience for schools already using the platform.

Modeling fine-grained, multi-tenant permissions

Supporting 4 role types — with 17 separate permissions for the teacher role alone — required a permission model flexible enough for each school without becoming unmanageable.

Key Decisions

Unify on Flutter instead of maintaining Angular and React Native in parallel

Consolidating into one Flutter codebase traded short-term migration effort for long-term maintainability and consistency across platforms.

Solution

Migrated the legacy Angular and React Native apps into a single Flutter codebase, redesigning the UI/UX in Figma, while continuing to maintain and extend the shared multi-tenant backend.

Performance & Scalability

  • ~1.5x faster load times after migrating to the unified Flutter codebase.

Results

  • Platform serves ~300 schools and 110,000+ users across 4 role types.
  • Unified Flutter codebase replaced separate Angular and React Native apps, with ~1.5x faster load times.

Lessons Learned

  • TODO: Add a personal lesson learned from leading this migration and scaling a multi-tenant platform.