# t4kina/anispark architecture

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

## Overview

AniSpark is a Flutter anime and manga tracker centered on AniList. Users discover or search titles, inspect details, track progress in their lists, and use social features such as feeds and profiles; account access syncs with AniList. The README also documents episode alerts, theme preferences, and multilingual support. The graph reflects those documented capabilities and the source tree; sampled excerpts mainly cover platform launchers, so internal screen-to-service wiring is represented cautiously.

Main entry points: [`lib/main.dart`](https://github.com/t4kina/anispark/blob/master/lib/main.dart) (App entry), [`lib/screens/home_screen.dart`](https://github.com/t4kina/anispark/blob/master/lib/screens/home_screen.dart) (Discover), [`lib/screens/search_screen.dart`](https://github.com/t4kina/anispark/blob/master/lib/screens/search_screen.dart) (Search), [`lib/screens/profile_screen.dart`](https://github.com/t4kina/anispark/blob/master/lib/screens/profile_screen.dart) (Profiles)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_app["App entry<br/>[main.dart]"]
  node_discover["Discover<br/>[home_screen.dart]"]
  node_search["Search<br/>[search_screen.dart]"]
  node_details["Title details<br/>[detail_screen.dart]"]
  node_lists["My lists"]
  node_feed["Activity feed<br/>[feed_screen.dart]"]
  node_profiles["Profiles"]
  node_user_profile["User profile"]
  node_characters["Characters"]
  node_settings_ui["Settings UI"]
end

subgraph group_state["App state"]
  node_anime_state["Anime list state"]
  node_settings_state["Settings state"]
  node_anime_model["Anime model<br/>[anime.dart]"]
end

subgraph group_integrations["Integrations"]
  node_anilist{{"AniList API"}}
  node_auth["Authentication<br/>[auth_service.dart]"]
  node_notifications["Episode alerts"]
  node_platform_notifications{{"Device notifications"}}
end

subgraph group_shared["Shared app services"]
  node_translations["Translations<br/>[translations.dart]"]
  node_web_bridge["Web bridge<br/>[web_bridge.dart]"]
end

node_user(("AniSpark user"))

node_user -->|"opens"| node_app
node_app -->|"shows"| node_discover
node_app -->|"shows"| node_search
node_app -->|"shows"| node_lists
node_app -->|"shows"| node_feed
node_app -->|"shows"| node_profiles
node_discover -->|"opens titles"| node_details
node_search -->|"opens titles"| node_details
node_details -->|"browses characters"| node_characters
node_profiles -->|"browses users"| node_user_profile
node_lists -->|"uses list state"| node_anime_state
node_anime_state -->|"holds entries"| node_anime_model
node_anime_state -->|"syncs lists"| node_anilist
node_discover -->|"requests discovery"| node_anilist
node_search -->|"searches titles"| node_anilist
node_feed -->|"loads activity"| node_anilist
node_user_profile -->|"loads profile data"| node_anilist
node_profiles -->|"starts login"| node_auth
node_auth -->|"authenticates"| node_anilist
node_settings_ui -->|"updates preferences"| node_settings_state
node_settings_state -->|"configures alerts"| node_notifications
node_notifications -->|"schedules alerts"| node_platform_notifications
node_app -->|"uses strings"| node_translations
node_auth -.->|"uses web flow"| node_web_bridge

click node_app "https://github.com/t4kina/anispark/blob/master/lib/main.dart"
click node_discover "https://github.com/t4kina/anispark/blob/master/lib/screens/home_screen.dart"
click node_search "https://github.com/t4kina/anispark/blob/master/lib/screens/search_screen.dart"
click node_details "https://github.com/t4kina/anispark/blob/master/lib/screens/detail_screen.dart"
click node_lists "https://github.com/t4kina/anispark/blob/master/lib/screens/my_list_screen.dart"
click node_feed "https://github.com/t4kina/anispark/blob/master/lib/screens/feed_screen.dart"
click node_profiles "https://github.com/t4kina/anispark/blob/master/lib/screens/profile_screen.dart"
click node_user_profile "https://github.com/t4kina/anispark/blob/master/lib/screens/user_profile_screen.dart"
click node_characters "https://github.com/t4kina/anispark/blob/master/lib/screens/character_screen.dart"
click node_settings_ui "https://github.com/t4kina/anispark/blob/master/lib/screens/settings_screen.dart"
click node_anime_state "https://github.com/t4kina/anispark/blob/master/lib/providers/anime_list_provider.dart"
click node_settings_state "https://github.com/t4kina/anispark/blob/master/lib/providers/settings_provider.dart"
click node_anime_model "https://github.com/t4kina/anispark/blob/master/lib/models/anime.dart"
click node_auth "https://github.com/t4kina/anispark/blob/master/lib/services/auth_service.dart"
click node_notifications "https://github.com/t4kina/anispark/blob/master/lib/services/notification_service.dart"
click node_translations "https://github.com/t4kina/anispark/blob/master/lib/utils/translations.dart"
click node_web_bridge "https://github.com/t4kina/anispark/blob/master/lib/services/web_bridge.dart"

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_app,node_discover,node_search,node_details,node_lists,node_feed,node_profiles,node_user_profile,node_characters,node_settings_ui,node_user toneBlue
class node_anime_state,node_settings_state,node_anime_model toneAmber
class node_anilist,node_auth,node_notifications,node_platform_notifications toneMint
class node_translations,node_web_bridge toneRose
```

## Components

### User experience

- [App entry](https://github.com/t4kina/anispark/blob/master/lib/main.dart): `lib/main.dart`
- [Discover](https://github.com/t4kina/anispark/blob/master/lib/screens/home_screen.dart): `lib/screens/home_screen.dart`
- [Search](https://github.com/t4kina/anispark/blob/master/lib/screens/search_screen.dart): `lib/screens/search_screen.dart`
- [Title details](https://github.com/t4kina/anispark/blob/master/lib/screens/detail_screen.dart): `lib/screens/detail_screen.dart`
- [My lists](https://github.com/t4kina/anispark/blob/master/lib/screens/my_list_screen.dart): `lib/screens/my_list_screen.dart`
- [Activity feed](https://github.com/t4kina/anispark/blob/master/lib/screens/feed_screen.dart): `lib/screens/feed_screen.dart`
- [Profiles](https://github.com/t4kina/anispark/blob/master/lib/screens/profile_screen.dart): `lib/screens/profile_screen.dart`
- [User profile](https://github.com/t4kina/anispark/blob/master/lib/screens/user_profile_screen.dart): `lib/screens/user_profile_screen.dart`
- [Characters](https://github.com/t4kina/anispark/blob/master/lib/screens/character_screen.dart): `lib/screens/character_screen.dart`
- [Settings UI](https://github.com/t4kina/anispark/blob/master/lib/screens/settings_screen.dart): `lib/screens/settings_screen.dart`

### App state

- [Anime list state](https://github.com/t4kina/anispark/blob/master/lib/providers/anime_list_provider.dart): `lib/providers/anime_list_provider.dart`
- [Settings state](https://github.com/t4kina/anispark/blob/master/lib/providers/settings_provider.dart): `lib/providers/settings_provider.dart`
- [Anime model](https://github.com/t4kina/anispark/blob/master/lib/models/anime.dart): `lib/models/anime.dart`

### Integrations

- **AniList API**
- [Authentication](https://github.com/t4kina/anispark/blob/master/lib/services/auth_service.dart): `lib/services/auth_service.dart`
- [Episode alerts](https://github.com/t4kina/anispark/blob/master/lib/services/notification_service.dart): `lib/services/notification_service.dart`
- **Device notifications**

### Shared app services

- [Translations](https://github.com/t4kina/anispark/blob/master/lib/utils/translations.dart): `lib/utils/translations.dart`
- [Web bridge](https://github.com/t4kina/anispark/blob/master/lib/services/web_bridge.dart): `lib/services/web_bridge.dart`

### Other components

- **AniSpark user**

## Connections

- AniSpark user → App entry: opens
- App entry → Discover: shows
- App entry → Search: shows
- App entry → My lists: shows
- App entry → Activity feed: shows
- App entry → Profiles: shows
- Discover → Title details: opens titles
- Search → Title details: opens titles
- Title details → Characters: browses characters
- Profiles → User profile: browses users
- My lists → Anime list state: uses list state
- Anime list state → Anime model: holds entries
- Anime list state → AniList API: syncs lists
- Discover → AniList API: requests discovery
- Search → AniList API: searches titles
- Activity feed → AniList API: loads activity
- User profile → AniList API: loads profile data
- Profiles → Authentication: starts login
- Authentication → AniList API: authenticates
- Settings UI → Settings state: updates preferences
- Settings state → Episode alerts: configures alerts
- Episode alerts → Device notifications: schedules alerts
- App entry → Translations: uses strings
- Authentication → Web bridge: uses web flow
