# phil-cst-bcit/usersimpleselfieregister architecture

> Architecture diagram of the GitHub repository phil-cst-bcit/usersimpleselfieregister, 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/phil-cst-bcit/usersimpleselfieregister
- Repository: https://github.com/phil-cst-bcit/usersimpleselfieregister

## Overview

User Simple Selfie Register is an iOS app for registering clients and managing their details. The main workflow is login, browse a searchable and sortable client list, open a client detail view, and update client status; registration adds client records and offers photo selection. The sampled views read and write Firebase Firestore directly, while status changes are also cached in UserDefaults. The README documents these capabilities; some views and model files were not sampled, so only documented navigation and supported source relationships are shown.

Main entry points: [`uusr/uusr/ClientListView.swift`](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/ClientListView.swift) (Client list), [`uusr/uusr/LoginView.swift`](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/LoginView.swift) (Login view), [`uusr/uusr/PersonalDetailView.swift`](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/PersonalDetailView.swift) (Client details), [`uusr/uusr/RegisrationView.swift`](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/RegisrationView.swift) (Registration view)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App flow"]
  node_app_entry["App entry<br/>[AppDelegate.swift]"]
  node_root_view["Root view<br/>[ContentView.swift]"]
  node_auth_state["Login state"]
  node_login["Login view<br/>[LoginView.swift]"]
end

subgraph group_client["Client management"]
  node_client_list["Client list"]
  node_client_row["Client row status"]
  node_detail_view["Client details"]
  node_user_model["User and status model<br/>[UserModel.swift]"]
end

subgraph group_registration["Registration"]
  node_register_view["Registration view"]
  node_image_picker["Photo picker<br/>[ImagePicker.swift]"]
end

subgraph group_persistence["Persistence"]
  node_firestore[("Firebase Firestore")]
  node_local_cache[("Local status cache")]
  node_firebase_setup["Firebase setup<br/>[AppDelegate.swift]"]
end

node_user(("App user"))

node_user -->|"enters credentials"| node_login
node_app_entry -->|"presents"| node_root_view
node_app_entry -->|"configures"| node_firebase_setup
node_firebase_setup -->|"initializes SDK"| node_firestore
node_root_view -->|"reads state"| node_auth_state
node_root_view -->|"shows signed out"| node_login
node_root_view -->|"shows signed in"| node_client_list
node_login -->|"queries credentials"| node_firestore
node_login -->|"sets login state"| node_auth_state
node_login -->|"opens registration"| node_register_view
node_user -->|"enters client details"| node_register_view
node_register_view -->|"selects photo"| node_image_picker
node_register_view -->|"creates client"| node_user_model
node_register_view -->|"adds client"| node_firestore
node_client_list -->|"fetches clients"| node_firestore
node_client_list -->|"maps client records"| node_user_model
node_client_list -->|"opens selected client"| node_detail_view
node_client_list -->|"renders clients"| node_client_row
node_client_row -->|"updates status"| node_user_model
node_client_row -->|"saves status"| node_local_cache
node_client_row -->|"updates status"| node_firestore
node_detail_view -->|"reads and updates"| node_user_model
node_detail_view -->|"saves status"| node_local_cache
node_detail_view -->|"updates status"| node_firestore
node_user -->|"searches and sorts"| node_client_list
node_user -->|"views client"| node_detail_view

click node_app_entry "https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/AppDelegate.swift"
click node_root_view "https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/ContentView.swift"
click node_auth_state "https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/UserViewModel.swift"
click node_login "https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/LoginView.swift"
click node_register_view "https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/RegisrationView.swift"
click node_image_picker "https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/ImagePicker.swift"
click node_client_list "https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/ClientListView.swift"
click node_client_row "https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/ClientListView.swift"
click node_detail_view "https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/PersonalDetailView.swift"
click node_user_model "https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/UserModel.swift"
click node_firebase_setup "https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/AppDelegate.swift"

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_entry,node_root_view,node_auth_state,node_login,node_user toneBlue
class node_client_list,node_client_row,node_detail_view,node_user_model toneAmber
class node_register_view,node_image_picker toneMint
class node_firestore,node_local_cache,node_firebase_setup toneRose
```

## Components

### App flow

- [App entry](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/AppDelegate.swift): `uusr/uusr/AppDelegate.swift`
- [Root view](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/ContentView.swift): `uusr/uusr/ContentView.swift`
- [Login state](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/UserViewModel.swift): `uusr/uusr/UserViewModel.swift`
- [Login view](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/LoginView.swift): `uusr/uusr/LoginView.swift`

### Client management

- [Client list](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/ClientListView.swift): `uusr/uusr/ClientListView.swift`
- [Client row status](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/ClientListView.swift): `uusr/uusr/ClientListView.swift`
- [Client details](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/PersonalDetailView.swift): `uusr/uusr/PersonalDetailView.swift`
- [User and status model](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/UserModel.swift): `uusr/uusr/UserModel.swift`

### Registration

- [Registration view](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/RegisrationView.swift): `uusr/uusr/RegisrationView.swift`
- [Photo picker](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/ImagePicker.swift): `uusr/uusr/ImagePicker.swift`

### Persistence

- **Firebase Firestore**
- **Local status cache**
- [Firebase setup](https://github.com/phil-cst-bcit/usersimpleselfieregister/blob/main/uusr/uusr/AppDelegate.swift): `uusr/uusr/AppDelegate.swift`

### Other components

- **App user**

## Connections

- App user → Login view: enters credentials
- App entry → Root view: presents
- App entry → Firebase setup: configures
- Firebase setup → Firebase Firestore: initializes SDK
- Root view → Login state: reads state
- Root view → Login view: shows signed out
- Root view → Client list: shows signed in
- Login view → Firebase Firestore: queries credentials
- Login view → Login state: sets login state
- Login view → Registration view: opens registration
- App user → Registration view: enters client details
- Registration view → Photo picker: selects photo
- Registration view → User and status model: creates client
- Registration view → Firebase Firestore: adds client
- Client list → Firebase Firestore: fetches clients
- Client list → User and status model: maps client records
- Client list → Client details: opens selected client
- Client list → Client row status: renders clients
- Client row status → User and status model: updates status
- Client row status → Local status cache: saves status
- Client row status → Firebase Firestore: updates status
- Client details → User and status model: reads and updates
- Client details → Local status cache: saves status
- Client details → Firebase Firestore: updates status
- App user → Client list: searches and sorts
- App user → Client details: views client
