# jojik85/fest architecture

> Architecture diagram of the GitHub repository jojik85/fest, 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/jojik85/fest
- Repository: https://github.com/jojik85/fest

## Overview

Autumn Fest is a festival website with public event discovery and community content alongside account, registration, accommodation, and administrative workflows. Users browse the schedule and events, then can sign in to manage event teams, lodging, profiles, gallery uploads, and sponsorship proposals; administrators review and manage festival operations. The browser modules share authentication and data-access behavior, with Flask endpoints backed by MySQL. Sampled source supports the core API and several integrations; some page-specific wiring and backend routes are not shown, so uncertain connections are omitted.

Main entry points: [`shared.js`](https://github.com/jojik85/fest/blob/main/shared.js) (Browser Data API), [`backend.py`](https://github.com/jojik85/fest/blob/main/backend.py) (Flask API), [`login.js`](https://github.com/jojik85/fest/blob/main/login.js) (Sign-in and OTP), [`events.js`](https://github.com/jojik85/fest/blob/main/events.js) (Event Browser)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Festival Discovery"]
  node_home["Schedule Calendar<br/>[home.js]"]
  node_landing["Festival Landing<br/>[index.js]"]
  node_events["Event Browser<br/>[events.js]"]
  node_gallery["Community Gallery<br/>[gallery.js]"]
  node_contact["Contact Page<br/>[contact.js]"]
end

subgraph group_accounts["User Services"]
  node_login["Sign-in and OTP<br/>[login.js]"]
  node_profile["User Profile<br/>[profile.js]"]
  node_accommodation["Accommodation Booking<br/>[accommodation.js]"]
  node_sponsors["Sponsor Proposals<br/>[sponsors.js]"]
end

subgraph group_operations["Festival Operations"]
  node_admin["Admin Console<br/>[admin.js]"]
end

subgraph group_platform["Shared Platform"]
  node_shared["Shared Runtime<br/>[shared.js]"]
  node_dataapi["Browser Data API<br/>[shared.js]"]
  node_backend["Flask API<br/>[backend.py]"]
  node_mysql[("MySQL Store")]
  node_sheets[("Google Sheets")]
  node_drive[("Google Drive")]
  node_email["Email Service"]
end

node_visitor(("Visitor"))

node_visitor -->|"opens"| node_landing
node_visitor -->|"browses"| node_home
node_visitor -->|"browses"| node_events
node_visitor -->|"views"| node_gallery
node_visitor -->|"signs in"| node_login
node_visitor -->|"contacts"| node_contact
node_login -->|"updates session"| node_shared
node_login -->|"loads users"| node_dataapi
node_login -->|"requests OTP"| node_backend
node_home -->|"loads data"| node_dataapi
node_events -->|"opens registration"| node_shared
node_events -->|"loads data"| node_dataapi
node_profile -->|"reads and updates"| node_dataapi
node_profile -->|"uses account state"| node_shared
node_accommodation -->|"checks and saves"| node_dataapi
node_sponsors -->|"submits proposal"| node_dataapi
node_admin -->|"manages records"| node_dataapi
node_gallery -->|"loads and saves"| node_dataapi
node_gallery -->|"sends mail"| node_backend
node_shared -->|"provides access"| node_dataapi
node_dataapi -->|"fetches collections"| node_backend
node_backend -->|"reads and writes"| node_mysql
node_backend -.->|"syncs data"| node_sheets
node_shared -.->|"uploads files"| node_drive
node_backend -.->|"handles uploads"| node_drive
node_backend -.->|"sends messages"| node_email

click node_home "https://github.com/jojik85/fest/blob/main/home.js"
click node_landing "https://github.com/jojik85/fest/blob/main/index.js"
click node_events "https://github.com/jojik85/fest/blob/main/events.js"
click node_gallery "https://github.com/jojik85/fest/blob/main/gallery.js"
click node_contact "https://github.com/jojik85/fest/blob/main/contact.js"
click node_login "https://github.com/jojik85/fest/blob/main/login.js"
click node_profile "https://github.com/jojik85/fest/blob/main/profile.js"
click node_accommodation "https://github.com/jojik85/fest/blob/main/accommodation.js"
click node_sponsors "https://github.com/jojik85/fest/blob/main/sponsors.js"
click node_admin "https://github.com/jojik85/fest/blob/main/admin.js"
click node_shared "https://github.com/jojik85/fest/blob/main/shared.js"
click node_dataapi "https://github.com/jojik85/fest/blob/main/shared.js"
click node_backend "https://github.com/jojik85/fest/blob/main/backend.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_home,node_landing,node_events,node_gallery,node_contact toneBlue
class node_login,node_profile,node_accommodation,node_sponsors toneAmber
class node_admin toneMint
class node_shared,node_dataapi,node_backend,node_mysql,node_sheets,node_drive,node_email toneRose
class node_visitor toneIndigo
```

## Components

### Festival Discovery

- [Schedule Calendar](https://github.com/jojik85/fest/blob/main/home.js): `home.js`
- [Festival Landing](https://github.com/jojik85/fest/blob/main/index.js): `index.js`
- [Event Browser](https://github.com/jojik85/fest/blob/main/events.js): `events.js`
- [Community Gallery](https://github.com/jojik85/fest/blob/main/gallery.js): `gallery.js`
- [Contact Page](https://github.com/jojik85/fest/blob/main/contact.js): `contact.js`

### User Services

- [Sign-in and OTP](https://github.com/jojik85/fest/blob/main/login.js): `login.js`
- [User Profile](https://github.com/jojik85/fest/blob/main/profile.js): `profile.js`
- [Accommodation Booking](https://github.com/jojik85/fest/blob/main/accommodation.js): `accommodation.js`
- [Sponsor Proposals](https://github.com/jojik85/fest/blob/main/sponsors.js): `sponsors.js`

### Festival Operations

- [Admin Console](https://github.com/jojik85/fest/blob/main/admin.js): `admin.js`

### Shared Platform

- [Shared Runtime](https://github.com/jojik85/fest/blob/main/shared.js): `shared.js`
- [Browser Data API](https://github.com/jojik85/fest/blob/main/shared.js): `shared.js`
- [Flask API](https://github.com/jojik85/fest/blob/main/backend.py): `backend.py`
- **MySQL Store**
- **Google Sheets**
- **Google Drive**
- **Email Service**

### Other components

- **Visitor**

## Connections

- Visitor → Festival Landing: opens
- Visitor → Schedule Calendar: browses
- Visitor → Event Browser: browses
- Visitor → Community Gallery: views
- Visitor → Sign-in and OTP: signs in
- Visitor → Contact Page: contacts
- Sign-in and OTP → Shared Runtime: updates session
- Sign-in and OTP → Browser Data API: loads users
- Sign-in and OTP → Flask API: requests OTP
- Schedule Calendar → Browser Data API: loads data
- Event Browser → Shared Runtime: opens registration
- Event Browser → Browser Data API: loads data
- User Profile → Browser Data API: reads and updates
- User Profile → Shared Runtime: uses account state
- Accommodation Booking → Browser Data API: checks and saves
- Sponsor Proposals → Browser Data API: submits proposal
- Admin Console → Browser Data API: manages records
- Community Gallery → Browser Data API: loads and saves
- Community Gallery → Flask API: sends mail
- Shared Runtime → Browser Data API: provides access
- Browser Data API → Flask API: fetches collections
- Flask API → MySQL Store: reads and writes
- Flask API → Google Sheets: syncs data
- Shared Runtime → Google Drive: uploads files
- Flask API → Google Drive: handles uploads
- Flask API → Email Service: sends messages
