Files
ShadowrunCharSheet/CLAUDE.md
shahondin1624 3834c4fc8e Add CLAUDE.md with project guidance for Claude Code
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 11:11:03 +01:00

79 lines
3.9 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Build & Run Commands
| Platform | Command |
|----------|---------|
| Desktop | `./gradlew :desktopApp:run` |
| Desktop (hot reload) | `./gradlew :desktopApp:hotRun --auto` |
| Android APK | `./gradlew :androidApp:assembleDebug` |
| Web (JS) | `./gradlew :webApp:jsBrowserDevelopmentRun` |
| Web (WASM) | `./gradlew :webApp:wasmJsBrowserDevelopmentRun` |
| Web distribution | `./gradlew :webApp:composeCompatibilityBrowserDistribution` |
| iOS | Open `iosApp/iosApp.xcodeproj` in Xcode |
## Testing
Tests live in `sharedUI/src/commonTest/`. Run with:
```
./gradlew :sharedUI:allTests
```
Single test class:
```
./gradlew :sharedUI:jvmTest --tests "org.shahondin1624.ComposeTest"
```
Uses `androidx.compose.ui.test.runComposeUiTest` for Compose UI testing.
## Architecture
Kotlin Multiplatform project using Compose Multiplatform. All shared logic and UI lives in `sharedUI`; platform modules are thin entry points.
### Modules
- **sharedUI** — Shared business logic and Compose UI (targets: Android, JVM, JS, WASM, iOS)
- **androidApp** — Android entry point (`AppActivity`)
- **desktopApp** — Desktop JVM entry point (supports hot reload)
- **webApp** — Web entry point (JS + WASM targets)
- **iosApp** — iOS entry point (Xcode project, not in Gradle)
### Shared Code Layout (`sharedUI/src/commonMain/kotlin/org/shahondin1624/`)
- `App.kt` — Root composable. Scaffold with navigation drawer, top bar, theme toggle.
- `model/` — Domain model implementing Shadowrun 5e rules:
- `charactermodel/ShadowrunCharacter` — Top-level aggregate: CharacterData + Attributes + Talents + DamageMonitor
- `attributes/Attributes` — 8 core attributes + Edge. Calculates derived values (initiative, limits, composure, carry, etc.)
- `attributes/AttributeType` — Enum with per-attribute color coding
- `talents/` — 60+ predefined talents via `ProvidedTalentName`, sealed `TalentDefinition` with polymorphic serialization, custom talent support
- `modifier/``SRModifier<T>` interface for composable modifiers on attributes, talents, and dice rolls. `ModifierCache` provides LRU caching (max 5).
- `characterdata/CharacterData` — Name, metatype (Human/Elf/Dwarf/Ork/Troll), karma, nuyen, essence, etc.
- `charactermodel/DamageMonitor` — Stun/physical/overflow damage tracking derived from attributes
- `Defaults.kt``EXAMPLE_CHARACTER` used for development
- `Versionable` — Interface for schema versioning (current: "v0.1")
- `lib/functions/` — Dice rolling system (`DiceRoll`, `rollDice`, `countSuccesses`) and `DataLoader` (JSON serialization via kotlinx.serialization)
- `lib/components/` — Compose UI components:
- `charactermodel/attributespage/``AttributesPage` (grid layout), `Attribute` card, `Talent` card
- `settings/Settings` — Placeholder
- `theme/` — Material 3 theme with MaterialKolor seed color `#1D3557`, dark/light mode via `LocalThemeIsDark` CompositionLocal
### Key Patterns
- **Modifier system**: `SRModifier<T>.apply(value)` + `accumulateModifiers()` fold for dice roll modifications
- **Serialization**: All model classes are `@Serializable`. `DataLoader` provides `serialize`/`deserialize` for `ShadowrunCharacter`.
- **Platform callbacks**: `App(onThemeChanged)` lets platform entry points react to theme changes (e.g., status bar styling)
- **Compose resources**: Drawables, fonts, and strings in `sharedUI/src/commonMain/composeResources/`
## Key Dependencies
- **Compose Multiplatform** 1.9.0 — UI framework
- **kotlinx.serialization** — JSON serialization for all model types
- **MaterialKolor** — Dynamic Material 3 color scheme generation
- **KStore** — Multiplatform key-value persistence
- **Ktor** — HTTP client (platform-specific engines)
- **Coil** — Image loading
Version catalog: `gradle/libs.versions.toml`