All checks were successful
Deploy Development / deploy (push) Successful in 42s
Test Suite / pytest-backend (push) Successful in 35s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 12s
Test Suite / playwright-tests (push) Successful in 57s
- Added references to the architecture target image, refactor roadmap, and binding Shinkan rules in CLAUDE.md and HANDOVER.md for better project clarity. - Updated the Dashboard component to improve user authentication handling and optimize data loading, enhancing overall performance and user experience. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4.8 KiB
4.8 KiB
Architektur-Zielbild – Shinkan Jinkendo
Geltungsbereich: Trainer-/Vereinsplattform, Multi-Tenancy und Governance nach bestehender Zugriffsschicht.
Ziele: dauerhaft tragfähig, performant bei vielen gleichzeitigen Nutzern, akzeptabel auf geringer Client-Leistung (wenig RAM/CPU), wartbar und so strukturiert, dass neue Features ohne neue Grosseinkaufe an technischer Schuld einbindbar sind.
1. Leitprinzipien
- API-first, Mandanten-sicher – Fachlogik und Sichtbarkeit serverseitig; das Frontend orchestriert und zeigt. Unverändert gemäss bestehender Regeln (
ACCESS_LAYER, Governance-Helfer). - Schlanke Client-Oberfläche – JavaScript pro Route begrenzen; schwere Abhängigkeiten nur bei Bedarf laden; Listen dort virtualisieren, wo Grössenordnungen wachsen.
- Explizite Lesepfade – Aggregation und Zusammenfassungen dort, wo mehrere fast gleiche Requests heute nötig sind (Dashboard, Badges), statt Chatty-Client-Muster.
- Vorhersehbarkeit für die DB – Listenqueries ohne unnötige O(n)·Subquery-Kosten pro Zeile; Indizes und Paginierungsstrategie sind Teil des Designs.
- Feature-Einbindung per Checkliste – Jedes neue Feature durchläuft die gleiche Architektur- und Performance-Checkliste (siehe Regeldokument), bevor es als „fertig“ gilt.
2. Zielbild Frontend
2.1 Struktur
- Seiten (
pages/) bleiben Routing-Einstiege und Komposition; keine Dauerlösung für Logikblöcke > ~400–500 Zeilen in einer Datei – Auslagerung incomponents/,hooks/,features/<name>/. - Feature-Ordner (Ziel): wo sinnvoll
frontend/src/features/<domäne>/mit klarer Grenze: UI + feature-spezifische Hooks; geteilte Helfer inutils/nur wenn domänenübergreifend. - State: Server-State über API (keine Business-Duplikation); UI-State lokal oder in bestehenden Contexts nur, wenn mehrere Schichten der Shell betroffen sind.
2.2 Performance und schwache Endgeräte
- Route-basiertes Code-Splitting bleibt Standard; zusätzlich innere
dynamic import()für schwere Pakete (PDF, grosse Editoren), sobald eine Route sie braucht. - Lange Listen: Virtualisierung ab einer projektdefinierten Schwelle (siehe Regeln).
- Globale Daten (Posteingang, Badges): bedarfsgesteuert oder mit klar dokumentiertem Cache/TTL, nicht pauschal jede Session mit voller Last – konkrete Strategie in Roadmap/Remediation.
2.3 API-Schicht im Client
- Ziel: Aufteilung des heutigen
utils/api.js-Monolithen in domänenspezifische Module (z. B.api/exercises,api/planning,api/media), mit einer dünnen Barrel- oder Facade-Export für Kompatibilität während der Migration. - Konstante: alle HTTP-Aufrufe mit Token/Mandanten-Headern zentral; kein Rohtransport aus Komponenten.
3. Zielbild Backend / API
- Router-Disziplin unverändert: ein fachliches Modul, ein Router (bestehende Architekturregeln).
- Read-Model / Summary-Endpoints für Dashboards und wiederkehrende Kacheln: eine abgestimmte Antwort pro Bildschirm, wo heute mehrere Listen parallel zusammengerechnet werden – unter strikt gleicher Sichtbarkeitslogik wie die Einzel-Endpoints.
- Listen: sortierte Indizes passend zu
WHERE+ORDER BY; für grosse Datenmengen langfristig Keyset-Pagination statt tiefer Offsets. - Schwere Queries: Korrelierte Subqueries pro Zeile nur, wenn messbar unkritisch; sonst JOIN-/Aggregate-Refactoring mit Review.
4. Zielbild Datenhaltung
- PostgreSQL bleibt System der Wahrheit; Migrationen nummeriert, wie heute.
- Kein Mandanten-Cache ohne expliziten Key und Invalidierungskonzept (Regeldokument).
5. Einbindung neuer Features (vereinbartes Muster)
- Fachliche Kurzspez (oder Ticket) mit Sichtbarkeit und Nutzungskontext (Mobile/Desktop, erwartete Listenlängen).
- API-Design: Endpoints, Payload-Grösse, Paginierung; Zugriffsschicht-Check.
- UI-Modul: Route lazy, Komponentengrösse, ggf. Virtualisierung.
- Messung: minimal Lighthouse/Netzwerk oder Server-Timing für den neuen Pfad.
- Audit-Eintrag bei neuen geschützten Endpoints (bestehendes Verfahren).
6. Nicht-Ziele dieses Zielbilds
- Ersetzen der Zugriffsschicht oder der Medien-Spec.
- Microservices oder zweite Schreib-Datenbank ohne ausdrücklichen Projektbeschluss.
- „Framework-Wechsel“ (React bleibt, solange nicht separat entschieden).
7. Abnahme „Zielbild erreicht“ (high level)
- Keine bekannten God-Pages oberhalb dokumentierter Schwellen ohne dokumentierte Ausnahme.
- API-Client modularisiert oder klar phasierter Migrationsstand mit festem Enddatum.
- Dashboard und vergleichbare Homescreens ohne redundante Mehrfach-Listen desselben Objekttyps (oder dokumentierte technische Begründung + Messung).
- Datenbank-Lesepfade der Top-5-Listen unter definierter Latenz-Schwelle auf Referenz-Hardware in Lasttests (Werte in Roadmap festzulegen).