# Roadmap Geplante Reihenfolge der nächsten Commits, aufbauend auf dem lauffähigen Grundgerüst aus Commit 1. ## ✅ Commit 2 — Geräte- & Dienste-API (erledigt) - REST-Endpunkte (Fastify) für `GET/POST/PATCH/DELETE` auf `devices` und `services` - Zod-Validierung der Request-Bodies (`packages/shared/src/schemas.ts`) - Repository-Layer über Drizzle (`apps/backend/src/db/repositories`) ## ✅ Commit 3 — Suche im Frontend (erledigt) - Anbindung von `rankServices` aus `packages/shared` an echte Backend-Daten - TanStack Query für Datenhaltung (`apps/frontend/src/hooks/useServices.ts`) - Tastatur-Navigation (Pfeiltasten wählen, Enter öffnet Dienst in neuem Tab, Escape leert Suche) - Neue UI-Komponente `ResultsList` in `packages/ui` > TanStack Router wird bewusst erst mit dem Adminbereich (Commit 6) eingeführt, > da es vorher keine zweite Route gibt, die er sinnvoll verwalten könnte. ## ✅ Commit 4 — Kategorien & Favoriten (erledigt) - Kategorien-API: Erstellen, Umbenennen, Löschen, Bulk-Reorder (`PATCH /api/categories/reorder`) - Löschen einer Kategorie setzt `category` bei betroffenen Diensten auf `null`, löscht die Dienste aber nicht - Favoriten-Toggle direkt in der Trefferliste des Frontends (Stern anklicken, per `useMutation` + Cache-Invalidierung) > Die eigentliche Kategorien-*Verwaltungsoberfläche* (Erstellen/Umbenennen/ > Drag & Drop in der UI) wandert in Commit 6 (Adminbereich) – die Startseite > bleibt bewusst die minimalistische Suche, kein Verwaltungs-UI dort. ## ✅ Commit 5 — Scanner (erledigt) - `apps/backend/src/scanner/`: DNS-Kandidaten-Auflösung, TCP-Portscan (80, 443 + typische Ports), HTTP-Titel-/Favicon-Extraktion, Softwareerkennung per Signatur-Liste, FritzBox-TR-064-Client (inkl. selbst implementierter HTTP-Digest-Authentifizierung) - `POST /api/scan/devices/:id` und `POST /api/scan/fritzbox` – ausschließlich manuell auslösbar, kein automatischer/zeitgesteuerter Scan - `upsertDeviceFromScan` / `upsertServiceFromScan` in den Repositories: garantiert, dass Benutzerfelder (displayName, category, favorite, order, alias, icon) bei erneuten Scans nie überschrieben werden – End-to-End getestet (Service manuell umbenannt/kategorisiert/favorisiert, erneut gescannt, Werte blieben erhalten) > Alle Module wurden gegen echte, lokal gestartete Test-Server verifiziert > (Port-Erkennung, Titel/Favicon-Parsing, Softwareerkennung, kompletter > FritzBox-SOAP-/Digest-Auth-Ablauf inkl. Fehlerfall bei falschem Passwort). > Ein Test gegen eine echte FritzBox war in dieser Umgebung nicht möglich. ## ✅ Commit 6 — Adminbereich (erledigt) - TanStack Router (code-basiert): `/` (Startseite) + `/admin/*` - Menüpunkte wie spezifiziert: Dashboard, Geräte, Dienste, Scanner, Kategorien, Plugins, Einstellungen, Logs - Geräte-Seite: anlegen, löschen, **„Jetzt scannen"-Button** pro Gerät - Dienste-Seite: Inline-Bearbeitung von Name/Kategorie/Alias/Reihenfolge, Favoriten-Toggle - Kategorien-Seite: anlegen, umbenennen, löschen, **natives Drag & Drop** (kein zusätzliches Package nötig) - Scanner-Seite: FritzBox-Trigger + Sammel-Scan aller Geräte - Logs-Seite: Scan-Historie (neue `scan_logs`-Tabelle, jeder Scan-Versuch wird protokolliert) - Einstellungen: Live-Backend-Status + Theme-Umschalter - Plugins: ehrlicher Hinweis, dass das Plugin-System noch nicht existiert (statt einer vorgetäuschten Funktion) > Verifiziert per Docker-Build-Simulation (Frontend + Backend inkl. > `pnpm deploy --prod`) und Backend-Smoke-Test aller von den Admin-Seiten > verwendeten Endpunkte. Die UI selbst konnte in dieser Umgebung nicht in > einem echten Browser durchgeklickt werden (kein Browser-Tool verfügbar) – > Verifikation stützt sich auf erfolgreichen TypeScript-/Vite-Build und > Codeprüfung. ## Commit 7 — PWA - Manifest, Service Worker, Offline-Grundfunktion, Installierbarkeit ## Commit 8 — Plugin-System - Plugin-Schnittstelle zum Registrieren von Scannern, Import von Geräten, Erweitern von Menüs, Bereitstellen von Icons