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.
- Run:
bunx expo startorbun run start— then pressafor Android orifor iOS, or scan the QR code with Expo Go. - Current version: 1.10.5
Tech stack
| Category | Technology |
|---|---|
| Framework | Expo 54, React Native 0.81, React 19 |
| Auth | Clerk (Expo) |
| Payments | RevenueCat (react-native-purchases) |
| Web3 | Thirdweb |
| State | Zustand |
| Storage | MMKV |
| UI | Lucide React Native |
| Navigation | Expo Router 6 |
| Package | Bun |
Features
- Wallet — Tokens, holdings, pack opening, crypto checkout (via PWA backend)
- Shop — Collectibles, cart, coin bundles, checkout
- Leaderboard — Rankings and filters
- Locker room — Social feed, quests, daily games, and engagement
- Profile — User profile and settings
- Theme — Dark/light mode (default dark)
Project structure
Screen files contain only JSX. All state, effects, and handlers live in dedicated hooks (e.g.,
use-wallet-screen.ts). Sub-components are grouped by feature under components/.Environment variables
All runtime variables use theEXPO_PUBLIC_ prefix. Create a .env file in the repo root:
| Variable | Purpose |
|---|---|
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY | Clerk authentication key |
EXPO_PUBLIC_API_URL | Backend API base URL (defaults to https://api.d-sports.org) |
EXPO_PUBLIC_TW_CLIENT_ID | Thirdweb client ID for Web3 features |
EXPO_PUBLIC_REVENUECAT_API_KEY | RevenueCat API key for in-app purchases |
EXPO_PUBLIC_REVENUECAT_APPSTORE_ID | RevenueCat App Store app ID |
EXPO_PUBLIC_REVENUECAT_ENTITLEMENT | RevenueCat entitlement identifier |
EXPO_PUBLIC_SUPABASE_URL | Supabase project URL |
EXPO_PUBLIC_SUPABASE_KEY | Supabase publishable (anon) key |
Getting started
Configure environment
Copy the
.env example and fill in your Clerk, RevenueCat, Thirdweb, Supabase, and API URL values.Start the dev server
Run
bunx expo start, then press a for Android, i for iOS, or scan the QR code with Expo Go.d-sports-api) as the PWA for API and checkout flows.
API client layer
The API client inlib/api/client.ts automatically attaches Clerk auth tokens and handles the normalized response envelope:
{ success, data } or { success: false, error, code } envelopes via shared helpers (apiSuccess, apiError, apiUnauthorized, apiNotFound). The client transparently supports both the new envelope and legacy responses for routes that have not yet been migrated.
EAS build profiles
| Profile | Channel | Use case |
|---|---|---|
development | development | Simulator builds with dev client |
development-device | development | Physical device builds with dev client |
preview | preview | Internal APK distribution |
staging | staging | Pre-release testing (auto-increment) |
production | production | App Store / Play Store release (auto-increment) |
bunx eas build --profile <profile>.
Ecosystem overview
See how the native app fits with the PWA, site, and Mic’d Up.
