# adynu182/gpslive-tracker-rn architecture

> Architecture diagram of the GitHub repository adynu182/gpslive-tracker-rn, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/adynu182/gpslive-tracker-rn
- Repository: https://github.com/adynu182/gpslive-tracker-rn

## Overview

GPS Live is a mobile app for sharing live locations with people in a room, plus a standalone offline-navigation mode. A user creates or joins a room, starts a session, and the tracker screen obtains GPS fixes while session logic synchronizes member presence and positions. The map presents members and supports following, fitting, and requesting a route to a tapped destination. Preferences and theme persist locally. The README is empty; the workflow and major capabilities here are based on the sampled screens and session/map code, with unsampled modules represented only where their paths are clear.

Main entry points: [`src/session.ts`](https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/session.ts) (Room session), [`app/tracker.tsx`](https://github.com/adynu182/gpslive-tracker-rn/blob/main/app/tracker.tsx) (Tracker screen), [`components/MapView.tsx`](https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/MapView.tsx) (Interactive map), [`src/state.ts`](https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/state.ts) (App state)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_screens["App screens"]
  node_join["Room setup<br/>[index.tsx]"]
  node_tracker["Tracker screen<br/>[tracker.tsx]"]
  node_header["Room header<br/>[TopHeader.tsx]"]
  node_toolbar["Tracker toolbar<br/>[Toolbar.tsx]"]
  node_membersui["Member list<br/>[MembersList.tsx]"]
end

subgraph group_tracking["Location and sessions"]
  node_gps["GPS acquisition<br/>[gps.ts]"]
  node_session["Room session<br/>[session.ts]"]
  node_room["Room operations<br/>[room.ts]"]
  node_roadsnap["Road snapping<br/>[road-snap.ts]"]
  node_firebase["Firebase client<br/>[firebase.ts]"]
end

subgraph group_map["Map and navigation"]
  node_mapview["Interactive map<br/>[MapView.tsx]"]
  node_markers["Member markers<br/>[MemberMarker.tsx]"]
  node_routeview["Route layer<br/>[RouteLayer.tsx]"]
  node_controls["Map controls<br/>[MapControls.tsx]"]
  node_smoothing["Position smoothing"]
end

subgraph group_state["State and preferences"]
  node_state["App state<br/>[state.ts]"]
  node_storage["Local preferences<br/>[storage.ts]"]
  node_theme["Theme settings<br/>[theme.ts]"]
end

node_user(("App user"))
node_realtimedb[("Firebase Realtime DB")]
node_routing["Routing service"]
node_asyncstorage[("AsyncStorage")]

node_user -->|"sets up room"| node_join
node_join -->|"loads profile"| node_storage
node_join -->|"selects room"| node_room
node_join -->|"starts tracking"| node_session
node_user -->|"uses tracker"| node_tracker
node_tracker -->|"starts GPS"| node_gps
node_gps -->|"updates position"| node_state
node_tracker -->|"recalculates route"| node_session
node_session -->|"updates session"| node_state
node_session -->|"uses database client"| node_firebase
node_firebase -->|"connects"| node_realtimedb
node_session -->|"syncs members"| node_realtimedb
node_session -->|"saves session"| node_storage
node_storage -->|"reads and writes"| node_asyncstorage
node_tracker -->|"renders map"| node_mapview
node_mapview -->|"reads map state"| node_state
node_mapview -->|"renders members"| node_markers
node_mapview -->|"renders route"| node_routeview
node_mapview -->|"requests route"| node_session
node_session -.->|"requests directions"| node_routing
node_mapview -->|"smooths positions"| node_smoothing
node_tracker -->|"renders header"| node_header
node_tracker -->|"renders members"| node_membersui
node_tracker -->|"renders actions"| node_toolbar
node_tracker -->|"renders controls"| node_controls
node_header -->|"shares room code"| node_room
node_toolbar -->|"toggles sharing"| node_session
node_toolbar -->|"saves theme"| node_storage
node_tracker -->|"reads tracker state"| node_state
node_theme -->|"reads theme state"| node_state
node_roadsnap -.->|"supports routing"| node_session

click node_join "https://github.com/adynu182/gpslive-tracker-rn/blob/main/app/index.tsx"
click node_tracker "https://github.com/adynu182/gpslive-tracker-rn/blob/main/app/tracker.tsx"
click node_header "https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/TopHeader.tsx"
click node_toolbar "https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/Toolbar.tsx"
click node_membersui "https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/MembersList.tsx"
click node_mapview "https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/MapView.tsx"
click node_markers "https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/MemberMarker.tsx"
click node_routeview "https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/RouteLayer.tsx"
click node_controls "https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/MapControls.tsx"
click node_gps "https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/gps.ts"
click node_session "https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/session.ts"
click node_room "https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/room.ts"
click node_roadsnap "https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/road-snap.ts"
click node_firebase "https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/firebase.ts"
click node_state "https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/state.ts"
click node_storage "https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/storage.ts"
click node_theme "https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/theme.ts"
click node_smoothing "https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/useSmoothedPosition.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_join,node_tracker,node_header,node_toolbar,node_membersui,node_user toneBlue
class node_gps,node_session,node_room,node_roadsnap,node_firebase,node_realtimedb,node_asyncstorage toneAmber
class node_mapview,node_markers,node_routeview,node_controls,node_smoothing toneMint
class node_state,node_storage,node_theme toneRose
class node_routing toneIndigo
```

## Components

### App screens

- [Room setup](https://github.com/adynu182/gpslive-tracker-rn/blob/main/app/index.tsx): `app/index.tsx`
- [Tracker screen](https://github.com/adynu182/gpslive-tracker-rn/blob/main/app/tracker.tsx): `app/tracker.tsx`
- [Room header](https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/TopHeader.tsx): `components/TopHeader.tsx`
- [Tracker toolbar](https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/Toolbar.tsx): `components/Toolbar.tsx`
- [Member list](https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/MembersList.tsx): `components/MembersList.tsx`

### Location and sessions

- [GPS acquisition](https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/gps.ts): `src/gps.ts`
- [Room session](https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/session.ts): `src/session.ts`
- [Room operations](https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/room.ts): `src/room.ts`
- [Road snapping](https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/road-snap.ts): `src/road-snap.ts`
- [Firebase client](https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/firebase.ts): `src/firebase.ts`

### Map and navigation

- [Interactive map](https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/MapView.tsx): `components/MapView.tsx`
- [Member markers](https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/MemberMarker.tsx): `components/MemberMarker.tsx`
- [Route layer](https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/RouteLayer.tsx): `components/RouteLayer.tsx`
- [Map controls](https://github.com/adynu182/gpslive-tracker-rn/blob/main/components/MapControls.tsx): `components/MapControls.tsx`
- [Position smoothing](https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/useSmoothedPosition.ts): `src/useSmoothedPosition.ts`

### State and preferences

- [App state](https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/state.ts): `src/state.ts`
- [Local preferences](https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/storage.ts): `src/storage.ts`
- [Theme settings](https://github.com/adynu182/gpslive-tracker-rn/blob/main/src/theme.ts): `src/theme.ts`

### Other components

- **App user**
- **Firebase Realtime DB**
- **Routing service**
- **AsyncStorage**

## Connections

- App user → Room setup: sets up room
- Room setup → Local preferences: loads profile
- Room setup → Room operations: selects room
- Room setup → Room session: starts tracking
- App user → Tracker screen: uses tracker
- Tracker screen → GPS acquisition: starts GPS
- GPS acquisition → App state: updates position
- Tracker screen → Room session: recalculates route
- Room session → App state: updates session
- Room session → Firebase client: uses database client
- Firebase client → Firebase Realtime DB: connects
- Room session → Firebase Realtime DB: syncs members
- Room session → Local preferences: saves session
- Local preferences → AsyncStorage: reads and writes
- Tracker screen → Interactive map: renders map
- Interactive map → App state: reads map state
- Interactive map → Member markers: renders members
- Interactive map → Route layer: renders route
- Interactive map → Room session: requests route
- Room session → Routing service: requests directions
- Interactive map → Position smoothing: smooths positions
- Tracker screen → Room header: renders header
- Tracker screen → Member list: renders members
- Tracker screen → Tracker toolbar: renders actions
- Tracker screen → Map controls: renders controls
- Room header → Room operations: shares room code
- Tracker toolbar → Room session: toggles sharing
- Tracker toolbar → Local preferences: saves theme
- Tracker screen → App state: reads tracker state
- Theme settings → App state: reads theme state
- Road snapping → Room session: supports routing
