# keziakdos/didutchdos architecture

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

- Interactive diagram: https://gitdiagram.com/keziakdos/didutchdos
- Repository: https://github.com/keziakdos/didutchdos

## Overview

DiDutch is a Flutter app for learning Dutch through a daily habit, Anki-derived cards, and progress from A1 to B1. Its documented user journey is to open the dashboard, study cards in a review session, and track progression or adjust goals and notifications in settings. The README identifies the app/navigation, data, and service responsibilities; source excerpts for the Dart runtime were not provided, so internal call wiring beyond those documented responsibilities is left out.

Main entry points: [`lib/app.dart`](https://github.com/keziakdos/didutchdos/blob/main/lib/app.dart) (App navigation), [`lib/main.dart`](https://github.com/keziakdos/didutchdos/blob/main/lib/main.dart) (Entry point), [`lib/features/dashboard/dashboard_page.dart`](https://github.com/keziakdos/didutchdos/blob/main/lib/features/dashboard/dashboard_page.dart) (Dashboard), [`lib/features/review/review_page.dart`](https://github.com/keziakdos/didutchdos/blob/main/lib/features/review/review_page.dart) (Review session)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_application["Application"]
  node_main["Entry point<br/>[main.dart]"]
  node_app["App navigation<br/>[app.dart]"]
end

subgraph group_learning["Learning experience"]
  node_dashboard["Dashboard"]
  node_review["Review session<br/>[review_page.dart]"]
  node_review_controller["Review controller"]
  node_settings["Settings<br/>[settings_page.dart]"]
end

subgraph group_services["Learning services"]
  node_anki_import["Anki import"]
  node_spaced_repetition["Spaced repetition<br/>[sm2_engine.dart]"]
  node_progression["Progression"]
  node_notifications["Notifications"]
end

subgraph group_data["Data layer"]
  node_repositories["Data repositories"]
  node_database[("SQLite database<br/>[app_database.dart]")]
  node_study_card["Study card<br/>[study_card.dart]"]
  node_card_type["Card type<br/>[card_type.dart]"]
  node_user_progress["User progress<br/>[user_progress.dart]"]
end

node_learner(("Learner"))

node_learner -->|"opens"| node_app
node_main -->|"starts"| node_app
node_app -->|"navigates"| node_dashboard
node_app -->|"navigates"| node_review
node_app -->|"navigates"| node_settings

click node_main "https://github.com/keziakdos/didutchdos/blob/main/lib/main.dart"
click node_app "https://github.com/keziakdos/didutchdos/blob/main/lib/app.dart"
click node_dashboard "https://github.com/keziakdos/didutchdos/blob/main/lib/features/dashboard/dashboard_page.dart"
click node_review "https://github.com/keziakdos/didutchdos/blob/main/lib/features/review/review_page.dart"
click node_review_controller "https://github.com/keziakdos/didutchdos/blob/main/lib/features/review/review_controller.dart"
click node_settings "https://github.com/keziakdos/didutchdos/blob/main/lib/features/settings/settings_page.dart"
click node_anki_import "https://github.com/keziakdos/didutchdos/blob/main/lib/services/anki_import/anki_import_service.dart"
click node_spaced_repetition "https://github.com/keziakdos/didutchdos/blob/main/lib/services/spaced_repetition/sm2_engine.dart"
click node_progression "https://github.com/keziakdos/didutchdos/blob/main/lib/services/progression/progression_service.dart"
click node_notifications "https://github.com/keziakdos/didutchdos/blob/main/lib/services/notifications/notification_service.dart"
click node_repositories "https://github.com/keziakdos/didutchdos/tree/main/lib/data/repositories"
click node_database "https://github.com/keziakdos/didutchdos/blob/main/lib/data/database/app_database.dart"
click node_study_card "https://github.com/keziakdos/didutchdos/blob/main/lib/data/models/study_card.dart"
click node_card_type "https://github.com/keziakdos/didutchdos/blob/main/lib/data/models/card_type.dart"
click node_user_progress "https://github.com/keziakdos/didutchdos/blob/main/lib/data/models/user_progress.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_main,node_app toneBlue
class node_dashboard,node_review,node_review_controller,node_settings toneAmber
class node_anki_import,node_spaced_repetition,node_progression,node_notifications toneMint
class node_repositories,node_database,node_study_card,node_card_type,node_user_progress toneRose
class node_learner toneIndigo
```

## Components

### Application

- [Entry point](https://github.com/keziakdos/didutchdos/blob/main/lib/main.dart): `lib/main.dart`
- [App navigation](https://github.com/keziakdos/didutchdos/blob/main/lib/app.dart): `lib/app.dart`

### Learning experience

- [Dashboard](https://github.com/keziakdos/didutchdos/blob/main/lib/features/dashboard/dashboard_page.dart): `lib/features/dashboard/dashboard_page.dart`
- [Review session](https://github.com/keziakdos/didutchdos/blob/main/lib/features/review/review_page.dart): `lib/features/review/review_page.dart`
- [Review controller](https://github.com/keziakdos/didutchdos/blob/main/lib/features/review/review_controller.dart): `lib/features/review/review_controller.dart`
- [Settings](https://github.com/keziakdos/didutchdos/blob/main/lib/features/settings/settings_page.dart): `lib/features/settings/settings_page.dart`

### Learning services

- [Anki import](https://github.com/keziakdos/didutchdos/blob/main/lib/services/anki_import/anki_import_service.dart): `lib/services/anki_import/anki_import_service.dart`
- [Spaced repetition](https://github.com/keziakdos/didutchdos/blob/main/lib/services/spaced_repetition/sm2_engine.dart): `lib/services/spaced_repetition/sm2_engine.dart`
- [Progression](https://github.com/keziakdos/didutchdos/blob/main/lib/services/progression/progression_service.dart): `lib/services/progression/progression_service.dart`
- [Notifications](https://github.com/keziakdos/didutchdos/blob/main/lib/services/notifications/notification_service.dart): `lib/services/notifications/notification_service.dart`

### Data layer

- [Data repositories](https://github.com/keziakdos/didutchdos/tree/main/lib/data/repositories): `lib/data/repositories`
- [SQLite database](https://github.com/keziakdos/didutchdos/blob/main/lib/data/database/app_database.dart): `lib/data/database/app_database.dart`
- [Study card](https://github.com/keziakdos/didutchdos/blob/main/lib/data/models/study_card.dart): `lib/data/models/study_card.dart`
- [Card type](https://github.com/keziakdos/didutchdos/blob/main/lib/data/models/card_type.dart): `lib/data/models/card_type.dart`
- [User progress](https://github.com/keziakdos/didutchdos/blob/main/lib/data/models/user_progress.dart): `lib/data/models/user_progress.dart`

### Other components

- **Learner**

## Connections

- Learner → App navigation: opens
- Entry point → App navigation: starts
- App navigation → Dashboard: navigates
- App navigation → Review session: navigates
- App navigation → Settings: navigates
