Specyfikacja techniczna — aplikacja mobilna
1. Stos technologiczny
| Warstwa | Technologia |
|---|---|
| Framework | React Native + Expo SDK 52+ |
| Język | TypeScript (strict mode) |
| Routing | Expo Router v4 (file-based routing) |
| Stan globalny | Zustand |
| Klient HTTP | Axios |
| Bezpieczne tokeny | expo-secure-store |
| Lokalizacja GPS | expo-location |
| Aparat | expo-camera |
| Powiadomienia push | expo-notifications |
| Build | EAS Build + EAS Update |
Minimalne wersje: iOS 15+, Android 10+ (API 29).
2. Struktura projektu
busikm-mobile/
app/ # Expo Router — strony (file-based routing)
(auth)/ # Grupa tras autoryzacji
(driver)/ # Grupa tras kierowcy (tabs)
(owner)/ # Grupa tras właściciela (tabs)
_layout.tsx # Root layout
src/
api/ # Klient Axios, interceptory, endpointy
stores/ # Zustand stores (auth, trip, gps, alerts)
hooks/ # Hooki (useProtectedRoute, useGPS, useNetworkStatus)
components/ # Komponenty współdzielone
services/ # GPS tracking, upload queue, sync
constants/ # Kolory, endpointy, konfiguracja
types/ # Typy TypeScript 3. Nawigacja i routing
(auth) — autoryzacja
| Ekran | Ścieżka | Opis |
|---|---|---|
| Logowanie | /login | Formularz email + hasło |
| Rejestracja | /register | Kreator 3-krokowy |
| Reset hasła | /forgot-password | Link resetujący |
| Zaproszenie | /invite/[token] | Dołączenie do firmy |
(driver) — kierowca (4 taby)
| Tab | Ścieżka | Opis |
|---|---|---|
| Trasa | /trip | Start/stop trasy, mapa GPS |
| Historia | /history | Lista przejazdów z filtrami |
| Pojazd | /vehicle | Dane pojazdu, dokumenty |
| Profil | /profile | Ustawienia, powiadomienia |
(owner) — właściciel (5 tabów)
| Tab | Ścieżka | Opis |
|---|---|---|
| Dashboard | /dashboard | Statystyki, aktywne trasy |
| Flota | /fleet | Lista pojazdów |
| Kierowcy | /drivers | Lista kierowców |
| Trasy | /trips | Wszystkie przejazdy |
| Więcej | /more | Raporty, ustawienia, alerty |
4. GPS Tracking
Mechanizm śledzenia
- expo-location — śledzenie pozycji w tle (background location)
- expo-task-manager — zadania w tle dla rejestracji punktów GPS
- Punkty GPS zapisywane lokalnie (AsyncStorage) i wysyłane batchowo co 30 sekund
- Przy braku sieci — kolejkowanie lokalne, synchronizacja po odzyskaniu połączenia
Profil baterii (adaptacyjny)
| Poziom baterii | Dokładność GPS | Interwał |
|---|---|---|
| >50% | High accuracy | 5s |
| 20–50% | Balanced | 10s |
| 10–20% | Low power | 30s |
| <10% | Passive (network-only) | 60s |
5. Zustand Stores
| Store | Stan |
|---|---|
useAuthStore | user, tokens, isAuthenticated, login(), logout(), refreshToken() |
useTripStore | activeTrip, tripStatus, gpsPoints[], startTrip(), stopTrip(), addGPSPoint() |
useGPSStore | currentPosition, isTracking, accuracy, uploadQueue[] |
useAlertStore | alerts[], unreadCount, markAsRead(), fetchAlerts() |
6. Axios Interceptory
- Request interceptor — automatyczne dodanie
Authorization: Bearer - Response interceptor — przy 401 automatyczny refresh token, retry oryginalnego zapytania
- Token rotation — stary refresh blacklistowany, nowy zapisywany w SecureStore
7. Tryb offline
| Faza | Technologia | Zakres |
|---|---|---|
| MVP | AsyncStorage | Kolejka GPS, ostatnie trasy, cache pojazdów |
| Post-MVP | WatermelonDB | Pełna baza lokalna z synchronizacją (pull/push) |
8. Build i dystrybucja
| Aspekt | Opis |
|---|---|
| EAS Build | Natywne buildy iOS/Android w chmurze Expo |
| EAS Update (OTA) | Aktualizacje JS bez recenzji App Store |
| Internal Distribution | Dystrybucja testowa (staging) |
| App Store + Google Play | Dystrybucja produkcyjna |