Android application that interacts with the Discogs API to search for artists, display detailed information, and navigate the artist’s releases.
- Android Studio (latest stable)
- JDK 17
- A Discogs API key and secret from your Discogs account
Create (or update) a local.properties file in the project root with:
DISCOGS_TOKEN=your_discogs_token
The data module reads this value and exposes it as a BuildConfig field (DISCOGS_TOKEN) during build time.
You can also provide this value as a Gradle property (for CI), but
local.propertiesis the recommended local setup.
- Sync the project in Android Studio
- Run the
appconfiguration on an emulator or physical device
The project was developed with an incremental workflow:
- Understand the Discogs integration requirements (artist search, details, and releases).
- Model domain entities and use cases first to keep business logic independent.
- Implement the data layer (Retrofit service, response models, mappers, repository implementation).
- Build presentation features on top of use cases with unidirectional state/effect handling.
- Validate code quality continuously using static analysis and formatting checks.
This process helps isolate concerns early, reduces coupling, and makes each layer easier to test and evolve.
The app follows a multi-module clean architecture style with clear separation of concerns:
domain: pure business layer (models, repository contracts, use cases)data: implementation details (network service, DTOs, mappers, repository implementation)app: UI and presentation (Compose screens, navigation, view models, paging)
- Maintainability: each module has a focused responsibility.
- Testability: domain logic remains independent from Android/framework classes.
- Scalability: new features can be added by extending use cases/repositories without tightly coupling UI and API code.
- Replaceability: data sources or UI components can evolve with minimal impact on business rules.
Run the command below once after cloning to enable repository-managed hooks:
./gradlew installGitHooksAfter hooks are installed, every git push runs ktlintCheck and detekt. Pushes are blocked when either task reports violations.