NumPairs is a native Android puzzle game inspired by arithmetic grid challenges.
The project is being built iteratively, starting with a small playable prototype and expanding later with stronger gameplay rules, better presentation, and more game modes.
Historical snapshots: prd-v0.md, prd-v1.md
Canonical product reference: prd-v2.md
- Kotlin
- Jetpack Compose
- Gradle Kotlin DSL
- Android Studio
The puzzle core uses a small domain layer guided by the project's ubiquitous language and DDD-inspired modeling.
Current core concepts:
PuzzleBoardTileExpressionOperatorStrip
app/
├── src/main/java/org/cescfe/numpairs/
│ ├── MainActivity.kt
│ ├── data/puzzle/seed/
│ ├── domain/puzzle/
│ ├── feature/game/
│ │ ├── GameRoute.kt
│ │ ├── presentation/
│ │ └── ui/
│ │ └── components/
│ └── ui/
│ ├── navigation/
│ └── theme/
docs/
├── product/
├── technical/adr/
├── game-rules.md
└── ubiquitous-language.md
Current responsibilities are split as follows:
data/puzzle/seed: handcrafted puzzle data used by the current baseline and future tutorial-mode foundation.domain/puzzle: puzzle rules, validation, assignments, and core domain types.feature/game: the Game feature entry point plus itspresentationanduisubpackages.feature/game/ui/components: Game-specific Compose building blocks such as tiles and chips.ui/navigationandui/theme: app-level navigation wiring and shared theming.
- Canonical PRD: prd-v2.md
- Product Requirements Documents:
docs/product/prd/ - Product roadmap: roadmap.md
- UX decisions:
docs/product/ux-decisions.md - Architectural Decision Records:
docs/technical/adr/ - Game rules:
docs/game-rules.md - Ubiquitous Language:
docs/ubiquitous-language.md
- Open the project in Android Studio
- Sync Gradle
- Run on emulator or Android device
# Run unit tests
./gradlew testDebugUnitTest
# Run instrumented UI tests on a connected emulator/device
./gradlew connectedDebugAndroidTest# Check all formatting
./gradlew spotlessCheck
# Apply formatting
./gradlew spotlessApply
# Run all quality checks
./gradlew checkMIT License