# johnmarkbanquil/banquill architecture

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

- Interactive diagram: https://gitdiagram.com/johnmarkbanquil/banquill
- Repository: https://github.com/johnmarkbanquil/banquill

## Overview

This Laravel/Inertia application manages artists, their music tracks, and stream-based royalty payouts, with account authentication and profile settings. The primary workflow is to maintain an artist catalog, associate tracks with artists, and record payouts whose earnings and commission are calculated by a service. Controllers return Inertia pages and handle domain operations; React pages provide the interface. The README is empty, so capability coverage comes from the source tree and sampled controllers. Unsampled route wiring and frontend interactions are omitted where evidence is unavailable.

Main entry points: [`app/Http/Controllers/RoyaltyPayoutController.php`](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/RoyaltyPayoutController.php) (Payout Management), [`app/Http/Controllers/MusicTrackController.php`](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/MusicTrackController.php) (Track Management), [`app/Http/Controllers/DashboardController.php`](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/DashboardController.php) (Dashboard), [`routes/auth.php`](https://github.com/johnmarkbanquil/banquill/blob/main/routes/auth.php) (Authentication Routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Accounts and Settings"]
  node_user["User<br/>[User.php]"]
  node_auth_routes["Authentication Routes<br/>[auth.php]"]
  node_registration["Registration"]
  node_sessions["Login Sessions"]
  node_email_verification["Email Verification"]
  node_login_validation["Login Validation<br/>[LoginRequest.php]"]
  node_profile["Profile Settings"]
  node_profile_validation["Profile Validation"]
end

subgraph group_catalog["Artist and Track Catalog"]
  node_artists["Artist Records<br/>[Artist.php]"]
  node_artist_service["Artist Service<br/>[ArtistService.php]"]
  node_artist_controller["Artist Management"]
  node_tracks["Music Tracks<br/>[MusicTrack.php]"]
  node_track_service["Track Service"]
  node_track_controller["Track Management"]
  node_track_validation["Track Validation"]
end

subgraph group_royalty["Royalty Payouts"]
  node_payouts["Royalty Payouts<br/>[RoyaltyPayout.php]"]
  node_payout_service["Payout Calculation"]
  node_payout_controller["Payout Management"]
  node_payout_validation["Payout Validation"]
  node_payout_update_validation["Payout Update Validation"]
end

subgraph group_presentation["Inertia and React UI"]
  node_dashboard["Dashboard"]
  node_inertia_middleware["Inertia Middleware"]
  node_track_pages["Track Pages"]
  node_artist_pages["Artist Pages"]
  node_payout_pages["Payout Pages"]
  node_dashboard_page["Dashboard Page<br/>[dashboard.tsx]"]
  node_app_entry["React App Entry<br/>[app.tsx]"]
end

node_visitor(("User"))

node_visitor -->|"starts auth"| node_auth_routes
node_auth_routes -->|"routes registration"| node_registration
node_auth_routes -->|"routes login"| node_sessions
node_auth_routes -->|"routes verification"| node_email_verification
node_registration -->|"creates account"| node_user
node_sessions -->|"uses validation"| node_login_validation
node_profile -->|"accepts validated input"| node_profile_validation
node_artist_service -->|"uses model"| node_artists
node_artist_controller -->|"reads and writes"| node_artists
node_track_service -->|"uses model"| node_tracks
node_track_controller -->|"reads and writes"| node_tracks
node_track_controller -->|"loads artist choices"| node_artists
node_track_controller -->|"renders pages"| node_track_pages
node_track_controller -.->|"validates input"| node_track_validation
node_payout_controller -->|"delegates payout saves"| node_payout_service
node_payout_controller -->|"reads payout records"| node_payouts
node_payout_controller -->|"uses track records"| node_tracks
node_payout_controller -->|"accepts validated input"| node_payout_validation
node_payout_controller -->|"accepts validated input"| node_payout_update_validation
node_payout_service -->|"calculates and saves"| node_payouts
node_dashboard -->|"reads records"| node_artists
node_dashboard -->|"reads records"| node_tracks
node_dashboard -->|"reads records"| node_payouts
node_dashboard -.->|"renders page"| node_dashboard_page
node_app_entry -.->|"receives shared props"| node_inertia_middleware

click node_user "https://github.com/johnmarkbanquil/banquill/blob/main/app/Models/User.php"
click node_auth_routes "https://github.com/johnmarkbanquil/banquill/blob/main/routes/auth.php"
click node_registration "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/Auth/RegisteredUserController.php"
click node_sessions "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/Auth/AuthenticatedSessionController.php"
click node_email_verification "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/Auth/VerifyEmailController.php"
click node_login_validation "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Requests/Auth/LoginRequest.php"
click node_profile "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/Settings/ProfileController.php"
click node_profile_validation "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Requests/Settings/ProfileUpdateRequest.php"
click node_artists "https://github.com/johnmarkbanquil/banquill/blob/main/app/Models/Artist.php"
click node_artist_service "https://github.com/johnmarkbanquil/banquill/blob/main/app/services/ArtistService.php"
click node_artist_controller "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/ArtistController.php"
click node_tracks "https://github.com/johnmarkbanquil/banquill/blob/main/app/Models/MusicTrack.php"
click node_track_service "https://github.com/johnmarkbanquil/banquill/blob/main/app/services/MusicTrackService.php"
click node_track_controller "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/MusicTrackController.php"
click node_track_validation "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Requests/MusicTrackRequest.php"
click node_payouts "https://github.com/johnmarkbanquil/banquill/blob/main/app/Models/RoyaltyPayout.php"
click node_payout_service "https://github.com/johnmarkbanquil/banquill/blob/main/app/services/RoyaltyPayoutService.php"
click node_payout_controller "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/RoyaltyPayoutController.php"
click node_payout_validation "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Requests/StoreRoyaltyPayoutRequest.php"
click node_payout_update_validation "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Requests/UpdateRoyaltyPayoutRequest.php"
click node_dashboard "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/DashboardController.php"
click node_inertia_middleware "https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Middleware/HandleInertiaRequests.php"
click node_track_pages "https://github.com/johnmarkbanquil/banquill/tree/main/resources/js/pages/MusicTracks"
click node_artist_pages "https://github.com/johnmarkbanquil/banquill/tree/main/resources/js/pages/Artists"
click node_payout_pages "https://github.com/johnmarkbanquil/banquill/tree/main/resources/js/pages/RoyaltyPayouts"
click node_dashboard_page "https://github.com/johnmarkbanquil/banquill/blob/main/resources/js/pages/dashboard.tsx"
click node_app_entry "https://github.com/johnmarkbanquil/banquill/blob/main/resources/js/app.tsx"

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_user,node_auth_routes,node_registration,node_sessions,node_email_verification,node_login_validation,node_profile,node_profile_validation,node_visitor toneBlue
class node_artists,node_artist_service,node_artist_controller,node_tracks,node_track_service,node_track_controller,node_track_validation toneAmber
class node_payouts,node_payout_service,node_payout_controller,node_payout_validation,node_payout_update_validation toneMint
class node_dashboard,node_inertia_middleware,node_track_pages,node_artist_pages,node_payout_pages,node_dashboard_page,node_app_entry toneRose
```

## Components

### Accounts and Settings

- [User](https://github.com/johnmarkbanquil/banquill/blob/main/app/Models/User.php): `app/Models/User.php`
- [Authentication Routes](https://github.com/johnmarkbanquil/banquill/blob/main/routes/auth.php): `routes/auth.php`
- [Registration](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/Auth/RegisteredUserController.php): `app/Http/Controllers/Auth/RegisteredUserController.php`
- [Login Sessions](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/Auth/AuthenticatedSessionController.php): `app/Http/Controllers/Auth/AuthenticatedSessionController.php`
- [Email Verification](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/Auth/VerifyEmailController.php): `app/Http/Controllers/Auth/VerifyEmailController.php`
- [Login Validation](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Requests/Auth/LoginRequest.php): `app/Http/Requests/Auth/LoginRequest.php`
- [Profile Settings](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/Settings/ProfileController.php): `app/Http/Controllers/Settings/ProfileController.php`
- [Profile Validation](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Requests/Settings/ProfileUpdateRequest.php): `app/Http/Requests/Settings/ProfileUpdateRequest.php`

### Artist and Track Catalog

- [Artist Records](https://github.com/johnmarkbanquil/banquill/blob/main/app/Models/Artist.php): `app/Models/Artist.php`
- [Artist Service](https://github.com/johnmarkbanquil/banquill/blob/main/app/services/ArtistService.php): `app/services/ArtistService.php`
- [Artist Management](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/ArtistController.php): `app/Http/Controllers/ArtistController.php`
- [Music Tracks](https://github.com/johnmarkbanquil/banquill/blob/main/app/Models/MusicTrack.php): `app/Models/MusicTrack.php`
- [Track Service](https://github.com/johnmarkbanquil/banquill/blob/main/app/services/MusicTrackService.php): `app/services/MusicTrackService.php`
- [Track Management](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/MusicTrackController.php): `app/Http/Controllers/MusicTrackController.php`
- [Track Validation](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Requests/MusicTrackRequest.php): `app/Http/Requests/MusicTrackRequest.php`

### Royalty Payouts

- [Royalty Payouts](https://github.com/johnmarkbanquil/banquill/blob/main/app/Models/RoyaltyPayout.php): `app/Models/RoyaltyPayout.php`
- [Payout Calculation](https://github.com/johnmarkbanquil/banquill/blob/main/app/services/RoyaltyPayoutService.php): `app/services/RoyaltyPayoutService.php`
- [Payout Management](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/RoyaltyPayoutController.php): `app/Http/Controllers/RoyaltyPayoutController.php`
- [Payout Validation](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Requests/StoreRoyaltyPayoutRequest.php): `app/Http/Requests/StoreRoyaltyPayoutRequest.php`
- [Payout Update Validation](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Requests/UpdateRoyaltyPayoutRequest.php): `app/Http/Requests/UpdateRoyaltyPayoutRequest.php`

### Inertia and React UI

- [Dashboard](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Controllers/DashboardController.php): `app/Http/Controllers/DashboardController.php`
- [Inertia Middleware](https://github.com/johnmarkbanquil/banquill/blob/main/app/Http/Middleware/HandleInertiaRequests.php): `app/Http/Middleware/HandleInertiaRequests.php`
- [Track Pages](https://github.com/johnmarkbanquil/banquill/tree/main/resources/js/pages/MusicTracks): `resources/js/pages/MusicTracks`
- [Artist Pages](https://github.com/johnmarkbanquil/banquill/tree/main/resources/js/pages/Artists): `resources/js/pages/Artists`
- [Payout Pages](https://github.com/johnmarkbanquil/banquill/tree/main/resources/js/pages/RoyaltyPayouts): `resources/js/pages/RoyaltyPayouts`
- [Dashboard Page](https://github.com/johnmarkbanquil/banquill/blob/main/resources/js/pages/dashboard.tsx): `resources/js/pages/dashboard.tsx`
- [React App Entry](https://github.com/johnmarkbanquil/banquill/blob/main/resources/js/app.tsx): `resources/js/app.tsx`

### Other components

- **User**

## Connections

- User → Authentication Routes: starts auth (evidence: `routes/auth.php`)
- Authentication Routes → Registration: routes registration (evidence: `routes/auth.php`)
- Authentication Routes → Login Sessions: routes login (evidence: `routes/auth.php`)
- Authentication Routes → Email Verification: routes verification (evidence: `routes/auth.php`)
- Registration → User: creates account (evidence: `app/Http/Controllers/Auth/RegisteredUserController.php`)
- Login Sessions → Login Validation: uses validation (evidence: `app/Http/Controllers/Auth/AuthenticatedSessionController.php`)
- Profile Settings → Profile Validation: accepts validated input (evidence: `app/Http/Controllers/Settings/ProfileController.php`)
- Artist Service → Artist Records: uses model (evidence: `app/services/ArtistService.php`)
- Artist Management → Artist Records: reads and writes (evidence: `app/Http/Controllers/ArtistController.php`)
- Track Service → Music Tracks: uses model (evidence: `app/services/MusicTrackService.php`)
- Track Management → Music Tracks: reads and writes (evidence: `app/Http/Controllers/MusicTrackController.php`)
- Track Management → Artist Records: loads artist choices (evidence: `app/Http/Controllers/MusicTrackController.php`)
- Track Management → Track Pages: renders pages (evidence: `app/Http/Controllers/MusicTrackController.php`)
- Track Management → Track Validation: validates input
- Payout Management → Payout Calculation: delegates payout saves (evidence: `app/Http/Controllers/RoyaltyPayoutController.php`)
- Payout Management → Royalty Payouts: reads payout records (evidence: `app/Http/Controllers/RoyaltyPayoutController.php`)
- Payout Management → Music Tracks: uses track records (evidence: `app/Http/Controllers/RoyaltyPayoutController.php`)
- Payout Management → Payout Validation: accepts validated input (evidence: `app/Http/Controllers/RoyaltyPayoutController.php`)
- Payout Management → Payout Update Validation: accepts validated input (evidence: `app/Http/Controllers/RoyaltyPayoutController.php`)
- Payout Calculation → Royalty Payouts: calculates and saves (evidence: `app/services/RoyaltyPayoutService.php`)
- Dashboard → Artist Records: reads records (evidence: `app/Http/Controllers/DashboardController.php`)
- Dashboard → Music Tracks: reads records (evidence: `app/Http/Controllers/DashboardController.php`)
- Dashboard → Royalty Payouts: reads records (evidence: `app/Http/Controllers/DashboardController.php`)
- Dashboard → Dashboard Page: renders page
- React App Entry → Inertia Middleware: receives shared props
