Specyfikacja techniczna — aplikacja mobilna

1. Stos technologiczny

WarstwaTechnologia
FrameworkReact Native + Expo SDK 52+
JęzykTypeScript (strict mode)
RoutingExpo Router v4 (file-based routing)
Stan globalnyZustand
Klient HTTPAxios
Bezpieczne tokenyexpo-secure-store
Lokalizacja GPSexpo-location
Aparatexpo-camera
Powiadomienia pushexpo-notifications
BuildEAS 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żkaOpis
Logowanie/loginFormularz email + hasło
Rejestracja/registerKreator 3-krokowy
Reset hasła/forgot-passwordLink resetujący
Zaproszenie/invite/[token]Dołączenie do firmy

(driver) — kierowca (4 taby)

TabŚcieżkaOpis
Trasa/tripStart/stop trasy, mapa GPS
Historia/historyLista przejazdów z filtrami
Pojazd/vehicleDane pojazdu, dokumenty
Profil/profileUstawienia, powiadomienia

(owner) — właściciel (5 tabów)

TabŚcieżkaOpis
Dashboard/dashboardStatystyki, aktywne trasy
Flota/fleetLista pojazdów
Kierowcy/driversLista kierowców
Trasy/tripsWszystkie przejazdy
Więcej/moreRaporty, 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 bateriiDokładność GPSInterwał
>50%High accuracy5s
20–50%Balanced10s
10–20%Low power30s
<10%Passive (network-only)60s

5. Zustand Stores

StoreStan
useAuthStoreuser, tokens, isAuthenticated, login(), logout(), refreshToken()
useTripStoreactiveTrip, tripStatus, gpsPoints[], startTrip(), stopTrip(), addGPSPoint()
useGPSStorecurrentPosition, isTracking, accuracy, uploadQueue[]
useAlertStorealerts[], 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

FazaTechnologiaZakres
MVPAsyncStorageKolejka GPS, ostatnie trasy, cache pojazdów
Post-MVPWatermelonDBPełna baza lokalna z synchronizacją (pull/push)

8. Build i dystrybucja

AspektOpis
EAS BuildNatywne buildy iOS/Android w chmurze Expo
EAS Update (OTA)Aktualizacje JS bez recenzji App Store
Internal DistributionDystrybucja testowa (staging)
App Store + Google PlayDystrybucja produkcyjna