← All projectsCase study · Full stack · Product, design and engineering963 Court
An Arabic-first basketball statistics platform for Syrian leagues: a public site for standings, matches, players and teams, and an admin dashboard with two AI features — box scores read from photos, and a chat assistant whose edits wait for approval.
- Role
- Project manager, UI/UX designer and full stack developer
- Audience
- Fans, clubs and league organisers, in Arabic
- Scope
- Design, front end, API, data model, AI features, access control, deployment
01 — The briefReal stats, without the typing
Syrian leagues needed one Arabic place for results, standings and player statistics — and entering those stats by hand from FIBA box scores was slow and error-prone.
I designed the interface in UX Pilot, managed the project, then built it full stack as two independent apps: a Next.js public site and admin dashboard, and a NestJS API on Prisma and MySQL where standings and averages are computed on read, never stored.
04 — ArchitectureDecisions that keep the data correct
League → Season → Phase → MatchAggregates computed on readAtomic Prisma transactionsIn-memory cache per seasonUnit-tested FIBA standingsAI vendor isolated in one fileStorage: FTP · Vercel Blob · disk
Standings come from a pure, unit-tested function with the client’s FIBA tiebreakers: head-to-head only counts once all its scheduled meetings are played, otherwise overall point difference decides. Every compound write runs in a transaction, which also clears the season’s cache.
Next.js 16ReactTailwind CSS 4shadcn/uiTanStack QuerySSENestJS 11PrismaMySQLJWTOpenAI APIZodGitLab CI/CDPM2i18n / RTL
Two independent apps, back end and front end, deployed automatically by GitLab CI to a VPS I manage, with PM2 keeping them running.
Result: launched in September 2026 at 963court.com, with Prime content and fan subscriptions.