Skip to content

Design decisions

ADR-001: Decode on the Mac

Decision: Keep RTL-SDR ownership and readsb decoding on the Mac physically attached to the receiver.

Reason: Raw 2.4 MS/s IQ transport would use far more bandwidth, add latency, and make USB recovery dependent on a remote network. Compact decoded telemetry is sufficient for the dashboard.

ADR-002: Feed airplanes.live directly

Decision: readsb sends BeastReduce+ directly from the Mac to airplanes.live.

Reason: The community feed remains independent of the dashboard relay. A website deployment or relay outage cannot interrupt a healthy receiver-to-feed path.

ADR-003: Render remotely from protected snapshots

Decision: Upload a validated snapshot and bounded logs every two seconds to the existing server.

Reason: The remote dashboard gains history and continuous HTTPS access without moving radio decoding or opening the home network.

ADR-004: Use SQLite for rolling history

Decision: Store samples and events in a local SQLite database with seven-day retention.

Reason: The traffic volume is small, transactions are local, backup is simple, and no paid database service is needed.

ADR-005: Use Cloudflare Tunnel

Decision: Route the public hostname through a tunnel to a loopback-only relay.

Reason: This avoids an inbound application port, uses the existing free Cloudflare configuration, and centralizes TLS and DNS.

ADR-006: Publish dashboard reads

Decision: Serve the dashboard and read APIs publicly while keeping relay ingestion token-protected and station-setting writes local-only.

Reason: The observatory is intended to be openly accessible and easy to use on mobile browsers. Separate write boundaries protect receiver integrity without adding a login step to public viewing.

ADR-007: Keep documentation canonical with code

Decision: Author MkDocs content in wiki-site/ in the main repository and publish it to a separate repository only after a successful release.

Reason: Documentation changes receive the same review and version history as code. The separate repository provides GitHub Pages and a custom documentation domain, capabilities that the built-in GitHub Wiki interface does not provide.

ADR-008: Deploy immutable releases

Decision: Build in CI, upload a tested archive, use commit-named directories, and atomically switch a symlink.

Reason: Production never rebuilds unreviewed dependencies, rollback is fast, and credentials and history remain separate from code.