# ofxpimapper-full-stack Spec

## System Dashboard (Status Tab)
- **GIVEN** the web UI is loaded
- **THEN** it SHALL display real-time CPU Load, RAM Usage, and CPU Temperature.
- **AND** it SHALL show the status of the `ofxPiMapper` process (Running/Stopped).
- **AND** it SHALL provide "Restart Mapper", "Reboot Pi", and "Shutdown Pi" buttons.
- **AND** it SHALL display the "Throttled Logs" (max 10 lines per 500ms) from the Mapper process.

## Mapping Engine (Mapping Tab)
- **GIVEN** the Virtual Canvas
- **WHEN** a vertex is dragged in the UI
- **THEN** it SHALL send an OSC message to `localhost:9999` via WebSockets in < 50ms.
- **AND** it SHALL support adding/deleting surfaces (Quad/Triangle).
- **AND** it SHALL provide a prominent "Save Mapping" button to persist changes to disk.
- **AND** clicking a surface in the UI SHALL send a highlight OSC command to the beamer.

## Media Management (Media Tab)
- **GIVEN** the Media Vault
- **WHEN** a file is uploaded
- **THEN** it SHALL be stored in `/home/pi/media`.
- **AND** the backend SHALL validate that the file is H.264 and show a warning if resolution exceeds 1080p.
- **AND** the user SHALL be able to assign any file to any named surface, with a "Resource Warning" if total pixel throughput is too high.

## Networking (Network Tab)
- **GIVEN** the Network settings
- **THEN** the UI SHALL list available WiFi networks for client mode connection.
- **AND** it SHALL allow changing the AP SSID and Password.
- **AND** it SHALL display the current IP Address and Hostname (`.local`).

## Hardware Constraints
- **Processor**: Raspberry Pi 3B (ARMv8).
- **Memory**: 1GB LPDDR2.
- **Resolution**: Support up to 1080p hardware-accelerated H.264 video.
