Skip to content

ADR Index

github-actions[bot] edited this page Oct 15, 2026 · 17 revisions

Architecture decisions

Every architecture decision is recorded as an ADR in a MADR-like format with the headings Status, Context, Decision and Consequences. Files are named NNNN-kebab-case-title.md; start from template.md in this directory. Decisions are never rewritten: a changed decision gets a new ADR that supersedes the old one. A test in tools/repo-checks enforces the structure.

ADR Title Status
0001 OpenFGA instead of self-built authorization Accepted
0002 Self-built Identity service in FastAPI instead of Keycloak or Zitadel Accepted
0003 SvelteKit for the web app Accepted
0004 Monorepo with a uv workspace Accepted
0005 AGPL-3.0 for services and apps, Apache-2.0 for libraries Accepted
0006 PostgreSQL for all persistence, no SQLite Accepted
0007 NATS JetStream as event bus Accepted
0008 Traefik as gateway Accepted
0009 Command and event envelopes, subject naming and de-duplication Accepted
0010 Python 3.13 for all services and libraries Accepted
0011 Separate GPL-3.0 package for the PyMammotion adapter Accepted
0012 Mower control interface and safety rules Accepted
0013 Device-Gateway registry, sharding and per-mower concurrency Accepted
0014 Authorization model, tuple ownership and the mowdeck-authz client Accepted
0015 Tokens, sessions and key rotation Accepted
0016 Fleet commands and authorization per command kind Accepted
0017 Telemetry storage and retention Accepted
0018 Realtime WebSocket protocol Accepted
0019 Mammotion adapter transports, manual drive and secrets Accepted
0020 Web app architecture Accepted
0021 Browser authentication flow Accepted
0022 Notifications: rules, recipients and delivery Accepted
0023 Map rendering and projection Accepted
0024 Scheduler: recurrence, rain pause and command issuing Accepted
0025 Home Assistant integration as a pure API client Accepted
0026 Manual drive channel over the Realtime WebSocket Accepted
0027 Health history and theft alarm Accepted
0028 Entitlements: plans as data and enforcement Accepted
0029 Helm chart and release pipeline Accepted
0030 Mowing patterns as plug-ins and the Planner Accepted
0031 Billing with a Stripe adapter Accepted
0032 Live camera over Agora, joined directly by the browser Accepted
0033 Vision-assisted recovery with human approval Accepted
0034 Linked cloud accounts and device discovery Accepted
0035 Server-side camera frames and automatic AI analysis on errors Accepted
0036 Native app shells with Capacitor, loading the web app from the server Accepted
0037 Camera panorama calibration in the browser, with the AI supplying points only Superseded
0038 Dual link per mower (cloud plus Bluetooth bridge) and firmware updates Accepted
0039 Spot mowing by MowDeck-driven paths Accepted
0040 Link heartbeat for online status Accepted
0041 Spot runs from the dock: undock, transit and return Accepted
0042 Drive calibration Accepted
0043 Turn styles Accepted

Mirrored from docs/adr/README.md at commit 6a87264c6123f07c8474e153053525dc1816feb7. Edit the file in the repository, not this wiki page.

MowDeck documentation

Clone this wiki locally