Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions repositories/d-sports-engage-native.mdx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
---
title: "d-sports-engage-native"
description: "Native iOS and Android app for D-Sports Engage. Expo 54, React Native, Clerk, RevenueCat, Thirdweb."

Check warning on line 3 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L3

Did you really mean 'Thirdweb'?
icon: "smartphone"
---

## Overview

**d-sports-engage-native** (package name: `engage-native`) is the native mobile app for D-Sports. It mirrors the core PWA experience on iOS and Android: wallet, shop, leaderboard, locker room, and profile.

Check warning on line 9 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L9

Did you really mean 'leaderboard'?

- **Run:** `bunx expo start` or `bun run start` — then press `a` for Android or `i` for iOS, or scan the QR code with Expo Go.

Expand All @@ -17,18 +17,18 @@
| Framework | Expo 54, React Native 0.81, React 19 |
| Auth | Clerk (Expo) |
| Payments | RevenueCat (react-native-purchases) |
| Web3 | Thirdweb |

Check warning on line 20 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L20

Did you really mean 'Thirdweb'?
| State | Zustand |

Check warning on line 21 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L21

Did you really mean 'Zustand'?
| Storage | MMKV |
| UI | Lucide React Native |

Check warning on line 23 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L23

Did you really mean 'Lucide'?
| Navigation | Expo Router |
| Package | Bun |

## Features

- **Wallet** — Tokens, holdings, pack opening, crypto checkout (via PWA backend)

Check warning on line 29 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L29

Did you really mean 'crypto'?
- **Shop** — Collectibles, cart, coin bundles, checkout
- **Leaderboard** — Rankings and filters

Check warning on line 31 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L31

Did you really mean 'Leaderboard'?
- **Locker room** — Social feed and engagement
- **Profile** — User profile and settings
- **Theme** — Dark/light mode (default dark)
Expand All @@ -36,12 +36,70 @@
## Getting started

1. Clone the repository and run `bun install`.
2. Configure environment (Clerk, RevenueCat, Thirdweb, API base URL) per repo README.

Check warning on line 39 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L39

Did you really mean 'Thirdweb'?
3. Run `bunx expo start`.
4. For development builds: `bun run build:dev` (EAS) or run with Expo dev client.

The app targets both native and web (responsive) and uses the same backend (d-sports-api) as the PWA for API and checkout flows.

## API client

The native app communicates with `d-sports-api` through a typed client layer in `lib/api/`. The `useApi()` hook exposes domain-specific modules (wallet, shop, user, quests, leaderboard, locker room, teams, collectibles, checkout) with automatic Clerk token injection.

Check warning on line 47 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L47

Did you really mean 'leaderboard'?

### Strict envelope mode

The API client (`lib/api/client.ts`) operates in **strict envelope mode**. Every successful API response must conform to the normalized envelope:

```json
{
"success": true,
"data": { ... }
}
```

Error responses follow the same shape:

```json
{
"success": false,
"error": "Human-readable message",
"code": "MACHINE_READABLE_CODE"
}
```

If a response does not include a top-level `success` field, the client rejects it with an `INVALID_RESPONSE_ENVELOPE` error code. There is no fallback parsing for legacy response shapes.

<Warning>
All backend routes consumed by the native app **must** return the `{ success, data?, error?, code? }` envelope. Routes that return raw objects or arrays will cause client-side failures.
</Warning>

### API modules

| Module | Import | Covers |
| --- | --- | --- |
| User | `createUserApi` | Profile, preferences, team membership |
| Wallet | `createWalletApi` | Tokens, holdings, transactions |
| Shop | `createShopApi` | Products, collectibles |
| Checkout | `createCheckoutApi` | Crypto and fiat checkout flows |

Check warning on line 83 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L83

Did you really mean 'Crypto'?
| Quests | `createQuestsApi` | Daily quests and rewards |
| Leaderboard | `createLeaderboardApi` | Rankings and filters |

Check warning on line 85 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L85

Did you really mean 'Leaderboard'?
| Locker room | `createLockerRoomApi` | Social feed and posts |
| Teams | `createTeamsApi` | Team data and membership |
| Collectibles | `createCollectiblesApi` | Owned packs and items |

## Environment variables

The app uses `EXPO_PUBLIC_*` variables accessible at runtime:

| Variable | Purpose |
| --- | --- |
| `EXPO_PUBLIC_API_URL` | Backend API base URL (defaults to `https://api.d-sports.org`) |
| `EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY` | Clerk authentication |
| `EXPO_PUBLIC_TW_CLIENT_ID` | Thirdweb Web3 client |

Check warning on line 98 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L98

Did you really mean 'Thirdweb'?
| `EXPO_PUBLIC_REVENUECAT_API_KEY` | RevenueCat in-app purchases |
| `EXPO_PUBLIC_SUPABASE_URL` | Supabase client URL |

Check warning on line 100 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L100

Did you really mean 'Supabase'?
| `EXPO_PUBLIC_SUPABASE_KEY` | Supabase publishable key |

Check warning on line 101 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L101

Did you really mean 'Supabase'?

<Card title="Ecosystem overview" icon="map" href="/repositories/ecosystem-overview">
See how the native app fits with the PWA, site, and Mic'd Up.

Check warning on line 104 in repositories/d-sports-engage-native.mdx

View check run for this annotation

Mintlify / Mintlify Validation (chronoscyberchronicles) - vale-spellcheck

repositories/d-sports-engage-native.mdx#L104

Did you really mean 'Mic'd'?
</Card>