Files
sdr-recorder/openspec/changes/archive/2026-03-19-web-hosting-recordings/design.md
Michael Smith 9ff0506cae Add Nginx web server for browsing recordings
Serves the recordings directory over HTTP with autoindex on port 8080.
Users can browse by date and play MP3 files natively in the browser.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 11:42:45 +00:00

1.6 KiB

Context

RTLSDR-Airband records CB transmissions as MP3 files into /home/m/recordings/ on the Pi, organized by channel subdirectories with dated subdirectories inside. The recorder runs as a Docker container via docker-compose.yml.

Goals / Non-Goals

Goals:

  • Serve the recordings directory over HTTP with browsable directory listings
  • Allow MP3 playback via the browser's native audio handling
  • Deploy as a Docker container alongside the existing sdr-recorder service

Non-Goals:

  • Custom web UI, styling, or JavaScript
  • Authentication (local network only)
  • Modifying, uploading, or deleting recordings
  • Live streaming or transcription

Decisions

Use Nginx with HTML autoindex, no custom frontend

Decision: Use nginx:alpine with autoindex on to serve the recordings directory. No custom HTML, JS, or CSS.

Rationale: Nginx's built-in directory listing is fully functional for browsing channel/date directories. Modern browsers play MP3 files natively when clicked. This requires only an Nginx config file and a docker-compose service — zero application code.

Alternatives considered:

  • Custom SPA frontend: Adds complexity (build tools, JS code) for marginal UX improvement over native directory listing.
  • Python http.server: Simpler but less performant and no Alpine image parity.

Risks / Trade-offs

  • [No search or filtering] → Users browse by directory structure. Acceptable given the channel/date organization.
  • [Plain directory listing] → No styled UI. Acceptable for a local utility tool.
  • [No auth] → Anyone on the LAN can access. Acceptable per non-goals.