# Terra-View Roadmap

Living document — captures known deferred work, in-flight initiatives, and longer-term ideas.
Bump items up/down or strike them through as priorities shift. Source of truth for "what's next"
should be this file plus the `## Current Development Focus` block in `CLAUDE.md`.

Last updated: 2026-06-18 (Terra-View v0.15.0)

---

## In Flight

Work that's started or has obvious next steps in the code.

- **SFM Integration Phase 2 — device control** — expose `/device/*` (start, stop, erase, push-config)
  through the Terra-View proxy. Blocked on SFM growing an auth layer; placeholder TODOs already in
  `backend/services/device_controller.py` (lines 73, 109, 207, 282, 582).
- **Calibration sync from SFM events** — done in v0.13.x. Daily 03:15 job + Settings "Sync now" button.
  Future: surface "last sync" timestamp on unit detail; per-unit "sync this one" action.
- **Synology NAS deployment** — doc lives at `docs/SYNOLOGY_DEPLOYMENT.md`. Need to actually deploy
  + write up what tripped us up vs. the doc's expectations.

## Near-Term

Concrete things scoped but not started.

- **Migrate GPS coord parse in `photos.py`** — currently writes to dead `RosterUnit.coordinates`
  field. Should write to the active `MonitoringLocation` instead (matches the location-as-truth
  refactor done elsewhere). Helper: `backend/services/unit_location.py`.
- **Phase 3 — drag-to-resize deployment bars** on the fleet-wide deployment-history Gantt
  (`/tools/deployment-history`). Phase 2 (the calendar + Gantt tabs) shipped in v0.12.0.
- **Phase 5c — swap-detection daily job** — placeholder card already in `templates/tools.html:162`.
  Auto-detects unit swaps in the field (BE12345 → BE67890 at the same project+location) from
  operator-typed metadata. Pairs with a notification inbox.
- **Geocoding for address strings** — TODO in `templates/dashboard.html:913`. Lets locations without
  explicit coordinates still appear on maps.
- **ModemManager backend** — `backend/routers/modem_dashboard.py:279` has a TODO for querying a real
  modem backend. Currently the modem dashboard is mostly read-only metadata.

## Medium-Term

Bigger features, sketched but not designed in detail.

- **Alerting** — email/SMS for missing units, calibration-expiring-soon, sync failures.
  README's "Future Enhancements" has had this for a while; would pair well with the existing
  `UserPreferences` thresholds.
- **Multi-user auth** — currently single-tenant, no login. Probably the prerequisite for any
  cloud-hosted multi-customer deployment.
- **Notification inbox** — central place for swap-detection alerts, sync errors, calibration
  warnings, FT-flag review queue, etc.
- **Audit log UI** — `UnitHistory` already records everything; expose a filterable view.

## Long-Term / Wishlist

Speculative. Promote up the list once there's a concrete need.

- PostgreSQL backend for larger deployments (SQLite is fine for now)
- Advanced filtering / saved searches on roster + events
- Export roster in additional formats (XLSX, GeoJSON)
- Public-facing project status pages (read-only, share-link gated)
- SLM module parity with seismographs — modal-based event/measurement detail similar to SFM modal
- Weather station / accelerometer / GPS tracker modules (new device-type modules following the
  SLMM pattern — see `CLAUDE.md` → "Adding a New Device Type Module")

## Done / Reference

For shipped items, see `CHANGELOG.md`. For architecture decisions, see `CLAUDE.md`.
