Grand Academy

CRM Operations Console

Staff login

Locations

3

managed by Owner

Families

3

linked payers

Students

4

profile cards

Groups

4

scheduled classes

Auth and live data

Supabase Auth shell and read-only live overview API are ready for staff accounts.

Open login

/login

Supabase email/password and magic-link sign-in surface

browser_session

/auth/callback

PKCE callback handler for magic links

browser_session

/api/operations/overview

Read-only Supabase operational overview endpoint

read_only_api

Live tableMetricAPI
locationsLocations/api/operations/overview
coachesCoaches/api/operations/overview
parentsParents/api/operations/overview
childrenStudents/api/operations/overview
class_groupsGroups/api/operations/overview
sessionsSessions/api/operations/overview
subscriptionsSubscriptions/api/operations/overview
paymentsPayments/api/operations/overview

Locations

Owner can create, edit and archive branches without code changes.

BranchRoomsGroupsStudentsLoadStatus

Dubai Marina

Marina promenade

Studio 1, Studio 2218

78%

Active

Jumeirah

Main hall

Main Hall110

64%

Active

Downtown

Studio A

Studio A18

52%

Archive review

Archive flow

Archiving a branch must transfer active work while keeping historical attendance and payment records intact.

1

Review active groups and students

2

Select destination location

3

Transfer future sessions

4

Preserve attendance and payment history

Coaches

Coach profiles include assigned branches, load and group count.

Anna Coach

Beginner and flexibility

active
Primary
Dubai Marina
Groups
2
Weekly hours
12
Locations
2

Mira Coach

Advanced routines

active
Primary
Jumeirah
Groups
2
Weekly hours
15
Locations
2

Invite pending

Assistant coach

invited
Primary
Dubai Marina
Groups
0
Weekly hours
0
Locations
1

Parents and children

Search by child, parent or phone. Family links support several children per payer.

Global search

Sofia / +971551000001 / Petrova / Dubai Marina active

Sofia Petrova

8 years · Dubai Marina · Marina Beginners A

expiring
Level
Beginner
Status
active
Parent
Elena Petrova
Phone
+971551000001
ProfileSubscriptionAttendancePaymentsNotes

Alisa Petrova

9 years · Dubai Marina · Marina Intermediate

active
Level
Intermediate
Status
active
Parent
Elena Petrova
Phone
+971551000001
ProfileSubscriptionAttendancePaymentsNotes

Emma Johnson

10 years · Jumeirah · Jumeirah Advanced

active
Level
Advanced
Status
active
Parent
Sarah Johnson
Phone
+971551000003
ProfileSubscriptionAttendancePaymentsNotes

Layla Hassan

7 years · Downtown · Trial list

none
Level
Beginner
Status
trial
Parent
Amina Hassan
Phone
+971551000004
ProfileSubscriptionAttendancePaymentsNotes

Production integration

Account handoff map for GitHub, Vercel, Supabase, domain, n8n/OpenRouter, payments and e-mail.

Account access required
VariableOwnerVisibilityRequired forSource
NEXT_PUBLIC_SUPABASE_URLSupabasepublicBrowser Supabase clientSupabase project API settings
NEXT_PUBLIC_SUPABASE_ANON_KEYSupabasepublicBrowser Supabase client with RLSSupabase project API settings
SUPABASE_SERVICE_ROLE_KEYSupabaseserverServer-only admin jobs and importsSupabase service role key
DATABASE_URLSupabaseserverMigrations and database maintenanceSupabase pooled PostgreSQL connection string
NEXT_PUBLIC_N8N_WEBHOOK_BASE_URLn8npublicAutomation endpoint discoveryn8n production webhook base URL
N8N_CRM_SECRETn8nserverCRM-to-n8n webhook signingShared secret generated in n8n credentials
ZIINA_API_KEYZiinaserverPayment link creationZiina merchant dashboard
ZIINA_WEBHOOK_SECRETZiinaserverPayment webhook verificationZiina webhook endpoint settings
RESEND_API_KEYEmailserverTransactional e-mail sendingResend production API key
APP_URLVercelserverAbsolute callback and notification URLsProduction CRM URL
APP_TIMEZONEDomainserverBusiness date calculationsAsia/Dubai

Stabilization and launch

Release readiness model for acceptance, testing, backups, monitoring and production deployment.

Production credentials required
Acceptance areaOwnerEvidenceStatus
Core CRM flowsAdminBranches, families, schedule, attendance and subscriptions need customer walkthrough.needs_review
Role accessEngineerOwner/Admin/Coach matrix and RLS policy tests are present.ready
Finance controlsOwnerZiina, invoice legal profile and production credentials are not connected.blocked
NotificationsAdminReal e-mail provider and WhatsApp Business templates are required.blocked

Smoke test

ready

pre-release

Build app, render home, health endpoint and core navigation.

Load check

needs_review

pre-release

Seed realistic branch, family, attendance and payment volume before production.

Backup restore drill

blocked

weekly

Requires production Supabase project and storage bucket policy.

Monitoring review

blocked

daily

Requires Vercel/Supabase project access and alert destination.

UI polish readiness

Design-token and accessibility scaffolding is ready; final brand decisions wait for the Grand Academy brand book.

Brand assets required

font.sans

Geist / Inter-compatible

placeholder

color.background

#f8fafc

placeholder

color.surface

#ffffff

placeholder

color.text

#0f172a

placeholder

color.accent

#0e7490

placeholder

radius.card

8px

placeholder

empty

No records yet

Create the first record or import existing data.

loading

Loading records

Keep controls stable while data refreshes.

error

Could not load data

Show the failed area, recovery action and support context.

success

Saved

Confirm the action without moving the user away from their workflow.

Dashboard and reports

Owner KPIs, branch comparison, attendance, fill rate and coach load reporting.

Period: July 2026Location: All locationsLevel: All levelsCoach: All coaches

Active students

36

+4 this month

Revenue

AED 18.4k

+12% vs last month

Expiring

7

next 3 days

Attendance

88%

-2% vs last week

Fill rate

71%

across groups

New leads

11

trial pipeline

BranchStudentsRevenueAttendanceFill rate
Dubai Marina18AED 920091%78%
Jumeirah10AED 690086%64%
Downtown8AED 230082%52%

Notifications

Triggered messages for subscriptions, payments, schedule changes and attendance follow-up.

subscription_expiring

parent · email

fallback in_app

subscription_expired

admin · in_app

fallback email

payment_confirmed

parent · email

fallback in_app

attendance_unmarked

coach · in_app

fallback email

TriggerLocaleSubjectVariables
subscription_expiringenSubscription expiring soonparent_name, child_name, valid_to, payment_link
subscription_expiringruАбонемент скоро заканчиваетсяparent_name, child_name, valid_to, payment_link
payment_confirmedenPayment receivedchild_name, invoice_link
session_changedenClass schedule updategroup_name, change_summary

Invoices and VAT

UAE VAT 5% invoice contract, payment journal filters and accounting exports.

InvoiceFamilyNetVATTotalStatus
GA-2026-0001Elena Petrova · Sofia PetrovaAED 809.52AED 40.48AED 850issued
GA-2026-0002Sarah Johnson · Emma JohnsonAED 1095.24AED 54.76AED 1150sent

VAT invoice archive

PDF bundle

issued invoices and parent receipts

Payment journal

XLSX

payments, VAT, method, location and plan

Accounting CSV

CSV

invoice number, TRN, net, VAT and gross total

Payments

Provider-adapter workflow for Ziina links, manual payments and idempotent webhooks.

Generate Ziina link

Sofia Petrova · AED 850

ziina_link

ready

Record cash payment

Layla Hassan · AED 850

cash

manual_review

Provider IDIdempotencyStatusEffect
ziina_demo_001sub-emma-2026-07-initialprocessedSubscription activated and invoice queued
ziina_demo_001sub-emma-2026-07-initialduplicate_ignoredNo-op because idempotency key was already processed

Subscriptions

Weekly-cycle plans with exact validity dates, renewal examples and payment follow-up signals.

4 weeks / 2 lessons

AED 850

4 weeks · 2 lessons/week

Dubai Marina · Beginner

4 weeks / 3 lessons

AED 1150

4 weeks · 3 lessons/week

Jumeirah · Advanced

12 weeks unlimited

AED 3200

12 weeks · unlimited lessons/week

All locations · All levels

ChildPlanValid fromValid toPaymentStatus

Sofia Petrova

Elena Petrova

4 weeks / 2 lessons2026-07-012026-07-28AED 850 · paidexpiring

Emma Johnson

Sarah Johnson

4 weeks / 3 lessons2026-07-082026-08-04AED 1150 · paidactive

Layla Hassan

Amina Hassan

Trial follow-up2026-06-202026-07-18AED 0 · overdueexpired

Coach attendance

Mobile-first roster with one-tap status changes and offline sync state.

presentabsentlatetrial

Today · 17:00-18:30

Marina Beginners A

Dubai Marina · Studio 1 · Anna Coach

Sofia Petrova

8 years · No restrictions

expiring

Nora Miller

7 years · No notes

active

Layla Hassan

7 years · Emergency contact confirmed

expired

Extra visit

Offline queue

Attendance changes are staged locally when the network drops and synced when the coach reconnects.

sofia-petrova · present

synced

nora-miller · late

queued

Admin correction

Correct past attendance
Add extra child visit
Write audit reason
Notify coach if unmarked after session

Groups and schedule

Manage group capacity, recurring slots and generated sessions with coach and room conflict checks.

Marina Beginners A

active

Beginner · ages 5-8

9/12 students

Dubai Marina · Anna Coach

Marina Intermediate

active

Intermediate · ages 7-11

8/10 students

Dubai Marina · Anna Coach

Jumeirah Advanced

waitlist

Advanced · ages 8-13

10/10 students

Jumeirah · Mira Coach

Downtown Pre-Pro

active

Pre-pro · ages 9-14

6/8 students

Downtown · Mira Coach

DayTimeGroupCoachRoomRecurrence
Tue17:00-18:30Marina Beginners AAnna CoachStudio 1Weekly from 2026-07-01
Thu17:00-18:30Marina IntermediateAnna CoachStudio 2Weekly from 2026-07-01
Mon18:00-19:30Jumeirah AdvancedMira CoachMain HallWeekly from 2026-07-01
Wed18:00-20:00Downtown Pre-ProMira CoachStudio AWeekly from 2026-07-01

Import and export

Owner/Admin can import existing sheets, review validation and export operational data.

Import pipeline

1Upload CSV/XLSX
2Map columns
3Validate required fields
4Review duplicates
5Commit import
6Write audit log

Template fields

Child full namerequired
Child date of birthrequired
Parent full namerequired
Parent phonerequired
Parent emailoptional
Locationrequired
RowChildParentPhoneStatus
2Sofia PetrovaElena Petrova+971551000001duplicate_review
3Mia IvanovaMaria Ivanova+971551000002ready
4MissingUnknown551000099invalid

Validation report

Row 2: parent_phone

Phone already belongs to Elena Petrova. Link as sibling instead of new family.

Row 4: child_full_name

Child full name is required.

Row 4: parent_phone

Phone must use international format, for example +971551000099.

Families CSV

CSV

children, parents, parent_child links

Owner / Admin

Attendance XLSX

XLSX

sessions, attendance status, coach, group

Owner / Admin

Finance XLSX

XLSX

payments, VAT, subscriptions, locations

Owner / Admin

Foundation

ready

Next.js app shell, i18n, env map, health endpoint

Data core

ready

Supabase PostgreSQL schema, migrations, demo seed, ER docs

Access

ready

Owner, Admin, Coach RBAC policies, audit log, MFA routing

Locations

ready

Location switcher, branch overview, coach assignments

Families

ready

Child profiles, parent links, search, duplicate warnings

Import

ready

CSV/XLSX template, validation preview, export contract

Schedule

ready

Groups, recurring slots, calendar preview, conflicts

Attendance

ready

Mobile coach roster, one-tap states, offline queue

Subscriptions

ready

Weekly plans, exact dates, renewal and freeze draft

Payments

ready

Provider contract, Ziina link flow, webhook idempotency

Invoices

ready

VAT 5%, invoice draft, journal filters, accounting exports

Notify

ready

Triggers, templates, email contract, WhatsApp copy fallback

Reports

ready

Owner KPIs, branch comparison, coach load, exports

UI

blocked

Brand-ready tokens and states; final polish waits for brand book

Launch

blocked

Stabilization plan ready; production accounts and credentials required

Prod

ready

GitHub, Vercel, Supabase link, env aliases and smoke checks

Auth

ready

Login shell, callback route, role policy and read-only Supabase overview