Files
boc/quixzoom-market-pages/specs/gps-navigation-feature.md
T
Bernt bae705aa97 ARCHITECTURE: NFC roadmap, edge AI, audit logging
- Add NFC ePassport roadmap (ICAO 9303, eIDAS)
- Add TensorFlow.js edge face detection (BlazeFace)
- Add structured audit logger (GDPR-compliant)
- Risk scoring support

Part of KYC Apple Native UX v1.1.0
2026-06-29 16:24:48 +00:00

5.7 KiB

Feature Spec: GPS-liknande uppdragsnavigering

Status: Backlog
Prioritet: Hög
Tilldelad: Johan
Skapad: 2026-06-16
Källa: Erik UX-prompt


Översikt

När en Zoomer accepterar eller öppnar ett uppdrag ska kartan växla till ett navigeringsläge som efterliknar premium fordons-GPS (VW/Audi/BMW) kombinerat med Uber/Bolt-känsla för uppdragskort.


Flöde

Uppdragslista → Klick på uppdrag → Uppdragskort (flytande)
                                          ↓
                              [Lås upp uppdrag] [Starta navigation] [Visa alternativa rutter]
                                          ↓
                              Navigeringsläge (turn-by-turn)

Steg 1 — Uppdragskort (flytande overlay)

Visas när användaren klickar på ett uppdrag på kartan.

Innehåll

  • Titel
  • Adress
  • Avstånd från användaren (beräknat från GPS)
  • Beräknad restid
  • Beräknad ankomsttid (ETA)

Exempel

📍 Fasadfotografering — Storgatan 12
   14,2 km · 18 min · ETA 14:37

Knappar

Knapp Funktion
Lås upp uppdrag Reserverar uppdraget, drar kredit/visar pris
Starta navigation Startar turn-by-turn
Visa alternativa rutter Expanderar ruttval på kartan

Steg 2 — Kartbeteende vid öppnat uppdrag

Auto-zoom & centrering

  • Hämta GPS-position i realtid (navigator.geolocation.watchPosition)
  • Zooma automatiskt till nivå där både Zoomer och destination syns
  • Centrera kartan så hela rutten ryms med padding (~15% marginal)
  • Använd fitBounds() med koordinater för [user_pos, destination]

Markörer

  • Zoomer: Blå pulsande cirkel (standard Mapbox user location dot)
  • Destination: Uppdragets ikon/logotyp (custom marker)

Rutt-ritning

  • Hämta rutt från routing-API (se nedan)
  • Rita primär rutt: solid linje, blå (#0066FF), 4px
  • Rita alternativa rutter: grå, 2px, klickbar
  • Visa avstånd + tid på varje ruttlinje

Steg 3 — Navigeringsläge (turn-by-turn)

Aktiveras via "Starta navigation".

Kartbeteende

  • Rotera kartan i färdriktningen (heading-lock)
  • 3D-perspektiv (pitch: ~45°)
  • Zooma in till ~200m framförhållning
  • Kontinuerlig positions-uppdatering

UI-overlay (top bar)

┌─────────────────────────────────────────┐
│  ↰  Sväng vänster om 180 m             │
│     Kungsgatan                          │
├──────────────┬──────────────┬───────────┤
│  12 min      │   2,4 km     │  ETA 14:37│
└──────────────┴──────────────┴───────────┘

Funktioner

  • Next maneuver (ikon + text + avstånd)
  • Återstående tid, avstånd, ETA — uppdateras live
  • Auto-reroute om avvikelse > 50m från rutten
  • "Anlänt" när Zoomer är inom ~30m av destination

Tech Stack

Routing API — rekommendation: Mapbox Directions API

Anledning: Appen kör redan troligen Mapbox för 3D-kartan. Unified billing.

GET https://api.mapbox.com/directions/v5/mapbox/walking/{lon1},{lat1};{lon2},{lat2}
?alternatives=true
&geometries=geojson
&steps=true
&language=sv
&access_token={MAPBOX_TOKEN}

Returvärden vi använder:

  • routes[].duration → restid (sekunder)
  • routes[].distance → avstånd (meter)
  • routes[].geometry → GeoJSON för ritning
  • routes[].legs[].steps[] → turn-by-turn instruktioner

Alternativ om Mapbox ej används:

  • Google Routes API (dyrare, men bättre ETA i Sverige)
  • OSRM self-hosted (gratis, kräver infra)

Kostnad Mapbox Directions

  • Gratis: 100,000 requests/mån
  • Sedan: $1/1,000 requests
  • Zoomer gör ~1 request per uppdrag → vid 10,000 uppdrag/mån = $10

Turn-by-turn

Mapbox Navigation SDK (iOS/Android) ger turn-by-turn gratis ovanpå Directions API.


Visuell design

Uppdragskort

  • Mörkt tema (#0a0a0a bakgrund, vit text)
  • Bottom sheet / sliding panel (60% skärmhöjd)
  • Mjuk spring-animation vid öppning (300ms)
  • Samma designspråk som nuvarande uppdragskort i appen

Navigeringsläge

  • Mörkt tema
  • Top bar: svart, frostad glaseffekt
  • Manöverikoner: vita, Mapbox standard set
  • 3D-perspektiv: pitch 45°, bearing = heading
  • Smooth rotation vid svängar

Animationer

  • fitBounds() med animate: true, duration: 800ms vid öppning
  • Smooth heading-rotation: interpolera bearing varje GPS-tick
  • Flytande transition uppdragsvy → navigation: 400ms

Implementation — prioriterad ordning

  1. Routing API-integration — hämta rutt + rita på karta
  2. Uppdragskort — avstånd, restid, ETA
  3. Auto-zoom/fitBounds — när uppdrag öppnas
  4. Alternativa rutter — visa + väljbart
  5. Turn-by-turn UI — top bar med manöver + stats
  6. Heading-rotation — karta roterar med färdriktning
  7. Auto-reroute — vid avvikelse

Öppna frågor till Johan

  • Vilken kart-lib använder appen? (Mapbox GL, MapLibre, Google Maps?)
  • Finns det redan ett Mapbox-konto/token?
  • iOS, Android, eller React Native/Flutter?
  • Ska navigation köras in-app eller via deep link till Google Maps/Apple Maps?

Acceptanskriterier

  • Uppdragskort visar korrekt avstånd, restid och ETA
  • Rutt ritas upp inom 2s efter uppdrag öppnas
  • Alternativa rutter visas och är klickbara
  • Navigeringsläge roterar kartan i färdriktning
  • Auto-reroute fungerar vid avvikelse
  • ETA uppdateras live under navigation
  • "Anlänt"-signal vid ~30m från destination
  • Fungerar offline (cached tiles) för basic kartvisning