← All work2026 · Web · Mobile · Data

AthletIQ

White-label sports-academy platform — web + mobile on one multi-tenant backend.

RoleDesign, architecture & full build
StackNext.js 15 (App Router) · TypeScript · React 18 / 19
Year2026

The problem

Sports academies run on spreadsheets and WhatsApp. AthletIQ replaces that with a white-label platform that manages programs, skill rubrics, attendance, and finance for five sports out of the box — Football, Swimming, Karate, Tennis, Gymnastics — across multiple branches, five staff roles, and parent/player/coach personas.

It ships fully bilingual English/Arabic with true right-to-left layouts on both web and mobile, and supports six currencies, one per academy.

One backend, two surfaces

The web app (Next.js 15 App Router) and the mobile app (Flutter with Riverpod) share a single Supabase backend through a config-switched repository layer. With no environment variables set, the entire product runs on typed mock fixtures — every screen, every persona. Flip the env vars and the same screens run against live, RLS-protected data.

That one decision makes the platform demoable with zero setup and testable without touching production data.

Tenancy enforced in the database

Multi-tenancy isn't an application-code convention here — it's enforced by Postgres row-level security on every tenant table via org_id. A platform tier above the academies lets super-admins suspend or activate an academy for a period, and that suspension is enforced in RLS too, not in the app.

Tenant provisioning and staff invites run through database RPCs, with snapshot-sync triggers keeping derived views consistent.

Outcome

Eighteen web views, all mobile personas, real auth with OTP and OAuth, and a one-command dev environment that brings up Postgres, backend, web, and mobile with seeded demo data. Payments, livestream, and QR check-in are deliberately scoped out for a later phase.

Built with

Every technology this project runs on, and the job it does here. Each one links to the other projects it appears in.

By the numbers

18Web views
5Sports supported
2Languages (full RTL)
19SQL migrations
6Currencies