GameCollection_Demo.webm
Game Collection is an Android app that leverages the IGDB API for game metadata and the Twitch API for authentication (client-credentials access tokens required by IGDB). Users browse the IGDB catalog: they pick a platform, explore a filterable list, open rich game details, and save titles to a personal collection stored locally with Room.
To compile this project, add your Twitch developer Client ID and Client Secret (the same credentials you use for IGDB API access) to a file named keys.properties at the root of the repository:
# Twitch / IGDB API credentials
twitch.client.id=<INSERT_CLIENT_ID>
twitch.client.secret=<INSERT_CLIENT_SECRET>The app was built with Cursor using agentic AI workflows (Composer 2 Fast in Plan mode). The goal was to show that a small, production-style Android app—modularized, test-aware, and aligned with common architecture guidance—can be delivered through AI-assisted development without cutting corners on structure or verification.
The project uses AndroidBooster as a starting point for modular Gradle layout, shared patterns, and conventions. From that base, GameCollection focuses on Clean Architecture (domain / data / presentation), MVI-style contracts where appropriate, Hilt for dependency injection, and Jetpack Compose for UI. Claude skills shipped with AndroidBooster were used as additional context while generating and refining code.
| Layer | Role |
|---|---|
| app | Compose UI, navigation, ViewModels, Hilt entry points |
| core:domain | Entities, repository interfaces, use cases (pure Kotlin) |
| core:data | IGDB + Twitch auth, Retrofit/Moshi, repository implementations, paging |
| core:database | Room database and DAOs for owned games |
| core:architecture | Shared MVI base types (intents, state, events) |
| core:common | Cross-cutting Android bindings (e.g. system services) via Hilt |
API credentials are wired at compile time; see Instructions above.
Listed below are the libraries this app actually builds on (runtime behavior, core:* modules, and current unit tests). See gradle/libs.versions.toml and each module’s build.gradle.kts for the full Gradle graph.
The app module still declares some unused artifacts (for example WorkManager, Espresso, Robolectric, Mockito, Arch Core testing, and AndroidX Test runner/rules) that are not referenced by source today; they are omitted here.
- Core KTX — Kotlin extensions for Android APIs
- Material Components — Material widgets alongside Compose
- Lifecycle —
lifecycle-runtime-ktx,lifecycle-viewmodel-ktx,lifecycle-common,lifecycle-viewmodel-compose - Navigation —
navigation-compose - Paging —
paging-runtime-ktx,paging-compose(IGDB game list)
- Compose BOM — Aligned Compose versions
- Material 3
- Activity Compose —
ComponentActivity+setContent - Tooling —
ui-tooling,ui-tooling-preview - Material Icons Extended
- Hilt —
hilt-androidwith KSP (hilt-android-compiler,hilt-compiler) - Hilt Navigation Compose
- Coil 3 —
coil,coil-compose,coil-svg,coil-network-okhttp
- Timber — Debug vs release logging
- OkHttp — Client BOM, core, logging interceptor
- Retrofit — IGDB and Twitch token API
- Moshi — JSON (
moshi,moshi-kotlin, Retrofit Moshi converter)
- Room —
room-runtime,room-ktx, KSProom-compiler;room-testingfor database unit tests
- Kotlinx Coroutines —
kotlinx-coroutines-android(Android modules),kotlinx-coroutines-core(domain),kotlinx-coroutines-test(tests)
- javax.inject — Annotations in the domain module
- LeakCanary — Debug-only leak detection
- JUnit 4
- Kotlinx Coroutines Test —
runTest, test dispatchers - Turbine —
Flowassertions in domain tests
See LICENSE (Apache License 2.0).