All workБүх ажил

03 / 05 · Sports platformСпортын платформ · 2026

SportHub

Multi-sport membership, booking and wallet platform for Mongolia — one account across gyms, yoga and future sports, on web, mobile and an admin dashboard.Монголын олон төрлийн спортын гишүүнчлэл, захиалга, хэтэвчийн платформ — фитнесс, йога болон цаашдын спортуудад нэг бүртгэл, веб, мобайл, админ самбар дээр.

CategoryАнгилал
Sports platformСпортын платформ · 2026
RoleҮүрэг
Lead developer · Full-stackАхлах хөгжүүлэгч · Full-stack
TeamБаг
2 contributors — I wrote 85 of the 87 commits and set the architecture.2 оролцогч — 87 commit-оос 85-ыг нь би хийж, архитектурыг тодорхойлсон.
StatusТөлөв
Pre-productionPre-production
NestJSReactFlutterNext.jsTypeScriptPostgreSQLTanStack QueryRiverpod
Create account
Sign in
Mobile web
4

apps in one workspaceапп нэг workspace-д

87

commitscommit

14

admin sectionsадмин хэсэг

2

languages (MN/EN)хэл (MN/EN)

01

OverviewТойм

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 нэвтрүүлэлт дараагийн шатанд.

02

Role & responsibilitiesҮүрэг ба хариуцлага

RoleҮүрэгLead developer · Full-stackАхлах хөгжүүлэгч · Full-stack
TeamБаг

2 contributors — I wrote 85 of the 87 commits and set the architecture.2 оролцогч — 87 commit-оос 85-ыг нь би хийж, архитектурыг тодорхойлсон.

  • Monorepo architecture, coding rules and technical documentationMonorepo архитектур, кодын дүрэм, техникийн баримт бичиг
  • NestJS backend: identity, RBAC, entitlement and wallet ledgers, top-upsNestJS backend: нэвтрэлт, RBAC, эрх ба хэтэвчийн ledger, цэнэглэлт
  • 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
03

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, гэрэл/харанхуй горимтой самбар.

04

ScreensДэлгэцийн зургууд

Captured from the live product. Click a screen to enlarge it.Ажиллаж буй бүтээгдэхүүнээс авсан зургууд. Зураг дээр дарж томруулж харна уу.

05

Engineering highlightsИнженерчлэлийн шийдлүүд

  1. 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.Хэтэвч, эрхийг хэзээ ч засдаггүй — өөрчлөлт бүр шинэ бичлэг болж, үлдэгдэл түүхээс тооцоологдоно.

  2. 02

    Deny-by-default RBACDeny-by-default RBAC

    Every endpoint is closed unless a role explicitly allows it.Үүрэг тодорхой зөвшөөрөөгүй бол endpoint бүр хаалттай.

  3. 03

    Legacy-safe by designLegacy-д аюулгүй

    No shared code or database with GymHub; legacy memberships are shown read-only and never resold.GymHub-тай код, өгөгдлийн сан хуваалцахгүй; хуучин гишүүнчлэлийг зөвхөн уншихаар харуулна.

  4. 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-аар бүтээдэг.

Next projectДараагийн төсөл

BarilgaHUBWant something like this? Let's talkҮүн шиг зүйл хэрэгтэй юу? Ярилцъя