Problem: Hard-codierte Werte (Fokusbereich, Trainingscharakter) + fehlende Dimensionen (Stil, Fähigkeiten-Matrix) + keine Rollen-basierte Sichtbarkeit Lösung: Dynamische Kataloge mit Admin-CRUD Migration 007_exercise_catalogs.sql: - focus_areas (statt hard-coded 'karate', 'selbstverteidigung', 'gewaltschutz') - training_styles (NEU: Shotokan, Goju-Ryu, Wado-Ryu, etc. mit Hierarchie) - training_characters (statt hard-coded 'grundlage', 'aufbau', etc.) - skill_categories (Matrix: Kategorien → Einzelfähigkeiten) - trainer_focus_areas (Zuordnung: Trainer → Fokusbereiche) - exercises erweitert: training_style_id, training_character_id, focus_area_id - skills erweitert: category_id, parent_skill_id, level, sort_order - Seed-Daten für alle Kataloge Backend (routers/catalogs.py): - CRUD für focus_areas (admin only) - CRUD für training_styles (admin only, mit parent_style_id) - CRUD für training_characters (admin only) - CRUD für skill_categories (admin only, mit parent_category_id) - CRUD für trainer_focus_areas (admin: assign, trainer: read own) - Alle mit status-Filter (active/inactive) Backend (routers/exercises.py): - CREATE/UPDATE erweitert um training_style_id, training_character_id, focus_area_id - Legacy-Felder (focus_area text, training_character text) bleiben parallel Backend (main.py): - catalogs Router registriert Nächster Schritt: Frontend-UI (Admin-Kataloge + Exercise-Formular-Update) |
||
|---|---|---|
| .claude | ||
| .gitea/workflows | ||
| backend | ||
| frontend | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| CLAUDE.md | ||
| docker-compose.dev-env.yml | ||
| docker-compose.yml | ||
| playwright.config.js | ||
| README.md | ||
| test-frontend.js | ||
| test-login.js | ||
| test-shinkan.js | ||
Shinkan Jinkendo (真観)
Trainer- und Vereinsplattform für Kampfsport-Trainingsplanung
Teil der Jinkendo-App-Familie (人拳道)
Was ist Shinkan?
Shinkan ist eine moderne Web- und Mobile-App für Kampfsport-Trainer und Vereine. Im Fokus stehen:
- Übungsverwaltung: Zentrale Übungsbibliothek mit Suche und Filter
- Trainingsplanung: Effiziente Planung für Gruppen und Termine
- Kataloge: Fähigkeiten und Trainingsmethoden strukturiert verwalten
- Standardisierung: Vereinsstandards und wiederverwendbare Vorlagen
- Freigabe: Gesteuerte Veröffentlichung von Inhalten
Nicht in Shinkan
- Kein persönliches Sportler-Tracking (dafür: Mitai Jinkendo)
- Kein Gürtel-Tracking im MVP
- Keine individuellen Technik-Fortschritte im MVP
Tech-Stack
- Frontend: React 18 + Vite + PWA
- Backend: FastAPI (Python 3.12)
- Datenbank: PostgreSQL 16
- Container: Docker + Docker Compose
- Auth: Token-basiert + bcrypt
Installation (Lokal)
Voraussetzungen
- Node 20+
- Python 3.12+
- PostgreSQL 16
- Docker + Docker Compose
Setup
# Repository clonen
git clone http://192.168.2.144:3000/Lars/shinkan-jinkendo.git
cd shinkan-jinkendo
# Environment-Variablen
cp .env.example .env
# .env anpassen!
# Backend
cd backend
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# Frontend
cd ../frontend
npm install
# Datenbank
docker compose up -d postgres
# Migrations (automatisch beim Start)
cd ../backend
python main.py
Development
# Backend (Terminal 1)
cd backend
source venv/bin/activate
uvicorn main:app --reload --port 8098
# Frontend (Terminal 2)
cd frontend
npm run dev
Frontend: http://localhost:3098
Backend: http://localhost:8098
Docker (Empfohlen)
# Development
docker compose -f docker-compose.dev-env.yml up --build
# Production
docker compose up --build
Deployment
Production: https://shinkan.jinkendo.de
Development: https://dev.shinkan.jinkendo.de
Auto-Deploy via Gitea Actions:
develop→ Dev-Umgebungmain→ Prod-Umgebung
Dokumentation
- Setup:
.claude/docs/working/SHINKAN_PROJECT_SETUP.md - Anforderungen:
.claude/docs/functional/SHINKAN_REQUIREMENTS.md - Architektur:
.claude/rules/ARCHITECTURE.md
Lizenz
Proprietary – Lars Stommer
Kontakt
- Entwickler: Lars Stommer
- E-Mail: stommer@gmail.com
- Gitea: http://192.168.2.144:3000/Lars/shinkan-jinkendo