You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
app/src/main/java/
├── com/example/sudokuapp/
│ ├── data/ # Firebase, local storage, and data models
│ ├── screens/ # All Composable screens and navigation
│ └── ui/theme/ # Material3 theme
├── model/ # Core Sudoku logic (Board, Generator, Solver)
└── controller/ # Game controller
What I Learned & Challenges
Puzzle uniqueness — the biggest challenge was ensuring every generated puzzle has exactly one solution. Solved this by running a backtracking solver after each cell removal and only accepting the removal if the solution count stayed at exactly 1
Mixed language codebase — the core game logic is written in Java (model/) while the UI layer is in Kotlin with Jetpack Compose, I know Java from college classes, but have to spend time learning Kotlin and read docs to write the app.
State management — managing the game state (current board, puzzle board, timer, errors) across recompositions in Compose without losing data required thoughtful use of remember and LaunchedEffect
Guest vs authenticated users — designing a system that works seamlessly for both guests (local storage only) and logged-in users (local + Firestore sync) without duplicating logic
Navigation architecture — moving from passing arguments through nav routes to storing results in local storage simplified the navigation stack significantly and removed a class of bugs