From bb189583d89ccd7e3169286f13b01a7fb92797c5 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 28 Aug 2025 11:00:39 +0200 Subject: [PATCH] adds claude.md --- CLAUDE.md | 139 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..f81a6ab8 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,139 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +This is **Poker Analytics**, a comprehensive Android application for tracking and analyzing poker sessions. The app supports both cash games and tournaments, providing detailed statistics, reporting, and data visualization capabilities. + +### Key Features +- Session tracking (cash games and tournaments) +- Advanced filtering and reporting +- Bankroll management +- Hand history import and replay +- Statistical analysis and charting +- Data backup and export functionality +- Multi-currency support + +## Development Commands + +### Building the Project +```bash +./gradlew assembleStandardRelease # Build release APK +./gradlew assembleStandardDebug # Build debug APK +./gradlew build # Build all variants +``` + +### Running Tests +```bash +./gradlew test # Run unit tests +./gradlew connectedAndroidTest # Run instrumented tests (requires device/emulator) +./gradlew testStandardDebugUnitTest # Run specific unit tests +``` + +### Cleaning +```bash +./gradlew clean # Clean build artifacts +``` + +### Build Configuration +- **Target SDK**: 35 (Android 15) +- **Min SDK**: 23 (Android 6.0) +- **Build Tools**: 30.0.3 +- **Kotlin Version**: 1.9.24 +- **Realm Schema Version**: 14 + +## Architecture Overview + +### Package Structure +The main source code is organized under `app/src/main/java/net/pokeranalytics/android/`: + +#### Core Components +- **`model/`** - Data models and business logic + - `realm/` - Realm database models (Session, Bankroll, Result, etc.) + - `filter/` - Query system for filtering sessions + - `migrations/` - Database migration handling + - `handhistory/` - Hand history data structures + +- **`ui/`** - User interface components + - `activity/` - Main activities (HomeActivity, SessionActivity, etc.) + - `fragment/` - UI fragments organized by feature + - `adapter/` - RecyclerView adapters and data sources + - `modules/` - Feature-specific UI modules + +- **`calculus/`** - Statistics and calculation engine + - Core calculation logic for poker statistics + - Report generation system + - Performance tracking + +- **`util/`** - Utility classes + - `csv/` - CSV import/export functionality + - `billing/` - In-app purchase handling + - `extensions/` - Kotlin extension functions + +#### Key Classes +- **`Session`** (`model/realm/Session.kt`): Core session data model +- **`HomeActivity`** (`ui/activity/HomeActivity.kt`): Main app entry point with tab navigation +- **`PokerAnalyticsApplication`**: Application class handling initialization + +### Database Architecture +The app uses **Realm** database with these key entities: +- `Session` - Individual poker sessions +- `Bankroll` - Bankroll management +- `Result` - Session results and statistics +- `ComputableResult` - Pre-computed statistics for performance +- `Filter` - Saved filter configurations +- `HandHistory` - Hand-by-hand game data + +### UI Architecture +- **MVVM pattern** with Android Architecture Components +- **Fragment-based navigation** with bottom navigation tabs +- **Custom RecyclerView adapters** for data presentation +- **Material Design** components + +## Key Technologies + +### Core Dependencies +- **Realm Database** (10.15.1) - Local data storage +- **Kotlin Coroutines** - Asynchronous programming +- **Firebase Crashlytics** - Crash reporting and analytics +- **Material Design Components** - UI framework +- **MPAndroidChart** - Data visualization +- **CameraX** - Image capture functionality + +### Testing +- **JUnit** for unit testing +- **Android Instrumented Tests** for integration testing +- Test files located in `app/src/androidTest/` and `app/src/test/` + +## Development Guidelines + +### Working with Sessions +- Sessions are the core data model representing individual poker games +- Use `Session.newInstance()` to create new sessions properly +- Always call `computeStats()` after modifying session data +- Sessions can be in various states: PENDING, STARTED, PAUSED, ENDED + +### Database Operations +- Use Realm transactions for data modifications +- The app uses schema version 14 - increment when making schema changes +- Migration logic is in `PokerAnalyticsMigration.kt` + +### Testing Data +- Use `FakeDataManager.createFakeSessions()` for generating test data +- Seed data is available through the `Seed` class + +### Build Variants +- **standard** - Main production flavor +- Release builds are optimized and obfuscated with ProGuard + +## Performance Considerations +- Sessions use `ComputableResult` for pre-computed statistics +- Large datasets are handled with Realm's lazy loading +- Chart rendering is optimized for large data sets +- Background processing uses Kotlin Coroutines + +## Security & Privacy +- Sensitive data is encrypted in Realm database +- Crash logging excludes personal information +- Backup functionality includes data encryption \ No newline at end of file