School profile, who can do what, and the services the school connects to. In this demo, nothing you save leaves your browser.
Shown on receipts, report cards and messages to parents.
Campuses of this school. Classes, staff and students belong to one branch.
Receipts, report cards and reminders.
Absence alerts, fee reminders and urgent notices.
Parent and staff mobile apps.
Rules the notification service applies before sending.
Set per tenant by the platform team.
Stored in the secret manager, never sent to the browser. Rotated by the platform team.
Stored in the secret manager, never sent to the browser. Rotated by the platform team.
Fee rules never know which gateway is used.
Business logic talks to one interface. Adding Razorpay, Stripe or PayPal means writing a provider, not touching invoices, receipts or refunds.
1export interface PaymentProvider {2 id: "demo" | "razorpay" | "stripe" | "paypal"3 label: string4 createPayment(input: CreatePaymentInput): ProviderPayment5 verifyPayment(providerRef: string, signature: string): boolean6 refundPayment(providerRef: string, amount: number): ProviderPayment7 getPaymentStatus(providerRef: string): ProviderPayment["status"]8}Features call an AIProvider interface, so the provider can change without touching them.
Each one is opt-in per school. Nothing is built into this demo yet; these are the designed uses.
New invoices, timetables and attendance use the current year.
Percentage bands used on report cards.
How long records are kept before they're archived or erased.
The designed schedule. This demo has no server to back up.
Everything here runs on generated sample data in your browser.
Restore the original sample records. Your signed-in account, tenant and role edits stay as they are.