# everlynewilly/ai-workshop-learning-webapp architecture

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

- Interactive diagram: https://gitdiagram.com/everlynewilly/ai-workshop-learning-webapp
- Repository: https://github.com/everlynewilly/ai-workshop-learning-webapp

## Overview

This repository presents an AI workshop-learning web application, with a FastAPI backend exposing authentication, user, workshop, registration, speaker, session, blog, feedback, dashboard, profile, and admin routes. The visible frontend is still the default React/Vite starter and has no sampled API calls, so the graph does not treat it as a connected client. The clearest evidenced workflow is login: the auth route queries a user, verifies the password, and issues a token. Session creation also checks a workshop before storing a session. Other route capabilities are identified by their paths; their internal wiring was not sampled.

Main entry points: [`backend/main.py`](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/main.py) (FastAPI application), [`backend/routes/auth.py`](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/auth.py) (Authentication routes), [`backend/routes/session.py`](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/session.py) (Session routes), [`backend/database.py`](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/database.py) (Database setup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application entry"]
  node_frontend["Starter frontend<br/>[App.jsx]"]
  node_api["FastAPI application<br/>[main.py]"]
  node_database_config["Database setup<br/>[database.py]"]
end

subgraph group_identity["Identity and users"]
  node_auth_routes["Authentication routes<br/>[auth.py]"]
  node_auth_service["Password verification<br/>[auth_service.py]"]
  node_token_service["Token service<br/>[token_service.py]"]
  node_user_routes["User routes<br/>[users.py]"]
  node_profile_routes["Profile routes<br/>[profile.py]"]
  node_dashboard_routes["Dashboard routes<br/>[dashboard.py]"]
  node_user_model["User model<br/>[user.py]"]
  node_user_schema["User schemas<br/>[user.py]"]
end

subgraph group_workshops["Workshop operations"]
  node_workshop_routes["Workshop routes<br/>[workshop.py]"]
  node_registration_routes["Registration routes<br/>[registration.py]"]
  node_speaker_routes["Speaker routes<br/>[speaker.py]"]
  node_session_routes["Session routes<br/>[session.py]"]
  node_workshop_model["Workshop model<br/>[workshop.py]"]
  node_registration_model["Registration model<br/>[registration.py]"]
  node_speaker_model["Speaker model<br/>[speaker.py]"]
  node_session_model["Session model<br/>[session.py]"]
  node_session_schema["Session schema<br/>[session.py]"]
end

subgraph group_content["Learning content"]
  node_blog_routes["Blog routes<br/>[blog.py]"]
  node_feedback_routes["Feedback routes<br/>[feedback.py]"]
  node_admin_routes["Admin routes<br/>[admin.py]"]
  node_blog_model["Blog model<br/>[blog.py]"]
  node_feedback_model["Feedback model<br/>[feedback.py]"]
end

node_visitor(("API caller"))
node_sqlite[("Workshop database<br/>[workshop.db]")]

node_visitor -->|"sends requests"| node_api
node_api -->|"mounts routes"| node_auth_routes
node_api -->|"mounts routes"| node_user_routes
node_api -->|"mounts routes"| node_profile_routes
node_api -->|"mounts routes"| node_dashboard_routes
node_api -->|"mounts routes"| node_workshop_routes
node_api -->|"mounts routes"| node_registration_routes
node_api -->|"mounts routes"| node_speaker_routes
node_api -->|"mounts routes"| node_session_routes
node_api -->|"mounts routes"| node_blog_routes
node_api -->|"mounts routes"| node_feedback_routes
node_api -->|"mounts routes"| node_admin_routes
node_api -->|"creates tables"| node_database_config
node_database_config -->|"connects to"| node_sqlite
node_auth_routes -->|"queries user"| node_user_model
node_auth_routes -->|"verifies password"| node_auth_service
node_auth_routes -->|"creates token"| node_token_service
node_auth_routes -->|"opens session"| node_database_config
node_session_routes -->|"opens session"| node_database_config
node_session_routes -->|"checks workshop"| node_workshop_model
node_session_routes -->|"stores session"| node_session_model

click node_frontend "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/frontend/src/App.jsx"
click node_api "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/main.py"
click node_database_config "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/database.py"
click node_sqlite "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/workshop.db"
click node_auth_routes "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/auth.py"
click node_auth_service "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/services/auth_service.py"
click node_token_service "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/services/token_service.py"
click node_user_routes "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/users.py"
click node_profile_routes "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/profile.py"
click node_dashboard_routes "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/dashboard.py"
click node_user_model "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/user.py"
click node_user_schema "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/schemas/user.py"
click node_workshop_routes "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/workshop.py"
click node_registration_routes "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/registration.py"
click node_speaker_routes "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/speaker.py"
click node_session_routes "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/session.py"
click node_workshop_model "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/workshop.py"
click node_registration_model "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/registration.py"
click node_speaker_model "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/speaker.py"
click node_session_model "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/session.py"
click node_session_schema "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/schemas/session.py"
click node_blog_routes "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/blog.py"
click node_feedback_routes "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/feedback.py"
click node_admin_routes "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/admin.py"
click node_blog_model "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/blog.py"
click node_feedback_model "https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/feedback.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_frontend,node_api,node_database_config toneBlue
class node_auth_routes,node_auth_service,node_token_service,node_user_routes,node_profile_routes,node_dashboard_routes,node_user_model,node_user_schema,node_sqlite toneAmber
class node_workshop_routes,node_registration_routes,node_speaker_routes,node_session_routes,node_workshop_model,node_registration_model,node_speaker_model,node_session_model,node_session_schema,node_visitor toneMint
class node_blog_routes,node_feedback_routes,node_admin_routes,node_blog_model,node_feedback_model toneRose
```

## Components

### Application entry

- [Starter frontend](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [FastAPI application](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/main.py): `backend/main.py`
- [Database setup](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/database.py): `backend/database.py`

### Identity and users

- [Authentication routes](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/auth.py): `backend/routes/auth.py`
- [Password verification](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/services/auth_service.py): `backend/services/auth_service.py`
- [Token service](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/services/token_service.py): `backend/services/token_service.py`
- [User routes](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/users.py): `backend/routes/users.py`
- [Profile routes](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/profile.py): `backend/routes/profile.py`
- [Dashboard routes](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/dashboard.py): `backend/routes/dashboard.py`
- [User model](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/user.py): `backend/models/user.py`
- [User schemas](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/schemas/user.py): `backend/schemas/user.py`

### Workshop operations

- [Workshop routes](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/workshop.py): `backend/routes/workshop.py`
- [Registration routes](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/registration.py): `backend/routes/registration.py`
- [Speaker routes](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/speaker.py): `backend/routes/speaker.py`
- [Session routes](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/session.py): `backend/routes/session.py`
- [Workshop model](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/workshop.py): `backend/models/workshop.py`
- [Registration model](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/registration.py): `backend/models/registration.py`
- [Speaker model](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/speaker.py): `backend/models/speaker.py`
- [Session model](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/session.py): `backend/models/session.py`
- [Session schema](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/schemas/session.py): `backend/schemas/session.py`

### Learning content

- [Blog routes](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/blog.py): `backend/routes/blog.py`
- [Feedback routes](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/feedback.py): `backend/routes/feedback.py`
- [Admin routes](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/routes/admin.py): `backend/routes/admin.py`
- [Blog model](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/blog.py): `backend/models/blog.py`
- [Feedback model](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/backend/models/feedback.py): `backend/models/feedback.py`

### Other components

- **API caller**
- [Workshop database](https://github.com/everlynewilly/ai-workshop-learning-webapp/blob/main/workshop.db): `workshop.db`

## Connections

- API caller → FastAPI application: sends requests
- FastAPI application → Authentication routes: mounts routes
- FastAPI application → User routes: mounts routes
- FastAPI application → Profile routes: mounts routes
- FastAPI application → Dashboard routes: mounts routes
- FastAPI application → Workshop routes: mounts routes
- FastAPI application → Registration routes: mounts routes
- FastAPI application → Speaker routes: mounts routes
- FastAPI application → Session routes: mounts routes
- FastAPI application → Blog routes: mounts routes
- FastAPI application → Feedback routes: mounts routes
- FastAPI application → Admin routes: mounts routes
- FastAPI application → Database setup: creates tables
- Database setup → Workshop database: connects to
- Authentication routes → User model: queries user
- Authentication routes → Password verification: verifies password
- Authentication routes → Token service: creates token
- Authentication routes → Database setup: opens session
- Session routes → Database setup: opens session
- Session routes → Workshop model: checks workshop
- Session routes → Session model: stores session
