# fangdadai/helloasl architecture

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

## Overview

HelloASL is a multiplatform ASL learning and translation app. Users enter through the app navigation, then authenticate or use learning, lesson, profile, starred-sign, and translation screens. Learning activity updates lesson completion and progress; translation supports English-to-ASL sign materials and Android video recognition sent to a documented external model server. The tree and excerpts establish the app composition, repositories, and Android recognition call; individual screen-to-model wiring and several repository implementations were not sampled, so uncertain links are omitted.

Main entry points: [`HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/navigations/AppNavigation.kt`](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/navigations/AppNavigation.kt) (App navigation), [`HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/learning`](https://github.com/fangdadai/helloasl/tree/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/learning) (Learning screens), [`HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/App.kt`](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/App.kt) (App composition), [`HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/auth`](https://github.com/fangdadai/helloasl/tree/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/auth) (Sign in and signup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and Navigation"]
  node_app["App composition<br/>[App.kt]"]
  node_nav["App navigation<br/>[AppNavigation.kt]"]
  node_authui["Sign in and signup"]
  node_home["Home and profile"]
end

subgraph group_learning["Learning and Progress"]
  node_learnui["Learning screens"]
  node_starui["Starred signs"]
  node_learningdata["Learning content"]
  node_userprogress["User learning state<br/>[UserRepository.kt]"]
  node_tracker["Learning progress"]
  node_stars["Star collections<br/>[StarRepository.kt]"]
  node_models["ASL domain models"]
end

subgraph group_translate["ASL Translation"]
  node_translateui["Translate screen<br/>[TranslateView.kt]"]
  node_translation["Translation repository"]
  node_recognition["Video recognition"]
  node_api["Translation API client<br/>[ApiService.kt]"]
end

subgraph group_data["Accounts and Data"]
  node_authrepo["Authentication<br/>[AuthRepository.kt]"]
  node_supabaseauth["Supabase authentication"]
end

subgraph group_notify["Reminders"]
  node_notificationui["Notification handling"]
  node_tokens["Device token sync"]
  node_push["Firebase messaging"]
end

node_user(("App user"))
node_modelserver{{"ASL model server"}}
node_supabase[("Supabase services")]
node_firebase{{"Firebase Cloud Messaging"}}

node_user -->|"opens"| node_app
node_app -->|"composes"| node_nav
node_nav -->|"routes to"| node_authui
node_nav -->|"routes to"| node_home
node_nav -->|"routes to"| node_learnui
node_nav -->|"routes to"| node_starui
node_nav -->|"routes to"| node_translateui
node_authui -->|"authenticates via"| node_authrepo
node_authrepo -->|"implemented by"| node_supabaseauth
node_supabaseauth -->|"auth requests"| node_supabase
node_learnui -->|"loads lessons"| node_learningdata
node_learnui -->|"updates completion"| node_userprogress
node_learnui -->|"records study time"| node_tracker
node_learnui -->|"uses lesson models"| node_models
node_starui -->|"manages collections"| node_stars
node_translateui -->|"requests translation"| node_translation
node_translation -->|"recognizes video"| node_recognition
node_recognition -->|"submits video"| node_api
node_api -->|"posts video"| node_modelserver
node_app -->|"configures repository"| node_notificationui
node_tokens -->|"syncs device token"| node_supabase
node_push -->|"receives messages"| node_firebase
node_firebase -->|"delivers push"| node_push

click node_app "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/App.kt"
click node_nav "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/navigations/AppNavigation.kt"
click node_authui "https://github.com/fangdadai/helloasl/tree/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/auth"
click node_home "https://github.com/fangdadai/helloasl/tree/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/home"
click node_learnui "https://github.com/fangdadai/helloasl/tree/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/learning"
click node_starui "https://github.com/fangdadai/helloasl/tree/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/star"
click node_learningdata "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/learningRepository/LearningRepository.kt"
click node_userprogress "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/userRepository/UserRepository.kt"
click node_tracker "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/progressTrackerRepository/ProgressTrackerRepository.kt"
click node_stars "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/starRepository/StarRepository.kt"
click node_models "https://github.com/fangdadai/helloasl/tree/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/domain"
click node_translateui "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/translate/TranslateView.kt"
click node_translation "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/translateRepository/TranslateRepository.kt"
click node_recognition "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/androidMain/kotlin/ca/uwaterloo/helloasl/data/translateRepository/AndroidVideoRecognitionService.kt"
click node_api "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/androidMain/kotlin/ca/uwaterloo/helloasl/data/translateRepository/ApiService.kt"
click node_authrepo "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/authRepository/AuthRepository.kt"
click node_supabaseauth "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/authRepository/SupabaseAuthRepository.kt"
click node_notificationui "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/notificationRepository/NotificationRepository.kt"
click node_tokens "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/androidMain/kotlin/ca/uwaterloo/helloasl/data/notificationRepository/AndroidTokenSyncer.kt"
click node_push "https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/androidMain/kotlin/ca/uwaterloo/helloasl/data/notificationRepository/FirebaseMessagingService.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_app,node_nav,node_authui,node_home,node_user toneBlue
class node_learnui,node_starui,node_learningdata,node_userprogress,node_tracker,node_stars,node_models,node_supabase toneAmber
class node_translateui,node_translation,node_recognition,node_api,node_modelserver toneMint
class node_authrepo,node_supabaseauth toneRose
class node_notificationui,node_tokens,node_push,node_firebase toneIndigo
```

## Components

### App and Navigation

- [App composition](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/App.kt): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/App.kt`
- [App navigation](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/navigations/AppNavigation.kt): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/navigations/AppNavigation.kt`
- [Sign in and signup](https://github.com/fangdadai/helloasl/tree/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/auth): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/auth`
- [Home and profile](https://github.com/fangdadai/helloasl/tree/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/home): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/home`

### Learning and Progress

- [Learning screens](https://github.com/fangdadai/helloasl/tree/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/learning): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/learning`
- [Starred signs](https://github.com/fangdadai/helloasl/tree/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/star): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/star`
- [Learning content](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/learningRepository/LearningRepository.kt): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/learningRepository/LearningRepository.kt`
- [User learning state](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/userRepository/UserRepository.kt): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/userRepository/UserRepository.kt`
- [Learning progress](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/progressTrackerRepository/ProgressTrackerRepository.kt): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/progressTrackerRepository/ProgressTrackerRepository.kt`
- [Star collections](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/starRepository/StarRepository.kt): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/starRepository/StarRepository.kt`
- [ASL domain models](https://github.com/fangdadai/helloasl/tree/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/domain): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/domain`

### ASL Translation

- [Translate screen](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/translate/TranslateView.kt): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/ui/screens/translate/TranslateView.kt`
- [Translation repository](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/translateRepository/TranslateRepository.kt): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/translateRepository/TranslateRepository.kt`
- [Video recognition](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/androidMain/kotlin/ca/uwaterloo/helloasl/data/translateRepository/AndroidVideoRecognitionService.kt): `HelloASL/composeApp/src/androidMain/kotlin/ca/uwaterloo/helloasl/data/translateRepository/AndroidVideoRecognitionService.kt`
- [Translation API client](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/androidMain/kotlin/ca/uwaterloo/helloasl/data/translateRepository/ApiService.kt): `HelloASL/composeApp/src/androidMain/kotlin/ca/uwaterloo/helloasl/data/translateRepository/ApiService.kt`

### Accounts and Data

- [Authentication](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/authRepository/AuthRepository.kt): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/authRepository/AuthRepository.kt`
- [Supabase authentication](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/authRepository/SupabaseAuthRepository.kt): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/authRepository/SupabaseAuthRepository.kt`

### Reminders

- [Notification handling](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/notificationRepository/NotificationRepository.kt): `HelloASL/composeApp/src/commonMain/kotlin/ca/uwaterloo/helloasl/data/notificationRepository/NotificationRepository.kt`
- [Device token sync](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/androidMain/kotlin/ca/uwaterloo/helloasl/data/notificationRepository/AndroidTokenSyncer.kt): `HelloASL/composeApp/src/androidMain/kotlin/ca/uwaterloo/helloasl/data/notificationRepository/AndroidTokenSyncer.kt`
- [Firebase messaging](https://github.com/fangdadai/helloasl/blob/main/HelloASL/composeApp/src/androidMain/kotlin/ca/uwaterloo/helloasl/data/notificationRepository/FirebaseMessagingService.kt): `HelloASL/composeApp/src/androidMain/kotlin/ca/uwaterloo/helloasl/data/notificationRepository/FirebaseMessagingService.kt`

### Other components

- **App user**
- **ASL model server**
- **Supabase services**
- **Firebase Cloud Messaging**

## Connections

- App user → App composition: opens
- App composition → App navigation: composes
- App navigation → Sign in and signup: routes to
- App navigation → Home and profile: routes to
- App navigation → Learning screens: routes to
- App navigation → Starred signs: routes to
- App navigation → Translate screen: routes to
- Sign in and signup → Authentication: authenticates via
- Authentication → Supabase authentication: implemented by
- Supabase authentication → Supabase services: auth requests
- Learning screens → Learning content: loads lessons
- Learning screens → User learning state: updates completion
- Learning screens → Learning progress: records study time
- Learning screens → ASL domain models: uses lesson models
- Starred signs → Star collections: manages collections
- Translate screen → Translation repository: requests translation
- Translation repository → Video recognition: recognizes video
- Video recognition → Translation API client: submits video
- Translation API client → ASL model server: posts video
- App composition → Notification handling: configures repository
- Device token sync → Supabase services: syncs device token
- Firebase messaging → Firebase Cloud Messaging: receives messages
- Firebase Cloud Messaging → Firebase messaging: delivers push
