# karansunar07/monk-play architecture

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

- Interactive diagram: https://gitdiagram.com/karansunar07/monk-play
- Repository: https://github.com/karansunar07/monk-play

## Overview

Monk Play is a Flask playlist and music-management website. The main user flow is browsing saved tracks or connecting Spotify to import playlists, then viewing and playing playable tracks; admins also upload local music and manage users. Authentication, cookie preferences, dashboard reporting, and CSRF protection are supporting capabilities. Most application behavior appears to be concentrated in app.py, while a separate app package provides authentication routes and MySQL setup. The excerpts do not expose all route implementations, so some capability links rely on README documentation.

Main entry points: [`app.py`](https://github.com/karansunar07/monk-play/blob/main/app.py) (Saved tracks), [`app/database.py`](https://github.com/karansunar07/monk-play/blob/main/app/database.py) (MySQL access), [`app/routes/authroutes.py`](https://github.com/karansunar07/monk-play/blob/main/app/routes/authroutes.py) (Auth routes), [`app/templates`](https://github.com/karansunar07/monk-play/tree/main/app/templates) (Page templates)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_flask["Flask routes<br/>[app.py]"]
  node_home["Home and songs<br/>[app.py]"]
  node_dashboard["Dashboard<br/>[app.py]"]
  node_templates["Page templates"]
  node_player["Music player UI<br/>[app.js]"]
end

subgraph group_music["Music library"]
  node_spotify_import["Spotify import<br/>[app.py]"]
  node_manual_upload["Manual uploads<br/>[app.py]"]
  node_saved_tracks["Saved tracks<br/>[app.py]"]
end

subgraph group_accounts["Accounts and admin"]
  node_auth_routes["Auth routes<br/>[authroutes.py]"]
  node_auth_controller["Auth controller<br/>[authcontroller.py]"]
  node_login_guard["Login guard<br/>[auth.py]"]
  node_admin_tools["Admin tools<br/>[app.py]"]
  node_csrf["CSRF protection<br/>[__init__.py]"]
  node_cookie_tools["Cookie tools<br/>[authcontroller.py]"]
end

subgraph group_storage["Persistence and integrations"]
  node_mysql_access["MySQL access<br/>[database.py]"]
  node_mysql[("MySQL database")]
  node_config["App configuration<br/>[config.py]"]
  node_spotify["Spotify API"]
end

node_listener(("Listener"))
node_admin(("Admin"))

node_listener -->|"browses"| node_flask
node_admin -->|"manages"| node_flask
node_flask -->|"routes requests"| node_home
node_home -->|"loads tracks"| node_saved_tracks
node_home -->|"renders pages"| node_templates
node_dashboard -->|"renders dashboard"| node_templates
node_saved_tracks -->|"reads records"| node_mysql_access
node_player -->|"plays tracks"| node_saved_tracks
node_listener -->|"imports playlists"| node_spotify_import
node_spotify_import -->|"requests playlist data"| node_spotify
node_spotify_import -->|"saves imported tracks"| node_saved_tracks
node_admin -->|"uploads music"| node_manual_upload
node_manual_upload -->|"saves local tracks"| node_saved_tracks
node_saved_tracks -->|"writes records"| node_mysql_access
node_mysql_access -->|"reads and writes"| node_mysql
node_mysql_access -->|"uses settings"| node_config
node_flask -->|"registers blueprint"| node_auth_routes
node_auth_routes -->|"dispatches requests"| node_auth_controller
node_auth_routes -->|"checks login"| node_login_guard
node_auth_controller -->|"loads user"| node_mysql_access
node_flask -->|"validates posts"| node_csrf
node_admin -->|"manages users"| node_admin_tools
node_admin -->|"sets preferences"| node_cookie_tools
node_admin_tools -->|"updates records"| node_mysql_access
node_cookie_tools -->|"renders cookie page"| node_templates

click node_flask "https://github.com/karansunar07/monk-play/blob/main/app.py"
click node_home "https://github.com/karansunar07/monk-play/blob/main/app.py"
click node_dashboard "https://github.com/karansunar07/monk-play/blob/main/app.py"
click node_templates "https://github.com/karansunar07/monk-play/tree/main/app/templates"
click node_player "https://github.com/karansunar07/monk-play/blob/main/app/statics/js/app.js"
click node_spotify_import "https://github.com/karansunar07/monk-play/blob/main/app.py"
click node_manual_upload "https://github.com/karansunar07/monk-play/blob/main/app.py"
click node_saved_tracks "https://github.com/karansunar07/monk-play/blob/main/app.py"
click node_auth_routes "https://github.com/karansunar07/monk-play/blob/main/app/routes/authroutes.py"
click node_auth_controller "https://github.com/karansunar07/monk-play/blob/main/app/controllers/authcontroller.py"
click node_login_guard "https://github.com/karansunar07/monk-play/blob/main/app/auth.py"
click node_admin_tools "https://github.com/karansunar07/monk-play/blob/main/app.py"
click node_csrf "https://github.com/karansunar07/monk-play/blob/main/app/__init__.py"
click node_cookie_tools "https://github.com/karansunar07/monk-play/blob/main/app/controllers/authcontroller.py"
click node_mysql_access "https://github.com/karansunar07/monk-play/blob/main/app/database.py"
click node_config "https://github.com/karansunar07/monk-play/blob/main/config.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_flask,node_home,node_dashboard,node_templates,node_player toneBlue
class node_spotify_import,node_manual_upload,node_saved_tracks toneAmber
class node_auth_routes,node_auth_controller,node_login_guard,node_admin_tools,node_csrf,node_cookie_tools toneMint
class node_mysql_access,node_mysql,node_config,node_spotify toneRose
class node_listener,node_admin toneIndigo
```

## Components

### Web experience

- [Flask routes](https://github.com/karansunar07/monk-play/blob/main/app.py): `app.py`
- [Home and songs](https://github.com/karansunar07/monk-play/blob/main/app.py): `app.py`
- [Dashboard](https://github.com/karansunar07/monk-play/blob/main/app.py): `app.py`
- [Page templates](https://github.com/karansunar07/monk-play/tree/main/app/templates): `app/templates`
- [Music player UI](https://github.com/karansunar07/monk-play/blob/main/app/statics/js/app.js): `app/statics/js/app.js`

### Music library

- [Spotify import](https://github.com/karansunar07/monk-play/blob/main/app.py): `app.py`
- [Manual uploads](https://github.com/karansunar07/monk-play/blob/main/app.py): `app.py`
- [Saved tracks](https://github.com/karansunar07/monk-play/blob/main/app.py): `app.py`

### Accounts and admin

- [Auth routes](https://github.com/karansunar07/monk-play/blob/main/app/routes/authroutes.py): `app/routes/authroutes.py`
- [Auth controller](https://github.com/karansunar07/monk-play/blob/main/app/controllers/authcontroller.py): `app/controllers/authcontroller.py`
- [Login guard](https://github.com/karansunar07/monk-play/blob/main/app/auth.py): `app/auth.py`
- [Admin tools](https://github.com/karansunar07/monk-play/blob/main/app.py): `app.py`
- [CSRF protection](https://github.com/karansunar07/monk-play/blob/main/app/__init__.py): `app/__init__.py`
- [Cookie tools](https://github.com/karansunar07/monk-play/blob/main/app/controllers/authcontroller.py): `app/controllers/authcontroller.py`

### Persistence and integrations

- [MySQL access](https://github.com/karansunar07/monk-play/blob/main/app/database.py): `app/database.py`
- **MySQL database**
- [App configuration](https://github.com/karansunar07/monk-play/blob/main/config.py): `config.py`
- **Spotify API**

### Other components

- **Listener**
- **Admin**

## Connections

- Listener → Flask routes: browses (evidence: `README.md`)
- Admin → Flask routes: manages (evidence: `README.md`)
- Flask routes → Home and songs: routes requests (evidence: `app.py`)
- Home and songs → Saved tracks: loads tracks (evidence: `app.py`)
- Home and songs → Page templates: renders pages (evidence: `README.md`)
- Dashboard → Page templates: renders dashboard (evidence: `README.md`)
- Saved tracks → MySQL access: reads records (evidence: `README.md`)
- Music player UI → Saved tracks: plays tracks (evidence: `README.md`)
- Listener → Spotify import: imports playlists (evidence: `README.md`)
- Spotify import → Spotify API: requests playlist data (evidence: `app.py`)
- Spotify import → Saved tracks: saves imported tracks (evidence: `README.md`)
- Admin → Manual uploads: uploads music (evidence: `README.md`)
- Manual uploads → Saved tracks: saves local tracks (evidence: `README.md`)
- Saved tracks → MySQL access: writes records (evidence: `app.py`)
- MySQL access → MySQL database: reads and writes (evidence: `app/database.py`)
- MySQL access → App configuration: uses settings (evidence: `app/database.py`)
- Flask routes → Auth routes: registers blueprint
- Auth routes → Auth controller: dispatches requests (evidence: `app/routes/authroutes.py`)
- Auth routes → Login guard: checks login (evidence: `app/routes/authroutes.py`)
- Auth controller → MySQL access: loads user (evidence: `app/controllers/authcontroller.py`)
- Flask routes → CSRF protection: validates posts (evidence: `app/__init__.py`)
- Admin → Admin tools: manages users (evidence: `README.md`)
- Admin → Cookie tools: sets preferences (evidence: `app/controllers/authcontroller.py`)
- Admin tools → MySQL access: updates records (evidence: `README.md`)
- Cookie tools → Page templates: renders cookie page (evidence: `app/controllers/authcontroller.py`)
