- Add Alchemie-Tab documentation (complete implementation) - Add Rest-System documentation - Add Status-Tab extensions (Perception, Speed, AC with proficiency) - Add HTML-Export feature documentation - Update file structure with new components and services Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
8.8 KiB
8.8 KiB
Dimension47 - TTRPG Campaign Management Platform
Projekt-Philosophie
Qualität vor Geschwindigkeit: Es ist egal, wie lange die Implementierung dauert - das System soll am Ende gut funktionieren. Keine Shortcuts oder Quick-Fixes, die später Probleme verursachen.
Lieber langsam und richtig: Immer den sauberen Weg wählen, auch wenn er länger dauert. Beispiele:
- Prisma Migrations statt
db pushverwenden - Daten in Datenbank statt direkt aus JSON-Dateien lesen
- Proper Error Handling statt try/catch mit console.log
- TypeScript strict mode, keine
anyTypes
Architektur-Entscheidungen
Daten-Management
- Equipment/Items in Datenbank: Alle Pathfinder 2e Daten (Waffen, Rüstungen, Ausrüstung, Zauber, Talente) werden in die PostgreSQL-Datenbank importiert, NICHT direkt aus JSON-Dateien gelesen.
- Prisma Seed Scripts: JSON-Dateien werden via
prisma db seedin die Datenbank importiert. - Übersetzungen gecacht: Deutsche Übersetzungen werden on-demand via Claude API generiert und in der Translation-Tabelle gespeichert.
Vorteile des Database-Ansatzes
- Bessere Such- und Filtermöglichkeiten
- Konsistente Datenstruktur
- Eigene Items können hinzugefügt werden
- Relationale Verknüpfungen möglich
- Performance durch Indizes
Tech Stack
Frontend
- React 19 + TypeScript
- Vite als Build Tool
- Tailwind CSS v4
- shadcn/ui Komponenten (selbst gebaut)
- Zustand für Client State
Backend
- NestJS mit TypeScript
- Prisma ORM
- PostgreSQL
- JWT Authentication
- Socket.io für WebSockets
Ordnerstruktur
dimension47/
├── client/ # React Frontend
│ ├── src/
│ │ ├── app/ # App-Config, Router
│ │ ├── features/ # Feature-Module (auth, campaigns, characters, etc.)
│ │ │ ├── auth/components/
│ │ │ │ ├── login-page.tsx # Login mit Animationen
│ │ │ │ └── register-page.tsx # Registrierung
│ │ │ └── characters/
│ │ │ ├── components/
│ │ │ │ ├── character-sheet-page.tsx # Hauptseite mit Tabs
│ │ │ │ ├── hp-control.tsx # HP-Management Komponente
│ │ │ │ ├── add-condition-modal.tsx # Zustand hinzufügen
│ │ │ │ ├── add-item-modal.tsx # Item aus DB hinzufügen
│ │ │ │ ├── actions-tab.tsx # Aktionen-Tab
│ │ │ │ ├── alchemy-tab.tsx # Alchemie-Tab
│ │ │ │ └── rest-modal.tsx # Rasten-Modal
│ │ │ └── utils/
│ │ │ └── export-character-html.ts # HTML-Export Funktion
│ │ ├── shared/ # Geteilte Komponenten, Hooks, Types
│ │ │ └── hooks/
│ │ │ └── use-character-socket.ts # WebSocket Hook für Echtzeit-Sync
│ │ └── assets/
│ └── public/ # Statische Dateien, JSON-Datenbanken
│
└── server/ # NestJS Backend
├── src/
│ ├── modules/ # Feature-Module
│ │ ├── auth/ # Authentifizierung
│ │ ├── campaigns/ # Kampagnenverwaltung
│ │ ├── characters/# Charakterverwaltung
│ │ │ ├── characters.gateway.ts # WebSocket Gateway
│ │ │ └── alchemy.service.ts # Alchemie-System Service
│ │ └── equipment/ # Equipment-Datenbank
│ ├── common/ # Shared Utilities
│ └── prisma/ # Prisma Service
└── prisma/
├── schema.prisma # Datenbank-Schema
├── migrations/ # Prisma Migrations
├── seed.ts # Basis-Seed
├── seed-equipment.ts # Equipment-Import (5.482 Items)
└── data/ # JSON-Quelldaten für Equipment
Implementierte Features
Auth
- JWT-basierte Authentifizierung
- Login/Register/Logout
- Rollen: ADMIN, GM, PLAYER
- "Anmeldung speichern" Funktion (localStorage vs sessionStorage)
- Animierter Login-Screen:
- Zweistufiger Flow: Splash → Formular
- Animierter Sternenhintergrund mit schwebenden Orbs
- "DIMENSION 47" Titel mit Buchstaben-Animation und Glow-Effekt
- Logo mit Tap-Glow-Effekt
- Gestaffelte Formular-Animationen (Komponente für Komponente)
Kampagnen
- CRUD für Kampagnen
- Mitgliederverwaltung
- GM-Berechtigungen
Charaktere
- Pathbuilder 2e Import
- HP-Management (mobile-optimiert, Schaden/Heilung/Direkt)
- Zustände (Conditions) mit PF2e-Datenbank
- Fertigkeiten mit deutschen Namen
- Rettungswürfe
- Inventar-System (komplett):
- Vollständige Equipment-Datenbank (5.482 Items)
- Item-Suche mit Kategoriefilter und Pagination
- Bulk-Tracking mit Belastungs-Anzeige
- Ausrüstungsstatus (angelegt/abgelegt/investiert)
- Quantity-Management
- Item-Details mit Eigenschaften, Schaden, etc.
- Benutzerdefinierte Notizen pro Item
- Talente-Tab (komplett):
- Alle Charaktertalente aus Pathbuilder-Import
- Kategorisiert nach Quelle (Klasse, Abstammung, Allgemein, Fertigkeit, Bonus, Archetyp)
- Einklappbare Kategorien
- Talentdetails mit Beschreibung und Voraussetzungen
- Aktionen-Tab mit PF2e-Aktionsdatenbank (99 Aktionen)
- Kategorien: Allgemein, Kampf, Bewegung, Interaktion, Spezial
- Einklappbare Kategorien (standardmäßig eingeklappt)
- Aktionstyp-Icons (Aktion, Reaktion, Freie Aktion, etc.)
- Suchfunktion
- WebSocket Real-Time Sync für:
- HP (aktuell, temporär, max)
- Zustände (hinzufügen, entfernen, aktualisieren)
- Inventar (Items hinzufügen, entfernen, aktualisieren)
- Ausrüstungsstatus (angelegt/abgelegt)
- Geld (Credits)
- Level
- Alchemie (Phiolen, Formeln, vorbereitete Items)
- Alchemie-Tab (komplett):
- Vielseitige Phiolen mit Tracker
- Formelbuch mit allen bekannten Formeln
- Tägliche Vorbereitung (Advanced Alchemy)
- Schnelle Alchemie (Quick Alchemy)
- Handwerkliche Alchemie (Craft Alchemy)
- Forschungsgebiete (Bomber, Chirurg, Mutageniker, Toxikologe)
- Infundierte Items mit Effekt-Anzeige und Schadenswerten
- Rest-System:
- HP-Heilung basierend auf CON-Mod × Level
- Zustands-Management (Erschöpft entfernt, Verdammt/Entkräftet reduziert)
- Ressourcen-Reset (Zauberplätze, Fokuspunkte)
- Alchemie-Reset (infundierte Items verfallen, Phiolen aufgefüllt)
- Status-Tab Erweiterungen:
- Wahrnehmung mit korrekter PF2e-Berechnung
- Geschwindigkeit
- Rüstungsklasse mit Übungsstufe
- Rettungswürfe mit Übungsstufen
- HTML-Export:
- Vollständiger Charakterbogen als druckbare HTML-Datei
- Alle Attribute, Fertigkeiten, Talente, Ausrüstung
- Zauber und Alchemie (wenn vorhanden)
Noch zu implementieren (Character Screen)
- Level-Up System: Stufenaufstieg mit Attributs-, Talent- und Fertigkeitenwahl
Equipment-Datenbank
- 5.482 Items aus Pathfinder 2e importiert
- Waffen mit Schaden, Schadentyp, Reichweite, Eigenschaften
- Rüstungen mit RK, DEX-Cap, Penalties
- Verbrauchsgüter und allgemeine Ausrüstung
- Durchsuchbar nach Name, Kategorie, Level, Eigenschaften
- API-Endpunkte:
/equipment,/equipment/categories,/equipment/weapons, etc.
Design-Prinzipien
- Mobile-First: Touch-optimiert mit 44px+ Touch-Targets
- Dark Mode: Primärfarbe #c26dbc (Magenta)
- Deutsch: Alle UI-Texte auf Deutsch
- Keine Emojis: Nur Lucide Icons
Environment-Variablen
Server (server/.env)
PORT=5000 # Server-Port
DATABASE_URL="postgresql://..." # PostgreSQL Connection String
JWT_SECRET="..." # JWT Signing Key
ANTHROPIC_API_KEY="..." # Claude API für Übersetzungen
Client (client/.env)
VITE_API_URL=http://localhost:5000/api # Muss mit Server PORT übereinstimmen
Wichtig: Die WebSocket-URL wird automatisch aus VITE_API_URL abgeleitet (ohne /api Suffix).
Beispiel-Dateien: server/.env.example und client/.env.example
Entwicklung
# Backend starten (Port 5000, konfigurierbar via PORT in .env)
cd server && npm run start:dev
# Frontend starten (Port 5173)
cd client && npm run dev
# Prisma Migrations (IMMER Migrations verwenden, NIEMALS db push!)
cd server && npm run db:migrate:dev # Neue Migration erstellen & anwenden
cd server && npm run db:migrate:deploy # Migrations in Produktion anwenden
cd server && npm run db:migrate:status # Status der Migrations prüfen
cd server && npm run db:migrate:reset # DB zurücksetzen (Dev only!)
# Prisma Sonstiges
cd server && npm run db:studio # DB Browser
cd server && npm run db:generate # Prisma Client generieren
cd server && npm run db:seed # Basis-Seed-Daten laden
cd server && npm run db:seed:equipment # Equipment-Datenbank laden