# arthuraurelieus/telex architecture

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

- Interactive diagram: https://gitdiagram.com/arthuraurelieus/telex
- Repository: https://github.com/arthuraurelieus/telex

## Overview

TeleX is an Android end-to-end encrypted chat app. Its main user flow runs from sign-in and profile onboarding through user discovery and chat creation to encrypted text and image messaging. MainActivity coordinates screen navigation and initial key synchronization; view models handle account and chat operations, while crypto modules manage identities, Signal sessions, and attachments. The README contains no usable product documentation, so unsampled capabilities and relationships are represented conservatively; the available excerpts do not establish every backend or persistence interaction.

Main entry points: [`app/src/main/java/com/e2eechat/app/MainActivity.kt`](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/MainActivity.kt) (Navigation coordinator), [`app/src/main/java/com/e2eechat/app/data/ChatViewModel.kt`](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/data/ChatViewModel.kt) (Chat operations), [`app/src/main/java/com/e2eechat/app/crypto/KeyManager.kt`](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/crypto/KeyManager.kt) (Key and bundle manager), [`app/src/main/java/com/e2eechat/app/data/AuthViewModel.kt`](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/data/AuthViewModel.kt) (Authentication and profile)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App navigation"]
  node_main["Navigation coordinator<br/>[MainActivity.kt]"]
  node_preferences["User preferences<br/>[UserPreferences.kt]"]
end

subgraph group_account["Account and discovery"]
  node_login["Login screen<br/>[LoginScreen.kt]"]
  node_auth["Authentication and profile<br/>[AuthViewModel.kt]"]
  node_username["Username and DOB"]
  node_picture["Profile picture"]
  node_browse["User discovery"]
  node_settings["Settings<br/>[SettingsScreen.kt]"]
end

subgraph group_messaging["Chat and persistence"]
  node_chatlist["Chat list<br/>[ChatListScreen.kt]"]
  node_chatscreen["Chat conversation<br/>[ChatScreen.kt]"]
  node_chatvm["Chat operations<br/>[ChatViewModel.kt]"]
  node_models["Chat models<br/>[ChatModels.kt]"]
  node_database[("Local chat database<br/>[ChatDatabase.kt]")]
end

subgraph group_security["Encryption and identity"]
  node_keymanager["Key and bundle manager<br/>[KeyManager.kt]"]
  node_signalstore[("Signal protocol store")]
  node_attachment["Attachment encryption"]
  node_base64["Base64 utilities<br/>[Base64Compat.kt]"]
  node_fingerprint["Identity fingerprint"]
end

node_user(("App user"))
node_firebase{{"Firebase services"}}
node_supabase{{"Supabase storage"}}

node_user -->|"uses"| node_main
node_main -->|"shows"| node_login
node_main -->|"routes to"| node_username
node_main -->|"routes to"| node_picture
node_main -->|"routes to"| node_browse
node_main -->|"routes to"| node_settings
node_main -->|"routes to"| node_chatlist
node_main -->|"routes to"| node_chatscreen
node_main -->|"creates"| node_auth
node_main -->|"creates"| node_chatvm
node_main -->|"creates"| node_preferences
node_login -->|"submits sign-in"| node_auth
node_auth -->|"authenticates and reads profiles"| node_firebase
node_auth -->|"configures storage"| node_supabase
node_main -->|"syncs keys"| node_keymanager
node_main -->|"creates chats"| node_chatvm
node_chatlist -.->|"selects chats"| node_chatvm
node_chatscreen -.->|"sends messages"| node_chatvm
node_chatvm -->|"fetches bundles"| node_keymanager
node_chatvm -->|"encrypts attachments"| node_attachment
node_chatvm -.->|"reads and writes chats"| node_firebase
node_chatvm -.->|"persists locally"| node_database
node_chatvm -.->|"uses models"| node_models
node_keymanager -->|"uses key store"| node_signalstore
node_keymanager -->|"publishes bundles"| node_firebase
node_keymanager -->|"encodes keys"| node_base64
node_signalstore -->|"encodes records"| node_base64
node_keymanager -.->|"fingerprints identities"| node_fingerprint

click node_main "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/MainActivity.kt"
click node_login "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/LoginScreen.kt"
click node_auth "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/data/AuthViewModel.kt"
click node_username "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/UsernameDobScreen.kt"
click node_picture "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/ProfilePictureScreen.kt"
click node_browse "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/UserBrowseScreen.kt"
click node_settings "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/SettingsScreen.kt"
click node_preferences "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/data/UserPreferences.kt"
click node_chatlist "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/ChatListScreen.kt"
click node_chatscreen "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/ChatScreen.kt"
click node_chatvm "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/data/ChatViewModel.kt"
click node_models "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/model/ChatModels.kt"
click node_database "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/data/ChatDatabase.kt"
click node_keymanager "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/crypto/KeyManager.kt"
click node_signalstore "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/crypto/KeystoreSignalProtocolStore.kt"
click node_attachment "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/crypto/AttachmentCrypto.kt"
click node_base64 "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/crypto/Base64Compat.kt"
click node_fingerprint "https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/crypto/IdentityFingerprint.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_main,node_preferences,node_user toneBlue
class node_login,node_auth,node_username,node_picture,node_browse,node_settings,node_supabase toneAmber
class node_chatlist,node_chatscreen,node_chatvm,node_models,node_database toneMint
class node_keymanager,node_signalstore,node_attachment,node_base64,node_fingerprint toneRose
class node_firebase toneIndigo
```

## Components

### App navigation

- [Navigation coordinator](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/MainActivity.kt): `app/src/main/java/com/e2eechat/app/MainActivity.kt`
- [User preferences](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/data/UserPreferences.kt): `app/src/main/java/com/e2eechat/app/data/UserPreferences.kt`

### Account and discovery

- [Login screen](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/LoginScreen.kt): `app/src/main/java/com/e2eechat/app/ui/screens/LoginScreen.kt`
- [Authentication and profile](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/data/AuthViewModel.kt): `app/src/main/java/com/e2eechat/app/data/AuthViewModel.kt`
- [Username and DOB](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/UsernameDobScreen.kt): `app/src/main/java/com/e2eechat/app/ui/screens/UsernameDobScreen.kt`
- [Profile picture](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/ProfilePictureScreen.kt): `app/src/main/java/com/e2eechat/app/ui/screens/ProfilePictureScreen.kt`
- [User discovery](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/UserBrowseScreen.kt): `app/src/main/java/com/e2eechat/app/ui/screens/UserBrowseScreen.kt`
- [Settings](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/SettingsScreen.kt): `app/src/main/java/com/e2eechat/app/ui/screens/SettingsScreen.kt`

### Chat and persistence

- [Chat list](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/ChatListScreen.kt): `app/src/main/java/com/e2eechat/app/ui/screens/ChatListScreen.kt`
- [Chat conversation](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/ui/screens/ChatScreen.kt): `app/src/main/java/com/e2eechat/app/ui/screens/ChatScreen.kt`
- [Chat operations](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/data/ChatViewModel.kt): `app/src/main/java/com/e2eechat/app/data/ChatViewModel.kt`
- [Chat models](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/model/ChatModels.kt): `app/src/main/java/com/e2eechat/app/model/ChatModels.kt`
- [Local chat database](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/data/ChatDatabase.kt): `app/src/main/java/com/e2eechat/app/data/ChatDatabase.kt`

### Encryption and identity

- [Key and bundle manager](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/crypto/KeyManager.kt): `app/src/main/java/com/e2eechat/app/crypto/KeyManager.kt`
- [Signal protocol store](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/crypto/KeystoreSignalProtocolStore.kt): `app/src/main/java/com/e2eechat/app/crypto/KeystoreSignalProtocolStore.kt`
- [Attachment encryption](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/crypto/AttachmentCrypto.kt): `app/src/main/java/com/e2eechat/app/crypto/AttachmentCrypto.kt`
- [Base64 utilities](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/crypto/Base64Compat.kt): `app/src/main/java/com/e2eechat/app/crypto/Base64Compat.kt`
- [Identity fingerprint](https://github.com/arthuraurelieus/telex/blob/main/app/src/main/java/com/e2eechat/app/crypto/IdentityFingerprint.kt): `app/src/main/java/com/e2eechat/app/crypto/IdentityFingerprint.kt`

### Other components

- **App user**
- **Firebase services**
- **Supabase storage**

## Connections

- App user → Navigation coordinator: uses
- Navigation coordinator → Login screen: shows (evidence: `app/src/main/java/com/e2eechat/app/MainActivity.kt`)
- Navigation coordinator → Username and DOB: routes to (evidence: `app/src/main/java/com/e2eechat/app/MainActivity.kt`)
- Navigation coordinator → Profile picture: routes to (evidence: `app/src/main/java/com/e2eechat/app/MainActivity.kt`)
- Navigation coordinator → User discovery: routes to (evidence: `app/src/main/java/com/e2eechat/app/MainActivity.kt`)
- Navigation coordinator → Settings: routes to (evidence: `app/src/main/java/com/e2eechat/app/MainActivity.kt`)
- Navigation coordinator → Chat list: routes to (evidence: `app/src/main/java/com/e2eechat/app/MainActivity.kt`)
- Navigation coordinator → Chat conversation: routes to (evidence: `app/src/main/java/com/e2eechat/app/MainActivity.kt`)
- Navigation coordinator → Authentication and profile: creates (evidence: `app/src/main/java/com/e2eechat/app/MainActivity.kt`)
- Navigation coordinator → Chat operations: creates (evidence: `app/src/main/java/com/e2eechat/app/MainActivity.kt`)
- Navigation coordinator → User preferences: creates (evidence: `app/src/main/java/com/e2eechat/app/MainActivity.kt`)
- Login screen → Authentication and profile: submits sign-in (evidence: `app/src/main/java/com/e2eechat/app/ui/screens/LoginScreen.kt`)
- Authentication and profile → Firebase services: authenticates and reads profiles (evidence: `app/src/main/java/com/e2eechat/app/data/AuthViewModel.kt`)
- Authentication and profile → Supabase storage: configures storage (evidence: `app/src/main/java/com/e2eechat/app/data/AuthViewModel.kt`)
- Navigation coordinator → Key and bundle manager: syncs keys (evidence: `app/src/main/java/com/e2eechat/app/MainActivity.kt`)
- Navigation coordinator → Chat operations: creates chats (evidence: `app/src/main/java/com/e2eechat/app/MainActivity.kt`)
- Chat list → Chat operations: selects chats
- Chat conversation → Chat operations: sends messages
- Chat operations → Key and bundle manager: fetches bundles (evidence: `app/src/main/java/com/e2eechat/app/data/ChatViewModel.kt`)
- Chat operations → Attachment encryption: encrypts attachments (evidence: `app/src/main/java/com/e2eechat/app/data/ChatViewModel.kt`)
- Chat operations → Firebase services: reads and writes chats
- Chat operations → Local chat database: persists locally
- Chat operations → Chat models: uses models
- Key and bundle manager → Signal protocol store: uses key store (evidence: `app/src/main/java/com/e2eechat/app/crypto/KeyManager.kt`)
- Key and bundle manager → Firebase services: publishes bundles (evidence: `app/src/main/java/com/e2eechat/app/crypto/KeyManager.kt`)
- Key and bundle manager → Base64 utilities: encodes keys (evidence: `app/src/main/java/com/e2eechat/app/crypto/KeyManager.kt`)
- Signal protocol store → Base64 utilities: encodes records (evidence: `app/src/main/java/com/e2eechat/app/crypto/KeystoreSignalProtocolStore.kt`)
- Key and bundle manager → Identity fingerprint: fingerprints identities
