koin https://youtu.be/pxley4ciBzU?si=S6vSmEwUuSx0TKc3
https://github.com/BoltUIX/compose-mvi-2025
wheelie bins https://sulo.com.au/
https://wastenothing.co.nz/media/rlkp1t3i/recycling-bin.svg
screenshots of screens https://addrom.com/wp-content/uploads/2024/09/Set-Up-and-Use-Google-TV-Streamer-5-1024x576.webp
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT4g_oGZUUgK0yzTYCkq6So_OV3CJ59NbfoFQ&usqp=CAU
https://developer.android.com/design/ui/tv/guides/components/lists
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*gBzWx8v40fwoN0efIKs1RQ.png
ideas
https://github.com/UmairKhalid786/ComposeTv
ideal look
https://developer.android.com/design/ui/tv/guides/components/tabs
nav3 https://medium.com/@dayanand1531/navigation-3-jetpack-compose-android-a14beef1c239
to get official libraries and versions
https://developer.android.com/jetpack/androidx/releases/navigation3
https://central.sonatype.com/search?name=ktor-client-core
https://developer.android.com/develop/ui/compose/performance/bestpractices
Use Surface instead of Box as top-level composable.
setContent {
HelloWorldTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
App(noteId = noteId, noteType = noteType)
}
}
}
trailing lambdas, if the last argument is a lambda(in jetpack compose most layout objects have the last argument called content which is a lambda)
https://developer.android.com/develop/ui/compose/kotlin
https://developer.android.com/develop/ui/compose/layering
https://developer.android.com/develop/ui/compose/state
state hoisting
https://developer.android.com/develop/ui/compose/state
viewmodel
https://developer.android.com/develop/ui/compose/architecture