Skip to main content

Feature parity with backend/PWA

d-sports-engage-native (1.25.9) targets high parity with d-sports-api feature behavior while optimizing for mobile UX patterns.

Wallet and pack opening

  • Wallet screens consume balances, token data, and PIN-gated custodial flows from backend APIs.
  • Sends use server-side sign-transaction, not on-device private-key signing.
  • Pack browsing, purchase, and open flows use backend-driven states and inventory refresh behavior. Start a pack purchase with POST /api/packs/{id}/purchase. Do not call PUT on that path (410 GONE). Confirm crypto checkout with POST /api/checkout/crypto/verify.
  • Odds-disclosure surfaces read backend-provided probability payloads.

Binder and market

  • app/binder is the digital binder inventory and transfer surface. It talks to /api/binders*.
  • Binder PIN is not the wallet PIN. Native must store the short-lived verify-pin token and send x-binder-pin-token on binder reads.
  • You browse packs on market/packs and trading on market/trading so one tab does not lose the other. Listings go through /api/v1/marketplace/* (in generated OpenAPI). listings/mine still works; me/listings is the live path.
  • Card history uses public GET /api/v1/cards/{id}/provenance.

Quest, Fan Rep, rewards, and pass surfaces

  • Quest UI supports team-aware progression and pass-gated eligibility.
  • Daily quiz sessions use /api/v1/engage/quests/*.
  • Fan Rep screens read /api/v1/engage/rep/breakdown and /api/v1/engage/rep/ledger, including dsportsDirect ledger rows.
  • Reward states and claim flows follow backend quest/reward APIs.
  • Global pass and event pass effects are reflected in native quest visibility/completion UX.

Games

  • The games surface joins GET /api/games/catalog with GET /api/v1/engage/games/catalog. See Game Engine.
  • Legacy keys (daily spin, guess-the-player) still drop when unknown. Engine keys stay visible as Update required or Not in this build.
  • Shipped engine games on /(tabs)/locker-room/games/{key}: daily-pickem, daily-trivia, prize-wheel-spin, guess-the-player, daily-lineup, card-trivia, login-streak-scratcher, deflection, iron-trap, deke-daily, faceoff-frenzy, sauce-pass, empty-net, air-hockey, locker-singularity.
  • locker-singularity uses the idle ledger (/api/v1/engage/games/locker-singularity/ledger), not session/action/complete. Send X-Client-Version and a client-held UUID idempotencyKey on mutations. The client sends tap counts, never buzz amounts.
  • How-to-Play walkthroughs stay local. They must not call session/action/complete.
  • Game Center uses /api/events/* for hero, lineup, player-stats, top-performer, win-probability, chat, presence, ratings, Broadcast discovery, and Live Activity. Ratings submit through POST /api/events/{gameId}/ratings.

Team and leaderboard integration

  • Teams and leagues metadata are consumed from backend /api/teams and /api/leagues.
  • Sports catalog comes from GET /api/config/sports. Team search uses GET /api/teams/search.
  • Joining a team (POST /api/teams/{id}/join) is leaderboard membership. Following a team is a separate social action. Starring an HQ club (PUT /api/me/starred-teams/{teamId}) is a bookmark, capped at 50, and is neither a join nor a follow.
  • Fetch one team with public GET /api/teams/{id} (id first, then slug). Archived teams return 404.
  • Leaderboard displays and team-scoped ranking views align with backend leaderboard contracts.
  • Favorite-team interactions influence quest and leaderboard context where backend eligibility requires it.
  • Push delivery uses OneSignal. In-app inbox uses /api/notifications* and includes GAME_ALERT and RATING.
  • Settings persist per-channel notify flags on PATCH /api/user/settings.
  • About can check for an EAS OTA update without waiting for the next cold start.
  • Locker-room posting gates on the in-app EULA. Policy pages render in-app; do not hardcode legal copy in clients.
  • Accessibility settings include high contrast and color-blindness palettes. The public support matrix is GET /api/accessibility.

Admin hub

  • app/(admin) exposes team-manager surfaces: packs, collectibles, coins, games, live, moderation, social, submissions, team access, users, and CMS.
  • The client gate is UX only. Every /api/admin/* route re-checks RBAC server-side.