9. Architecture decisions¶
Last reviewed: 2026-11-03
Important decisions, with their reasons. Each decision is an ADR: append-only, numbered, with context, decision and consequences. Every ADR must be listed here (mise doccheck fails otherwise). New ADRs also name the quality goals they affect.
| ADR | Decision |
|---|---|
| 001 | API Middleware Architecture and Open-Meteo Tide Prediction Proxy |
| 002 | Maritime Location Naming Convention and Island Priority Rules |
| 003 | Device Registration, Pairing Protocol, and Security Controls |
| 004 | Own map tiles from a monthly Protomaps extract in Cloudflare R2 |
| 005 | Depth layer from the EMODnet DTM, built and served like the map tiles |
| 006 | No request from the watch before consent on the watch |
| 007 | Stored, simplified map lines and a browser cache for the trip page |
| 008 | Depth with the coastline as 0 m, built on a worker VM |
| 009 | Engine or sail from the track, as a suggestion the skipper corrects |
| 010 | Trips are private, shared by expiring links; crew join read-only (amended 2026-10-26: trip roles) |
| 011 | Every job on the worker VM, by priority |
| 012 | Admins are users |
| 013 | Our own OpenStreetMap places in PostGIS, refreshed on demand |
| 014 | Link preview images drawn by headless Chromium in the jobs role |
| 015 | Every record id from a request goes through an access scope |
| 016 | A per-trip points endpoint for the trip replay, for crew and public links too |
| 017 | Track points as one 5 s file per track in object storage, no original files |
| 018 | Wear OS track map from SailEver tiles |
| 019 | Public skipper profile |
| 020 | Everyone on board invites crew |