Mobile Application
En bref
A single React Native + Expo codebase delivers polished native apps for iOS and Android plus a fast PWA, tailored to four distinct roles — players, officials, club admins and spectators — with offline-first storage for licenses, matches and rankings, unified push notifications, a camera-based QR scanner for license verification and check-in, GPS-driven nearby venue discovery and full dark mode and accessibility settings baked in from day one.
Comment ça fonctionne
The mobile application is built once in React Native + Expo and shipped to iOS, Android and the web from the same TypeScript source tree. A device-class hook (useDeviceClass) flips the layout between a mobile bottom-tab shell and a desktop sidebar shell at a 640 px cutoff, so the same screens render natively on a phone and adaptively on a tablet or browser. EAS OTA push updates ship JavaScript-only fixes within minutes, while native binaries follow a slower App Store / Play Store cadence.
Four role-based experiences live inside the same shell. Players get profile, competitions, results and rankings; officials get match management and score entry; club admins get member management and broadcast tools; spectators get live scores, schedules and venue info. Role detection is server-driven from the active tenant profile, so a single download adapts to whatever the user is allowed to do.
Offline-first is foundational: license cards, last viewed matches and current rankings are cached in encrypted local storage. Score entry written offline is queued and replayed when the device reconnects, with conflict resolution handled by the API. Push notifications use APNs, FCM and Web Push behind a unified subscription endpoint. The QR scanner uses Expo Camera for license verification and check-in, validating signed JWT bundles even with no network. A GPS-driven nearby finder lists clubs, venues and competitions sorted by distance, deep-linking into the relevant detail screens. Dark mode and accessibility settings (font scaling, high contrast, reduce motion, screen reader hints) are applied through a tenant-branded ThemeProvider that respects both OS-level preferences and in-app overrides.
Capacités clés
- Cross-platform from one codebase (iOS, Android, Web PWA) via Expo + EAS OTA updates
- Role-aware shell for player, official, club admin and spectator with adaptive mobile/desktop layout
- Offline cache for license, recent matches and rankings with queued score-entry sync
- Unified push notifications across APNs, FCM and Web Push
- Camera-based QR scanner for license verification and event check-in
- GPS-based nearby venue and competition finder with deep links
- Dark mode plus full accessibility settings respecting OS preferences
En pratique
A new player downloads the app from the App Store, signs in once and lands on a hero home screen sized for their phone. They tap the license tab to see a fullscreen license card that loads instantly from cache, then scan a friend's QR badge at the club to verify membership — both work without a signal. On the way to a tournament they open the venue finder, get walking directions to the nearest courts and check in by scanning the entry QR.
During play, the official-mode user enters scores; if the boulodrome Wi-Fi drops, entries queue locally and sync the moment they reconnect. Back home, the same player opens the web app on a laptop and finds an identical experience reflowed into a desktop sidebar layout — same data, same login, no install needed.
Fonctionnalités de ce sous-système
10| ID | Status | Fonctionnalités |
|---|---|---|
| F15.01.01 | Livré | Cross-platform app (iOS, Android, Web) via Craft-Easy Admin (React Native/Expo) ✅ PL-F1501a |
| F15.01.02 | Livré | Player mobile app (profile, competitions, results, rankings) ✅ PL-F1501a |
| F15.01.03 | Livré | Official mobile app (match management, score entry) ✅ PL-F1501a |
| F15.01.04 | Livré | Club admin mobile app (member management, communication) ✅ PL-F1501a |
| F15.01.05 | Livré | Spectator mobile app (live scores, schedule, venue info) ✅ PL-F1501a |
| F15.01.06 | Livré | Offline mode (score entry without connectivity, sync later) ✅ PL-F1501b |
| F15.01.07 | Livré | Push notifications ✅ PL-F1501b |
| F15.01.08 | Livré | QR code scanner (license verification, check-in) ✅ PL-F1501b |
| F15.01.09 | Livré | GPS-based nearby venue/competition finder ✅ PL-F1501b |
| F15.01.10 | Livré | Dark mode and accessibility settings ✅ PL-F1501b |