# mrgutierrezmario/lecture-note-app architecture

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

- Interactive diagram: https://gitdiagram.com/mrgutierrezmario/lecture-note-app
- Repository: https://github.com/mrgutierrezmario/lecture-note-app

## Overview

AI Lecture Notes is a browser-based lecture recorder that streams audio for live transcription and periodic note generation, then supports reviewing, querying, editing, and exporting lectures. The README documents additional account, upload, retention, and Drive capabilities, which are represented even where their implementation was not sampled. The runtime excerpts show the application/router wiring, WebSocket recording path, authentication, and storage access; arrows for unsampled feature internals are limited to documented behavior.

Main entry points: [`app/ui_backend/main.py`](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/main.py) (FastAPI app), [`app/ui_backend/realtime/websocket_handler.py`](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/realtime/websocket_handler.py) (Recording handler), [`app/ui_backend/core/database.py`](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/core/database.py) (Database access), [`app/ui_backend/routes/sessions.py`](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/sessions.py) (Lecture routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Browser workspace"]
  node_appui["Workspace UI<br/>[App.jsx]"]
  node_socketui["Recording socket<br/>[useWebSocket.js]"]
  node_lecturepanes["Lecture panes"]
  node_authui["Sign-in UI<br/>[Login.jsx]"]
end

subgraph group_api["Application API"]
  node_main["FastAPI app<br/>[main.py]"]
  node_auth["Account security<br/>[auth.py]"]
  node_authroutes["Account routes<br/>[auth.py]"]
  node_sessionroutes["Lecture routes<br/>[sessions.py]"]
  node_historyroutes["History routes<br/>[history.py]"]
  node_settingsroutes["Settings routes<br/>[settings.py]"]
  node_driveroutes["Drive routes<br/>[drive.py]"]
  node_adminroutes["Admin routes<br/>[admin.py]"]
end

subgraph group_processing["Lecture processing"]
  node_realtime["Recording handler"]
  node_transcriber["Audio transcription<br/>[transcriber.py]"]
  node_notes["Notes and chat AI<br/>[notes_generator.py]"]
  node_documents["Document processing"]
  node_vision["Image analysis<br/>[image_analyzer.py]"]
  node_exports["Lecture exports"]
end

subgraph group_state["Data and retention"]
  node_dbaccess["Database access<br/>[database.py]"]
  node_models["Lecture and user records<br/>[models.py]"]
  node_quotas["Quota management<br/>[quota.py]"]
  node_retention["Audio retention<br/>[cleanup.py]"]
  node_objectstore["Audio object client<br/>[s3_client.py]"]
end

subgraph group_integrations["External services"]
  node_database[("PostgreSQL")]
  node_minio[("S3-compatible storage")]
  node_ai_services["AI providers<br/>[providers.py]"]
  node_drive["Google Drive"]
  node_mailer["Email service<br/>[mailer.py]"]
end

node_person(("Lecture user"))

node_person -->|"uses"| node_appui
node_appui -->|"presents sign-in"| node_authui
node_appui -->|"shows lecture"| node_lecturepanes
node_appui -->|"streams recording"| node_socketui
node_socketui -->|"sends audio and controls"| node_realtime
node_realtime -->|"sends live updates"| node_socketui
node_main -->|"applies middleware"| node_auth
node_main -->|"mounts routes"| node_authroutes
node_main -->|"mounts routes"| node_sessionroutes
node_main -->|"mounts routes"| node_historyroutes
node_main -->|"mounts routes"| node_settingsroutes
node_main -->|"mounts routes"| node_driveroutes
node_main -->|"mounts routes"| node_adminroutes
node_main -->|"dispatches socket"| node_realtime
node_authui -->|"requests account actions"| node_authroutes
node_authroutes -->|"reads and writes users"| node_dbaccess
node_authroutes -->|"sends account email"| node_mailer
node_auth -->|"loads user"| node_dbaccess
node_realtime -->|"transcribes chunks"| node_transcriber
node_realtime -->|"generates notes"| node_notes
node_realtime -->|"stores session data"| node_dbaccess
node_realtime -->|"checks quota"| node_quotas
node_realtime -->|"stores audio chunks"| node_objectstore
node_sessionroutes -->|"reads and writes lectures"| node_dbaccess
node_sessionroutes -->|"extracts uploads"| node_documents
node_sessionroutes -->|"analyzes images"| node_vision
node_sessionroutes -->|"answers lecture questions"| node_notes
node_sessionroutes -->|"builds exports"| node_exports
node_sessionroutes -->|"reads audio"| node_objectstore
node_historyroutes -->|"loads lecture history"| node_dbaccess
node_historyroutes -->|"reads quota"| node_quotas
node_settingsroutes -->|"reads and writes settings"| node_dbaccess
node_driveroutes -.->|"transfers lecture copies"| node_drive
node_adminroutes -->|"manages accounts"| node_dbaccess
node_transcriber -->|"uses speech model"| node_ai_services
node_notes -->|"uses text model"| node_ai_services
node_documents -.->|"uses vision model"| node_ai_services
node_vision -->|"uses vision model"| node_ai_services
node_dbaccess -->|"queries"| node_database
node_objectstore -->|"reads and writes objects"| node_minio
node_retention -->|"finds expired audio"| node_dbaccess
node_retention -->|"deletes expired audio"| node_objectstore

click node_appui "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_frontend/src/App.jsx"
click node_socketui "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_frontend/src/hooks/useWebSocket.js"
click node_lecturepanes "https://github.com/mrgutierrezmario/lecture-note-app/tree/main/app/ui_frontend/src/components"
click node_authui "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_frontend/src/components/Login.jsx"
click node_main "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/main.py"
click node_auth "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/accounts/auth.py"
click node_authroutes "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/auth.py"
click node_sessionroutes "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/sessions.py"
click node_historyroutes "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/history.py"
click node_settingsroutes "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/settings.py"
click node_driveroutes "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/drive.py"
click node_adminroutes "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/admin.py"
click node_realtime "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/realtime/websocket_handler.py"
click node_transcriber "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/ai/transcriber.py"
click node_notes "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/ai/notes_generator.py"
click node_documents "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/ai/document_processor.py"
click node_vision "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/ai/image_analyzer.py"
click node_exports "https://github.com/mrgutierrezmario/lecture-note-app/tree/main/app/ui_backend/exports"
click node_dbaccess "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/core/database.py"
click node_models "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/core/models.py"
click node_quotas "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/storage/quota.py"
click node_retention "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/storage/cleanup.py"
click node_objectstore "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/storage/s3_client.py"
click node_ai_services "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/ai/providers.py"
click node_mailer "https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/integrations/mailer.py"

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_appui,node_socketui,node_lecturepanes,node_authui,node_person toneBlue
class node_main,node_auth,node_authroutes,node_sessionroutes,node_historyroutes,node_settingsroutes,node_driveroutes,node_adminroutes toneAmber
class node_realtime,node_transcriber,node_notes,node_documents,node_vision,node_exports toneMint
class node_dbaccess,node_models,node_quotas,node_retention,node_objectstore toneRose
class node_database,node_minio,node_ai_services,node_drive,node_mailer toneIndigo
```

## Components

### Browser workspace

- [Workspace UI](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_frontend/src/App.jsx): `app/ui_frontend/src/App.jsx`
- [Recording socket](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_frontend/src/hooks/useWebSocket.js): `app/ui_frontend/src/hooks/useWebSocket.js`
- [Lecture panes](https://github.com/mrgutierrezmario/lecture-note-app/tree/main/app/ui_frontend/src/components): `app/ui_frontend/src/components`
- [Sign-in UI](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_frontend/src/components/Login.jsx): `app/ui_frontend/src/components/Login.jsx`

### Application API

- [FastAPI app](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/main.py): `app/ui_backend/main.py`
- [Account security](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/accounts/auth.py): `app/ui_backend/accounts/auth.py`
- [Account routes](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/auth.py): `app/ui_backend/routes/auth.py`
- [Lecture routes](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/sessions.py): `app/ui_backend/routes/sessions.py`
- [History routes](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/history.py): `app/ui_backend/routes/history.py`
- [Settings routes](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/settings.py): `app/ui_backend/routes/settings.py`
- [Drive routes](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/drive.py): `app/ui_backend/routes/drive.py`
- [Admin routes](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/routes/admin.py): `app/ui_backend/routes/admin.py`

### Lecture processing

- [Recording handler](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/realtime/websocket_handler.py): `app/ui_backend/realtime/websocket_handler.py`
- [Audio transcription](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/ai/transcriber.py): `app/ui_backend/ai/transcriber.py`
- [Notes and chat AI](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/ai/notes_generator.py): `app/ui_backend/ai/notes_generator.py`
- [Document processing](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/ai/document_processor.py): `app/ui_backend/ai/document_processor.py`
- [Image analysis](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/ai/image_analyzer.py): `app/ui_backend/ai/image_analyzer.py`
- [Lecture exports](https://github.com/mrgutierrezmario/lecture-note-app/tree/main/app/ui_backend/exports): `app/ui_backend/exports`

### Data and retention

- [Database access](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/core/database.py): `app/ui_backend/core/database.py`
- [Lecture and user records](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/core/models.py): `app/ui_backend/core/models.py`
- [Quota management](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/storage/quota.py): `app/ui_backend/storage/quota.py`
- [Audio retention](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/storage/cleanup.py): `app/ui_backend/storage/cleanup.py`
- [Audio object client](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/storage/s3_client.py): `app/ui_backend/storage/s3_client.py`

### External services

- **PostgreSQL**
- **S3-compatible storage**
- [AI providers](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/ai/providers.py): `app/ui_backend/ai/providers.py`
- **Google Drive**
- [Email service](https://github.com/mrgutierrezmario/lecture-note-app/blob/main/app/ui_backend/integrations/mailer.py): `app/ui_backend/integrations/mailer.py`

### Other components

- **Lecture user**

## Connections

- Lecture user → Workspace UI: uses
- Workspace UI → Sign-in UI: presents sign-in
- Workspace UI → Lecture panes: shows lecture
- Workspace UI → Recording socket: streams recording
- Recording socket → Recording handler: sends audio and controls
- Recording handler → Recording socket: sends live updates
- FastAPI app → Account security: applies middleware
- FastAPI app → Account routes: mounts routes
- FastAPI app → Lecture routes: mounts routes
- FastAPI app → History routes: mounts routes
- FastAPI app → Settings routes: mounts routes
- FastAPI app → Drive routes: mounts routes
- FastAPI app → Admin routes: mounts routes
- FastAPI app → Recording handler: dispatches socket
- Sign-in UI → Account routes: requests account actions
- Account routes → Database access: reads and writes users
- Account routes → Email service: sends account email
- Account security → Database access: loads user
- Recording handler → Audio transcription: transcribes chunks
- Recording handler → Notes and chat AI: generates notes
- Recording handler → Database access: stores session data
- Recording handler → Quota management: checks quota
- Recording handler → Audio object client: stores audio chunks
- Lecture routes → Database access: reads and writes lectures
- Lecture routes → Document processing: extracts uploads
- Lecture routes → Image analysis: analyzes images
- Lecture routes → Notes and chat AI: answers lecture questions
- Lecture routes → Lecture exports: builds exports
- Lecture routes → Audio object client: reads audio
- History routes → Database access: loads lecture history
- History routes → Quota management: reads quota
- Settings routes → Database access: reads and writes settings
- Drive routes → Google Drive: transfers lecture copies
- Admin routes → Database access: manages accounts
- Audio transcription → AI providers: uses speech model
- Notes and chat AI → AI providers: uses text model
- Document processing → AI providers: uses vision model
- Image analysis → AI providers: uses vision model
- Database access → PostgreSQL: queries
- Audio object client → S3-compatible storage: reads and writes objects
- Audio retention → Database access: finds expired audio
- Audio retention → Audio object client: deletes expired audio
