# anniina-55/hobby-session-planner-attendance-app architecture

> Architecture diagram of the GitHub repository anniina-55/hobby-session-planner-attendance-app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/anniina-55/hobby-session-planner-attendance-app
- Repository: https://github.com/anniina-55/hobby-session-planner-attendance-app

## Overview

This is a hobby-session planning and attendance app: users browse public sessions, create public or private sessions, join through a shareable session link, and manage sessions or cancel attendance with codes. The React router exposes these workflows and the Express server dispatches session and attendance requests to separate route modules backed by SQLite. Source excerpts show the create, public-session, join, and edit flows; several listed pages and attendance handlers were not sampled, so their internal request wiring is not inferred.

Main entry points: [`frontend/src/App.tsx`](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/App.tsx) (App router), [`backend/db/routes/sessions.js`](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/backend/db/routes/sessions.js) (Session routes), [`frontend/src/pages/EditSession.tsx`](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/pages/EditSession.tsx) (Edit session), [`backend/db/database.js`](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/backend/db/database.js) (Database access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_app["App router<br/>[App.tsx]"]
  node_bootstrap["Browser entry<br/>[main.tsx]"]
  node_sessions_page["Browse sessions<br/>[Sessions.tsx]"]
  node_create_page["Create session<br/>[CreateSession.tsx]"]
  node_session_form["Session form<br/>[SessionForm.tsx]"]
  node_session_page["Session view<br/>[Session.tsx]"]
  node_session_details["Session details<br/>[SessionDetails.tsx]"]
  node_join_session["Join session<br/>[JoinSession.tsx]"]
  node_edit_page["Edit session<br/>[EditSession.tsx]"]
  node_attendee_list["Attendee list<br/>[AttendeeList.tsx]"]
  node_attendance_page["Manage attendance"]
  node_navbar["Navigation<br/>[Navbar.tsx]"]
end

subgraph group_session_api["Session management"]
  node_api_server["Express server<br/>[index.js]"]
  node_sessions_routes["Session routes<br/>[sessions.js]"]
end

subgraph group_attendance_api["Attendance management"]
  node_attendance_routes["Attendance routes<br/>[attendance.js]"]
end

subgraph group_storage["Persistent storage"]
  node_database_module["Database access<br/>[database.js]"]
  node_sqlite[("SQLite database")]
end

node_visitor(("Visitor"))

node_visitor -->|"uses"| node_app
node_bootstrap -->|"renders"| node_app
node_app -->|"routes"| node_sessions_page
node_app -->|"routes"| node_session_page
node_app -->|"routes"| node_create_page
node_app -->|"routes"| node_edit_page
node_app -->|"routes"| node_attendance_page
node_app -->|"renders"| node_navbar
node_create_page -->|"renders"| node_session_form
node_edit_page -->|"renders"| node_session_form
node_edit_page -->|"renders"| node_attendee_list
node_session_page -->|"renders"| node_session_details
node_session_details -->|"renders"| node_join_session
node_create_page -->|"sends create request"| node_sessions_routes
node_session_page -->|"fetches session"| node_sessions_routes
node_edit_page -->|"reads and updates"| node_sessions_routes
node_join_session -->|"requests attendance"| node_attendance_routes
node_api_server -->|"dispatches /sessions"| node_sessions_routes
node_api_server -->|"dispatches /attendance"| node_attendance_routes
node_api_server -->|"initializes"| node_database_module
node_sessions_routes -->|"gets database"| node_database_module
node_attendance_routes -->|"gets database"| node_database_module
node_database_module -->|"opens and initializes"| node_sqlite

click node_app "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/App.tsx"
click node_bootstrap "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/main.tsx"
click node_sessions_page "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/pages/Sessions.tsx"
click node_create_page "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/pages/CreateSession.tsx"
click node_session_form "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/components/SessionForm.tsx"
click node_session_page "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/pages/Session.tsx"
click node_session_details "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/components/SessionDetails.tsx"
click node_join_session "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/components/JoinSession.tsx"
click node_edit_page "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/pages/EditSession.tsx"
click node_attendee_list "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/components/AttendeeList.tsx"
click node_attendance_page "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/pages/ManageAttendance.tsx"
click node_navbar "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/components/Navbar.tsx"
click node_api_server "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/backend/index.js"
click node_sessions_routes "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/backend/db/routes/sessions.js"
click node_attendance_routes "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/backend/db/routes/attendance.js"
click node_database_module "https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/backend/db/database.js"

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_bootstrap,node_sessions_page,node_create_page,node_session_form,node_session_page,node_session_details,node_join_session,node_edit_page,node_attendee_list,node_attendance_page,node_navbar toneBlue
class node_api_server,node_sessions_routes toneAmber
class node_attendance_routes toneMint
class node_database_module,node_sqlite toneRose
class node_visitor toneIndigo
```

## Components

### Web application

- [App router](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Browser entry](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/main.tsx): `frontend/src/main.tsx`
- [Browse sessions](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/pages/Sessions.tsx): `frontend/src/pages/Sessions.tsx`
- [Create session](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/pages/CreateSession.tsx): `frontend/src/pages/CreateSession.tsx`
- [Session form](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/components/SessionForm.tsx): `frontend/src/components/SessionForm.tsx`
- [Session view](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/pages/Session.tsx): `frontend/src/pages/Session.tsx`
- [Session details](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/components/SessionDetails.tsx): `frontend/src/components/SessionDetails.tsx`
- [Join session](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/components/JoinSession.tsx): `frontend/src/components/JoinSession.tsx`
- [Edit session](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/pages/EditSession.tsx): `frontend/src/pages/EditSession.tsx`
- [Attendee list](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/components/AttendeeList.tsx): `frontend/src/components/AttendeeList.tsx`
- [Manage attendance](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/pages/ManageAttendance.tsx): `frontend/src/pages/ManageAttendance.tsx`
- [Navigation](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/frontend/src/components/Navbar.tsx): `frontend/src/components/Navbar.tsx`

### Session management

- [Express server](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/backend/index.js): `backend/index.js`
- [Session routes](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/backend/db/routes/sessions.js): `backend/db/routes/sessions.js`

### Attendance management

- [Attendance routes](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/backend/db/routes/attendance.js): `backend/db/routes/attendance.js`

### Persistent storage

- [Database access](https://github.com/anniina-55/hobby-session-planner-attendance-app/blob/main/backend/db/database.js): `backend/db/database.js`
- **SQLite database**

### Other components

- **Visitor**

## Connections

- Visitor → App router: uses
- Browser entry → App router: renders
- App router → Browse sessions: routes
- App router → Session view: routes
- App router → Create session: routes
- App router → Edit session: routes
- App router → Manage attendance: routes
- App router → Navigation: renders
- Create session → Session form: renders
- Edit session → Session form: renders
- Edit session → Attendee list: renders
- Session view → Session details: renders
- Session details → Join session: renders
- Create session → Session routes: sends create request
- Session view → Session routes: fetches session
- Edit session → Session routes: reads and updates
- Join session → Attendance routes: requests attendance
- Express server → Session routes: dispatches /sessions
- Express server → Attendance routes: dispatches /attendance
- Express server → Database access: initializes
- Session routes → Database access: gets database
- Attendance routes → Database access: gets database
- Database access → SQLite database: opens and initializes
