Overview
d-sports-engage-native (package name:engage-native, version 1.10.5) 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. The app also runs as a responsive PWA on web.
- Run:
bunx expo start— then pressafor Android,ifor iOS, or scan the QR code with Expo Go. - URL scheme:
engagenative://
Tech stack
| Category | Technology |
|---|---|
| Framework | Expo 54, React Native 0.81, React 19 |
| Auth | Clerk (Expo) |
| Payments | RevenueCat (native IAP), crypto via Thirdweb |
| Web3 | Thirdweb SDK (Arbitrum, Ethereum, Polygon) |
| State | Zustand 5 + MMKV persistence |
| Navigation | Expo Router 6 (file-based, typed routes) |
| UI | Lucide React Native, Reanimated 4 |
| Monitoring | Sentry |
| Package | Bun |
Features
- Wallet — Token balances, holdings, pack opening, crypto checkout (via PWA backend)
- Shop — Collectibles, cart, coin bundles, crypto and fiat checkout
- Leaderboard — Rankings and filters
- Locker room — Social feed, quests, daily games (Pick ‘Em, Spin Wheel, Guess the Player)
- Profile — User profile, settings, team membership
- Onboarding — New-user flow with team selection
- Theme — Dark/light mode (default dark)
- PWA — Responsive desktop layout (
display: standalone, max-width container)
Environment variables
All runtime environment variables use theEXPO_PUBLIC_ prefix. Create a .env file in the project root with:
| Variable | Purpose |
|---|---|
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY | Clerk authentication |
EXPO_PUBLIC_API_URL | Backend API base URL |
EXPO_PUBLIC_TW_CLIENT_ID | Thirdweb client ID |
EXPO_PUBLIC_REVENUECAT_API_KEY | RevenueCat API key |
EXPO_PUBLIC_REVENUECAT_APPSTORE_ID | RevenueCat App Store ID |
EXPO_PUBLIC_REVENUECAT_ENTITLEMENT | RevenueCat entitlement name |
EXPO_PUBLIC_SUPABASE_URL | Supabase project URL |
EXPO_PUBLIC_SUPABASE_KEY | Supabase publishable (anon) key |
Project structure
Architecture patterns
- File-based routing — Expo Router with route groups
(tabs),(auth),(onboarding)and typed routes enabled. - Modular screens — Screen files contain only JSX. All state, effects, and handlers live in dedicated hooks (e.g.,
use-wallet-screen.ts,use-shop-screen.ts). - Extracted sub-components — Wallet and shop screens are decomposed into
components/wallet/andcomponents/shop/with barrel exports. - Zustand + MMKV — Global state with synchronous persistence via
services/store.tsandservices/storage.ts. - React Context — Providers for auth (
UserContext), collectibles, navbar visibility, and action state. - API client layer —
lib/api/modules with MMKV cache fallback. The app calls the same backend (d-sports-api) as the PWA. - Crypto checkout — Thirdweb SDK signs on-chain transactions; the PWA backend handles
POST /api/checkout/cryptoandPOST /api/checkout/crypto/verify. Supported chains: Arbitrum (default), Ethereum, Polygon. - Fiat payments — RevenueCat handles Apple IAP, Google Play, and Stripe (web) via
lib/revenuecat/provider.tsx. - Path alias —
@/*maps to the project root for clean imports.
Getting started
- Clone the repository and run
bun install. - Copy the
.envexample and fill in the required environment variables listed above. - Run
bunx expo start. - Press
afor Android,ifor iOS, or scan the QR code with Expo Go.
EAS build profiles
The project uses EAS Build with these profiles defined ineas.json:
| Profile | Purpose | Distribution |
|---|---|---|
development | Dev client with simulator support | Internal |
preview | Internal testing (APK on Android) | Internal |
staging | Pre-production with auto-increment | Default |
production | App Store / Play Store release | Default |
bun run build:<profile> or bun run build:<profile>:<platform>.
Over-the-air updates use bun run update via EAS Update.
Ecosystem overview
See how the native app fits with the PWA, site, and Mic’d Up.
