# sethan8r/grammar8r architecture

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

- Interactive diagram: https://gitdiagram.com/sethan8r/grammar8r
- Repository: https://github.com/sethan8r/grammar8r

## Overview

Grammar8r is an Android grammar-learning app: users browse a theory topic and microtopic, study cards, start exercises, and reach a completion summary; the app also exposes practice, statistics, theory search, and AI clarification/usage-limit screens. Theory and exercise content is packaged locally, while mutable learning progress is stored separately. The sampled theory repository explicitly combines content and progress for theory views. README content was empty, and several runtime modules were not sampled, so their internal wiring is not inferred.

Main entry points: [`grammar-app-android/src/main/java/dev/sethan8r/grammar/app/MainActivity.kt`](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/MainActivity.kt) (Main activity), [`grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/exercise/ExerciseSessionScreen.kt`](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/exercise/ExerciseSessionScreen.kt) (Exercise session), [`grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/repository/TheoryRepositoryImpl.kt`](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/repository/TheoryRepositoryImpl.kt) (Theory repository), [`grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/theory/MicrotopicScreen.kt`](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/theory/MicrotopicScreen.kt) (Microtopic cards)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_navigation["App navigation"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
end

subgraph group_learning["Learning experience"]
  node_theory["Theory browser<br/>[TheoryScreen.kt]"]
  node_topic["Topic view<br/>[TopicScreen.kt]"]
  node_microtopic["Microtopic cards"]
  node_session["Exercise session"]
  node_summary["Completion summary"]
  node_practice["Practice<br/>[PracticeScreen.kt]"]
  node_statistics["Statistics"]
  node_clarify["AI clarification<br/>[ClarifyScreen.kt]"]
  node_ai_limit["AI limits<br/>[AiLimitScreen.kt]"]
end

subgraph group_data["Content and progress"]
  node_theory_repo["Theory repository"]
  node_exercise_repo["Exercise repository"]
  node_progress_repo["Progress repository"]
  node_content_db[("Packaged content<br/>[ContentDatabase.kt]")]
  node_user_db[("User data<br/>[UserDatabase.kt]")]
  node_dictionary["Course vocabulary<br/>[CourseWordDao.kt]"]
end

subgraph group_domain["Domain logic"]
  node_evaluator["Answer evaluator"]
  node_search["Theory search"]
end

node_learner(("Learner"))

node_learner -->|"uses"| node_activity
node_activity -->|"starts at"| node_theory
node_activity -->|"navigates"| node_topic
node_activity -->|"navigates"| node_microtopic
node_activity -->|"starts exercises"| node_session
node_activity -->|"shows completion"| node_summary
node_activity -->|"opens clarification"| node_clarify
node_activity -->|"opens limits"| node_ai_limit
node_theory -->|"opens topic"| node_topic
node_topic -->|"opens microtopic"| node_microtopic
node_microtopic -->|"starts exercises"| node_session
node_session -->|"finishes at"| node_summary
node_theory -->|"observes theory"| node_theory_repo
node_topic -->|"observes microtopics"| node_theory_repo
node_microtopic -->|"observes cards"| node_theory_repo
node_theory_repo -->|"reads content"| node_content_db
node_theory_repo -->|"reads progress"| node_user_db
node_session -->|"loads exercises"| node_exercise_repo
node_exercise_repo -->|"reads exercises"| node_content_db
node_session -->|"checks answers"| node_evaluator
node_session -->|"records results"| node_progress_repo
node_progress_repo -->|"writes progress"| node_user_db
node_statistics -->|"reads statistics"| node_progress_repo
node_theory -->|"searches theory"| node_search
node_search -->|"uses search index"| node_theory_repo
node_practice -->|"loads practice"| node_exercise_repo
node_microtopic -.->|"requests clarification"| node_clarify
node_dictionary -->|"reads vocabulary"| node_content_db

click node_activity "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/MainActivity.kt"
click node_theory "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/theory/TheoryScreen.kt"
click node_topic "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/theory/TopicScreen.kt"
click node_microtopic "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/theory/MicrotopicScreen.kt"
click node_session "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/exercise/ExerciseSessionScreen.kt"
click node_summary "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/exercise/MicrotopicSummaryScreen.kt"
click node_practice "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/practice/PracticeScreen.kt"
click node_statistics "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/statistics/StatisticsScreen.kt"
click node_clarify "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/clarify/ClarifyScreen.kt"
click node_ai_limit "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/subscription/AiLimitScreen.kt"
click node_theory_repo "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/repository/TheoryRepositoryImpl.kt"
click node_exercise_repo "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/repository/ExerciseRepositoryImpl.kt"
click node_progress_repo "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/repository/ProgressRepositoryImpl.kt"
click node_content_db "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/local/content/ContentDatabase.kt"
click node_user_db "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/local/user/UserDatabase.kt"
click node_evaluator "https://github.com/sethan8r/grammar8r/blob/master/grammar-core/src/main/kotlin/dev/sethan8r/grammar/core/usecase/ExerciseEvaluator.kt"
click node_search "https://github.com/sethan8r/grammar8r/blob/master/grammar-core/src/main/kotlin/dev/sethan8r/grammar/core/usecase/search/SearchTheoryUseCase.kt"
click node_dictionary "https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/local/content/dao/CourseWordDao.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_activity toneBlue
class node_theory,node_topic,node_microtopic,node_session,node_summary,node_practice,node_statistics,node_clarify,node_ai_limit toneAmber
class node_theory_repo,node_exercise_repo,node_progress_repo,node_content_db,node_user_db,node_dictionary toneMint
class node_evaluator,node_search toneRose
class node_learner toneIndigo
```

## Components

### App navigation

- [Main activity](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/MainActivity.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/MainActivity.kt`

### Learning experience

- [Theory browser](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/theory/TheoryScreen.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/theory/TheoryScreen.kt`
- [Topic view](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/theory/TopicScreen.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/theory/TopicScreen.kt`
- [Microtopic cards](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/theory/MicrotopicScreen.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/theory/MicrotopicScreen.kt`
- [Exercise session](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/exercise/ExerciseSessionScreen.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/exercise/ExerciseSessionScreen.kt`
- [Completion summary](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/exercise/MicrotopicSummaryScreen.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/exercise/MicrotopicSummaryScreen.kt`
- [Practice](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/practice/PracticeScreen.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/practice/PracticeScreen.kt`
- [Statistics](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/statistics/StatisticsScreen.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/statistics/StatisticsScreen.kt`
- [AI clarification](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/clarify/ClarifyScreen.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/clarify/ClarifyScreen.kt`
- [AI limits](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/subscription/AiLimitScreen.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/ui/screens/subscription/AiLimitScreen.kt`

### Content and progress

- [Theory repository](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/repository/TheoryRepositoryImpl.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/repository/TheoryRepositoryImpl.kt`
- [Exercise repository](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/repository/ExerciseRepositoryImpl.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/repository/ExerciseRepositoryImpl.kt`
- [Progress repository](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/repository/ProgressRepositoryImpl.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/repository/ProgressRepositoryImpl.kt`
- [Packaged content](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/local/content/ContentDatabase.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/local/content/ContentDatabase.kt`
- [User data](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/local/user/UserDatabase.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/local/user/UserDatabase.kt`
- [Course vocabulary](https://github.com/sethan8r/grammar8r/blob/master/grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/local/content/dao/CourseWordDao.kt): `grammar-app-android/src/main/java/dev/sethan8r/grammar/app/data/local/content/dao/CourseWordDao.kt`

### Domain logic

- [Answer evaluator](https://github.com/sethan8r/grammar8r/blob/master/grammar-core/src/main/kotlin/dev/sethan8r/grammar/core/usecase/ExerciseEvaluator.kt): `grammar-core/src/main/kotlin/dev/sethan8r/grammar/core/usecase/ExerciseEvaluator.kt`
- [Theory search](https://github.com/sethan8r/grammar8r/blob/master/grammar-core/src/main/kotlin/dev/sethan8r/grammar/core/usecase/search/SearchTheoryUseCase.kt): `grammar-core/src/main/kotlin/dev/sethan8r/grammar/core/usecase/search/SearchTheoryUseCase.kt`

### Other components

- **Learner**

## Connections

- Learner → Main activity: uses
- Main activity → Theory browser: starts at
- Main activity → Topic view: navigates
- Main activity → Microtopic cards: navigates
- Main activity → Exercise session: starts exercises
- Main activity → Completion summary: shows completion
- Main activity → AI clarification: opens clarification
- Main activity → AI limits: opens limits
- Theory browser → Topic view: opens topic
- Topic view → Microtopic cards: opens microtopic
- Microtopic cards → Exercise session: starts exercises
- Exercise session → Completion summary: finishes at
- Theory browser → Theory repository: observes theory
- Topic view → Theory repository: observes microtopics
- Microtopic cards → Theory repository: observes cards
- Theory repository → Packaged content: reads content
- Theory repository → User data: reads progress
- Exercise session → Exercise repository: loads exercises
- Exercise repository → Packaged content: reads exercises
- Exercise session → Answer evaluator: checks answers
- Exercise session → Progress repository: records results
- Progress repository → User data: writes progress
- Statistics → Progress repository: reads statistics
- Theory browser → Theory search: searches theory
- Theory search → Theory repository: uses search index
- Practice → Exercise repository: loads practice
- Microtopic cards → AI clarification: requests clarification
- Course vocabulary → Packaged content: reads vocabulary
