# LiveView Pages

Non-map LiveView pages in the application.

## Packet Streams

### PacketsLive.Index (`/packets`)
- Real-time stream of all incoming packets (max 100)
- Subscribes to `"postgres:aprsme_packets"` Phoenix PubSub topic
- Uses `stream/4` for efficient DOM updates

### PacketsLive.CallsignView (`/packets/:callsign`)
- Filtered packet stream for a single callsign
- Subscribes to `"packets:#{callsign}"` topic
- Includes device information parsed per-packet

## Station Info

### InfoLive.Show (`/info/:callsign`)
- Comprehensive station information page
- Latest packet details, device identification
- Nearby stations via spatial query (neighbors)
- APRS path decoding — "heard by" and "stations heard" analysis
- Digipeater relationships
- APRS symbol rendering
- Embedded single-station map via `InfoMapComponent` (JS hook)
- Subscribes to `"packets:#{callsign}"` for live updates

## Weather

### WeatherLive.CallsignView (`/weather/:callsign`)
- Weather station data visualization with Chart.js charts
- Temperature, humidity, wind, pressure, rainfall trends
- Locale-aware unit conversions (metric/imperial)
- Subscribes to `"weather:#{callsign}"` for live updates
- Pushes `"update_weather_charts"` events to refresh Chart.js

## Status

### StatusLive.Index (`/status`)
- System status dashboard
- APRS-IS connection state, uptime, health score
- Cluster node information (when clustered)
- Polls every 5 seconds via `Process.send_after`
- Inline `render/1` (no template file)
- Subscribes to `"aprs_status"` topic

## Bad Packets

### BadPacketsLive.Index (`/badpackets`)
- Malformed/rejected packet viewer
- Shows raw packet data + error type/message
- Debounced refresh (2s delay)
- Subscribes to `"postgres:aprsme_events"`

## Static Pages

### AboutLive (`/about`)
- Simple about page, title assign only

### ApiDocsLive (`/api`)
- API documentation with interactive testing form
- Inline render (~970 lines)
- Self-documenting with example requests/responses

## Authentication Pages

All auth LiveViews use inline `render/1`:

| LiveView | Route | Auth Pipeline |
|---|---|---|
| `UserLoginLive` | `/users/log_in` | `redirect_if_user_is_authenticated` |
| `UserRegistrationLive` | `/users/register` | `redirect_if_user_is_authenticated` |
| `UserForgotPasswordLive` | `/users/reset_password` | `redirect_if_user_is_authenticated` |
| `UserResetPasswordLive` | `/users/reset_password/:token` | `redirect_if_user_is_authenticated` |
| `UserConfirmationLive` | `/users/confirm/:token` | `:current_user` |
| `UserConfirmationInstructionsLive` | `/users/confirm` | `:current_user` |
| `UserSettingsLive` | `/users/settings` | `require_authenticated_user` |

## Shared LiveView Modules

Located in `lib/aprsme_web/live/shared/`:

- `BoundsUtils` — Map boundary calculations
- `PacketHandler` — Shared packet enrichment
- `ParamUtils` — URL parameter parsing
- `PacketUtils` — Shared packet querying
- `CoordinateUtils` — Coordinate math
