# sjunh812/ovalit architecture

> Architecture diagram of the GitHub repository sjunh812/ovalit, 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/sjunh812/ovalit
- Repository: https://github.com/sjunh812/ovalit

## Overview

Ovalit is a Valorant account and performance-tracking app: users link a Riot account, import match history, then explore match details, player profiles, weekly reports, and friends. Settings and onboarding round out the mobile experience. The tree shows matching client feature and repository modules, plus a Hono server with auth, Riot, content, friend, invite, and user routes. The README is empty and most implementation files were not sampled, so client-to-server wiring and unsampled feature internals are left unspecified.

Main entry points: [`composeApp/src/main/kotlin/com/ovalit/OvalitApp.kt`](https://github.com/sjunh812/ovalit/blob/main/composeApp/src/main/kotlin/com/ovalit/OvalitApp.kt) (App entry), [`server/src/app.ts`](https://github.com/sjunh812/ovalit/blob/main/server/src/app.ts) (HTTP API), [`server/src/routes/auth.ts`](https://github.com/sjunh812/ovalit/blob/main/server/src/routes/auth.ts) (Authentication routes), [`server/src/rso.ts`](https://github.com/sjunh812/ovalit/blob/main/server/src/rso.ts) (Riot sign-in)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mobile["Mobile app"]
  node_activity["App entry<br/>[OvalitApp.kt]"]
end

subgraph group_features["Player features"]
  node_onboarding["Onboarding and import"]
  node_matches["Match history and detail"]
  node_profile["Player profile"]
  node_reports["Weekly reports"]
  node_friends["Friends and rivals"]
  node_settings["Preferences and account"]
end

subgraph group_domain["Analytics and data"]
  node_repositories["Account and match repositories"]
  node_calculations["Match and report calculations"]
  node_preferences["User preferences store"]
end

subgraph group_server["API server"]
  node_api["HTTP API<br/>[app.ts]"]
  node_content["Content routes<br/>[content.ts]"]
  node_public["Public routes<br/>[public.ts]"]
  node_me["Account routes<br/>[me.ts]"]
  node_riotroute["Riot routes<br/>[riot.ts]"]
  node_friendsroute["Friend routes<br/>[friends.ts]"]
  node_invites["Invite routes<br/>[invites.ts]"]
end

subgraph group_identity["Identity and Riot"]
  node_auth["Authentication routes<br/>[auth.ts]"]
  node_riotidentity["Riot sign-in<br/>[rso.ts]"]
  node_users["User records<br/>[users.ts]"]
  node_sessions["Session handling<br/>[session.ts]"]
end

node_player(("Player"))
node_database[("Server database")]
node_riotservice["Riot services"]

node_player -->|"uses"| node_activity
node_activity --> node_onboarding
node_activity --> node_matches
node_activity --> node_profile
node_activity --> node_reports
node_activity --> node_friends
node_activity --> node_settings
node_activity -->|"reads theme"| node_preferences
node_api -->|"dispatches"| node_public
node_api -->|"dispatches"| node_content
node_api -->|"dispatches"| node_auth
node_api -->|"dispatches"| node_me
node_api -->|"dispatches"| node_riotroute
node_api -->|"dispatches"| node_friendsroute
node_api -->|"dispatches"| node_invites
node_auth -->|"reads account"| node_riotidentity
node_auth -->|"upserts user"| node_users
node_auth -->|"creates session"| node_sessions
node_auth -->|"reads and writes"| node_database
node_auth -->|"fetches identity"| node_riotservice
node_sessions -->|"reads and writes"| node_database
node_users -->|"reads and writes"| node_database
node_riotidentity -->|"authorizes account"| node_riotservice

click node_activity "https://github.com/sjunh812/ovalit/blob/main/composeApp/src/main/kotlin/com/ovalit/OvalitApp.kt"
click node_onboarding "https://github.com/sjunh812/ovalit/tree/main/shared/feature/onboarding/src/commonMain/kotlin/com/ovalit/feature/onboarding"
click node_matches "https://github.com/sjunh812/ovalit/tree/main/shared/feature/match/src/commonMain/kotlin/com/ovalit/feature/match"
click node_profile "https://github.com/sjunh812/ovalit/tree/main/shared/feature/profile/src/commonMain/kotlin/com/ovalit/feature/profile"
click node_reports "https://github.com/sjunh812/ovalit/tree/main/shared/feature/report/src/commonMain/kotlin/com/ovalit/feature/report"
click node_friends "https://github.com/sjunh812/ovalit/tree/main/shared/feature/friend/src/commonMain/kotlin/com/ovalit/feature/friend"
click node_settings "https://github.com/sjunh812/ovalit/tree/main/shared/feature/settings/src/commonMain/kotlin/com/ovalit/feature/settings"
click node_repositories "https://github.com/sjunh812/ovalit/tree/main/shared/core/data/src/commonMain/kotlin/com/ovalit/core/data"
click node_calculations "https://github.com/sjunh812/ovalit/tree/main/shared/core/model/src/commonMain/kotlin/com/ovalit/core/model"
click node_preferences "https://github.com/sjunh812/ovalit/blob/main/shared/core/data/src/commonMain/kotlin/com/ovalit/core/data/DataStoreUserPreferencesRepository.kt"
click node_api "https://github.com/sjunh812/ovalit/blob/main/server/src/app.ts"
click node_auth "https://github.com/sjunh812/ovalit/blob/main/server/src/routes/auth.ts"
click node_content "https://github.com/sjunh812/ovalit/blob/main/server/src/routes/content.ts"
click node_public "https://github.com/sjunh812/ovalit/blob/main/server/src/routes/public.ts"
click node_me "https://github.com/sjunh812/ovalit/blob/main/server/src/routes/me.ts"
click node_riotroute "https://github.com/sjunh812/ovalit/blob/main/server/src/routes/riot.ts"
click node_friendsroute "https://github.com/sjunh812/ovalit/blob/main/server/src/routes/friends.ts"
click node_invites "https://github.com/sjunh812/ovalit/blob/main/server/src/routes/invites.ts"
click node_riotidentity "https://github.com/sjunh812/ovalit/blob/main/server/src/rso.ts"
click node_users "https://github.com/sjunh812/ovalit/blob/main/server/src/users.ts"
click node_sessions "https://github.com/sjunh812/ovalit/blob/main/server/src/session.ts"

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_activity toneBlue
class node_onboarding,node_matches,node_profile,node_reports,node_friends,node_settings,node_database toneAmber
class node_repositories,node_calculations,node_preferences toneMint
class node_api,node_content,node_public,node_me,node_riotroute,node_friendsroute,node_invites toneRose
class node_auth,node_riotidentity,node_users,node_sessions,node_player,node_riotservice toneIndigo
```

## Components

### Mobile app

- [App entry](https://github.com/sjunh812/ovalit/blob/main/composeApp/src/main/kotlin/com/ovalit/OvalitApp.kt): `composeApp/src/main/kotlin/com/ovalit/OvalitApp.kt`

### Player features

- [Onboarding and import](https://github.com/sjunh812/ovalit/tree/main/shared/feature/onboarding/src/commonMain/kotlin/com/ovalit/feature/onboarding): `shared/feature/onboarding/src/commonMain/kotlin/com/ovalit/feature/onboarding`
- [Match history and detail](https://github.com/sjunh812/ovalit/tree/main/shared/feature/match/src/commonMain/kotlin/com/ovalit/feature/match): `shared/feature/match/src/commonMain/kotlin/com/ovalit/feature/match`
- [Player profile](https://github.com/sjunh812/ovalit/tree/main/shared/feature/profile/src/commonMain/kotlin/com/ovalit/feature/profile): `shared/feature/profile/src/commonMain/kotlin/com/ovalit/feature/profile`
- [Weekly reports](https://github.com/sjunh812/ovalit/tree/main/shared/feature/report/src/commonMain/kotlin/com/ovalit/feature/report): `shared/feature/report/src/commonMain/kotlin/com/ovalit/feature/report`
- [Friends and rivals](https://github.com/sjunh812/ovalit/tree/main/shared/feature/friend/src/commonMain/kotlin/com/ovalit/feature/friend): `shared/feature/friend/src/commonMain/kotlin/com/ovalit/feature/friend`
- [Preferences and account](https://github.com/sjunh812/ovalit/tree/main/shared/feature/settings/src/commonMain/kotlin/com/ovalit/feature/settings): `shared/feature/settings/src/commonMain/kotlin/com/ovalit/feature/settings`

### Analytics and data

- [Account and match repositories](https://github.com/sjunh812/ovalit/tree/main/shared/core/data/src/commonMain/kotlin/com/ovalit/core/data): `shared/core/data/src/commonMain/kotlin/com/ovalit/core/data`
- [Match and report calculations](https://github.com/sjunh812/ovalit/tree/main/shared/core/model/src/commonMain/kotlin/com/ovalit/core/model): `shared/core/model/src/commonMain/kotlin/com/ovalit/core/model`
- [User preferences store](https://github.com/sjunh812/ovalit/blob/main/shared/core/data/src/commonMain/kotlin/com/ovalit/core/data/DataStoreUserPreferencesRepository.kt): `shared/core/data/src/commonMain/kotlin/com/ovalit/core/data/DataStoreUserPreferencesRepository.kt`

### API server

- [HTTP API](https://github.com/sjunh812/ovalit/blob/main/server/src/app.ts): `server/src/app.ts`
- [Content routes](https://github.com/sjunh812/ovalit/blob/main/server/src/routes/content.ts): `server/src/routes/content.ts`
- [Public routes](https://github.com/sjunh812/ovalit/blob/main/server/src/routes/public.ts): `server/src/routes/public.ts`
- [Account routes](https://github.com/sjunh812/ovalit/blob/main/server/src/routes/me.ts): `server/src/routes/me.ts`
- [Riot routes](https://github.com/sjunh812/ovalit/blob/main/server/src/routes/riot.ts): `server/src/routes/riot.ts`
- [Friend routes](https://github.com/sjunh812/ovalit/blob/main/server/src/routes/friends.ts): `server/src/routes/friends.ts`
- [Invite routes](https://github.com/sjunh812/ovalit/blob/main/server/src/routes/invites.ts): `server/src/routes/invites.ts`

### Identity and Riot

- [Authentication routes](https://github.com/sjunh812/ovalit/blob/main/server/src/routes/auth.ts): `server/src/routes/auth.ts`
- [Riot sign-in](https://github.com/sjunh812/ovalit/blob/main/server/src/rso.ts): `server/src/rso.ts`
- [User records](https://github.com/sjunh812/ovalit/blob/main/server/src/users.ts): `server/src/users.ts`
- [Session handling](https://github.com/sjunh812/ovalit/blob/main/server/src/session.ts): `server/src/session.ts`

### Other components

- **Player**
- **Server database**
- **Riot services**

## Connections

- Player → App entry: uses
- App entry → Onboarding and import
- App entry → Match history and detail
- App entry → Player profile
- App entry → Weekly reports
- App entry → Friends and rivals
- App entry → Preferences and account
- App entry → User preferences store: reads theme
- HTTP API → Public routes: dispatches
- HTTP API → Content routes: dispatches
- HTTP API → Authentication routes: dispatches
- HTTP API → Account routes: dispatches
- HTTP API → Riot routes: dispatches
- HTTP API → Friend routes: dispatches
- HTTP API → Invite routes: dispatches
- Authentication routes → Riot sign-in: reads account
- Authentication routes → User records: upserts user
- Authentication routes → Session handling: creates session
- Authentication routes → Server database: reads and writes
- Authentication routes → Riot services: fetches identity
- Session handling → Server database: reads and writes
- User records → Server database: reads and writes
- Riot sign-in → Riot services: authorizes account
