Ajman / UK product surface (mansah.co.uk) · Custom Software / Enterprise Platform

Mansah – Enterprise School Management

How Mansah replaced fragmented school tools with a multi-tenant operations platform — 7 Spring Boot services, schema-per-tenant isolation, and production Nginx ops

7
Microservices
Schema/tenant
Data isolation
4+
Role portals
Java 21
Spring Boot 3

Executive summary

  • •Problem: schools ran admissions, fees, attendance, and messaging in disconnected tools — data drift and unsafe multi-campus growth.
  • •Solution: enterprise multi-tenant platform (Java 21 / Spring Boot 3 + React 19) with schema-per-tenant PostgreSQL, Stripe/GoCardless, and role portals.
  • •Result: one operable system for school lifecycle; new schools onboard via owner portal without rewriting the product per tenant.

The business challenge

Education operators needed one enterprise platform for a full school — not a lightweight SaaS with bolted-on modules. Students, parents, teachers, and admins each needed distinct workflows. Payments, invoicing, email/SMS, admissions, attendance, homework, discipline, and staff compliance had to live together, with hard isolation when multiple schools shared the platform. Fragmented tools created reconciliation work; copying a school setup for a new campus copied risk.

  • •Data inconsistency between fees, attendance, and parent messaging
  • •No safe tenancy model for branding + payment credentials per school
  • •Peak classroom wifi failures broke attendance capture
  • •Compliance tracking (DBS / safeguarding / first aid) lived outside the system of record

Goals & non-goals

Goals

  • •Multi-tenant isolation without a separate server per school
  • •Role-correct portals for Super Admin, Admin, Teacher, Parent
  • •Per-tenant Stripe/GoCardless + email/SMS configuration
  • •Production ops: Docker, Nginx SSL per subdomain, observability

Non-goals

  • •Generic white-label marketplace (purpose-built school ops instead)
  • •Native mobile apps as v1 primary surface (PWA resilience first)
  • •Invented concurrent-user marketing claims without measurement

The solution

StackWise designed Mansah as an enterprise multi-tenant school management system. Each school is a tenant with isolated schema, branding, gateways, and messaging settings. Domain microservices sit behind Spring Cloud Gateway; the React 19 client delivers role dashboards with PWA offline-tolerant attendance sync for unreliable classroom networks.

Multi-tenant isolation

Schema-per-tenant PostgreSQL + subdomain routing; Flyway migrations per school boundary

Role portals

Super Admin / Admin / Teacher / Parent experiences with JWT + RBAC enforcement at API layer

Finance

Invoices, subscriptions, Stripe + GoCardless configured per tenant

Communications

Gmail SMTP / Microsoft 365 + SMS templates with delivery/open/bounce analytics

Academic ops

Admissions, classes, timetables, exams, homework, discipline, staff compliance alerts

Resilience

PWA/Workbox shell; offline-tolerant bulk attendance sync

Technical architecture

LayerTechnologyWhyAlternatives
API edgeSpring Cloud GatewaySingle entry, routing, cross-cutting authExposing each service publicly
ServicesJava 21 / Spring Boot 3 (7 domains)Clear bounded contexts; independent deployabilityModular monolith only
ResilienceOpenFeign + Resilience4jTimeouts/circuit breaking between servicesNaive sync HTTP only
DataPostgreSQL schema-per-tenant + FlywayHard data boundary without N serversShared tables + tenant_id only
CacheCaffeineLow-latency local cache for hot readsRedis-first complexity before need
ClientReact 19 + Vite + TanStack QueryModern SPA DX; role dashboardsServer-rendered monolith UI
PaymentsStripe + GoCardlessCard + direct-debit school fee patternsManual bank transfer only
OpsDocker + Nginx + Prometheus/GrafanaLinux production shape buyers recognizeLaptop/demo hosting

Implementation path

  1. 1.Domain split: auth, admin, student, teacher, course, parent, support services
  2. 2.Tenancy model + Flyway seeding scripts for safe school onboarding
  3. 3.Payment gateway settings + webhook-ready finance flows per tenant
  4. 4.Role dashboards + PWA attendance path for classroom wifi failure modes
  5. 5.Nginx SSL per school subdomain; observability dashboards

Challenges & trade-offs

Multi-school data bleed risk

Why hard: Shared DB without isolation would leak PII/fees across schools

Solution: Schema-per-tenant + subdomain routing

Trade-off: More migration complexity than a single-schema MVP

Unreliable classroom wifi

Why hard: Attendance capture fails during peak periods

Solution: Offline-tolerant bulk sync via PWA shell

Trade-off: Eventual consistency until sync completes

Payment credentials per school

Why hard: One global Stripe key breaks multi-tenant finance

Solution: Per-tenant gateway configuration in Payment settings

Trade-off: Ops must validate keys during onboarding

Results & metrics

Labels: WP = website-published · OPS = operational outcome · ARCH = design target

MetricBeforeAfterSourceLabel
Microservices delivered—7 domain servicesArchitectureOPS
Role portals1 generic dashboard risk4+ role experiencesProduct designOPS
Tenancy modelNo isolationSchema-per-tenant PostgreSQLArchitectureOPS
Stack generationLegacy JVM riskJava 21 + Spring Boot 3 + React 19EngineeringOPS
ObservabilityBlind deploysPrometheus + GrafanaOps designARCH

Value by stakeholder

Ops / school admin

One system for admissions → fees → messaging; less reconciliation

IT / technical buyer

Spring Boot microservices, gateway, tenancy, Nginx — production-shaped

Finance

Per-school Stripe/GoCardless; invoice + subscription flows

Parents / teachers

Role-correct portals instead of one overloaded UI

Planning something similar?

Tell us the stuck flow. We can start with a scoped paid diagnosis — reproduce, investigate, and give written options.