Multi-sport membership, booking and wallet platform for Mongolia — one account across gyms, yoga and future sports, on web, mobile and an admin dashboard.Монголын олон төрлийн спортын гишүүнчлэл, захиалга, хэтэвчийн платформ — фитнесс, йога болон цаашдын спортуудад нэг бүртгэл, веб, мобайл, админ самбар дээр.
SportHub is the successor to GymHub. It launches with Gym and Yoga and is designed so more sports — swimming, tennis, football — can be added without a platform redesign. Members use the web and Flutter apps; staff use an admin dashboard.SportHub бол GymHub-ийн залгамжлагч. Фитнесс, йогоор эхэлж, усан сэлэлт, теннис, хөл бөмбөг зэрэг спортуудыг платформоо дахин зохиолгүйгээр нэмэх боломжтойгоор бүтээгдсэн. Гишүүд веб болон Flutter апп, ажилтнууд админ самбар ашиглана.
01
The problemАсуудал
GymHub served a single sport. Members needed one account and one wallet across sports and facilities — while existing GymHub memberships had to keep their original rights without touching the legacy production systems.GymHub ганцхан спортод зориулагдсан байсан. Гишүүдэд спорт, байгууллага бүрт нэг бүртгэл, нэг хэтэвч хэрэгтэй байсан бөгөөд одоо байгаа GymHub гишүүнчлэлүүд legacy систем рүү хүрэлгүйгээр анхны эрхээ хадгалах ёстой байв.
02
Architecture & solutionАрхитектур ба шийдэл
A fresh npm-workspace monorepo where the NestJS backend is the only place business logic lives. Identity uses opaque bearer sessions with deny-by-default RBAC; entitlements and the wallet are append-only ledgers whose balances are derived, never stored. Planned APIs are answered by contract mocks so web, mobile and admin move in parallel.Бизнес логик зөвхөн NestJS backend-д байх шинэ npm-workspace monorepo. Нэвтрэлт нь opaque bearer session, deny-by-default RBAC-тэй; эрх болон хэтэвч нь append-only ledger бөгөөд үлдэгдлийг хадгалахгүй, тооцоолж гаргадаг. Төлөвлөсөн API-уудыг contract mock-оор хариулж веб, мобайл, админыг зэрэг хөгжүүлдэг.
03
The resultҮр дүн
Pre-production: the backend, React web app, Flutter app and Next.js admin UI are implemented and the web preview is deployed on Vercel. Postgres persistence is verified in tests; real payments and the production rollout are next on the roadmap.Pre-production шат: backend, React веб, Flutter апп, Next.js админ UI хэрэгжиж, веб preview Vercel дээр байршсан. Postgres-д хадгалалтыг тестээр баталгаажуулсан; бодит төлбөр болон production нэвтрүүлэлт дараагийн шатанд.
React member web app with MN/EN, search, booking and wallet flowsMN/EN-тэй React веб: хайлт, захиалга, хэтэвчийн урсгал
Flutter mobile app with five tabs and secure session storageТаван табтай, аюулгүй session хадгалалттай Flutter апп
Next.js admin dashboard and the legacy GymHub migration mappingNext.js админ самбар болон GymHub-аас шилжүүлэх mapping
0303
The systemСистемийн бүтэц
01
Backend · NestJSBackend · NestJS
The single writer of business data: sessions, RBAC, ledgers and server-verified top-ups.Бизнес өгөгдлийг цорын ганц бичигч: session, RBAC, ledger, сервер талд шалгадаг цэнэглэлт.
02
Web · ReactВеб · React
Persona-aware home, sport and club search, booking with cancel/refund, wallet and history.Хэрэглэгчийн төлөвт тохирсон нүүр, спорт ба клуб хайлт, цуцлах/буцаалттай захиалга, хэтэвч.
03
Mobile · FlutterМобайл · Flutter
Home, Search, Schedule, Wallet and Profile tabs with Riverpod and go_router.Riverpod, go_router-тэй Нүүр, Хайлт, Хуваарь, Хэтэвч, Профайл табууд.
04
Admin · Next.jsАдмин · Next.js
Overview plus 14 section pages in MN/EN with light and dark themes.Тойм болон 14 хэсэгтэй, MN/EN, гэрэл/харанхуй горимтой самбар.
0404
ScreensДэлгэцийн зургууд
Captured from the live product. Click a screen to enlarge it.Ажиллаж буй бүтээгдэхүүнээс авсан зургууд. Зураг дээр дарж томруулж харна уу.
01 / 03
0505
Engineering highlightsИнженерчлэлийн шийдлүүд
01
Append-only ledgersAppend-only ledger
Wallet and entitlements are never edited in place — every change is a new entry and the balance is derived from history.Хэтэвч, эрхийг хэзээ ч засдаггүй — өөрчлөлт бүр шинэ бичлэг болж, үлдэгдэл түүхээс тооцоологдоно.
02
Deny-by-default RBACDeny-by-default RBAC
Every endpoint is closed unless a role explicitly allows it.Үүрэг тодорхой зөвшөөрөөгүй бол endpoint бүр хаалттай.
03
Legacy-safe by designLegacy-д аюулгүй
No shared code or database with GymHub; legacy memberships are shown read-only and never resold.GymHub-тай код, өгөгдлийн сан хуваалцахгүй; хуучин гишүүнчлэлийг зөвхөн уншихаар харуулна.
04
Contract-first mocksContract-first mock
MSW and a mock server answer planned APIs so every client is built against the real contract.MSW болон mock server төлөвлөсөн API-г хариулж, клиент бүрийг бодит contract-аар бүтээдэг.