diff --git a/DEVELOPER.md b/DEVELOPER.md index db122be..1bb2b20 100644 --- a/DEVELOPER.md +++ b/DEVELOPER.md @@ -33,7 +33,10 @@ AppState (main coordinator) ├── ProfileState (node profiles & toggles) ├── SessionState (add/edit sessions) ├── SettingsState (preferences & tile providers) -└── UploadQueueState (pending operations) +├── UploadQueueState (pending operations) +├── SuspectedLocationState (permit data & display) +├── NavigationState (routing & search) +└── SearchState (location search results) ``` **Why this approach:** @@ -165,6 +168,56 @@ Sandbox + Offline → No nodes (cache is production data) **Why sandbox + offline = no nodes:** Local cache contains production data. Showing production nodes in sandbox mode would be confusing and could lead to users trying to edit production nodes with sandbox credentials. +### 7. Proximity Alerts & Background Monitoring + +**Design approach:** +- **Simple cooldown system**: In-memory tracking to prevent notification spam +- **Dual alert types**: Push notifications (background) and visual banners (foreground) +- **Configurable distance**: 25-200 meter alert radius +- **Battery awareness**: Users explicitly opt into background location monitoring + +**Implementation notes:** +- Uses Flutter Local Notifications for cross-platform background alerts +- Simple RecentAlert tracking prevents duplicate notifications +- Visual callback system for in-app alerts when app is active + +### 8. Suspected Locations + +**Data pipeline:** +- **CSV ingestion**: Downloads utility permit data from alprwatch.org +- **GeoJSON processing**: Handles Point, Polygon, and MultiPolygon geometries +- **Proximity filtering**: Hides suspected locations near confirmed devices +- **Regional availability**: Currently select locations, expanding regularly + +**Why utility permits:** +Utility companies often must file permits when installing surveillance infrastructure. This creates a paper trail that can indicate potential surveillance sites before devices are confirmed through direct observation. + +### 9. Upload Mode Simplification + +**Release vs Debug builds:** +- **Release builds**: Production OSM only (simplified UX) +- **Debug builds**: Full sandbox/simulate options available +Most users should contribute to production; testing modes add complexity + +**Implementation:** +```dart +// Upload mode selection disabled in release builds +bool get showUploadModeSelector => kDebugMode; +``` + +### 10. Navigation & Routing (Implemented, Awaiting Integration) + +**Current state:** +- **Search functionality**: Fully implemented and active +- **Basic routing**: Complete but disabled pending API integration +- **Avoidance routing**: Awaiting alprwatch.org/directions API +- **Offline routing**: Requires vector map tiles + +**Architecture:** +- NavigationState manages routing computation and turn-by-turn instructions +- RoutingService handles API communication and route calculation +- SearchService provides location lookup and geocoding + --- ## Key Design Decisions & Rationales diff --git a/README.md b/README.md index c4eaeff..76f07db 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,11 @@ A comprehensive Flutter app for mapping public surveillance infrastructure with - **Direction visualization**: Interactive field-of-view cones showing camera viewing angles - **Bulk operations**: Tag multiple devices efficiently with profile-based workflow +### Surveillance Intelligence +- **Suspected locations**: Display potential surveillance sites from utility permit data (select locations, more added regularly) +- **Proximity alerts**: Get notified when approaching mapped surveillance devices, with configurable distance and background notifications +- **Location search**: Find addresses and points of interest to aid in mapping missions + ### Professional Upload & Sync - **OpenStreetMap integration**: Direct upload with full OAuth2 authentication - **Upload modes**: Production OSM, testing sandbox, or simulate-only mode @@ -84,6 +89,7 @@ cp lib/keys.dart.example lib/keys.dart - Stop failing to fetch tiles; keep retrying after 3. Remove kTileFetchInitialDelayMs, kTileFetchJitter1Ms, etc from dev_config. Fix network indicator - only done when fetch queue is empty! ### Current Development +- Import/Export map providers - Swap in alprwatch.org/directions avoidance routing API - Help button with links to email, discord, and website - Clean cache when nodes have disappeared / been deleted by others / queue item was deleted @@ -92,8 +98,8 @@ cp lib/keys.dart.example lib/keys.dart ### Future Features & Wishlist - Update offline area nodes while browsing? -- Suspected locations toggle (alprwatch.com/flock/utilities) -- Offline navigation +- Offline navigation (pending vector map tiles) +- Suspected locations expansion to more regions ### Maybes - Yellow ring for devices missing specific tag details?