5.8 KiB
Gardomatic — Projektbeschreibung und Fahrplan
Planungsstand: 01.09.2026
Projektbeschreibung
Gardomatic ist eine mobile, mehrbenutzerfähige Webanwendung zur Organisation von Gärten. Nutzer verwalten Gärten, Arten und Sorten, konkrete Pflanzen, Pflanzorte und anstehende Arbeiten. Artenbezogene Aufgabenvorlagen erzeugen passend zum Kalender, zum Pflanzdatum oder zur letzten Erledigung automatisch konkrete Aufgaben. Ein Garten bildet dabei einen abgeschlossenen Daten- und Berechtigungsraum.
Die Anwendung besteht aus einer JSON-API und einem serverseitig gerenderten Web-Client in Go. PostgreSQL ist die einzige unterstützte Datenbank. Das Frontend ist mobile-first, funktioniert in den wesentlichen Abläufen ohne JavaScript und nutzt htmx für komfortable Teilaktualisierungen. Die installierbare PWA bietet eine Offline-App-Shell; die eigentlichen Gartendaten bleiben serverseitig geführt.
Gardomatic richtet sich an Einzelpersonen und kleine Gruppen, die einen oder mehrere Gärten gemeinsam pflegen. Zeitfenster statt starrer Einzeltermine bilden gärtnerische Arbeiten realistisch ab. Rollen, Einladungen und konsequente Gartenisolierung ermöglichen eine sichere Zusammenarbeit.
Verbindliche Leitplanken
- Go mit
internal/-Layout und getrennten Binaries für API, Web und Administration. - PostgreSQL 16 mit
database/sql,lib/pqund versionierten SQL-Migrationen. - Garten-ID im Pfad (
/v1/gardens/{gardenID}/...und/g/{gardenID}/...). - Fremde Garten-IDs liefern 404; unzulässige Aktionen innerhalb eines sichtbaren Gartens liefern 403.
- Gartenrollen sind
owner,admin,memberundviewer. - Artenstammdaten und konkrete Pflanzen bleiben getrennt; Pflanzen dürfen ohne Art angelegt werden.
- Aufgaben verwenden Fälligkeitsfenster. Wiederkehrende Zeiträume dürfen den Jahreswechsel überspannen.
- Aus Vorlagen erzeugte Aufgaben bleiben idempotent. Ein separater Scheduler wird erst bei nachgewiesenem Bedarf eingeführt.
- Authentifizierung und Autorisierung liegen in der API. Das Web reicht nur das Session-Cookie über einen request-spezifischen API-Client weiter.
- Neue Facharbeit wird als vollständiger Vertical Slice aus Migration, Storage, API, Client, Web und Tests umgesetzt.
Weiterer Fahrplan
1. Kalenderbereitstellung über CalDAV
Ziel: Anstehende Aufgaben können in vorhandenen Kalender- und Aufgabenanwendungen abonniert werden.
Vorgeschlagene Umsetzung:
- Zuerst einen technischen Prototyp mit einer nur lesbaren Collection pro Nutzer und Garten erstellen. Die Collection erhält stabile Ressourcen-IDs, ETags und separat widerrufbare Zugangsdaten.
- Aufgaben als
VTODOabbilden: Titel, Beschreibung, Fälligkeitsfenster, Priorität, Status sowie Pflanzen- und Ortsbezug. Gartenrollen begrenzen auch hier die sichtbaren Daten. - Optional eine schreibgeschützte
VEVENT-Ansicht für Clients ergänzen, dieVTODOnicht sinnvoll darstellen. Mehrtägige Fälligkeitsfenster bleiben dabei als Zeiträume erkennbar. - Einrichtung und Widerruf im Benutzerkonto ergänzen und mindestens mit DAVx⁵, Apple Kalender/Erinnerungen und Thunderbird prüfen.
- Schreibzugriffe bewusst zurückstellen, bis Konfliktauflösung, Optimistic Locking, Zeitzonen und die Semantik externer Erledigungen festgelegt sind.
Abnahmekriterien: Eine gartenbezogene, nur lesbare Collection lässt sich in mindestens zwei unterstützten Clients einrichten; Änderungen erscheinen nach der Synchronisation; widerrufene Zugänge und Zugriffe auf fremde Gärten funktionieren nicht.
2. Erstes Erweiterungsmodul: Bewässerung
Ziel: Den modularen Ausbau mit einem klar abgegrenzten Anwendungsfall erproben.
Vorgeschlagener Umfang:
- Bewässerungszonen und deren Zuordnung zu vorhandenen Orten modellieren.
- Manuelle Laufzeiten sowie einfache, ausführbare Zeitprogramme bereitstellen.
- Tabellen mit
mod_irrigation_benennen und Routen, Migrationen und Berechtigungsprüfungen vom Kern abgrenzen. - Maximale Laufzeit, konkurrierende Programme und Verhalten bei fehlender Geräteverbindung definieren, bevor reale Ventile angesteuert werden.
- Hardware-Anbindung und Wetterautomatik erst nach einer nutzbaren manuellen Planung auswählen. Ein allgemeines Modul-Interface erst einführen, wenn ein zweites Modul tatsächlich gemeinsame Hooks benötigt.
Abnahmekriterien: Das Modul kann deaktiviert werden, ohne Kernfunktionen zu beeinträchtigen; Planung und manuelle Ausführung sind nutzbar; Sicherheitsgrenzen sind automatisiert getestet.
3. Aufgabenhistorie und Auswertung
Ziel: Wiederkehrende Gartenarbeit später auswertbar machen, ohne den aktuellen Aufgabenablauf unnötig zu verkomplizieren.
Vorgeschlagene Umsetzung:
- Vorab entscheiden, welche Fragen beantwortet werden sollen, beispielsweise Erledigungen pro Zeitraum, Pflanze oder Ort.
- Erst danach ein append-only Ereignismodell für Erledigen, Wiederöffnen und Terminänderungen entwerfen.
- Einen kompakten Export und wenige zielgerichtete Auswertungen vor komplexen Dashboards priorisieren.
Abnahmekriterien: Historische Daten verändern den aktuellen Aufgabenstatus nicht und bleiben gartenisoliert; die gewählten Auswertungen sind durch reale Nutzerfragen begründet.
Empfohlene Reihenfolge
- Als nächstes den lesenden CalDAV-Prototypen umsetzen und früh mit realen Clients testen. Das reduziert das größte technische Kompatibilitätsrisiko.
- Danach den CalDAV-Zugang im Benutzerkonto produktionsreif machen und dokumentieren.
- Anschließend das Bewässerungsmodul zunächst ohne Hardwareintegration liefern.
- Aufgabenhistorie und Reporting erst beginnen, wenn konkrete Auswertungsfragen gesammelt wurden.
Bidirektionales CalDAV, herstellerspezifische Bewässerungshardware und eine allgemeine Plugin-Architektur sind ausdrücklich keine Bestandteile der jeweils ersten Ausbaustufe.