Үндсэн агууламж руу шилжих

Баримт бичиг

Хэсгээс сонгож шууд шилжинэ.

Эхлэх

  • Ерөнхий танилцуулга
  • Бүтээгдэхүүний алсын хараа
  • Архитектур
  • Замын зураг

Дизайн систем

  • Брэнд ба дизайн систем
  • Дизайн ассетын техник үзүүлэлт

Фичерүүд

  • Фичерийн бүртгэл

description: >- English summary: Onoo commercial roadmap. Phase 1 ✅ — Trusted data foundation (games, box scores, standings). Phase 2 ✅ — Player profiles (hero, charts, stats). Phase 3 ✅ — Discovery (search, game pages, leaders, awards). Phase 4 🟡 — Academy management (student profiles, payments, group management). Phase 5/6 planned: public API, enterprise features, mobile app. Revenue model: league subscription (paid pilot) + per-game fees. Non-goals: streaming, fantasy, consumer analytics.

Оноо — Сагсан бөмбөгийн үйлдлийн системийн замын зураг

Арилжааны босго (paid pilot)

Одоогийн бизнес загвар дээр суурилсан босго. Шаардлагатай бол өөрчилж болно:

GateOutcome
DiscoveryContracted pilot, 1,000,000 MNT deposit, нэг улирлын гэрээ
Paid proof100% final-score accuracy, 0 сэргээшгүй event, whistle-to-recap < 5 минут
Full seasonSatisfaction ≥8/10 ба улирлын гэрээ 14 хоногийн дотор
ExpansionNative mobile, follows/push, claims — full-season renewal-ын дараа л

Horizon A — Лиг эхлэсэн paid proof

Phase 1–7 нь Оноо-ийн одоогийн хэрэгжих замын зураг. Эдгээр нь trusted records, public athlete value, league renewal-ийг батална.

AI хэрэгжүүлэгчдэд: үе шат бүрийн execution spec нь docs/plans/ дотор байна. Энэ roadmap нь юу/яагаад, spec-үүд нь яаж гэдгийг харуулна. Эхлээд docs/plans/00-conventions.md, дараа нь тухайн phase-ийн spec-ийг унш.

Phase 1 — Trusted data foundation (ажиллаж буй)

Execution spec: plans/phase-1-trusted-foundation.md

  • stat_events journal, ruleset vocabulary, projection rebuild command, authorization cutover.
  • Submission review UI, journal durability tests, handoff UI.
  • Ops console, integration tests, chaos tests, venues CRUD, seasons CRUD.

Phase 2 — Player profile as showcase

Execution spec: plans/phase-2-player-showcase.md

  • Roster onboarding kit, consent & takedown, hero identity card, social links.
  • Season story arc, shooting profile, career highs & milestones.
  • Radar chart, recent games strip, plain-language summaries.
  • Report-error intake, season selector & career view, box score below fold.

Phase 3 — Final-Whistle Pack

Тоглолт дууссанаас 5 минутын дотор бүх publishable asset бэлэн болно.

  • Game recap pages — final score, top performers, lead-change flow.
  • Shareable stat cards — тоглогчийн game/season line-ийн зураг.
  • Sponsor placements — "presented by" slots.
  • Awards & MVP races — shareable award graphics.
  • Provisional-final publication — "Урьдчилсан" badge бүхий snapshot.
  • Auto Mongolian recap text — deterministic narrative.
  • One-click share/download — бүх asset дээр.

Phase 4 — League proof & renewal

  • Embeddable widgets — standings, leaders, schedule.
  • English profile view/export — scout-facing toggle.

Phase 5 — Discovery & organic growth

  • Standings redesign — zebra rows, sticky header, team color accent, playoff line, streak/last-10 dots
  • Awards & MVP races — cmd_grant_award SECURITY DEFINER function, admin awards page with grant Dialog + list, getMvpRace / getPlayerAwards in data.ts, MvpRace card on leaders, AwardsShelf on player page
  • Qualification rules
  • Home: tonight's games — live/today/yesterday/standings sections with GameCard components and 20s live polling
  • Search & browse — player/team/league-ийг хурдан олох.
  • Search expansion — ⌘K palette + /search page cover shop products, games, competitions (season reports), with integration + E2E coverage
  • SEO basics — sitemap, metadata, indexable public pages.

Phase 6 — Live experience

  • Public visibility for provisional games — getGamesByDate/getGameById now read from v_public_live_games UNION with v_public_games. Provisional games show with amber "Урьдчилсан" badge. Live games show scores.
  • Live game center — realtime score, on-fire indicator, play-by-play.
  • Live-updating player stat lines — Supabase Realtime.

Phase 7 — Team insights (design-partner beta)

  • Efficiency metrics — ORtg, DRtg, NETRTG, PIE, Four Factors, pace.
  • Team performance dashboard — offense/defense trends, Four Factors, efficiency chart, per-game advanced stats.
  • Player development timeline — month-over-month stat progression (MonthlyProgression on player page).
  • Opponent scout card — дараагийн өрсөлдөгчийн нэг хуудас profile (teams/[slug]/scout).

Horizon B — Баг ба академийн ажиллагаа

Эдгээр нь стратегийн дараагийн үе шат. Лигийн paid-proof gate ба домайн бүрийн paid discovery pass-ыг давсны дараа л эхэлнэ.

Phase 8 — Shared basketball organization foundation

  • Canonical identity for leagues, clubs, teams, academies, guardians.
  • Official roster snapshots, eligibility, transfers, identity disputes.
  • One account + least-privilege org roles.
  • Private storage, audit, retention, consent, break-glass support, dark theme.

Phase 9 — Team operations

  • Team staff and role administration.
  • Roster intent, availability, transfer requests.
  • Training schedule, attendance, facilities.
  • Team dues and expense workflows.
  • Basketball-specific performance and opponent prep.

Phase 10 — Academy operations

Product architecture and delivery plan: features/academy-management.md

Phase 10a нь deliberately minimal: admin dashboard дахь academy info, existing-auth access, basic payments, read-only program/trainer/location display. Enrollment, attendance, consent, offline workflow-ууд дараа орно.

  • Academy info in admin dashboard: name, logo, contact, timezone, settings.
  • People auth: existing accounts-аар нэвтрээд nav-д "Academy" харагдана.
  • Basic payments through shop QPay.
  • Read-only program, trainer, location display.
  • No enrollment, no attendance, no consent, no offline.

Phase 10b — Student & enrollment

  • Student profiles with guardian info, medical essentials, photo upload.
  • Enrollment management: registration, program assignment, dates.
  • Attendance, consent, waivers.
  • Multiple children per guardian.
  • CSV import/export.

Phase 10c — Full operations

  • Offline-safe attendance with IndexedDB queue.
  • Attendance reports by student, offering, coach, date range.
  • Payment history and receipts per student.
  • Ordered waitlist with promotion rules.

Phase 10d — Advanced (Operations)

  • Verified QPay callbacks and invoice reconciliation.
  • Multi-location scheduling and capacity management.
  • Extended reporting: attendance analytics, financial summaries.

Phase 11 — Guardian portal (Deferred / Out of Scope)

Guardian self-service portal (SMS OTP login, parent app) is deferred out-of-scope per business decision; academy staff manage students, attendance (offline-ready), and QPay invoices directly via /admin/academy.

  • Basketball-specific announcements and reminders.

Phase 11b — Public news (2026-08-07)

  • News articles: admin CRUD with draft/publish lifecycle, public listing + detail pages, home latest-news strip, RLS + RPCs, tests (T-11b.1).

Phase 12 — Web performance & PWA

Lighthouse-based performance pipeline (mobile/desktop budgets), JS bundle trimming, data-layer caching, deploy-safe service worker. See tasks/T-12.1-web-performance-pwa.md.

  • Lighthouse tooling: configs, budgets, npm scripts, README docs.
  • JS trim: Sentry lazy-load, chart out of UI barrel, dnd-free loading skeleton, Oswald weights.
  • CLS fix: hero-height-mirroring skeleton (desktop 0.276 -> 0.02).
  • Data caching: getGamesByDate cacheLife("realtime") — warm requests 1490ms -> 456ms.
  • PWA service worker: network-first navigations, cache-first hashed assets, production registration, offline E2E.
  • Mobile home perf 78 -> 84, LCP 5.9s -> 4.5s, CLS 0; desktop home 98.
  • Home critical path: box-score query parallelized (T-12.2). Polyfill trimming and hero-first streaming investigated — not shipped (evidence in task spec).
  • Production-readiness verification: complete unit, integration, E2E, typecheck, lint, and production-build gates.

Phase 13 — Public Basketball Intelligence

Official-record-first public analytics across home, game, player, team, leaders, standings, search, comparison, and saved preferences.

  • Public contract, curated views, official-source evidence, and private-note isolation (T-13.1).
  • Canonical player/team metrics and reusable intelligence primitives (T-13.2).
  • Evidence-backed Game Recap Lab with accessible momentum tables (T-13.3).
  • Player Intelligence Lab with approved-record trends, insights, and favorites (T-13.4).
  • Team Dossier, competition-scoped benchmarks, and public scout (T-13.5).
  • League Pulse, leaders filters, standings race, and global search (T-13.6).
  • Competition-scoped compare, favorites API, interaction analytics, and release proof (T-13.7).

Phase 14 — Platform hardening

Improvement-plan P0 batch from features/feature-map-gaps-improvement-plan.md: trust & hygiene before further features.

  • Retire stale derive-game / broken notify-game-events edge functions; in-DB command path is authoritative (T-14.1).
  • Sponsor placements wired end-to-end (public slots read v_public_sponsor_slots) (T-14.1).
  • CI pipeline: lint/typecheck/unit/integration on PR; build + e2e on main (T-14.1).
  • Dead code + duplicate generated types removed; tests repointed at real components (T-14.1).

Phase 15 — Improvement plan P1/P2 (half-built surfaces + parity)

Completing the remaining half-built surfaces and STAT.mn-parity gaps from features/feature-map-gaps-improvement-plan.md §6 P1–P2.

  • Quick Shot / shot-location capture in the tracker — one-tap shots with optional court coordinates; heatmap/live-court/shot-chart data path (T-15.1).
  • Clutch stats derivation from the journal (close games, margin ≤ 5) wired into the player page (T-15.2).
  • Tournament model (rounds/groups) + FIBA-style hub: group tables, knockout + classification brackets, leaders, games by round (T-15.3).
  • Real /teams/vs matchup hub + series pages (record, trend chart, meetings, season breakdown) + team-page opponents (T-15.4).
  • Realtime home/scorebar via shared postgres_changes hook; 20s polling and TODO(5.1) removed (T-15.5).
  • Verified QPay callbacks: server-side checkPayment, immutable payment_events ledger, exactly-once settlement, admin reconciliation (T-15.6 / T-10d.2).
  • Offline attendance: IndexedDB journal, idempotent replay, staff reports + financial analytics, deterministic check-in codes (T-15.7 / T-10c.1 / T-10d.4).
  • Auto-award RPC (period MVP, player-of-week from qualified leaders) with propose/approve/reject lifecycle (T-15.8).
  • Lineup +/- analysis surface on team analytics (minutes, NETRTG, top/bottom lineups) (T-15.9).
  • csv_import_log + waitlist_history wired into import/promotion flows (T-15.10).
  • Season/competition selector (shareable URL), all-time record boards, home leader strips, zone standings for grouped competitions (T-15.11).
  • White-label tenant theming: tenant_config, admin branding CRUD, subdomain shell branding (T-15.12).
  • Quick check-in attendance with 6-digit codes (T-15.13).
  • Sitemap/SEO completeness — records, awards, academy, shop routes (T-15.14).

Phase 16 — Production readiness

Closing the gaps found in the 2026-08-06 admin coverage audit.

  • FastGate widened: test:all runs typecheck + lint + unit + integration; broken types can no longer ship past the local gate (T-16.1).
  • Route-level tests for every previously untested admin API route (products/orders, competitions/venues, sports, team-seasons, catalog/reference, link-student-to-player, teams availability/training/context, org reference/break-glass, branding, audience, dashboard, players [id]/photo, submissions evidence, sponsors + logo + placements) (T-16.1).
  • E2E runs on pull requests, not just main push (T-16.1).
  • Remote admin credential restored (admin@onoo.mn password reset via GoTrue admin API, sign-in verified) (T-16.1).
  • Gate 3 decision record drafted for Phase 11 — awaiting owner approval (T-16.1).

Phase 17 — Scoresheet analytics & continuous uploads

Turning every FIBA Official Statistics PDF upload into public analytics and making the admin upload path safe for continuous season-long updates.

  • Game score-flow chart: cumulative home/away scores from FIBA 5-minute checkpoints with Q1–Q4 boundaries + accessible table (T-17.1).
  • Team scoring-source chart (paint / 2nd-chance / fast-break / TO points / bench per game) + flow columns in the per-game table (T-17.1).
  • Player shot-distribution heatmap (court zones + scatter) wired into the player Distribution tab; starter badge + FIBA fouls C/D in the game log (T-17.1).
  • Upload hardening: PDF team-code validation, cmd_seed_game_rosters auto-seed, name-based player identity fallback (T-17.1).
  • Anonymous-read grant fix for FIBA-derived analytics tables (checkpoints/periods/summary were 42501-hidden) (T-17.1).
  • Game Intelligence Lab: lead-differential momentum chart, game-control panel (time leading / biggest lead / longest run / lead changes / times tied), point-source breakdown (paint / fast-break / 2nd-chance / TO points / bench) on the game page (T-17.4).
  • Per-game EFF column on the player game log via @onoo/core computeEfficiency (T-17.4).
  • FIBA checkpoint parser fix: merged-header extraction and flow-line guard produce correct 5-minute checkpoint values for real PDFs (T-17.4).
  • Scoresheet evidence review UI: admin parses a FIBA PDF, previews every value (players/flow/checkpoints/warnings), then explicitly confirms before publish — review-gated path shared with the instant upload (T-17.2).
  • Season-long flow trends: per-game chart of the 5 FIBA flow categories + time-leading on team analytics, with accessible table and empty state (T-17.3).
  • Game-page milestones: @onoo/core detectGameMilestones (double-double / triple-double / 20+) badges on recaps (T-17.5).
  • Recap v2 lab story: run / biggest-lead / time-leading sentences in the recap; momentum share card gains a Тоглоомын хяналт facts row (T-17.5).
  • Live momentum chart in the live game center, derived from stat_events via deriveBoxScore semantics (T-17.5).
  • Player dossier rewired: league-overlay radar, stat-card flips (season vs career), milestones, recent games, monthly progression, career timeline; trend brush-range summary badges + cross-tab highlight (T-17.5).
  • Leaders: 13-stat sortable tabs, 8-category leader strips (eff/+/−/TS added), drag-to-compare to the live compare page (T-17.5).
  • Standings: inline single-expand row expansion (last-5, top scorers, next game, diff bars) replacing the drawer (T-17.5).
  • Historical import: shared reviewed pipeline in scripts/lib/fiba-import.ts + manifest CLI scripts/import-official-stats.ts; BUBL seed refactored onto it (T-17.5).

Phase 18 — Performance & hardening

Search and core surfaces stay fast as data grows; repeat work is cached instead of recomputed.

  • Search performance: searchAll/searchPlayersAndTeams cached server-side (use cache + cacheLife("realtime")) via the cookieless anon client; /api/search + /api/search/quick responses cached 60 s (browser/CDN) with stale-while-revalidate (T-18.1).
  • Admin search: pg_trgm GIN indexes on players.canonical_name/name_latin + teams.name/short_code (base-table ILIKE); deterministic ORDER BY canonical_name on /admin/api/players (T-18.3).

Phase 19 — UX audit fixes

2026-08-06 live audit (VERDICT: FAIL — 3 Critical, 5 High, 8 Medium) on onoo.zuiiotech.com.

  • Canonical base: SITE_URL constant (env + onoo.zuiiotech.com fallback) wired through sitemap, robots, metadataBase, per-route canonicals, JSON-LD, and embed footers — no more dead onoo.mn URLs (T-19.1).
  • Contrast: dark --muted-foreground 0.55 → 0.62 — WCAG AA on every surface (T-19.1).
  • Mongolian copy + terminology: "Эзэн" tab, "Сүүлийн тоглолтууд", "Өндөр", canonical Самбар/Дамжуулалт labels everywhere (T-19.1).
  • Teams directory at /teams — footer "Багууд" link no longer 404s (T-19.1).
  • Team "next game" excludes finished statuses — no more finals under "Дараагийн тоглолт" (T-19.1).
  • Redeploy: the live build was stale vs repo (search, box-score empty states, MN toggle, stat labels) — fixed by shipping the current code (T-19.1).
  • Admin user manual: "Гарын авлага" page documents every sidebar menu entry with a Mongolian description + direct link; reachable from a new "Тусламж" sidebar group (T-19.2).
  • VitePress docs site: onoo-docs.vercel.app renders the repo docs/ markdown (feature docs, vision, architecture, roadmap) with sidebar, search, mermaid; docs stay single-source via symlink (T-19.3).
  • Client demo data prep: regenerated every published game's player lines + team stats on the remote project so box scores are internally consistent (pts = 2·fgm + tpm + ftm, team totals match scores), rebuilt per-game season stats, restored the Дээд Лигийн Цом tournament hub, seeded awards + sponsor placements; added per-game columns to v_public_leaders and fixed the MVP-race EFF double-divide (T-19.4).

Phase 20 — Gap closeout (2026-08-06)

All gap ideas (docs/tasks/gaps/) audited against the shipped codebase. G-16 (Live court shot heatmap/animation) was removed from the product scope per owner direction.

  • G-01 Score flip animation — flip-digit.tsx/score-board.tsx on landing + game detail.
  • G-02 Skill radar league overlay — ghost polygon, toggle default on, dual tooltip.
  • G-03 Season arc brush — recharts Brush + range summary + cross-highlight with game log.
  • G-04 Multi-category leaderboard strip — 8 category strips on landing + leaders.
  • G-05 Standings row expansion — chevron accordion rows (with T-19.1).
  • G-06 Card flip stats — hero + player intelligence overview flip cards.
  • G-07 Drag-to-compare — leaders drag shipped; 2026-08-06 added compare-page delta-highlighted table (>10% rule), radar entrance animation, season arc overlay (compare-arc.tsx, API gameLines).
  • G-08 Tournament hub — single-page hub with groups, bracket, games by round.
  • G-09 Tournament bracket — round columns + classification bracket.
  • G-10 Swipeable game cards — touch swipe + action panel.
  • G-11 Drag-to-reorder leader categories — dnd-kit + localStorage order.
  • G-12 Interactive court heatmap — SVG zones + tracker shot capture.
  • G-13 Season/competition selector — URL-persisted on 4 pages.
  • G-14 Countdown timer — next scheduled game on landing.
  • G-15 Shareable stat cards — server-rendered OG cards + share button.

Phase 21 — League insight features (2026-08-06)

User-selected "easy + wow" features: zero scorekeeper effort, computed from existing public views. Тоглолтын баатрууд (Game Heroes) was already shipped via recap-header/top-performers.

  • Хүчний чансаа (T-21.1) — win% + last-5 form + SOS composite, trend arrows, standings page.
  • Багын тайлан карт (T-21.2) — five A–F categories vs league population, team page.
  • Сэтгэл хөдөлгөм тоглолтууд (T-21.3) — 0-100 drama score (margin, total, max lead), standings page.

Phase 22 — EuroLeague-inspired public UI (2026-08-07)

Competitive research against euroleaguebasketball.net: adopt the layout patterns that make sense for a score-driven product. All presentation-layer on existing views.

  • Mobile bottom nav — 5 thumb-friendly destinations below lg, inline nav hidden (T-22.1).
  • Standings rank chips on schedule cards + home strip (T-22.1).
  • Site-wide next-game countdown strip with ticker sponsor slot (T-22.1).
  • Player-to-Watch spotlight per team in the game hero (T-22.1).
  • Add-to-calendar (.ics) download on the game page (T-22.1).
  • Standings view toggle — Хүснэгт / Цуврал / Форм (T-22.1).
  • Venue line on game cards (T-22.1).
  • Public site performance — "use cache" on public queries + font priority (T-22.2). Home mobile: PERF 76→82, LCP 6.7s→4.7s; all public pages improved.
  • Next.js 16.3 optimization batch (T-22.3) — partial prefetching (one App Shell per route), runtime prefetching on filter pages, cacheTag + admin revalidateTag (instant score/standings propagation), generateStaticParams on entity routes, Web Analytics, cached sitemap.
  • Migration prefix fix — 20260806120000_seed_game_rosters renamed to 20260806130000 (duplicate-prefix collision blocked local Supabase).

Phase 23 — NBA.com parity & league video (2026-08-07)

Competitive-parity batch against nba.com (comparison: docs/features/nba-com-comparison.md). All gaps from the audit shipped: content engine, schedule/stats parity, navigation discoverability, plus the owner-approved YouTube video surface (league channel embeds — VISION video non-goal lifted for embeds only).

  • News feature completed (T-11b.1) — admin CRUD (/admin/news), public /news + /news/[id], home latest-news strip, nav/footer links; migration+seed already existed, UI was missing.
  • League videos — videos table + cmd_* RPCs + v_public_videos, admin console, public /videos with embedded player + thumbnail grid, home strip; league YouTube channel embeds (no video hosting).
  • Schedule team filter — /games?team= via TeamFilter select + per-team link on team pages.
  • Season calendar export — /api/calendar/season.ics (multi-event feed, ?team= scope) + button on /games.
  • Daily leaders — most recent game day, top-5 per 6 categories on /leaders (NBA stats-hub parity).
  • Public transfers feed — v_public_transfers (approved only) + /transfers page.
  • Nav discoverability — "Илүү" dropdown (Мэдээ, Видео, Рекордууд, Наградууд, Тэмцээнүүд, Хуанли, Шилжилтүүд, Тайлбар, Баримт бичиг) + expanded footer.
  • Hide-scores spoiler toggle — scorebar eye toggle (localStorage).
  • Stats glossary — /stats-glossary (MN explanations of ORtg/DRtg/PIE/Four Factors…).
  • Key dates — league_dates + admin console + /key-dates page.
  • Per-team records — team-scoped record boards on /teams/[slug].
  • Pre-game preview card — head-to-head record + recent meetings on scheduled /games/[id].
  • Competition hubs — /competitions index + /competitions/[id] (standings, leaders, recent games, tournament structure).
  • Reviews RLS tightening — product_reviews SELECT restricted to approved (org admins see all) — completes the in-progress moderation policy.

Phase 24 — Security hardening (2026-08-07)

Audit-driven hardening of the live deployment (onoo.zuiiotech.com + iyhujghadlymroihxyiy.supabase.co): live-verified RLS gaps, dependency CVEs, admin auth, security headers. Spec: T-24.1.

  • Dependency CVEs: postcss (3 advisories via next pin), fast-uri, js-yaml, hono — pnpm audit now clean (T-24.1).
  • RLS: dropped orders_admin_all / products_admin_all / reviews_admin_all (any authenticated user could read/write all orders, products, reviews); consent_policies + break_glass_access writes scoped to owning org admins (T-24.1).
  • Storage: admin buckets (player-photos, team-logos, product-images, sponsor-logos) writes require an org admin — live-verified bypass closed (T-24.1).
  • Admin upload routes require org-admin membership; dev credentials removed from the login client bundle (T-24.1).
  • Security headers (X-Content-Type-Options, Referrer-Policy, Permissions-Policy, X-Frame-Options, CSP frame-ancestors 'self'); stat_events anon reads column-scoped (T-24.1).

Phase 25 — Terminology & i18n consistency (2026-08-07)

Unify Mongolian stat labels on common usage. Core i18n (packages/core/src/i18n/stats.ts) is the single source of truth; components import getStatLabel instead of inline copies.

  • Stat label terminology unification (T-25.1) — canonical set Оноо / Самбар / Дамжуулалт / Булаасан / Хаалт; radar, compare radar, stat cards, season arc, awards pills, OG images all read from core; 3 old streams collapsed into one.

Phase 26 — Homepage polish (2026-08-08)

User request: trim the "Илүү" nav dropdown to footer-only destinations, lead the landing hero with the newest league video (NBA.com style), keep the news preview visible.

  • Nav cleanup (T-26.1) — Мэдээ and Видео promoted inline in the desktop nav; "Илүү" dropdown + MORE_ITEMS removed (secondary destinations stay in the footer); Base UI dropdown runtime error gone with the menu.
  • Featured video hero (T-26.1) — landing hero embeds the newest published video (youtube-nocookie player, title, "YouTube-ээр нээх") with a compact next-game panel; scoreboard hero remains the empty-state fallback; the latest-videos strip no longer duplicates the hero video.
  • News preview (T-26.1) — "Сүүлийн мэдээ" strip with up to 3 latest published articles stays on the landing page.
  • Full-width video hero (T-26.2) — hero video spans the full container width with the next-game strip below; news cards get aspect-video image slots.
  • Space League channel feed (T-26.2) — newest @SpaceLeague video (channel UC1P-4WO1Qeg1kBQiy2q8SgA) leads the hero via the YouTube Data API v3; falls back to admin videos until YOUTUBE_API_KEY is set (YouTube killed RSS feeds; scrape verified dead).

Phase 27 — NBA.com editorial layout (2026-08-08)

Fresh live analysis of nba.com (2026-08-08) applied to the landing page: editorial hierarchy (featured story + headlines + topic rails) instead of a uniform grid. Pure presentation on existing data paths — no schema changes.

  • Featured news + headlines rail (T-27.1) — home news section becomes a featured story (kicker, cover image, "Унших" CTA) beside a compact headline rail with dates (NBA "Stories/Headlines" pattern); up to 5 articles.
  • Лигийн булан league corner (T-27.1) — latest-transfers and upcoming key-dates mini-feeds (hide when empty) plus quick-link chips into the footer-only league pages: Наградууд, Рекордууд, Тэмцээнүүд, Статистикийн тайлбар.

Phase 28 — Test suite hardening (2026-08-09)

E2E suite hardening after a full admin-page test pass surfaced 9 failures: shop checkout locator collisions, SWR first-read staleness in content admin CRUD specs, and an order-dialog validation-message bug. Suite is now green and deterministic against the local stack.

  • Admin page E2E fixes (T-28.1) — dialog-scoped shop locators, role-based h1, SWR-tolerant poll-with-reload public assertions, orphan-row purge in beforeAll, Спэйс Лиг transfer pick, order-dialog first-error-wins validation mapping.

Phase 29 — Responsive & performance audit (2026-08-09)

Full audit pass (user request 2026-08-09): three parallel code scouts + live browser probes at 360/390/768/1440px against Next.js 16.3 docs. Fixed P0 home clipping, sticky-header conflicts, LCP iframe hero, image loading, touch targets, and a11y semantics.

  • Responsive fixes (T-29.1) — home leaders/standings cards were clipped by the court-divider grid auto-column (fixed with grid-cols-1 + min-w-0); countdown strip moved out of the sticky stack so inner sticky offsets (shop filter, players toolbar, MVP race) always clear the header; /teams/vs gained horizontal padding; standings mobile rank cell and awards stat-pill rows wrap at 360px.
  • Performance (T-29.1) — YouTube hero + featured video are click-to-play poster embeds (LCP no longer pays iframe JS); news covers and video thumbs use next/image with sizes; countdown pauses on hidden tabs; slow poll skips while Realtime is connected; search/rank-map/next-game/daily-leaders queries moved from cacheLife realtime→frequent; unused global DrawerProvider removed; SW caches bounded (40 nav / 300 static / 50 misc).
  • UX & a11y (T-29.1) — skip link targets the always-present #content wrapper; sponsor marquee replicas aria-hidden + inert + motion-reduce; leaders tabs get role=tab/aria-selected; touch targets raised to ≥40px (date nav, pagination, scorebar hide button, mobile shop button); home game times rendered in Asia/Ulaanbaatar; dead #play-by-play anchor now resolves on game pages.

Phase 30 — Test coverage expansion (2026-08-09)

Audit-driven coverage push: every non-boilerplate src file now has a test import, the coverage gate became enforceable, and E2E gaps were closed with new specs.

  • Full test coverage expansion (T-30.1) — 0 untested non-boilerplate src files (was 198); 119 boilerplate pages covered; ~135 new test files (+1205 tests); E2E specs for live tracker + 11 uncovered admin pages; test:coverage script + @vitest/coverage-v8; thresholds raised to 72/65/70/60; coverage 52.78→77.74% stmts, 53.86→79.2% lines; merged-tree FastGate green (4049 unit + 669 integration + 22 E2E).
  • Direct LazyYouTubeEmbed component test (T-30.2) — last src file without a direct test import now covered (poster/eager-no-iframe, click-to-play nocookie iframe, id encoding, className pass-through).

Phase 31 — E2E reliability (2026-08-10)

E2E CI red on 4 of 5 runs (12–13 failures, net::ERR_FAILED). Root cause: the PWA service worker's networkFirst/cacheFirst called event.waitUntil without event in scope — every SW-controlled navigation and static-chunk request rejected. Also fixed prerender-abort spam on the Next 16.3.0-preview.8 build (cache-complete fetchers + no allow-runtime prefetch), an RLS gap hiding rosters from the tracker for live/scheduled games, the stale videos embed assertion (T-29.1 click-to-play), and the racy tracker game-finder. Full suite now 204 passed / 0 failed; the 3 previously skipped tracker live-flow specs execute and pass. Also fixed in CI follow-up: game OG image Satori crash on scored games, videos embed hydration race.

  • E2E CI stabilization (T-31.1) — public/sw.js passes event into networkFirst/cacheFirst (ReferenceError fix, same bug verified on the deployed sw.js); 13 pages drop prefetch="allow-runtime", partialPrefetching off; 9 public fetchers made cache-complete ("use cache" + cacheLife + cacheTag, tournament fetchers on the cookieless client) — kills the per-request prerender-reject + Sentry spam; nav/sidebar Links prefetch={false}; CI E2E retries 3; tracker spec waits for the client-side table and prefers a live game; videos spec clicks the poster first; RLS migration 20260810120000_tracker_rosters_live_games.sql (anon: approved games only, authenticated: + live_provisional/scheduled); FastGate green (4049 unit + 703 integration), E2E 204 passed / 0 failed. Stable upgrade: next 16.3.0-preview.8 → 16.3.0 stable — prerender-abort bug fixed upstream; partialPrefetching re-enabled, prefetch exports restored as "partial".

Phase 32 — Player page NBA.com layout (2026-08-23)

User request: nba.com-style player page — season stats table + last games at the top, everything else below, tabs merged 5 → 2. Presentation-layer only.

  • Player page NBA.com layout (T-32.1) — team-color hero banner, then everything in player-priority single scroll: stats table → recent games → game log → trend → shooting → distribution → analytics → clutch; sticky anchor section nav; tabs removed (nothing hidden behind clicks); players tree 217/217 tests, tsc + biome clean, browser-verified.

Phase 33 — Player profiles (2026-08-24)

Player biographies are a single free-text field managed by admins and shown on public player profiles. Hidden players stay masked.

  • Player bio support (T-33.1) — players.bio admin CRUD, masked v_public_player_profiles.player_bio, and public profile section; local and remote migrations, generated types, integration test, and gate evidence recorded.

Phase 34 — Athlete self-service (2026-08-24)

Players claim their profile through a scoped, single-use team invite and edit their own biography.

  • Athlete self-service bio via team invites (T-34.1) — hashed invite lifecycle, staff roster actions, email/Google sign-in callback, and audited self-service bio edits.
  • Order-independent fallback seed migration (T-34.2) — 20260824120000_seed_leagues_fallback.sql creates its organization and sport parents idempotently before inserting G League, Mini League, Junior Cup, and their 2026 seasons; fresh ordered migration apply passed twice and the running local database was a no-op.

Phase 35 — Landing layout fixes (2026-09-05)

2026-09-05 landing review: sponsors below content, hero empty state with search + quick links, selector above data, single empty states, compact text-only news slider.

  • Landing layout fixes (T-35.1) — sponsors moved below page content, competition selector tops content, hero fallback carries search + browse links, collapsed empty-state wall, dots-free compact news slider.
  • NBA-order landing sections (T-35.2) — sponsors back on top, news second, matches next, top players after (nba.com order).
  • Hide empty players/games sections, show conditionally (T-35.3) — no-data placeholders render nothing; each section appears only with data.

Phase 36 — Production CPU optimization (2026-09-07)

Reduce avoidable Vercel Fluid active CPU from global Supabase auth proxy work while retaining protected-route session verification.

  • Production CPU optimization — Supabase auth proxy (T-36.1) — public pages bypass the auth proxy; protected and session-dependent routes keep verified session handling.

Phase 37 — Player fan feedback (2026-09-07)

Public emoji reactions (3 fixed, no login) + post-moderated comments on player pages. Owner waived VISION no-comment rule for player pages.

  • Player emoji reactions + public comments (T-37.1) — player_reactions/player_comments tables with toggle/report/hide cmd_* commands, curated v_public_* views, player-page pills + comments UI, 38 tests.

Phase 38 — Player self-service profiles (2026-09-08)

Claimed players customize their own detail identity without admin help. Stats stay league-owned.

  • Player self-customizable detail page (T-38.1) — nickname/cover_url columns, masked v_public_player_profiles, cmd_update_my_player_profile RPC, /api/me/profile + /api/me/photo self routes, customize drawer (bio/photo/social/facts), hero nickname + cover, 23 unit/route/component tests + 2 anon E2E.

Phase 39 — News entity linking (2026-09-08)

Tag players/teams on news articles; related news surfaces on player/team pages.

  • News mentions (T-39.1) — news_mentions junction table, masked v_public_news_mentions, cmd_set_news_mentions RPC, admin tag picker with search, mention chips on articles, related-news sections on player/team pages, 27 unit/route/component/data tests + 6 integration + 3 E2E (CI-local seed fixtures).

Phase 40 — Public slider reliability (2026-09-14)

One Embla engine replaces both hand-rolled sliders (owner UI review: buggy news progress line + sponsor banner drift).

  • Embla slider engine (T-40.1) — embla-carousel-react + embla-carousel-autoplay 8.6.0; news hero progress follows the plugin clock (hidden-tab safe), sponsor banners use selected-snap dots; 16 slider tests green, tsc + Biome clean.

Phase 41 — Entity-surface parity (2026-09-14)

Teams/games/players review polish against NBA.com/Yahoo/ESPN patterns — presentation-layer only, no schema changes.

  • Teams/games/players review polish (T-41.1) — rank/streak/PPG team cards + search; full team schedules + leaders strip + transfers; games competition + status filters; game videos + PBP filter table; players anchor nav; player splits + career table + transfers.
  • Leftover entity-surface gaps (T-41.2) — box-score starter/bench groups; roster DNP availability; directory height/weight/age chips; hero linescore table.
  • Entity-surface round 3 (T-41.3) — competition-scoped teams hub; roster bio chips; depth chart; A-Z directory; Athlete JSON-LD; shared sub-nav; unified heroes.
  • Public pages speed (T-41.4) — sin1 region pin next to Supabase; footer three head counts instead of four row queries; competition-scoped, narrowed leaders/standings selects; cached tenant social links with branding invalidation; dnd-kit split out of the leaders initial chunk.

Phase 42 — Detail declutter (2026-09-14)

Basic-first layering on game/team/player detail — presentation-layer only, no schema changes.

  • Detail declutter basic-first (T-42.1) — recap+box above analysis on game detail; 5-row basic comparison + disclosure; team analyst links below depth; season table basic-6 + advanced disclosure; leaders qualification caption + glossary links; daily leaders below main grid.

Phase 43 — List richness + ops closeout (2026-09-14)

Team next-game lines + games spoiler toggle without new list-path queries; G-17..G-19 parked honestly.

  • Ops closeout G-17..G-19 (T-43.2) — G-17 superseded (Zuiio ID SSO, no Google path); G-18 Google leg removed, magic-link click is a 1-minute owner task; G-19 parked awaiting owner staff names.

Phase 44 — Scorebar split (2026-09-15)

Independent completed (30%) + pending (70%) panes with per-pane arrow scrollers.

  • Scorebar 30/70 split (T-44.1) — status-scoped completed/pending reads, ScorebarPane arrows, 30/70 desktop + pending-first mobile.

Phase 45 — Game detail responsive (2026-09-15)

390px game detail: no page-level horizontal scroll, duel-bar label-first rows, sticky box-score player column.

  • Game detail mobile responsive (T-45.1) — chart max-width cap, single-column page grids, DuelBar/TeamComparison label-first mobile rows, sticky player column in box score.

Phase 46 — News inline entity links (2026-09-16)

@player / #team shortcuts in the news body with autocomplete; stored tokens render as entity links and feed the T-39.1 tag rows.

  • Inline @/# entity shortcuts in news (T-46.1) — token helpers, MentionTextarea (@ players+teams / # teams-only), picker preselect, detail link render, create/edit junction merge, 99 scope tests green.

Phase 47 — Public pages density (2026-09-15)

Strip the outer surface panel from public listings and home sections; one PageHeader title stack, plain rows instead of card-in-card.

  • Public pages density (T-47.1) — PageHeader primitive, Card variant="plain", de-boxed home sections, tighter listing containers, plain teams directory cells.

Phase 48 — Team Site Pilot (2026-09-16)

Seasonal per-team SaaS from one shared DB and one deploy: each paying team gets its own branded host with its team page at / and its own sponsor strip.

  • Tenant team binding + seasonal entitlement (T-48.2) — additive team binding, plan + paid_through, explicit root-domain host resolution.
  • Tenant home + sponsor strip (T-48.3) — shared TeamHome, request-time tenant branch at /, team-only nav shell, sponsor strip.

Phase 49 — Team Site Pilot hardening (2026-09-16)

Team tenants show only their own team's world: no league destinations in the header, footer, or mobile tab bar.

  • Team-only shell (T-49.1) — header/footers/tab-bar scoped to the team; league surfaces hidden on team hosts.
  • Scout game-plan block (T-49.2) — printable attack/defend/watch/rotation summary from existing matchup data.
  • Load flags + next practice (T-49.3) — foul-risk/heavy-load badges on depth chart, RLS-gated practice strip on team home.
  • Titan tenant UX hardening (T-49.4) — team-scoped public games/players/home, tenant-safe shell, redirects, metadata, and a11y fixes.

Phase 50 — Homepage + games cleanup (2026-09-18)

Owner requests 2026-09-18: one daily-leaders board replaces the top-performances + standings-leaders sections and the floating social dock (T-50.1); /games matches the NBA app reference — no calendar-sync promo wall, no noisy season/group texts — and the news slider loses its pause toggle (T-50.2).

  • Home daily leaders + floating dock removal (T-50.1) — photo/name/team big cards, competition-scoped, empty collapses.
  • Games NBA-clean (T-50.2) — calendar promo + season line + group eyebrows/counts removed; GameGroup title-only; hover/focus autoplay pause kept; week strip hides zero-game days.
  • Players NBA-compact (T-50.3) — PageHeader hero removed (sr-only title kept), single-row tab strip, h2 + season selector on one row, compact 3-col podium, gap-4 rhythm.

Phase 51 — Public header diet (2026-09-18)

Owner verdict: listing heroes, boxed toolbars, sticky players tabs, and roomy home section heads waste vertical space. One compact breadcrumb title row per page.

  • Public header diet (T-51.1) — breadcrumb PageHeader, underline players tabs, unboxed grid toolbar, compact home title rows.

Phase 52 — Team page NBA parity (2026-09-18)

Review findings on /teams/[slug] vs NBA.com/ESPN/Basketball-Reference: sticky sub-nav, single roster, category leaders, honest hero form, featured next game. Presentation-layer only — no schema changes.

  • Team page NBA parity fixes (T-52.1) — sticky sub-nav, merged roster, category leaders, hero streak, featured next game.

  • Unified identity across academy, team, league (T-C.1) — canonical identities linking students to players with cross-domain affiliations.

  • One consent-filtered athlete timeline (T-C.1) — unified timeline combining official game records and academy milestones.

  • Public athlete story composed from approved records (T-C.1) — verified affiliations and multi-organization journey on public profiles.

  • Нүүр
  • Багууд
  • Тоглогчид
  • Тоглолтууд
  • Хүснэгт

Монголын сагсан бөмбөгийн лигийн албан ёсны статистик платформ. Бүх тоглолтын тоо баримт, шалгуур, тоглогчдын мэдээлэл.

Хуудсууд

ТоглолтуудТоглогчидМэдээВидеоРекордуудШагналуудТэмцээнүүдШилжилтүүдЛигийн хуанлиСтатистикийн тайлбарБаримт бичиг

Лигийн мэдээлэл

Багууд2026 улирал

Платформ

132Бүртгэгдсэн тоглолт
375Идэвхитэй тоглогч
24Баг

© 2026 Оноо. Бүх эрх хуулиар хамгаалагдсан.

Монголын Сагсан Бөмбөгийн Холбоо

  • Нүүр хуудас
  • Багууд
  • Тоглогчид
  • Тоглолтууд
  • Хүснэгт
  • Мэдээ
  • Видео
АкадемиДэлгүүр