Skip to content

Enterprise systems · EdTech · ERP

EduFlow — multi-tenant School ERP

A config-first, multi-tenant School ERP spanning the full school lifecycle — admissions to accounting — where each school tailors its own rules, numbering, approvals, documents and branding by configuration rather than custom code.

Project

Multi-tenant · a database per school

Multi-phase platform build

Discuss a similar brief
EduFlow — multi-tenant School ERP

The challenge

Where things stood.

Most schools run on a patchwork of disconnected tools — admissions in a spreadsheet, fees in a desktop package, marks in another, messages over personal phones — so data is re-keyed, reconciliations are manual, and no one has a single trustworthy view of a student, a class or the finances.

Even where a school adopts one product, it rarely fits: fee cadences, approval chains, grading schemes, numbering formats and branding differ at every institution. Building a custom variant per school does not scale, and shipping a rigid one-size product does not sell. The brief was to resolve that tension on one codebase.

How we built it

Delivered in deliberate phases.

  1. 01

    A config-first thesis

    Rather than a long list of features, the platform is built on a short list of reusable engines — approval and policy, an organisation-and-scope map, a form builder, configurable sequences, a session-lifecycle engine, branded templating, per-tenant integrations and an audit spine. Most of what a school asks for becomes a setting an administrator controls, not code a developer has to write.

  2. 02

    Isolation by design

    Each school runs in its own PostgreSQL database, provisioned automatically, with a thin control plane holding only the registry of schools and their entitlements. Isolation is a property of the architecture, not a tenant column every query has to remember — so one school's records can never leak into another's.

  3. 03

    One governance spine

    A single approval engine and an immutable audit log thread through admissions, fees, examinations and attendance. Each school expresses its own maker-checker rules as configuration; the engine enforces them the same way everywhere, and every consequential action is attributable to a named actor.

  4. 04

    Access control a school can configure

    Role-and-scope access decides not only what a user may do but which people and records they may do it to, down to field-level masking. Delegation is by configuration with a human in the loop at the moment of granting, and least privilege is the default.

  5. 05

    Branded, verifiable documents

    Receipts, report cards, examination sheets, statements and certificates all render from one document engine, each carrying the school's brand and an embedded verification QR code, and delivered only to the role entitled to it.

What we delivered

The work.

  • Around eight reusable engines that turn most new school requirements into configuration, not code
  • A dedicated database per school with a thin control plane — complete data isolation and independent lifecycle
  • One approval engine and an immutable audit log across admissions, fees, examinations and attendance
  • Role-and-scope RBAC with field-level masking and human-approved delegation
  • A single document engine producing branded, QR-verifiable PDFs delivered by role
  • Twenty functional modules across the school lifecycle, plus role portals and an AI authoring assistant that proposes configuration for a person to approve

Outcome

What changed.

  • One system in place of a dozen disconnected tools, with each school's own policies honoured as settings
  • Each school's data physically isolated, snapshot-able and exportable on its own
  • A consistent governance and audit trail that stands up to scrutiny across every module
  • Capability that grows without a proportional growth in code or risk
  • A brand-neutral core that can be themed per school and re-badged per vendor

Find the handful of engines a domain truly needs, make everything else configuration, tie it together with one governance spine, and isolate every customer at the data layer.