docs: Projektorganisation, Architekturplan und Issues pro Phase (#001)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-17 19:42:04 +02:00
co-authored by Claude Opus 5
commit a54c1b6285
20 changed files with 721 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
# #001 Projekt-Setup
**Status:** in Arbeit
**Meilenstein:** v0.1.0
**Labels:** chore, infrastruktur
**Geschätzt:** 3 h **Tatsächlich:** –
## Ziel
Arbeitsfähiges Repository mit Projektorganisation (Devlog, Changelog, Issues) und einem lauffähigen Next.js-Grundgerüst inklusive AdminLTE-CSS, Linting und Prisma-Grundkonfiguration.
## Aufgaben
- [x] Git-Repository mit Branch `main`, `.gitignore`
- [x] `DEVLOG.md`, `CHANGELOG.md`, `docs/issues/` mit Übersicht
- [x] Architektur- und Umsetzungsplan (`docs/architektur.md`)
- [x] Issues pro Phase anlegen
- [ ] Next.js (App Router, TypeScript strict, `src/`) aufsetzen
- [ ] Abhängigkeiten: `admin-lte`, `bootstrap`, `bootstrap-icons`, zod
- [ ] ESLint + Prettier, `npm run lint`, `npm run typecheck`
- [ ] Version `0.1.0-dev` in `package.json`, Versionsanzeige-Helfer
- [ ] Vitest-Grundkonfiguration
## Akzeptanzkriterien
- [ ] `npm run dev` startet ohne Fehler
- [ ] `npm run lint` und `npm run typecheck` sind grün
- [ ] Keine Remote-URL in Projektdateien
## Abhängigkeiten
–
## Notizen / Entscheidungen
- AdminLTE 4.9.1 (Bootstrap 5.3.8) ist stabil und jQuery-frei. Es wird **nur das CSS** eingebunden; die interaktiven Teile (Sidebar-Toggle, Treeview, Card-Widgets) werden als React-Komponenten nachgebaut, weil die AdminLTE-Plugins das DOM direkt manipulieren.
- Node 24 LTS über nvm (Benutzerinstallation).
+31
View File
@@ -0,0 +1,31 @@
# #002 Klickbarer Prototyp
**Status:** offen
**Meilenstein:** v0.1.0
**Labels:** ui, prototyp
**Geschätzt:** 8 h **Tatsächlich:** –
## Ziel
Klickbarer UI-Prototyp der Seiten „Dashboard“, „Kunden-Detail“ und „Host-Detail“ mit realistischen Beispieldaten und ohne Backend, als Abstimmungsgrundlage für Look & Feel. Die Komponenten werden in den späteren Phasen weiterverwendet.
## Aufgaben
- [ ] Logo-Komponente (Standard, Sidebar-Variante, einfarbig, Favicon 32/16) + `favicon.svg`, `favicon.ico`, PNGs, `apple-touch-icon`
- [ ] Theme: Farb-Tokens (abgedunkelte Info/Erfolg), Source Sans 3 (16 px), Monospace-Klasse mit Kopier-Button
- [ ] Layout: Sidebar (250 px, einklappbar, Overlay mobil), Kopfleiste, Inhaltskopf mit Breadcrumb, Footer mit Version
- [ ] Komponenten: SmallBox, InfoBox, Card, Badge, Callout, TodoList, ProgressBar, Tabs, CopyableCode
- [ ] Beispieldaten (`src/mock/`): 4 Kunden, ~8 Hosts (PVE/PBS/PMG), Laufzeiten, Rechnungen, Alerts
- [ ] Dashboard: 4 Small Boxes, Callout „Nicht zugeordnete Hosts“, Card „Subscriptions nach Ablauf“, Card „Aufgaben“, Card „Rechnungsstatus je Kunde“
- [ ] Kunden-Detail: Info-Boxen (Hosts, Einkauf, Verkauf, Marge), Host-Tabelle, Laufzeiten-Tabelle, Summen pro Jahr, Ansprechpartner, Notizen
- [ ] Host-Detail: Profil-Card + Tabs Übersicht, Subscription-Historie, Reports, Rechnungen, Notizen
- [ ] Warnglocke mit Dropdown, Strg+K-Suchdialog (clientseitig über Mock-Daten)
- [ ] Dark-Mode-Umschalter (Grundfunktion)
## Akzeptanzkriterien
- [ ] Alle drei Seiten sind über Sidebar/Links erreichbar und klickbar
- [ ] Suche nach `pve1c-a6bd21fcb6` findet Host und Kunde
- [ ] Mobil (375 px) benutzbar: Sidebar als Overlay, Tabellen scrollbar
- [ ] Weiße Schrift auf Info/Erfolg erfüllt 4,5:1
## Abhängigkeiten
#001
## Notizen / Entscheidungen
+28
View File
@@ -0,0 +1,28 @@
# #003 Datenmodell und Migrationen
**Status:** offen
**Meilenstein:** v0.1.0
**Labels:** backend, datenbank
**Geschätzt:** 5 h **Tatsächlich:** –
## Ziel
Vollständiges Prisma-Schema gemäß `docs/architektur.md` Abschnitt 3, erste Migration, Seed mit Admin-User und optionalen Demo-Daten.
## Aufgaben
- [ ] Docker-Compose für lokale Entwicklung (nur PostgreSQL)
- [ ] Prisma-Schema: Customer, Site, Host, Tag, Report, SubscriptionKey, ServerIdHistory, SubscriptionPeriod, PurchaseInvoice(+Item), SalesInvoice(+Item), Attachment, AgentToken, EnrollmentToken, Alert, Notification, AlertRuleSetting, NotificationChannel, User, AuditLog, Setting
- [ ] Indizes für Suche (Key, Server-ID, Hostname, IP, Rechnungsnummer)
- [ ] Erste Migration
- [ ] Seed: Admin-User aus Umgebungsvariablen, Standard-Warnregeln, optional Demo-Daten (`SEED_DEMO=1`)
- [ ] DB-Client-Singleton, Test-Datenbank-Setup für Vitest
## Akzeptanzkriterien
- [ ] `npx prisma migrate dev` läuft auf leerer DB durch
- [ ] `npx prisma db seed` legt Admin und Standard-Regeln an, idempotent
- [ ] Beträge als Decimal, Zeitstempel in UTC
## Abhängigkeiten
#001
## Notizen / Entscheidungen
- Host-Identität über Agent-Token/`agentId`, nicht über Server-ID (siehe Architektur).
- Rechnungen als eigene Entitäten mit Positionen, damit Sammelbestellungen und Sammelrechnungen abbildbar sind.
+28
View File
@@ -0,0 +1,28 @@
# #004 Agent-API
**Status:** offen
**Meilenstein:** v0.1.0
**Labels:** backend, api, sicherheit
**Geschätzt:** 6 h **Tatsächlich:** –
## Ziel
Getrennte, abgesicherte API unter `/api/agent/v1`, über die sich Agents registrieren und Reports abliefern.
## Aufgaben
- [ ] Token-Bibliothek: Erzeugung (Präfix `plx_e_`/`plx_h_`), SHA-256-Hash, Prüfung, Widerruf, `lastUsedAt`
- [ ] `POST /enroll`: Enrollment-Token prüfen (Ablauf, Nutzungen), Host anlegen oder Neuinstallation erkennen, Host-Token ausgeben, optionale Kunden-/Standort-Zuordnung
- [ ] `POST /report`: zod-Schema (alle Felder nullable), idempotent über `reportId`, Transaktion (Report, Stammdaten, Key-Historie, Server-ID-Historie, Laufzeitvorschlag)
- [ ] `GET /ping`
- [ ] Rate-Limiting (pro IP und Token), `429` mit `Retry-After`
- [ ] Einheitliche Fehlerantworten (JSON), kein Stacktrace nach außen
- [ ] Tests: Auth (fehlend/falsch/widerrufen/abgelaufen), Validierung, Idempotenz, Key-Wechsel, Server-ID-Wechsel, Laufzeitvorschlag, Rate-Limit
## Akzeptanzkriterien
- [ ] Report mit ausschließlich `null`-Feldern (außer Pflicht-Metadaten) wird angenommen
- [ ] Tokens liegen nur gehasht in der DB
- [ ] UI-Session-Cookies werden von der Agent-API ignoriert
- [ ] Alle Tests grün
## Abhängigkeiten
#003
## Notizen / Entscheidungen
+31
View File
@@ -0,0 +1,31 @@
# #005 Agent-Skript
**Status:** offen
**Meilenstein:** v0.2.0
**Labels:** agent
**Geschätzt:** 8 h **Tatsächlich:** –
## Ziel
Schlanker Bash-Agent (nur `curl` und Proxmox-Bordmittel), der täglich per systemd-Timer seinen Status meldet, mit One-Liner-Installation.
## Aufgaben
- [ ] Produkterkennung PVE / PBS / PMG
- [ ] Datensammlung: Subscription (key, status, level, productname, sockets, serverid, regdate, nextduedate, checktime), Hostname, FQDN, IPs, Cluster/Node, Version, Kernel, Sockets, CPU-Modell, Uptime, Updates, Agent-Version, Zeitstempel
- [ ] JSON-Erzeugung ohne `jq` inkl. Escaping, fehlende Werte als `null`
- [ ] Senden mit Retry/Backoff, Spool-Verzeichnis, Nachsenden
- [ ] TLS-Verifikation, optional eigenes CA-Zertifikat
- [ ] Logging ins Journal
- [ ] `install.sh`: `--token`, `--url`, `--ca-cert`; Config `/etc/proxledger/agent.conf` (600); Service + Timer (`RandomizedDelaySec`); erster Report sofort
- [ ] `--uninstall`, `--update`, `--test`
- [ ] Auslieferung von `install.sh`/Agent über das Dashboard
- [ ] ShellCheck sauber; Tests mit Beispielausgaben der `*subscription get`-Befehle
## Akzeptanzkriterien
- [ ] Installation per One-Liner auf PVE 8/9 und PBS 3/4 erfolgreich
- [ ] Report scheitert nicht an fehlenden Befehlen/Feldern
- [ ] Dashboard offline → Report wird gepuffert und beim nächsten Lauf nachgesendet
- [ ] Uninstall entfernt Units, Config und Spool vollständig
## Abhängigkeiten
#004
## Notizen / Entscheidungen
+27
View File
@@ -0,0 +1,27 @@
# #006 Kunden, Standorte und Hostzuweisung
**Status:** offen
**Meilenstein:** v0.3.0
**Labels:** ui, backend
**Geschätzt:** 6 h **Tatsächlich:** –
## Ziel
Kunden und Standorte pflegen, neu registrierte Hosts schnell Kunden zuweisen und Enrollment-Tokens verwalten.
## Aufgaben
- [ ] Kunden anlegen/bearbeiten/löschen (Name, Kundennummer, Ansprechpartner, E-Mail, Notizen)
- [ ] Standorte je Kunde
- [ ] Seite „Nicht zugeordnete Hosts“ mit Mehrfachauswahl und Schnellzuweisung (Kunde + Standort)
- [ ] Callout auf dem Dashboard, solange nicht zugeordnete Hosts existieren
- [ ] Enrollment-Tokens: erzeugen (Ablauf, max. Nutzungen, optional Kunde/Standort), anzeigen (einmalig), widerrufen; Install-One-Liner zum Kopieren
- [ ] Host-Tokens widerrufen
- [ ] Audit-Log-Einträge für alle Änderungen
## Akzeptanzkriterien
- [ ] Mehrere Hosts lassen sich in einem Schritt zuweisen
- [ ] Mit kundengebundenem Enrollment-Token registrierte Hosts sind sofort zugeordnet
- [ ] Widerrufener Token wird von der Agent-API abgewiesen
## Abhängigkeiten
#002, #004
## Notizen / Entscheidungen
+25
View File
@@ -0,0 +1,25 @@
# #007 Host-Tabelle, Suche und Detailansichten
**Status:** offen
**Meilenstein:** v0.4.0
**Labels:** ui
**Geschätzt:** 8 h **Tatsächlich:** –
## Ziel
Hosts finden, filtern und vollständig einsehen.
## Aufgaben
- [ ] Host-Tabelle (serverseitig): Filter Kunde, Status, Produkt, Ablauf, Rechnungsstatus; Sortierung; Spaltenauswahl; Paginierung; CSV-Export
- [ ] Suche nach Key, Server-ID, Hostname, IP, Proxmox-Rechnungsnummer
- [ ] Globale Suche in der Kopfleiste und Sidebar, `Strg+K`
- [ ] Host-Detail: Profil-Card, Tabs Übersicht, Subscription-Historie, Reports, Rechnungen, Notizen; Tags
- [ ] Kopier-Buttons für Key, Server-ID, Rechnungsnummer
- [ ] Badge „Keine Meldung“
## Akzeptanzkriterien
- [ ] Eingabe `pve1c-a6bd21fcb6` liefert direkt Host und Kunde
- [ ] Filter bleiben in der URL erhalten (teilbar, Zurück-Button funktioniert)
## Abhängigkeiten
#006
## Notizen / Entscheidungen
+28
View File
@@ -0,0 +1,28 @@
# #008 Laufzeiten und Rechnungen
**Status:** offen
**Meilenstein:** v0.5.0
**Labels:** ui, backend, buchhaltung
**Geschätzt:** 10 h **Tatsächlich:** –
## Ziel
Lizenzjahre mit Proxmox-Einkaufsrechnung und Kundenrechnung erfassen und den Status schnell pflegen.
## Aufgaben
- [ ] Laufzeitvorschlag bei neuem `nextduedate` bestätigen/verwerfen
- [ ] Laufzeit manuell anlegen/bearbeiten
- [ ] Proxmox-Rechnung erfassen (auch Sammelrechnung über mehrere Laufzeiten), PDF-Upload
- [ ] Kundenrechnung erfassen (auch Sammelrechnung), PDF-Upload
- [ ] Marge pro Laufzeit, Kunde und Jahr berechnen
- [ ] Rechnungsübersicht: alle Laufzeiten, Umschalter „Proxmox bezahlt“ / „Kundenrechnung erstellt“ direkt in der Zeile, Filter Offen/Erledigt/Alle, Kunde, Zeitraum
- [ ] Sidebar-Badge offene Rechnungspunkte
- [ ] Aufgaben-Card auf dem Dashboard mit echten Aktionen
## Akzeptanzkriterien
- [ ] Umschalten in der Tabelle wirkt sofort und wird im Audit-Log protokolliert
- [ ] Summen Einkauf/Verkauf/Marge stimmen mit Einzelwerten überein (Tests)
- [ ] Nur PDF bis 10 MB wird angenommen
## Abhängigkeiten
#007
## Notizen / Entscheidungen
@@ -0,0 +1,25 @@
# #009 Kundenübersicht, Dashboard und Jahresbahn
**Status:** offen
**Meilenstein:** v0.6.0
**Labels:** ui
**Geschätzt:** 8 h **Tatsächlich:** –
## Ziel
Überblick über Kunden, Kennzahlen und anstehende Abläufe mit Echtdaten.
## Aufgaben
- [ ] Kundenübersicht: Anzahl Hosts, aktive Subscriptions, nächster Ablauf, offene Warnungen, Rechnungs-Ampel
- [ ] Kunden-Detail mit Echtdaten (Info-Boxen, Hosts, Laufzeiten, Summen pro Jahr)
- [ ] Dashboard mit Echtdaten: Small Boxes (inkl. „Mehr Infos“-Links auf gefilterte Listen), Kacheln ohne Subscription, ohne Meldung, ohne Kunde, offene Proxmox-Rechnungen, fehlende Kundenrechnungen
- [ ] Card „Rechnungsstatus je Kunde“
- [ ] Ablauf-Kalender: nächste 90 Tage
- [ ] Jahresbahn: Timeline der nächsten 12 Monate, „Heute“-Linie, gruppiert nach Kunde
## Akzeptanzkriterien
- [ ] Kennzahlen stimmen mit den gefilterten Listen überein
- [ ] Jahresbahn mobil horizontal scrollbar
## Abhängigkeiten
#008
## Notizen / Entscheidungen
+22
View File
@@ -0,0 +1,22 @@
# #010 Export CSV und PDF
**Status:** offen
**Meilenstein:** v0.6.0
**Labels:** export
**Geschätzt:** 5 h **Tatsächlich:** –
## Ziel
Daten für Kundenunterlagen und Buchhaltung exportieren.
## Aufgaben
- [ ] CSV (UTF-8 mit BOM, Semikolon, deutsches Zahlenformat): Host-Liste, Kundenübersicht, Rechnungsliste pro Jahr
- [ ] PDF mit einfarbigem Logo: Host-Liste, Kundenübersicht (Anlage für einen Kunden), Rechnungsliste pro Jahr mit Summen
- [ ] Export berücksichtigt aktive Filter
## Akzeptanzkriterien
- [ ] CSV öffnet sich in Excel ohne Umlautfehler
- [ ] PDF-Summen entsprechen der Rechnungsübersicht
## Abhängigkeiten
#009
## Notizen / Entscheidungen
+26
View File
@@ -0,0 +1,26 @@
# #011 Warnregeln
**Status:** offen
**Meilenstein:** v0.7.0
**Labels:** backend, alerts
**Geschätzt:** 8 h **Tatsächlich:** –
## Ziel
Konfigurierbare Warnregeln, die Alerts öffnen und automatisch schließen.
## Aufgaben
- [ ] Regel-Engine: reine Funktionen, Fingerprint, Abgleich offen/neu/erledigt
- [ ] Regeln: Ablauf 30/14/7, Status ≠ active, Sockets-Abweichung, keine Meldung 48 h, Server-ID geändert, Key mehrfach, Host ohne Kunde, Proxmox-Rechnung fällig, Kundenrechnung fehlt, Kundenrechnung unbezahlt nach X Tagen
- [ ] Worker-Prozess mit Scheduler (stündlich) + Auswertung nach jedem Report
- [ ] Einstellungsseite: Regeln aktivieren, Schwellwerte ändern
- [ ] Warnglocke und Alert-Liste (offen/erledigt, quittieren)
- [ ] Tests für jede Regel inkl. Grenzfälle
## Akzeptanzkriterien
- [ ] Kein doppelter offener Alert für denselben Sachverhalt
- [ ] Alerts schließen sich automatisch, wenn die Ursache behoben ist
- [ ] Alle Regel-Tests grün
## Abhängigkeiten
#008
## Notizen / Entscheidungen
+25
View File
@@ -0,0 +1,25 @@
# #012 Benachrichtigungen
**Status:** offen
**Meilenstein:** v0.8.0
**Labels:** backend, alerts
**Geschätzt:** 6 h **Tatsächlich:** –
## Ziel
Über neue Alerts per E-Mail und Webhook informieren, plus regelmäßige Zusammenfassung.
## Aufgaben
- [ ] SMTP (STARTTLS, M365/Exchange Online getestet), HTML-Mail mit Logo
- [ ] Generischer Webhook (JSON, optional HMAC-Signatur, eigene Header)
- [ ] Deduplizierung: nur bei neuem Alert oder Eskalation
- [ ] Tägliche/wöchentliche Zusammenfassung
- [ ] Einstellungsseite mit „Test senden“
- [ ] Wiederholung bei Versandfehler, Versandprotokoll
## Akzeptanzkriterien
- [ ] Testmail über Exchange Online kommt an
- [ ] Derselbe offene Alert erzeugt keine zweite Benachrichtigung
## Abhängigkeiten
#011
## Notizen / Entscheidungen
+26
View File
@@ -0,0 +1,26 @@
# #013 Authentifizierung und Audit-Log
**Status:** offen
**Meilenstein:** v0.9.0
**Labels:** sicherheit
**Geschätzt:** 6 h **Tatsächlich:** –
## Ziel
Zugriff auf das Dashboard absichern und Änderungen nachvollziehbar machen.
## Aufgaben
- [ ] Auth.js: OIDC (authentik), lokaler Admin als Fallback (argon2id)
- [ ] Middleware schützt alle UI-Routen, nicht die Agent-API
- [ ] Login-Seite im AdminLTE-Stil mit Logo
- [ ] Rollen admin / readonly
- [ ] Audit-Log-Ansicht mit Filter
- [ ] Login-Rate-Limit, Security-Header
## Akzeptanzkriterien
- [ ] Ohne Login ist keine UI-Seite erreichbar
- [ ] Login über authentik funktioniert; lokaler Admin auch bei ausgefallenem OIDC
- [ ] readonly-Benutzer kann nichts ändern
## Abhängigkeiten
#006
## Notizen / Entscheidungen
+26
View File
@@ -0,0 +1,26 @@
# #014 Deployment und Dokumentation
**Status:** offen
**Meilenstein:** v0.10.0
**Labels:** deployment, docs
**Geschätzt:** 8 h **Tatsächlich:** –
## Ziel
ProxLedger einfach per Docker Compose oder als LXC-Container auf Proxmox betreiben.
## Aufgaben
- [ ] Dockerfile (Multi-Stage, Standalone-Output, Non-root)
- [ ] `docker-compose.yml` (web, worker, postgres), `.env.example`
- [ ] Migrationen beim Start, Healthcheck
- [ ] LXC-Installer im Stil der Community-Scripts (Debian, Ressourcenabfrage, systemd-Dienste)
- [ ] Reverse-Proxy-Beispiele (Caddy, nginx, Traefik)
- [ ] README (Deutsch): Dashboard installieren → Enrollment-Token → Agent ausrollen
- [ ] Backup-/Restore-Anleitung für die Datenbank und Uploads
## Akzeptanzkriterien
- [ ] `docker compose up -d` auf frischem System ergibt lauffähiges Dashboard
- [ ] LXC-Installer auf PVE 9 erfolgreich
## Abhängigkeiten
#013
## Notizen / Entscheidungen
+24
View File
@@ -0,0 +1,24 @@
# #015 Feinschliff für 1.0
**Status:** offen
**Meilenstein:** v1.0.0
**Labels:** ui, sicherheit
**Geschätzt:** 6 h **Tatsächlich:** –
## Ziel
Produktionsreife: Dark-Mode, Mobilansicht, Barrierefreiheit und Sicherheitsprüfung.
## Aufgaben
- [ ] Dark-Mode vollständig (alle Seiten, PDF bleibt hell)
- [ ] Mobil: Tabellen als Karten, Touch-Ziele ≥ 44 px
- [ ] Kontrast- und Tastaturprüfung
- [ ] Sicherheits-Review (Abhängigkeiten, Header, Uploads, Tokens)
- [ ] Performance-Check mit 200 Hosts / 5 Jahren Reports
## Akzeptanzkriterien
- [ ] Alle Seiten in Hell und Dunkel lesbar
- [ ] Keine bekannten kritischen Schwachstellen in Abhängigkeiten
## Abhängigkeiten
#014
## Notizen / Entscheidungen
+22
View File
@@ -0,0 +1,22 @@
# Issue-Übersicht
Details und Architektur: [../architektur.md](../architektur.md). Zeiten werden aus dem [DEVLOG](../../DEVLOG.md) übernommen.
| Nr. | Titel | Status | Meilenstein | Geschätzt | Tatsächlich |
|---|---|---|---|---|---|
| [#001](001-projekt-setup.md) | Projekt-Setup | in Arbeit | v0.1.0 | 3 h | – |
| [#002](002-prototyp.md) | Klickbarer Prototyp | offen | v0.1.0 | 8 h | – |
| [#003](003-datenmodell.md) | Datenmodell und Migrationen | offen | v0.1.0 | 5 h | – |
| [#004](004-agent-api.md) | Agent-API | offen | v0.1.0 | 6 h | – |
| [#005](005-agent-skript.md) | Agent-Skript | offen | v0.2.0 | 8 h | – |
| [#006](006-kunden-hostzuweisung.md) | Kunden, Standorte und Hostzuweisung | offen | v0.3.0 | 6 h | – |
| [#007](007-hosts-detailansichten.md) | Host-Tabelle, Suche und Detailansichten | offen | v0.4.0 | 8 h | – |
| [#008](008-laufzeiten-rechnungen.md) | Laufzeiten und Rechnungen | offen | v0.5.0 | 10 h | – |
| [#009](009-kundenuebersicht-dashboard-jahresbahn.md) | Kundenübersicht, Dashboard und Jahresbahn | offen | v0.6.0 | 8 h | – |
| [#010](010-export.md) | Export CSV und PDF | offen | v0.6.0 | 5 h | – |
| [#011](011-warnregeln.md) | Warnregeln | offen | v0.7.0 | 8 h | – |
| [#012](012-benachrichtigungen.md) | Benachrichtigungen | offen | v0.8.0 | 6 h | – |
| [#013](013-authentifizierung.md) | Authentifizierung und Audit-Log | offen | v0.9.0 | 6 h | – |
| [#014](014-deployment.md) | Deployment und Dokumentation | offen | v0.10.0 | 8 h | – |
| [#015](015-feinschliff-v1.md) | Feinschliff für 1.0 | offen | v1.0.0 | 6 h | – |
| | **Summe** | | | **101 h** | **–** |