Two Completely Different Apps Behind One School Login

Parents tracking their children and teachers running classrooms share almost nothing. One Flutter codebase serves both, changing its entire shape depending on who signs in.

Start your project

The build

TMS is a school operations app for a private schoolhouse, built by Aipxperts as one Flutter codebase for iOS and Android.

It serves two audiences that share almost nothing: parents tracking their children, and teachers running classrooms and their own timekeeping. The app changes its entire navigation, dashboard and feature set based on who signs in.

The problem

A small private school generates a surprising amount of process. Daily drop-off and pick-up has to be verified. Lesson plans have to be shared. Parents need to reach teachers and teachers need to reach all parents. Payments have to be collected. Staff need to log hours, claim reimbursements and request time off. Before the app, all of that lived in paper forms, email chains and phone calls, which creates three problems:

Nothing is auditable

A paper drop-off sheet cannot tell you who collected a child at 3:40pm on a Tuesday in March.

Communication is slow and one-directional

A note in a bag is not a conversation.

Staff administration competes with teaching for the same hours.

Underneath that sat a real engineering constraint. Parents and teachers need genuinely different applications, and building two would have doubled the maintenance for a single small school.

What we built

We built role as a first-class concept rather than a permission check bolted onto a shared interface.

Role-based dual experience

Parent and teacher modes with multi-child switching for families with more than one child enrolled.

QR and location-aware clock in and out

Break tracking and history logs, used both for staff timekeeping and for verified parent drop-off and pick-up.

Attendance and rosters

Student attendance and classroom lists, entered where they happen.

Lesson plans

Upload, subjects and topic detail, plus classes, supply lists and teacher bios.

Real-time chat

One-to-one and group messaging with voice messages, attachments and media over Socket.IO.

Zoom meeting requests

Slot booking for parent and teacher meetings.

School communications

Events with add-to-calendar, announcements, bulletin board, blogs, newsletters, lunch menus and parent surveys.

Payments and subscriptions

A shop with cart and Stripe checkout, plus subscription plans through App Store and Google Play billing.

Staff administration

Reimbursement claims, time-off and sick-pay requests, and order management.

Security and access

Multi-factor authentication, one-time passcode sign-up and verification, and password reset.

The outcome

The structural result is that the school's daily record is now a record. Every collection, message, payment and claim has a timestamp and a person attached to it.

Before
the school ran on paper forms, email chains and phone calls, with no auditable record of drop-off and pick-up and no direct channel between parents and teachers.
After
one app covering verified QR and location-based clock in and out, real-time parent and teacher communication, digital paperwork, in-app payments and staff time and HR requests, with two role experiences maintained inside a single codebase and a single API.

Tools and Technologies

Flutter
Dart
Clean architecture
BLoC
GraphQL
Socket.IO
Stripe
Firebase
Zoom
QR clock-in

Planning something similar?

If two very different groups of people need the same system, that is usually one product with two faces rather than two products.

Start the conversation