chore: initialize project structure for Sprint 0
This commit is contained in:
192
CLAUDE.md
Normal file
192
CLAUDE.md
Normal file
@@ -0,0 +1,192 @@
|
||||
# CLAUDE.md — Cozypaw Hospital
|
||||
|
||||
> Dieses Dokument ist der Primär-Kontext für Claude Code. Beim Start lesen und die hier dokumentierten Konventionen einhalten.
|
||||
|
||||
## Projekt in einem Satz
|
||||
|
||||
Cozypaw Hospital ist ein werbefreies 2D-Sandbox-Spiel für Kinder (3+) im Stil von Yasa Pets Hospital — ein dreistöckiges Tier-Krankenhaus mit Häschen und Kätzchen als digitale Puppenstube, gebaut in Godot 4 für Android und iOS.
|
||||
|
||||
## Aktueller Status
|
||||
|
||||
- **Phase:** Sprint 0 (Setup)
|
||||
- **Repo:** git.race-cave.cloud/steven/Cozypaw-Hospital (self-hosted Gitea)
|
||||
- **Godot-Projekt:** noch nicht initialisiert
|
||||
- **Nächster Meilenstein:** Godot 4 installieren, Android-Export einrichten, Proof-of-Concept-Raum
|
||||
|
||||
Der vollständige 16-Wochen-Sprintplan liegt in `docs/development-plan.md`. Immer dort nachschlagen, bevor neue Features beschlossen werden.
|
||||
|
||||
## Tech-Stack (fix)
|
||||
|
||||
- **Engine:** Godot 4.x (keine Unity, keine Alternativen mehr zur Debatte)
|
||||
- **Sprache:** GDScript (statisch typisiert, wo möglich)
|
||||
- **Zielplattformen:** Android zuerst, iOS später
|
||||
- **VCS:** Git mit self-hosted Gitea
|
||||
- **Asset-Strategie:** Hybrid — Kinder malen Helden-Figuren, Freelancer macht Hintergründe
|
||||
|
||||
## Nicht-verhandelbare Produkt-Prinzipien
|
||||
|
||||
Diese Punkte sind Teil der Produkt-DNA. Niemals vorschlagen, davon abzuweichen — auch nicht "nur für Testing" oder "vorübergehend":
|
||||
|
||||
1. **Keine Werbung.** Keine Ad-SDKs, keine Rewarded Ads, kein AdMob, nichts.
|
||||
2. **Keine Datensammlung.** Keine Analytics (Firebase, GA, Sentry, etc.), kein Tracking, keine Telemetrie, keine Crash-Reports ohne Opt-in.
|
||||
3. **Offline-first.** Das Spiel muss vollständig ohne Internetverbindung funktionieren.
|
||||
4. **Keine In-App-Käufe.** Keine Premium-Features, keine Diamonds, kein Gacha.
|
||||
5. **Keine externen Links** ohne Parental Gate (derzeit: gar keine).
|
||||
6. **Keine "Gift"-Mechaniken** (im Original: grüne Flaschen, die Tiere krank machen). Alle Medikamente sind neutral/positiv.
|
||||
7. **Sandbox-Charakter.** Kein Scheitern, keine Zeitlimits, kein Scoring, keine Achievements.
|
||||
8. **COPPA/DSGVO-konform.** Play-Store-Data-Safety: "Keine Daten erhoben" — und das auch tatsächlich einhalten.
|
||||
|
||||
## Architektur-Überblick
|
||||
|
||||
### Scene-Hierarchie (geplant)
|
||||
|
||||
```
|
||||
Main (Node2D)
|
||||
├── Hospital (Node2D)
|
||||
│ ├── Floor0 — Empfang, GiftShop, Restaurant, Emergency
|
||||
│ ├── Floor1 — XRay, Pharmacy, Lab, PatientRooms
|
||||
│ └── Floor2 — Ultrasound, DeliveryRoom, Nursery
|
||||
├── Home (Node2D) — GardenParty
|
||||
├── Characters (Autoload)
|
||||
└── UI (CanvasLayer)
|
||||
```
|
||||
|
||||
### Core Systems (als Autoloads)
|
||||
|
||||
- `GameState` — globaler Zustand, Positionen aller Figuren/Objekte
|
||||
- `SaveManager` — JSON-Persistenz in `user://savegame.json`, Auto-Save nach jeder Interaktion
|
||||
- `AudioManager` — Musik- und SFX-Steuerung mit Cross-Fade zwischen Räumen
|
||||
- `InputManager` — Touch/Drag-Abstraktion
|
||||
|
||||
### Datenmodell-Konvention
|
||||
|
||||
Character- und Object-States immer als `Resource`-Subklassen (nicht als dict), damit Godot-Editor damit arbeiten kann und Serialisierung sauber läuft.
|
||||
|
||||
## Verzeichnisstruktur
|
||||
|
||||
```
|
||||
cozypaw-hospital/
|
||||
├── project.godot
|
||||
├── scenes/
|
||||
│ ├── main/
|
||||
│ ├── rooms/{floor0,floor1,floor2,home}/
|
||||
│ ├── characters/
|
||||
│ ├── objects/
|
||||
│ └── ui/
|
||||
├── scripts/
|
||||
│ ├── autoload/
|
||||
│ ├── characters/
|
||||
│ ├── objects/
|
||||
│ └── systems/
|
||||
├── assets/
|
||||
│ ├── sprites/{characters,rooms,objects,ui}/
|
||||
│ ├── audio/{music,sfx,voices}/
|
||||
│ └── fonts/
|
||||
├── localization/
|
||||
├── addons/
|
||||
├── docs/
|
||||
└── builds/ # nicht im Git
|
||||
```
|
||||
|
||||
## Konventionen
|
||||
|
||||
### Commits (Conventional Commits)
|
||||
|
||||
- `feat:` neues Feature
|
||||
- `fix:` Bugfix
|
||||
- `refactor:` Refactoring ohne Funktionsänderung
|
||||
- `assets:` Asset-Updates (Sprites, Sounds)
|
||||
- `docs:` Dokumentation
|
||||
- `chore:` Build, Config, Tooling
|
||||
|
||||
Mit Scope: `feat(reception): add waiting number system`
|
||||
|
||||
Commit-Messages in **Englisch** (auch wenn die Doku auf Deutsch ist).
|
||||
|
||||
### Branching
|
||||
|
||||
- `main` — stabiler Stand, releasebar
|
||||
- `develop` — aktive Entwicklung
|
||||
- `feature/<name>` — einzelne Features
|
||||
- `sprint/<nr>-<name>` — Sprint-Branches
|
||||
|
||||
Keine direkten Pushes auf `main`. Merges aus `develop` nur, wenn Build grün und auf echtem Tablet getestet.
|
||||
|
||||
### GDScript Code-Style
|
||||
|
||||
- **Typisierung:** Statische Typen überall wo möglich (`var x: int = 5`)
|
||||
- **Nomenklatur:** `snake_case` für Variablen/Funktionen, `PascalCase` für Klassen und Scenes, `SCREAMING_SNAKE_CASE` für Konstanten
|
||||
- **Signals:** Zukunftsform-Verben: `character_picked_up`, `room_entered`
|
||||
- **Private Member:** Unterstrich-Präfix: `_internal_state`
|
||||
|
||||
### Dokumentation
|
||||
|
||||
Stevens Präferenz (aus bisheriger Arbeit): **Keine Inline-Kommentare im Code.** Stattdessen konsolidierte Dokumentation als Header-Block am Dateianfang. Code soll selbsterklärend sein durch gute Namen. Diese Regel gilt auch für GDScript-Dateien.
|
||||
|
||||
Ausnahme: Komplexe mathematische Berechnungen oder nicht-offensichtliche Workarounds dürfen einen einzigen Kommentar haben, der das *Warum* erklärt (nicht das Was).
|
||||
|
||||
### Tests
|
||||
|
||||
Für ein Spiel dieser Größe keine Unit-Tests nötig. Stattdessen:
|
||||
- **Scene-Tests** manuell auf echtem Android-Tablet pro Sprint
|
||||
- **Smoke-Test-Checkliste** in `docs/smoke-tests.md` (wird im Laufe der Entwicklung gepflegt)
|
||||
- **Kinder als UAT** — wöchentliches Zeigen der Builds
|
||||
|
||||
## UI/UX-Regeln
|
||||
|
||||
- **Touch-Targets:** Minimum 48dp, besser 64dp
|
||||
- **Keine Text-UI** für Spiel-Interaktionen (Kinder unter 6 Jahren lesen nicht). Icons, Symbole, Farben.
|
||||
- **Zurück-Button** immer sichtbar, groß und an festem Platz
|
||||
- **Musik-Default:** 60%, nicht 100%
|
||||
- **Idle-Animationen:** Jede Figur atmet/blinzelt auch im Stand
|
||||
- **Sound-Feedback** für jede Interaktion (Ploppen, Quietschen, etc.)
|
||||
|
||||
## Out of Scope (bewusst nicht gemacht)
|
||||
|
||||
- ❌ Multiplayer, Online-Features, Cloud-Saves
|
||||
- ❌ Prozedurale Generierung
|
||||
- ❌ Physik-Engine (nicht nötig für Puppenhaus-Interaktionen)
|
||||
- ❌ Character-Editor / Customization
|
||||
- ❌ Level-System, Achievements, Scoring
|
||||
- ❌ Tutorial (außer dezenter Hinweis beim allerersten Start)
|
||||
- ❌ Rechtschreibung/Text-Eingabe durch Kinder
|
||||
|
||||
## Wie Claude Code arbeiten soll
|
||||
|
||||
### Proaktiv sein
|
||||
- Bei Godot-spezifischen Fragen: Godot-4-Docs konsultieren, nicht Godot-3-Patterns nutzen (Syntax hat sich geändert).
|
||||
- Bei neuen Scenes: An der oben definierten Verzeichnisstruktur orientieren.
|
||||
- Code immer mit statischen Typen schreiben.
|
||||
|
||||
### Keine Überraschungen
|
||||
- Keine neuen Dependencies / Addons hinzufügen ohne explizite Rücksprache.
|
||||
- Keine Änderungen am `.gitignore`, `README.md` oder dieser Datei ohne explizite Aufforderung.
|
||||
- Keine automatischen Commits. Stevens Workflow: Er committed selbst nach Review.
|
||||
|
||||
### Bei Unsicherheit nachfragen
|
||||
- Wenn unklar, ob ein Feature in den Sandbox-Charakter passt → fragen.
|
||||
- Wenn unklar, wie etwas visuell/interaktiv funktionieren soll → fragen, nicht raten.
|
||||
|
||||
### Sprach-Konvention
|
||||
- **Code & Commits:** Englisch
|
||||
- **Dokumentation & Gespräch:** Deutsch
|
||||
- **Spiel-Inhalte (UI, ggf. Texte):** Später lokalisiert — primär Deutsch, dann Englisch
|
||||
|
||||
## Referenz-Dokumente
|
||||
|
||||
- `docs/development-plan.md` — 16-Wochen-Sprintplan mit Details
|
||||
- `README.md` — öffentliche Projektbeschreibung
|
||||
- `docs/` — alle weiteren Design-Docs (werden im Laufe der Sprints ergänzt)
|
||||
|
||||
## Kontext zum Entwickler (Steven)
|
||||
|
||||
- Java-Entwickler, kommt aus dem Backend/Enterprise-Umfeld
|
||||
- Präferiert clean, concise technical work — keine Verbose-Erklärungen
|
||||
- Kommuniziert primär auf Deutsch
|
||||
- Baut das Spiel für seine eigenen Kinder (nicht für einen kommerziellen Launch)
|
||||
- Hat parallel laufende Projekte (All-in Creative Print, RaceCave) — dieses Projekt ist Abendbeschäftigung, nicht Vollzeit
|
||||
- Arbeitet gerne mit klaren Conventions und durchdachter Struktur statt Ad-hoc-Lösungen
|
||||
|
||||
## Versions-Log dieser Datei
|
||||
|
||||
- 2026-04-17: Initiale Version, Sprint 0 gestartet
|
||||
Reference in New Issue
Block a user