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.