# thisissadeghi/kickoff26 architecture

> Architecture diagram of the GitHub repository thisissadeghi/kickoff26, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/thisissadeghi/kickoff26
- Repository: https://github.com/thisissadeghi/kickoff26

## Overview

Kickoff26 is a shared Kotlin Multiplatform World Cup companion. Users navigate Today, Matches, Groups, Teams, and Settings; feature repositories assemble tournament data into the daily digest, filtered fixtures/bracket, standings, roster, and preferences. The README documents the live tournament API and shared favorites; sampled repository code confirms those data dependencies and time-zone conversion. UI-to-view-model and feature navigation wiring is represented at module entry points; implementation details not present in the excerpts are not expanded.

Main entry points: [`composeApp/src/commonMain/kotlin/thisissadeghi/kickoff/App.kt`](https://github.com/thisissadeghi/kickoff26/blob/master/composeApp/src/commonMain/kotlin/thisissadeghi/kickoff/App.kt) (App navigation), [`core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/remote/datasource/TournamentRemoteDataSourceImpl.kt`](https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/remote/datasource/TournamentRemoteDataSourceImpl.kt) (Tournament data source), [`feature/today/src/commonMain/kotlin/thisissadeghi/kickoff/today/data/repository/TodayRepositoryImpl.kt`](https://github.com/thisissadeghi/kickoff26/blob/master/feature/today/src/commonMain/kotlin/thisissadeghi/kickoff/today/data/repository/TodayRepositoryImpl.kt) (Today assembly), [`core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/timezone/TimeZoneRepositoryImpl.kt`](https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/timezone/TimeZoneRepositoryImpl.kt) (Time-zone state)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App shell"]
  node_shell["App navigation<br/>[App.kt]"]
end

subgraph group_tournament["Tournament views"]
  node_today["Today digest<br/>[TodayViewModel.kt]"]
  node_todayrepo["Today assembly"]
  node_matches["Matches browser"]
  node_matchesrepo["Fixtures and bracket"]
  node_groups["Group standings<br/>[GroupsViewModel.kt]"]
  node_groupsrepo["Standings assembly"]
  node_teams["Team roster<br/>[TeamsViewModel.kt]"]
  node_teamsrepo["Team grouping"]
end

subgraph group_preferences["Preferences"]
  node_settings["App settings"]
  node_settingsrepo["Settings storage"]
end

subgraph group_data["Data services"]
  node_favorites["Favorite teams"]
  node_favstore["Favorites local source"]
  node_timezone["Time-zone state"]
  node_remote["Tournament data source"]
  node_http["Ktor API client<br/>[ApiClient.kt]"]
  node_prefs[("Preferences manager")]
end

subgraph group_ui["Shared UI"]
  node_design["Compose design system<br/>[XTheme.kt]"]
end

node_user(("App user"))
node_api{{"World Cup API"}}

node_user -->|"opens"| node_shell
node_shell -->|"navigates"| node_today
node_shell -->|"navigates"| node_matches
node_shell -->|"navigates"| node_groups
node_shell -->|"navigates"| node_teams
node_shell -->|"navigates"| node_settings
node_today -->|"requests digest"| node_todayrepo
node_matches -->|"requests fixtures"| node_matchesrepo
node_groups -->|"requests standings"| node_groupsrepo
node_teams -->|"requests roster"| node_teamsrepo
node_settings -->|"updates preferences"| node_settingsrepo
node_todayrepo -->|"loads tournament data"| node_remote
node_matchesrepo -->|"loads tournament data"| node_remote
node_groupsrepo -->|"loads tournament data"| node_remote
node_teamsrepo -->|"loads tournament data"| node_remote
node_remote -->|"makes requests"| node_http
node_http -->|"fetches data"| node_api
node_todayrepo -->|"reads followed teams"| node_favorites
node_teamsrepo -->|"reads and toggles"| node_favorites
node_favorites -->|"persists favorites"| node_favstore
node_todayrepo -->|"reads time zone"| node_timezone
node_matchesrepo -->|"reads time zone"| node_timezone
node_groupsrepo -->|"reads time zone"| node_timezone
node_settingsrepo -->|"sets time zone"| node_timezone
node_settingsrepo -->|"persists settings"| node_prefs
node_shell -->|"renders with"| node_design

click node_shell "https://github.com/thisissadeghi/kickoff26/blob/master/composeApp/src/commonMain/kotlin/thisissadeghi/kickoff/App.kt"
click node_today "https://github.com/thisissadeghi/kickoff26/blob/master/feature/today/src/commonMain/kotlin/thisissadeghi/kickoff/today/presentation/TodayViewModel.kt"
click node_todayrepo "https://github.com/thisissadeghi/kickoff26/blob/master/feature/today/src/commonMain/kotlin/thisissadeghi/kickoff/today/data/repository/TodayRepositoryImpl.kt"
click node_matches "https://github.com/thisissadeghi/kickoff26/blob/master/feature/matches/src/commonMain/kotlin/thisissadeghi/kickoff/matches/presentation/MatchesViewModel.kt"
click node_matchesrepo "https://github.com/thisissadeghi/kickoff26/blob/master/feature/matches/src/commonMain/kotlin/thisissadeghi/kickoff/matches/data/repository/MatchesRepositoryImpl.kt"
click node_groups "https://github.com/thisissadeghi/kickoff26/blob/master/feature/groups/src/commonMain/kotlin/thisissadeghi/kickoff/groups/presentation/GroupsViewModel.kt"
click node_groupsrepo "https://github.com/thisissadeghi/kickoff26/blob/master/feature/groups/src/commonMain/kotlin/thisissadeghi/kickoff/groups/data/repository/GroupsRepositoryImpl.kt"
click node_teams "https://github.com/thisissadeghi/kickoff26/blob/master/feature/teams/src/commonMain/kotlin/thisissadeghi/kickoff/teams/presentation/TeamsViewModel.kt"
click node_teamsrepo "https://github.com/thisissadeghi/kickoff26/blob/master/feature/teams/src/commonMain/kotlin/thisissadeghi/kickoff/teams/data/repository/TeamsRepositoryImpl.kt"
click node_settings "https://github.com/thisissadeghi/kickoff26/blob/master/feature/settings/src/commonMain/kotlin/thisissadeghi/kickoff/settings/presentation/SettingsViewModel.kt"
click node_settingsrepo "https://github.com/thisissadeghi/kickoff26/blob/master/feature/settings/src/commonMain/kotlin/thisissadeghi/kickoff/settings/data/repository/SettingsRepositoryImpl.kt"
click node_favorites "https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/repository/favorites/FavoriteTeamsRepositoryImpl.kt"
click node_favstore "https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/datasource/local/favorites/FavoriteTeamsLocalDataSourceImpl.kt"
click node_timezone "https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/timezone/TimeZoneRepositoryImpl.kt"
click node_remote "https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/remote/datasource/TournamentRemoteDataSourceImpl.kt"
click node_http "https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/remote/network/ktor/ApiClient.kt"
click node_prefs "https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/local/pref/PreferencesManager.kt"
click node_design "https://github.com/thisissadeghi/kickoff26/blob/master/core/designsystem/src/commonMain/kotlin/thisissadeghi/kickoff/designsystem/XTheme.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_shell,node_user toneBlue
class node_today,node_todayrepo,node_matches,node_matchesrepo,node_groups,node_groupsrepo,node_teams,node_teamsrepo toneAmber
class node_settings,node_settingsrepo,node_api toneMint
class node_favorites,node_favstore,node_timezone,node_remote,node_http,node_prefs toneRose
class node_design toneIndigo
```

## Components

### App shell

- [App navigation](https://github.com/thisissadeghi/kickoff26/blob/master/composeApp/src/commonMain/kotlin/thisissadeghi/kickoff/App.kt): `composeApp/src/commonMain/kotlin/thisissadeghi/kickoff/App.kt`

### Tournament views

- [Today digest](https://github.com/thisissadeghi/kickoff26/blob/master/feature/today/src/commonMain/kotlin/thisissadeghi/kickoff/today/presentation/TodayViewModel.kt): `feature/today/src/commonMain/kotlin/thisissadeghi/kickoff/today/presentation/TodayViewModel.kt`
- [Today assembly](https://github.com/thisissadeghi/kickoff26/blob/master/feature/today/src/commonMain/kotlin/thisissadeghi/kickoff/today/data/repository/TodayRepositoryImpl.kt): `feature/today/src/commonMain/kotlin/thisissadeghi/kickoff/today/data/repository/TodayRepositoryImpl.kt`
- [Matches browser](https://github.com/thisissadeghi/kickoff26/blob/master/feature/matches/src/commonMain/kotlin/thisissadeghi/kickoff/matches/presentation/MatchesViewModel.kt): `feature/matches/src/commonMain/kotlin/thisissadeghi/kickoff/matches/presentation/MatchesViewModel.kt`
- [Fixtures and bracket](https://github.com/thisissadeghi/kickoff26/blob/master/feature/matches/src/commonMain/kotlin/thisissadeghi/kickoff/matches/data/repository/MatchesRepositoryImpl.kt): `feature/matches/src/commonMain/kotlin/thisissadeghi/kickoff/matches/data/repository/MatchesRepositoryImpl.kt`
- [Group standings](https://github.com/thisissadeghi/kickoff26/blob/master/feature/groups/src/commonMain/kotlin/thisissadeghi/kickoff/groups/presentation/GroupsViewModel.kt): `feature/groups/src/commonMain/kotlin/thisissadeghi/kickoff/groups/presentation/GroupsViewModel.kt`
- [Standings assembly](https://github.com/thisissadeghi/kickoff26/blob/master/feature/groups/src/commonMain/kotlin/thisissadeghi/kickoff/groups/data/repository/GroupsRepositoryImpl.kt): `feature/groups/src/commonMain/kotlin/thisissadeghi/kickoff/groups/data/repository/GroupsRepositoryImpl.kt`
- [Team roster](https://github.com/thisissadeghi/kickoff26/blob/master/feature/teams/src/commonMain/kotlin/thisissadeghi/kickoff/teams/presentation/TeamsViewModel.kt): `feature/teams/src/commonMain/kotlin/thisissadeghi/kickoff/teams/presentation/TeamsViewModel.kt`
- [Team grouping](https://github.com/thisissadeghi/kickoff26/blob/master/feature/teams/src/commonMain/kotlin/thisissadeghi/kickoff/teams/data/repository/TeamsRepositoryImpl.kt): `feature/teams/src/commonMain/kotlin/thisissadeghi/kickoff/teams/data/repository/TeamsRepositoryImpl.kt`

### Preferences

- [App settings](https://github.com/thisissadeghi/kickoff26/blob/master/feature/settings/src/commonMain/kotlin/thisissadeghi/kickoff/settings/presentation/SettingsViewModel.kt): `feature/settings/src/commonMain/kotlin/thisissadeghi/kickoff/settings/presentation/SettingsViewModel.kt`
- [Settings storage](https://github.com/thisissadeghi/kickoff26/blob/master/feature/settings/src/commonMain/kotlin/thisissadeghi/kickoff/settings/data/repository/SettingsRepositoryImpl.kt): `feature/settings/src/commonMain/kotlin/thisissadeghi/kickoff/settings/data/repository/SettingsRepositoryImpl.kt`

### Data services

- [Favorite teams](https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/repository/favorites/FavoriteTeamsRepositoryImpl.kt): `core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/repository/favorites/FavoriteTeamsRepositoryImpl.kt`
- [Favorites local source](https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/datasource/local/favorites/FavoriteTeamsLocalDataSourceImpl.kt): `core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/datasource/local/favorites/FavoriteTeamsLocalDataSourceImpl.kt`
- [Time-zone state](https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/timezone/TimeZoneRepositoryImpl.kt): `core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/timezone/TimeZoneRepositoryImpl.kt`
- [Tournament data source](https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/remote/datasource/TournamentRemoteDataSourceImpl.kt): `core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/app/remote/datasource/TournamentRemoteDataSourceImpl.kt`
- [Ktor API client](https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/remote/network/ktor/ApiClient.kt): `core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/remote/network/ktor/ApiClient.kt`
- [Preferences manager](https://github.com/thisissadeghi/kickoff26/blob/master/core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/local/pref/PreferencesManager.kt): `core/data/src/commonMain/kotlin/thisissadeghi/kickoff/data/local/pref/PreferencesManager.kt`

### Shared UI

- [Compose design system](https://github.com/thisissadeghi/kickoff26/blob/master/core/designsystem/src/commonMain/kotlin/thisissadeghi/kickoff/designsystem/XTheme.kt): `core/designsystem/src/commonMain/kotlin/thisissadeghi/kickoff/designsystem/XTheme.kt`

### Other components

- **App user**
- **World Cup API**

## Connections

- App user → App navigation: opens
- App navigation → Today digest: navigates
- App navigation → Matches browser: navigates
- App navigation → Group standings: navigates
- App navigation → Team roster: navigates
- App navigation → App settings: navigates
- Today digest → Today assembly: requests digest
- Matches browser → Fixtures and bracket: requests fixtures
- Group standings → Standings assembly: requests standings
- Team roster → Team grouping: requests roster
- App settings → Settings storage: updates preferences
- Today assembly → Tournament data source: loads tournament data
- Fixtures and bracket → Tournament data source: loads tournament data
- Standings assembly → Tournament data source: loads tournament data
- Team grouping → Tournament data source: loads tournament data
- Tournament data source → Ktor API client: makes requests
- Ktor API client → World Cup API: fetches data
- Today assembly → Favorite teams: reads followed teams
- Team grouping → Favorite teams: reads and toggles
- Favorite teams → Favorites local source: persists favorites
- Today assembly → Time-zone state: reads time zone
- Fixtures and bracket → Time-zone state: reads time zone
- Standings assembly → Time-zone state: reads time zone
- Settings storage → Time-zone state: sets time zone
- Settings storage → Preferences manager: persists settings
- App navigation → Compose design system: renders with
