# Shinkan Jinkendo - Session Handover **Datum:** 2026-04-22 **Kontext:** App-Entwicklung nach Login-Setup - Kern-Features implementieren --- ## 🎯 Projekt-Mission **Shinkan Jinkendo** (真観) - Trainer- und Vereinsplattform für Kampfsport-Trainingsplanung. **NICHT:** Persönliches Athleten-Tracking (das ist Mitai) **SONDERN:** Trainer verwalten Vereine, Gruppen, Übungen, Training --- ## 📚 Pflicht-Dokumentation (ZUERST LESEN!) ### Fachliches Design ``` c:\Dev\shinkan-jinkendo\.claude\docs\working\SHINKAN_PROJECT_SETUP.md ``` **Enthält:** - Domain Model (Clubs, Groups, Skills, Methods, Exercises) - MVP Features - Datenbank-Schema - User Stories ### Technisches Setup (bereits erstellt von vorheriger Session) Siehe: `SHINKAN_PROJECT_SETUP.md` - Abschnitte: - Tech Stack (React 18, FastAPI, PostgreSQL 16, Docker) - Ports: Dev 3098/8098, Prod 3003/8003 - Deployment: Gitea Actions auf develop Branch ### Referenz-Codebase ``` c:\Dev\mitai-jinkendo\ ``` **Nutzen für Standards:** - Router-Struktur (`backend/routers/`) - Frontend-Patterns (`frontend/src/pages/`) - CSS-System (`frontend/src/app.css`) **⚠️ WARNUNG:** Mitai-Code NICHT blind kopieren! - Mitai hat AI-Features, Export, komplexes Membership - Shinkan ist einfacher, andere DB-Spalten - **Immer Schema prüfen** vor Copy/Paste! --- ## 🔧 Aktueller Stand ### ✅ Was funktioniert - **Login/Auth:** lars@stommer.com / 12345678 (admin, premium) - **Backend API:** http://192.168.2.49:8098 - **Frontend:** http://192.168.2.49:3098 - **Datenbank:** - profiles, sessions (Auth) - clubs, divisions, training_groups (Organisation) - skills (12 Einträge), training_methods (8 Einträge) - bereits geseedet! - exercises, exercise_skills (leer) ### ❌ Bekannte Probleme **1. Navigation erscheint nicht im Browser** - Code existiert: `frontend/src/components/Navigation.jsx` - Routes hinzugefügt: ProfilePage, ExercisesPage, ClubsPage - Deploy erfolgt (Commit c4b1b54) - **Problem:** Nicht im Browser sichtbar - vermutlich Browser-Cache oder Build-Issue **2. Sessions funktionieren nicht** - User muss sich ständig neu einloggen - Backend-Fix gepusht (Commit 08326bd) - Mitai-Spalten entfernt - **Problem:** Unklar ob Fix deployed wurde **Erste Aufgabe:** Diese beiden Issues fixen, DANN Features bauen! ### 📁 Code-Struktur ``` c:\Dev\shinkan-jinkendo\ ├── backend/ │ ├── main.py (FastAPI setup, Router registration) │ ├── auth.py (Session management, require_auth) │ ├── db.py (PostgreSQL connection pool) │ ├── models.py (Pydantic models) │ ├── routers/ │ │ ├── auth.py (Login, Register, Logout) │ │ └── profiles.py (User profile CRUD) │ └── migrations/ │ ├── 001_auth_membership.sql │ ├── 002_organization.sql │ ├── 003_catalogs.sql (Skills + Methods seeded!) │ └── 004_add_auth_columns.sql │ ├── frontend/src/ │ ├── App.jsx (Routing + ProtectedRoute) │ ├── context/ │ │ └── AuthContext.jsx (User state, login/logout) │ ├── components/ │ │ └── Navigation.jsx (Header-Menü - NICHT SICHTBAR) │ ├── pages/ │ │ ├── LoginPage.jsx (✅ funktioniert) │ │ ├── Dashboard.jsx (✅ zeigt Welcome) │ │ ├── ProfilePage.jsx (NEU - Platzhalter) │ │ ├── ExercisesPage.jsx (NEU - leer) │ │ └── ClubsPage.jsx (NEU - leer) │ └── utils/ │ └── api.js (Zentrale API-Client mit Token-Injektion) │ └── .claude/docs/ └── working/ └── SHINKAN_PROJECT_SETUP.md (LESEN!) ``` --- ## 🚀 Was JETZT gebaut werden muss (MVP Scope) ### Phase 1: Core CRUD (Priorität) **1. Übungsverwaltung** (Kernobjekt) - 2-3h - `backend/routers/exercises.py` - GET /exercises (Liste mit Filter) - POST /exercises (Create) - GET /exercises/{id} (Detail) - PUT /exercises/{id} (Update) - DELETE /exercises/{id} - `frontend/src/pages/ExercisesPage.jsx` - Liste (Tabelle oder Cards) - Create-Modal/Form - Edit inline oder Modal - Delete mit Confirm **Schema:** Siehe `migrations/001_auth_membership.sql` - Tabelle `exercises` **Felder:** - title, summary, goal, execution, preparation, trainer_notes - equipment (JSONB array), duration_min/max, group_size_min/max - age_groups (JSONB), focus_area, secondary_areas (JSONB) - training_character, visibility (private/club/public) - primary_method_id, secondary_method_ids (JSONB) **Referenz:** Mitai hat ähnliche CRUD-Pattern in `routers/weight.py`, `routers/activity.py` --- **2. Vereinsverwaltung** - 1-2h - `backend/routers/clubs.py` - CRUD für clubs - CRUD für divisions (optional) - `frontend/src/pages/ClubsPage.jsx` **Schema:** Siehe `migrations/002_organization.sql` --- **3. Gruppenverwaltung** - 1-2h - `backend/routers/groups.py` - CRUD für training_groups - Zuordnung zu Clubs - Trainer-Zuordnung (trainer_id, co_trainer_ids) - `frontend/src/pages/GroupsPage.jsx` --- ### Phase 2: Kataloge & Zuordnungen (Später) **4. Skills & Methods anzeigen** - 0.5h - `/skills` Route (Read-only, bereits geseedet) - `/methods` Route (Read-only, bereits geseedet) **5. Übungen ↔ Skills verknüpfen** - 1h - M:N Relationship über `exercise_skills` Tabelle - UI: Multi-Select für Skills beim Übung-Erstellen --- ## 🔍 Debugging-Checkliste (Vor neuen Features!) ### Problem: Navigation nicht sichtbar ```bash # SSH zum Server ssh lars@192.168.2.49 # Frontend Container prüfen docker exec dev-shinkan-ui ls -la /usr/share/nginx/html/assets/ # Erwartung: Datei index-CYNK--85.js oder neuer # Prüfen ob Navigation.jsx im Bundle docker exec dev-shinkan-ui grep -o "Navigation\|Übungen" /usr/share/nginx/html/assets/index-*.js | head -5 # Falls nicht: Frontend neu bauen cd /home/lars/docker/shinkan-dev git pull docker compose -f docker-compose.dev-env.yml build --no-cache frontend docker compose -f docker-compose.dev-env.yml up -d ``` ### Problem: Sessions funktionieren nicht ```bash # Backend Logs prüfen docker logs dev-shinkan-api --tail 50 | grep -E "error|Error|column.*does not exist" # Erwartung: KEINE "column p.ai_enabled does not exist" Fehler mehr # Session-Test curl -X POST http://192.168.2.49:8098/api/auth/login \ -H "Content-Type: application/json" \ -d '{"email":"lars@stommer.com","password":"12345678"}' | python3 -m json.tool # Erwartung: {"token": "...", "role": "admin", ...} ``` --- ## 🛠️ Entwicklungs-Workflow ### 1. Feature implementieren (Lokal) ```bash # Backend cd c:\Dev\shinkan-jinkendo # Router erstellen: backend/routers/exercises.py # Models ergänzen: backend/models.py # Router registrieren: backend/main.py # Frontend # Seite erstellen: frontend/src/pages/ExercisesPage.jsx # API-Funktionen: frontend/src/utils/api.js # Route in App.jsx ``` ### 2. Committen & Pushen ```bash git add -A git commit -m "feat: Exercise CRUD implementation" git push origin develop ``` ### 3. Gitea Action deployt automatisch - Kein manuelles `docker compose` mehr! - Warte 1-2 Min - Prüfe: http://192.168.2.49:3098 ### 4. Testen im Browser - Login: lars@stommer.com / 12345678 - Feature testen - Console prüfen (F12) bei Fehlern --- ## 📊 Datenbank-Zugriff ```bash # SSH ssh lars@192.168.2.49 # PostgreSQL CLI docker exec -it dev-shinkan-postgres psql -U shinkan_dev -d shinkan_dev # Hilfreiche Queries \d profiles # Schema anzeigen \d exercises # Exercise-Schema SELECT * FROM skills; # Alle Skills (12 Einträge) SELECT * FROM training_methods; # Alle Methods (8 Einträge) ``` --- ## ⚠️ Lessons Learned (Vermeide diese Fehler!) ### 1. Mitai vs Shinkan Schema **Problem:** Auth.py von Mitai kopiert, aber Spalten fehlen in Shinkan **Fehler:** - `ai_enabled`, `ai_limit_day`, `export_enabled` - existieren nur in Mitai - `auth_type`, `verification_expires`, `trial_ends_at` - mussten hinzugefügt werden - `created` vs `created_at` - unterschiedliche Spaltennamen **Regel:** Vor Mitai-Code kopieren → **Schema prüfen**! ### 2. Frontend-Cache **Problem:** Code deployed aber nicht sichtbar im Browser **Lösung:** - Browser-Cache leeren (Ctrl+Shift+R) - Oder `docker compose build --no-cache frontend` ### 3. Gitea Actions nicht mit manuellen Deploys mischen **Problem:** Container-Namens-Konflikte **Regel:** Nur `git push` → Gitea macht den Rest --- ## 📞 Server-Info | System | Wert | |--------|------| | **Pi IP** | 192.168.2.49 | | **Gitea** | http://192.168.2.144:3000/Lars/shinkan-jinkendo | | **Dev Frontend** | http://192.168.2.49:3098 | | **Dev Backend** | http://192.168.2.49:8098 | | **Deploy Path** | /home/lars/docker/shinkan-dev | | **DB Name** | shinkan_dev | | **DB User** | shinkan_dev | | **DB Pass** | dev_password | --- ## 🎯 Erfolgs-Kriterien MVP Nach MVP soll User können: 1. ✅ Login/Logout (erledigt) 2. ⏳ Übungen verwalten (CRUD) 3. ⏳ Vereine anlegen 4. ⏳ Trainingsgruppen anlegen 5. ⏳ Übungen Skills zuordnen 6. ⏳ Skills/Methods katalog ansehen **Geschätzte Zeit:** 6-8h für Punkte 2-6 --- ## 🚦 Start-Kommando für neue Session ``` Ich übernehme die Entwicklung von Shinkan Jinkendo. Kontext gelesen: HANDOVER_NEXT_SESSION.md Erste Schritte: 1. Navigation + Sessions debuggen 2. Dann: Exercise CRUD implementieren Bitte bestätige dass du bereit bist und zeige mir den aktuellen Status (Container, letzte Commits, bekannte Probleme). ``` --- **Viel Erfolg!** 🥋