Repository navigation
Dev Wiki
The GitHub wiki of the repository is a generated, read-only mirror of docs/. docs/ is the single source of truth: edit pages in docs/, never in the wiki. Any manual wiki edit is overwritten by the next sync.
The wiki workflow (.github/workflows/wiki.yml) runs on every push to main that touches docs/**, mkdocs.yml, tools/wiki-sync/** or the workflow itself, and on manual dispatch. It runs wiki-sync build, clones <repo>.wiki.git, replaces its contents with the generated pages and pushes a commit docs: sync wiki from <sha> (only when something changed).
The tool lives in tools/wiki-sync/. It reads the nav from mkdocs.yml, writes flat pages, rewrites relative links between pages to wiki links, generates _Sidebar.md and _Footer.md, appends a mirror note to each page and deletes stale pages.
The wiki has no folders, so the path becomes the page name:
| Docs path | Wiki page |
|---|---|
index.md |
Home |
phases.md |
Phases |
architecture/05-building-blocks.md |
Architecture-05-Building-Blocks |
adr/0009-command-and-event-envelopes.md |
ADR-0009-Command-And-Event-Envelopes |
adr/README.md |
ADR-Index |
dev/getting-started.md |
Dev-Getting-Started |
ops/compose.md |
Ops-Compose |
spikes/index.md |
Spikes |
spikes/0001-ble-bridge-and-pymammotion.md |
Spike-0001-Ble-Bridge-And-Pymammotion |
guides/index.md |
Guides |
Directory prefixes: architecture to Architecture, adr to ADR, dev to Dev, ops to Ops, spikes to Spike, guides to Guide. The file stem is title-cased per hyphen segment and digits are kept. docs/plan/** (the German original) and adr/template.md are not mirrored; links to them point to the file on GitHub.
GitHub creates the wiki repository only when the first page is created in the web UI. Open https://github.com/lukislp/mowdeck/wiki, click "Create the first page" and save any content. Until then the workflow fails with the message "Wiki repository not initialised". After creating the page, re-run the workflow from the Actions tab; the generated pages replace the placeholder.
uv run poe wikiThis writes the pages to build/wiki (ignored by git). To pass a commit hash for the footer, call the tool directly: uv run wiki-sync build --docs docs --mkdocs mkdocs.yml --out build/wiki --commit <sha>.
Mirrored from docs/dev/wiki.md at commit 0caaafede129b9452fd286001ba4092f2951c7a7. Edit the file in the repository, not this wiki page.
Mirrored from the docs/ directory at commit 0caaafede129b9452fd286001ba4092f2951c7a7. Edit the files in the repository, not this wiki.
MowDeck documentation
- Home
- Phases
- Architecture
-
Decisions (ADR)
- Architecture decisions
- ADR 0001: OpenFGA instead of self-built authorization
- ADR 0002: Self-built Identity service in FastAPI instead of Keycloak or Zitadel
- ADR 0003: SvelteKit for the web app
- ADR 0004: Monorepo with a uv workspace
- ADR 0005: AGPL-3.0 for services and apps, Apache-2.0 for libraries
- ADR 0006: PostgreSQL for all persistence, no SQLite
- ADR 0007: NATS JetStream as event bus
- ADR 0008: Traefik as gateway
- ADR 0009: Command and event envelopes, subject naming and de-duplication
- ADR 0010: Python 3.13 for all services and libraries
- ADR 0011: Separate GPL-3.0 package for the PyMammotion adapter
- ADR 0012: Mower control interface and safety rules
- ADR 0013: Device-Gateway registry, sharding and per-mower concurrency
- ADR 0014: Authorization model, tuple ownership and the mowdeck-authz client
- ADR 0015: Tokens, sessions and key rotation
- ADR 0016: Fleet commands and authorization per command kind
- ADR 0017: Telemetry storage and retention
- ADR 0018: Realtime WebSocket protocol
- ADR 0019: Mammotion adapter transports, manual drive and secrets
- ADR 0020: Web app architecture
- ADR 0021: Browser authentication flow
- ADR 0022: Notifications: rules, recipients and delivery
- ADR 0023: Map rendering and projection
- ADR 0024: Scheduler: recurrence, rain pause and command issuing
- ADR 0025: Home Assistant integration as a pure API client
- ADR 0026: Manual drive channel over the Realtime WebSocket
- ADR 0027: Health history and theft alarm
- ADR 0028: Entitlements: plans as data and enforcement
- ADR 0029: Helm chart and release pipeline
- ADR 0030: Mowing patterns as plug-ins and the Planner
- ADR 0031: Billing with a Stripe adapter
- ADR 0032: Live camera over Agora, joined directly by the browser
- ADR 0033: Vision-assisted recovery with human approval
- ADR 0034: Linked cloud accounts and device discovery
- ADR 0035: Server-side camera frames and automatic AI analysis on errors
- ADR 0036: Native app shells with Capacitor, loading the web app from the server
- ADR 0037: Camera panorama calibration in the browser, with the AI supplying points only
- ADR 0038: Dual link per mower and firmware updates
- ADR 0039: Spot mowing by MowDeck-driven paths
- ADR 0040: Link heartbeat for online status
- ADR 0041: Spot runs from the dock: undock, transit and return
- ADR 0042: Drive calibration
- ADR 0043: Turn styles
- ADR 0044: Drive view with camera
- ADR 0045: Camera relay
- Development
- Operations
- Spikes
- Guides
- Original plan (German)