# coldmint1428/gpstesting architecture

> Architecture diagram of the GitHub repository coldmint1428/gpstesting, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/coldmint1428/gpstesting
- Repository: https://github.com/coldmint1428/gpstesting

## Overview

Planova is a mobile-friendly event coordination and live-tracking app, alongside a shared standalone polygon bench and event-planning tools. The principal flow is a user navigating to an event, where the app checks membership and presents coordination features; location sharing and notifications support live operations. A distinct planning workflow manages event plans, while the polygon bench supports collaborative shape editing. Relationships are limited to the supplied excerpts, source-index references, and README; some feature wiring is therefore left unconnected or marked unverified.

Main entry points: [`src/views/EventView.vue`](https://github.com/coldmint1428/gpstesting/blob/main/src/views/EventView.vue) (Event workspace), [`src/router/index.js`](https://github.com/coldmint1428/gpstesting/blob/main/src/router/index.js) (Route and access guards), [`src/views/PolygonTestView.vue`](https://github.com/coldmint1428/gpstesting/blob/main/src/views/PolygonTestView.vue) (Polygon bench page), [`src/composables/usePlan.js`](https://github.com/coldmint1428/gpstesting/blob/main/src/composables/usePlan.js) (Plan data and live updates)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application and access"]
  node_router["Route and access guards<br/>[index.js]"]
end

subgraph group_events["Event coordination"]
  node_eventview["Event workspace<br/>[EventView.vue]"]
  node_eventsview["My events<br/>[EventsView.vue]"]
  node_eventdata["Event data<br/>[useEventData.js]"]
  node_members["Membership and roles<br/>[memberService.js]"]
  node_live["Live map and locations<br/>[LiveMap.vue]"]
  node_attendance["Attendance"]
  node_broadcasts["Broadcasts and SOS<br/>[BroadcastPanel.vue]"]
  node_playback["Location playback<br/>[PlaybackPanel.vue]"]
  node_tracker["Location tracker"]
end

subgraph group_planning["Event planning"]
  node_planboard["Plan board<br/>[PlanBoard.vue]"]
  node_planapi["Plan data and live updates<br/>[usePlan.js]"]
  node_planops["Plan operations<br/>[PlanOps.vue]"]
  node_planschedule["Plan schedule<br/>[PlanSchedule.vue]"]
  node_planroute["Plan route<br/>[PlanRoute.vue]"]
end

subgraph group_bench["Collaborative polygon bench"]
  node_polygonview["Polygon bench page"]
  node_areabench["Map drawing canvas<br/>[AreaBench.vue]"]
  node_benchdoc["Bench rows and sync<br/>[useBenchDoc.js]"]
  node_benchlocks["Shape locks<br/>[useBenchLocks.js]"]
  node_benchpresence["Planner presence"]
  node_benchframes["Live drag frames<br/>[useBenchFrames.js]"]
end

subgraph group_services["Shared services"]
  node_supabase[("Supabase database and Realtime")]
  node_auth["Authentication state<br/>[auth.js]"]
  node_push["Push and reminders"]
  node_notify["In-app notices<br/>[useNotify.js]"]
end

node_user(("User"))

node_user -->|"navigates"| node_router
node_router -->|"routes to"| node_eventview
node_router -->|"routes to"| node_eventsview
node_router -->|"routes to"| node_polygonview
node_router -->|"checks session"| node_auth
node_router -->|"checks membership"| node_members
node_eventview -->|"loads membership"| node_members
node_eventview -.->|"controls sharing"| node_tracker
node_eventview -.->|"presents live map"| node_live
node_eventview -.->|"presents attendance"| node_attendance
node_eventview -.->|"presents alerts"| node_broadcasts
node_eventview -.->|"presents playback"| node_playback
node_eventview -.->|"loads event data"| node_eventdata
node_planboard -->|"loads and edits"| node_planapi
node_planapi -->|"reads and writes"| node_supabase
node_planapi -.->|"supports schedule"| node_planschedule
node_planapi -.->|"supports operations"| node_planops
node_planapi -.->|"supports routing"| node_planroute
node_polygonview -->|"renders canvas"| node_areabench
node_polygonview -->|"loads bench data"| node_benchdoc
node_polygonview -->|"checks shape locks"| node_benchlocks
node_polygonview -->|"tracks planners"| node_benchpresence
node_polygonview -->|"shows drag frames"| node_benchframes
node_benchdoc -->|"reads and writes"| node_supabase
node_benchlocks -.->|"claims shapes"| node_supabase
node_benchpresence -.->|"streams presence"| node_supabase
node_benchframes -.->|"broadcasts frames"| node_supabase
node_auth -->|"uses client"| node_supabase
node_auth -->|"starts and stops"| node_tracker
node_auth -->|"disables on logout"| node_push
node_eventview -->|"asks and reports"| node_notify
node_push -->|"registers notifications"| node_supabase

click node_router "https://github.com/coldmint1428/gpstesting/blob/main/src/router/index.js"
click node_eventview "https://github.com/coldmint1428/gpstesting/blob/main/src/views/EventView.vue"
click node_eventsview "https://github.com/coldmint1428/gpstesting/blob/main/src/views/EventsView.vue"
click node_eventdata "https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useEventData.js"
click node_members "https://github.com/coldmint1428/gpstesting/blob/main/src/services/memberService.js"
click node_live "https://github.com/coldmint1428/gpstesting/blob/main/src/components/LiveMap.vue"
click node_attendance "https://github.com/coldmint1428/gpstesting/blob/main/src/components/AttendancePanel.vue"
click node_broadcasts "https://github.com/coldmint1428/gpstesting/blob/main/src/components/BroadcastPanel.vue"
click node_playback "https://github.com/coldmint1428/gpstesting/blob/main/src/components/PlaybackPanel.vue"
click node_tracker "https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useLocationTracker.js"
click node_planboard "https://github.com/coldmint1428/gpstesting/blob/main/src/components/plan/PlanBoard.vue"
click node_planapi "https://github.com/coldmint1428/gpstesting/blob/main/src/composables/usePlan.js"
click node_planops "https://github.com/coldmint1428/gpstesting/blob/main/src/components/plan/PlanOps.vue"
click node_planschedule "https://github.com/coldmint1428/gpstesting/blob/main/src/components/plan/PlanSchedule.vue"
click node_planroute "https://github.com/coldmint1428/gpstesting/blob/main/src/components/plan/PlanRoute.vue"
click node_polygonview "https://github.com/coldmint1428/gpstesting/blob/main/src/views/PolygonTestView.vue"
click node_areabench "https://github.com/coldmint1428/gpstesting/blob/main/src/components/AreaBench.vue"
click node_benchdoc "https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useBenchDoc.js"
click node_benchlocks "https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useBenchLocks.js"
click node_benchpresence "https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useBenchPresence.js"
click node_benchframes "https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useBenchFrames.js"
click node_auth "https://github.com/coldmint1428/gpstesting/blob/main/src/stores/auth.js"
click node_push "https://github.com/coldmint1428/gpstesting/blob/main/src/composables/usePushNotifications.js"
click node_notify "https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useNotify.js"

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_router,node_user toneBlue
class node_eventview,node_eventsview,node_eventdata,node_members,node_live,node_attendance,node_broadcasts,node_playback,node_tracker toneAmber
class node_planboard,node_planapi,node_planops,node_planschedule,node_planroute toneMint
class node_polygonview,node_areabench,node_benchdoc,node_benchlocks,node_benchpresence,node_benchframes toneRose
class node_supabase,node_auth,node_push,node_notify toneIndigo
```

## Components

### Application and access

- [Route and access guards](https://github.com/coldmint1428/gpstesting/blob/main/src/router/index.js): `src/router/index.js`

### Event coordination

- [Event workspace](https://github.com/coldmint1428/gpstesting/blob/main/src/views/EventView.vue): `src/views/EventView.vue`
- [My events](https://github.com/coldmint1428/gpstesting/blob/main/src/views/EventsView.vue): `src/views/EventsView.vue`
- [Event data](https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useEventData.js): `src/composables/useEventData.js`
- [Membership and roles](https://github.com/coldmint1428/gpstesting/blob/main/src/services/memberService.js): `src/services/memberService.js`
- [Live map and locations](https://github.com/coldmint1428/gpstesting/blob/main/src/components/LiveMap.vue): `src/components/LiveMap.vue`
- [Attendance](https://github.com/coldmint1428/gpstesting/blob/main/src/components/AttendancePanel.vue): `src/components/AttendancePanel.vue`
- [Broadcasts and SOS](https://github.com/coldmint1428/gpstesting/blob/main/src/components/BroadcastPanel.vue): `src/components/BroadcastPanel.vue`
- [Location playback](https://github.com/coldmint1428/gpstesting/blob/main/src/components/PlaybackPanel.vue): `src/components/PlaybackPanel.vue`
- [Location tracker](https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useLocationTracker.js): `src/composables/useLocationTracker.js`

### Event planning

- [Plan board](https://github.com/coldmint1428/gpstesting/blob/main/src/components/plan/PlanBoard.vue): `src/components/plan/PlanBoard.vue`
- [Plan data and live updates](https://github.com/coldmint1428/gpstesting/blob/main/src/composables/usePlan.js): `src/composables/usePlan.js`
- [Plan operations](https://github.com/coldmint1428/gpstesting/blob/main/src/components/plan/PlanOps.vue): `src/components/plan/PlanOps.vue`
- [Plan schedule](https://github.com/coldmint1428/gpstesting/blob/main/src/components/plan/PlanSchedule.vue): `src/components/plan/PlanSchedule.vue`
- [Plan route](https://github.com/coldmint1428/gpstesting/blob/main/src/components/plan/PlanRoute.vue): `src/components/plan/PlanRoute.vue`

### Collaborative polygon bench

- [Polygon bench page](https://github.com/coldmint1428/gpstesting/blob/main/src/views/PolygonTestView.vue): `src/views/PolygonTestView.vue`
- [Map drawing canvas](https://github.com/coldmint1428/gpstesting/blob/main/src/components/AreaBench.vue): `src/components/AreaBench.vue`
- [Bench rows and sync](https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useBenchDoc.js): `src/composables/useBenchDoc.js`
- [Shape locks](https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useBenchLocks.js): `src/composables/useBenchLocks.js`
- [Planner presence](https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useBenchPresence.js): `src/composables/useBenchPresence.js`
- [Live drag frames](https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useBenchFrames.js): `src/composables/useBenchFrames.js`

### Shared services

- **Supabase database and Realtime**
- [Authentication state](https://github.com/coldmint1428/gpstesting/blob/main/src/stores/auth.js): `src/stores/auth.js`
- [Push and reminders](https://github.com/coldmint1428/gpstesting/blob/main/src/composables/usePushNotifications.js): `src/composables/usePushNotifications.js`
- [In-app notices](https://github.com/coldmint1428/gpstesting/blob/main/src/composables/useNotify.js): `src/composables/useNotify.js`

### Other components

- **User**

## Connections

- User → Route and access guards: navigates (evidence: `src/router/index.js`)
- Route and access guards → Event workspace: routes to (evidence: `src/router/index.js`)
- Route and access guards → My events: routes to (evidence: `src/router/index.js`)
- Route and access guards → Polygon bench page: routes to (evidence: `src/router/index.js`)
- Route and access guards → Authentication state: checks session (evidence: `src/router/index.js`)
- Route and access guards → Membership and roles: checks membership (evidence: `src/router/index.js`)
- Event workspace → Membership and roles: loads membership (evidence: `src/views/EventView.vue`)
- Event workspace → Location tracker: controls sharing (evidence: `src/views/EventView.vue`)
- Event workspace → Live map and locations: presents live map (evidence: `src/views/EventView.vue`)
- Event workspace → Attendance: presents attendance (evidence: `src/views/EventView.vue`)
- Event workspace → Broadcasts and SOS: presents alerts (evidence: `src/views/EventView.vue`)
- Event workspace → Location playback: presents playback (evidence: `src/views/EventView.vue`)
- Event workspace → Event data: loads event data (evidence: `src/views/EventView.vue`)
- Plan board → Plan data and live updates: loads and edits (evidence: `src/components/plan/PlanBoard.vue`)
- Plan data and live updates → Supabase database and Realtime: reads and writes (evidence: `src/composables/usePlan.js`)
- Plan data and live updates → Plan schedule: supports schedule
- Plan data and live updates → Plan operations: supports operations
- Plan data and live updates → Plan route: supports routing
- Polygon bench page → Map drawing canvas: renders canvas (evidence: `src/views/PolygonTestView.vue`)
- Polygon bench page → Bench rows and sync: loads bench data (evidence: `src/views/PolygonTestView.vue`)
- Polygon bench page → Shape locks: checks shape locks (evidence: `src/views/PolygonTestView.vue`)
- Polygon bench page → Planner presence: tracks planners (evidence: `src/views/PolygonTestView.vue`)
- Polygon bench page → Live drag frames: shows drag frames (evidence: `src/views/PolygonTestView.vue`)
- Bench rows and sync → Supabase database and Realtime: reads and writes (evidence: `src/composables/useBenchDoc.js`)
- Shape locks → Supabase database and Realtime: claims shapes
- Planner presence → Supabase database and Realtime: streams presence
- Live drag frames → Supabase database and Realtime: broadcasts frames
- Authentication state → Supabase database and Realtime: uses client (evidence: `src/stores/auth.js`)
- Authentication state → Location tracker: starts and stops (evidence: `src/stores/auth.js`)
- Authentication state → Push and reminders: disables on logout (evidence: `src/stores/auth.js`)
- Event workspace → In-app notices: asks and reports (evidence: `src/views/EventView.vue`)
- Push and reminders → Supabase database and Realtime: registers notifications (evidence: `src/composables/usePushNotifications.js`)
