Connectivity model: Cloud ONCE at pairing (brief online moment), then dark for the round.
Robot ↔ Capture always on LAN. Phone ↔ Robot via LAN (Tailscale HTTPS for camera access).
Tools + Sync
desktop-ferry-app
TypeScript CLI · laptop at cart barn
End-of-day sync bridge
Pulls sessions/shots from Janice API
Uploads to Supabase (sessions, shots, Storage)
Multi-session enumeration (ACL-28)
Tauri desktop app (ACL-29)
Data path
← Janice API (LAN) → enumerate + pull
→ Supabase (cloud) → upload + mark synced
web-mapper-app (KYT)
Next.js · course mapping tool
Geofence/path editing on Mapbox
Publish to course_features (service-role)
publish_log snapshot history
Only 2 of 8 courses mapped
nav2_tuner (Jamal)
Python Flask · nav2 param tuning
Browser GUI for nav2.yaml editing
SSH deploy to robot + git commit
Legend
Built + working
Planned
Deferred
OK
Planned
Deferred
Three Personas · Role Hierarchy (Phase 1)
valeron_admin
All accounts, all courses
Phase 1 (now)
course_admin
One account, all its courses
Future
course_employee
One account, one course
Future
Golfer
Own data only (no membership)
Already works
Generated from cloud-platform-service session 2026-04-12 — regenerate when architecture shifts