Tutorial 7
Build the Phase 2 catalogue app.
The final project proves you can build a small, complete app instead of isolated screens. Keep scope tight and polish the states.
Required screens
Home list
Detail
Favourites
Settings
Simple UI state
sealed interface CatalogueUiState {
data object Loading : CatalogueUiState
data class Success(
val businesses: List<Business>,
val query: String,
val category: String?
) : CatalogueUiState
data object Empty : CatalogueUiState
data class Error(val message: String) : CatalogueUiState
}This app is ready for Phase 3 when state, navigation, data, and error behavior are explicit.
Review checklist
- List, detail, favourites, and settings screens are reachable.
- Search and filters work together.
- Empty and error states are visible and useful.
- Favourite selection survives app restart.
- Call, map, and share actions fail gracefully when data is missing.
- README contains screenshots and a short architecture note.