# alexalkhatib/melody-playlist-app architecture

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

- Interactive diagram: https://gitdiagram.com/alexalkhatib/melody-playlist-app
- Repository: https://github.com/alexalkhatib/melody-playlist-app

## Overview

Melody is a Symfony monolith for collaborative music cataloguing and personal playlists. A visitor enters through the Symfony front controller; users can register or authenticate, browse and search the shared catalogue, upload tracks, and manage playlists, while contact messages and admin operations provide separate branches. Controllers coordinate forms, repositories and Twig views; Doctrine-backed entities represent accounts, tracks, genres, playlists and contact messages. The README documents email delivery and the major application features; some subsystem links below rely on that documentation because their implementation excerpts were not provided.

Main entry points: [`src/Repository`](https://github.com/alexalkhatib/melody-playlist-app/tree/main/src/Repository) (Doctrine repositories), [`src/Entity/User.php`](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Entity/User.php) (User accounts), [`src/Controller/ContactController.php`](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/ContactController.php) (Contact messages), [`src/Entity/Morceaux.php`](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Entity/Morceaux.php) (Track records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_front["HTTP front controller<br/>[index.php]"]
  node_home["Home and discovery<br/>[HomeController.php]"]
  node_views["Twig pages and player"]
  node_contact["Contact messages"]
  node_mailer["SMTP mail service"]
end

subgraph group_accounts["Accounts and access"]
  node_auth["Login and security"]
  node_authenticator["Login authenticator"]
  node_registration["Account registration"]
  node_profile["Profile management"]
end

subgraph group_music["Music and playlists"]
  node_tracks["Music catalogue"]
  node_trackform["Track form and uploads<br/>[MorceauxType.php]"]
  node_playlist["Playlist management"]
  node_playlistform["Playlist selection form<br/>[PlaylistType.php]"]
end

subgraph group_admin["Administration"]
  node_admin["Admin dashboard"]
  node_admincrud["Admin catalogue and CRUD"]
  node_adminusers["Admin user management"]
end

subgraph group_data["Domain and persistence"]
  node_user["User accounts<br/>[User.php]"]
  node_trackentity["Track records<br/>[Morceaux.php]"]
  node_genreentity["Music genres<br/>[Genre.php]"]
  node_playlistentity["Playlist records<br/>[Playlist.php]"]
  node_contactentity["Contact records<br/>[Contact.php]"]
  node_repositories["Doctrine repositories"]
  node_database[("SQL database")]
end

node_visitor(("Visitor / user"))

node_visitor -->|"sends request"| node_front
node_front -->|"routes request"| node_home
node_home -->|"queries discovery"| node_repositories
node_home -->|"renders pages"| node_views
node_visitor -->|"submits credentials"| node_auth
node_auth -->|"authenticates with"| node_authenticator
node_authenticator -->|"loads account"| node_user
node_visitor -->|"registers"| node_registration
node_registration -->|"creates account"| node_user
node_registration -->|"uses account repository"| node_repositories
node_visitor -->|"manages profile"| node_profile
node_profile -->|"updates account"| node_user
node_profile -->|"queries account activity"| node_repositories
node_visitor -->|"browses and adds tracks"| node_tracks
node_tracks -->|"handles track form"| node_trackform
node_tracks -->|"searches and persists tracks"| node_repositories
node_trackform -->|"validates track data"| node_trackentity
node_visitor -->|"manages playlists"| node_playlist
node_playlist -->|"handles selection form"| node_playlistform
node_playlist -->|"queries and persists playlists"| node_repositories
node_playlistform -->|"edits playlist data"| node_playlistentity
node_visitor -->|"sends message"| node_contact
node_contact -->|"creates message record"| node_contactentity
node_contact -->|"persists message"| node_repositories
node_contact -->|"sends email"| node_mailer
node_admin -->|"reads dashboard counts"| node_repositories
node_admin -->|"offers catalogue CRUD"| node_admincrud
node_admin -->|"offers user CRUD"| node_adminusers
node_admincrud -->|"manages track records"| node_trackentity
node_adminusers -->|"manages accounts"| node_user
node_repositories -->|"reads and writes"| node_database
node_trackentity -->|"references genre"| node_genreentity
node_trackentity -->|"joins playlists"| node_playlistentity
node_playlistentity -->|"belongs to owner"| node_user
node_visitor -->|"listens via player"| node_views

click node_front "https://github.com/alexalkhatib/melody-playlist-app/blob/main/public/index.php"
click node_home "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/HomeController.php"
click node_views "https://github.com/alexalkhatib/melody-playlist-app/tree/main/templates"
click node_contact "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/ContactController.php"
click node_auth "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/SecurityController.php"
click node_authenticator "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Security/LoginAuthenticator.php"
click node_registration "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/RegistrationController.php"
click node_profile "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/ProfileController.php"
click node_user "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Entity/User.php"
click node_tracks "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/MorceauxController.php"
click node_trackform "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Form/MorceauxType.php"
click node_playlist "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/PlaylistController.php"
click node_playlistform "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Form/PlaylistType.php"
click node_trackentity "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Entity/Morceaux.php"
click node_genreentity "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Entity/Genre.php"
click node_playlistentity "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Entity/Playlist.php"
click node_contactentity "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Entity/Contact.php"
click node_repositories "https://github.com/alexalkhatib/melody-playlist-app/tree/main/src/Repository"
click node_admin "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/Admin/DashboardController.php"
click node_admincrud "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/Admin/MorceauxCrudController.php"
click node_adminusers "https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/Admin/UserCrudController.php"

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_front,node_home,node_views,node_contact,node_mailer,node_visitor toneBlue
class node_auth,node_authenticator,node_registration,node_profile toneAmber
class node_tracks,node_trackform,node_playlist,node_playlistform toneMint
class node_admin,node_admincrud,node_adminusers toneRose
class node_user,node_trackentity,node_genreentity,node_playlistentity,node_contactentity,node_repositories,node_database toneIndigo
```

## Components

### Web experience

- [HTTP front controller](https://github.com/alexalkhatib/melody-playlist-app/blob/main/public/index.php): `public/index.php`
- [Home and discovery](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/HomeController.php): `src/Controller/HomeController.php`
- [Twig pages and player](https://github.com/alexalkhatib/melody-playlist-app/tree/main/templates): `templates`
- [Contact messages](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/ContactController.php): `src/Controller/ContactController.php`
- **SMTP mail service**

### Accounts and access

- [Login and security](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/SecurityController.php): `src/Controller/SecurityController.php`
- [Login authenticator](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Security/LoginAuthenticator.php): `src/Security/LoginAuthenticator.php`
- [Account registration](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/RegistrationController.php): `src/Controller/RegistrationController.php`
- [Profile management](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/ProfileController.php): `src/Controller/ProfileController.php`

### Music and playlists

- [Music catalogue](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/MorceauxController.php): `src/Controller/MorceauxController.php`
- [Track form and uploads](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Form/MorceauxType.php): `src/Form/MorceauxType.php`
- [Playlist management](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/PlaylistController.php): `src/Controller/PlaylistController.php`
- [Playlist selection form](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Form/PlaylistType.php): `src/Form/PlaylistType.php`

### Administration

- [Admin dashboard](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/Admin/DashboardController.php): `src/Controller/Admin/DashboardController.php`
- [Admin catalogue and CRUD](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/Admin/MorceauxCrudController.php): `src/Controller/Admin/MorceauxCrudController.php`
- [Admin user management](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Controller/Admin/UserCrudController.php): `src/Controller/Admin/UserCrudController.php`

### Domain and persistence

- [User accounts](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Entity/User.php): `src/Entity/User.php`
- [Track records](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Entity/Morceaux.php): `src/Entity/Morceaux.php`
- [Music genres](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Entity/Genre.php): `src/Entity/Genre.php`
- [Playlist records](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Entity/Playlist.php): `src/Entity/Playlist.php`
- [Contact records](https://github.com/alexalkhatib/melody-playlist-app/blob/main/src/Entity/Contact.php): `src/Entity/Contact.php`
- [Doctrine repositories](https://github.com/alexalkhatib/melody-playlist-app/tree/main/src/Repository): `src/Repository`
- **SQL database**

### Other components

- **Visitor / user**

## Connections

- Visitor / user → HTTP front controller: sends request (evidence: `README.md`)
- HTTP front controller → Home and discovery: routes request (evidence: `README.md`)
- Home and discovery → Doctrine repositories: queries discovery (evidence: `src/Controller/HomeController.php`)
- Home and discovery → Twig pages and player: renders pages (evidence: `README.md`)
- Visitor / user → Login and security: submits credentials (evidence: `README.md`)
- Login and security → Login authenticator: authenticates with (evidence: `README.md`)
- Login authenticator → User accounts: loads account (evidence: `README.md`)
- Visitor / user → Account registration: registers (evidence: `README.md`)
- Account registration → User accounts: creates account (evidence: `src/Controller/RegistrationController.php`)
- Account registration → Doctrine repositories: uses account repository (evidence: `src/Controller/RegistrationController.php`)
- Visitor / user → Profile management: manages profile (evidence: `README.md`)
- Profile management → User accounts: updates account (evidence: `src/Controller/ProfileController.php`)
- Profile management → Doctrine repositories: queries account activity (evidence: `src/Controller/ProfileController.php`)
- Visitor / user → Music catalogue: browses and adds tracks (evidence: `README.md`)
- Music catalogue → Track form and uploads: handles track form (evidence: `src/Controller/MorceauxController.php`)
- Music catalogue → Doctrine repositories: searches and persists tracks (evidence: `src/Controller/MorceauxController.php`)
- Track form and uploads → Track records: validates track data (evidence: `src/Form/MorceauxType.php`)
- Visitor / user → Playlist management: manages playlists (evidence: `README.md`)
- Playlist management → Playlist selection form: handles selection form (evidence: `src/Controller/PlaylistController.php`)
- Playlist management → Doctrine repositories: queries and persists playlists (evidence: `src/Controller/PlaylistController.php`)
- Playlist selection form → Playlist records: edits playlist data (evidence: `src/Form/PlaylistType.php`)
- Visitor / user → Contact messages: sends message (evidence: `README.md`)
- Contact messages → Contact records: creates message record (evidence: `src/Controller/ContactController.php`)
- Contact messages → Doctrine repositories: persists message (evidence: `src/Controller/ContactController.php`)
- Contact messages → SMTP mail service: sends email (evidence: `README.md`)
- Admin dashboard → Doctrine repositories: reads dashboard counts (evidence: `src/Controller/Admin/DashboardController.php`)
- Admin dashboard → Admin catalogue and CRUD: offers catalogue CRUD (evidence: `src/Controller/Admin/DashboardController.php`)
- Admin dashboard → Admin user management: offers user CRUD (evidence: `src/Controller/Admin/DashboardController.php`)
- Admin catalogue and CRUD → Track records: manages track records (evidence: `src/Controller/Admin/MorceauxCrudController.php`)
- Admin user management → User accounts: manages accounts (evidence: `src/Controller/Admin/UserCrudController.php`)
- Doctrine repositories → SQL database: reads and writes (evidence: `README.md`)
- Track records → Music genres: references genre (evidence: `src/Entity/Morceaux.php`)
- Track records → Playlist records: joins playlists (evidence: `README.md`)
- Playlist records → User accounts: belongs to owner (evidence: `README.md`)
- Visitor / user → Twig pages and player: listens via player (evidence: `README.md`)
