Skip to content

Architecture

Modules

ModuleRole
:androidAppAndroid entry (MainActivity)
:desktopAppDesktop entry (main)
:wasmAppWeb (Wasm) entry
:composeAppShared UI + Nav3 (routes live here)
:staffComposeApp / :staffDesktopAppStaff console (JVM)
:core:domainModels, scoring, use cases
:core:dataRepositories, Metro, fakeMain/prodMain
:core:uiQuizTheme, tokens, shared components
:feature:quizHome / Quiz / Result
:feature:rankingRanking
:feature:staffStaff UI (JVM only)

Dependency direction

feature → core:ui, core:domain
data → domain
composeApp → feature
staffComposeApp → feature:staff

No reverse dependencies. Nav routes only in composeApp. Do not add main() / MainActivity to composeApp.

MVI per screen

  • XxxUiState / XxxIntent / XxxEvent / XxxViewModel
  • Business logic in domain use cases

Shared graph

Use only AppDependencies.shared, initialized once via initQuizAppGraph() (Metro).

Theming

Wrap with QuizTheme { }. Colors from QuizTokens / QuizColors — no raw Color(0x…) in features.