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 callPUTon that path (410 GONE). Confirm crypto checkout withPOST /api/checkout/crypto/verify. - Odds-disclosure surfaces read backend-provided probability payloads.
Binder and market
app/binderis 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-tokenon binder reads. - You browse packs on
market/packsand trading onmarket/tradingso one tab does not lose the other. Listings go through/api/v1/marketplace/*(in generated OpenAPI).listings/minestill works;me/listingsis 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/breakdownand/api/v1/engage/rep/ledger, includingdsportsDirectledger 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/catalogwithGET /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-singularityuses the idle ledger (/api/v1/engage/games/locker-singularity/ledger), not session/action/complete. SendX-Client-Versionand a client-held UUIDidempotencyKeyon 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 throughPOST /api/events/{gameId}/ratings.
Team and leaderboard integration
- Teams and leagues metadata are consumed from backend
/api/teamsand/api/leagues. - Sports catalog comes from
GET /api/config/sports. Team search usesGET /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 return404. - 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.
Notifications and legal
- Push delivery uses OneSignal. In-app inbox uses
/api/notifications*and includesGAME_ALERTandRATING. - 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.
