# gaganarora09/saas-music-platform architecture

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

- Interactive diagram: https://gitdiagram.com/gaganarora09/saas-music-platform
- Repository: https://github.com/gaganarora09/saas-music-platform

## Overview

This is a collaborative music-room SaaS: users create rooms, add YouTube songs, and listeners vote on the queue. The dashboard visibly polls a room’s stream list and submits new streams; dedicated APIs handle voting and current playback. The README also describes joining rooms and a 20-minute replay exclusion, but the relevant implementation is not shown, so those capabilities are represented without guessed internal links. Several API implementations and the room page were not sampled; edges are limited to documented or excerpted relationships.

Main entry points: [`app/lib/db.ts`](https://github.com/gaganarora09/saas-music-platform/blob/main/app/lib/db.ts) (Prisma client), [`app/dashboard/page.tsx`](https://github.com/gaganarora09/saas-music-platform/blob/main/app/dashboard/page.tsx) (Room dashboard), [`app/api/auth/[...nextauth]/route.ts`](https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/auth/%5B...nextauth%5D/route.ts) (Authentication routes), [`app/api/Streams/current/route.ts`](https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/Streams/current/route.ts) (Current playback)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_home["Landing page<br/>[page.tsx]"]
  node_landing_ui["Sign-in landing UI<br/>[appbar.tsx]"]
  node_dashboard["Room dashboard<br/>[page.tsx]"]
  node_room_view["Room view<br/>[page.tsx]"]
end

subgraph group_room_api["Room and playback API"]
  node_stream_api["Stream management<br/>[route.ts]"]
  node_playing_api["Current playback<br/>[route.ts]"]
  node_upvote_api["Upvote handler<br/>[route.ts]"]
  node_downvote_api["Downvote handler<br/>[route.ts]"]
  node_delete_vote_api["Vote cleanup<br/>[route.ts]"]
  node_youtube_search["YouTube search<br/>[route.ts]"]
end

subgraph group_identity["Identity"]
  node_auth_api["Authentication routes<br/>[route.ts]"]
  node_session_provider["Session provider<br/>[provider.tsx]"]
end

subgraph group_data["Persistence"]
  node_prisma["Prisma client<br/>[db.ts]"]
  node_database[("Application database")]
end

node_listener(("Room participant"))
node_youtube(("YouTube"))

node_home -->|"renders"| node_landing_ui
node_dashboard -->|"fetches streams"| node_stream_api
node_dashboard -->|"submits streams"| node_stream_api
node_dashboard -->|"clears votes"| node_delete_vote_api
node_auth_api -->|"upserts users"| node_prisma
node_auth_api -->|"loads user"| node_prisma
node_upvote_api -->|"loads auth options"| node_auth_api
node_upvote_api -->|"creates vote"| node_prisma
node_downvote_api -->|"deletes vote"| node_prisma
node_delete_vote_api -->|"deletes votes"| node_prisma
node_playing_api -->|"reads playback"| node_prisma
node_playing_api -->|"updates playback"| node_prisma

click node_home "https://github.com/gaganarora09/saas-music-platform/blob/main/app/page.tsx"
click node_landing_ui "https://github.com/gaganarora09/saas-music-platform/blob/main/app/components/appbar.tsx"
click node_dashboard "https://github.com/gaganarora09/saas-music-platform/blob/main/app/dashboard/page.tsx"
click node_room_view "https://github.com/gaganarora09/saas-music-platform/blob/main/app/stream/%5BcreatorId%5D/page.tsx"
click node_stream_api "https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/Streams/route.ts"
click node_playing_api "https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/Streams/current/route.ts"
click node_upvote_api "https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/Streams/upvote/route.ts"
click node_downvote_api "https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/Streams/downvote/route.ts"
click node_delete_vote_api "https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/Streams/deleteVote/route.ts"
click node_youtube_search "https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/youtube/search/route.ts"
click node_auth_api "https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/auth/%5B...nextauth%5D/route.ts"
click node_session_provider "https://github.com/gaganarora09/saas-music-platform/blob/main/app/provider.tsx"
click node_prisma "https://github.com/gaganarora09/saas-music-platform/blob/main/app/lib/db.ts"

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_ui,node_dashboard,node_room_view toneBlue
class node_stream_api,node_playing_api,node_upvote_api,node_downvote_api,node_delete_vote_api,node_youtube_search toneAmber
class node_auth_api,node_session_provider toneMint
class node_prisma,node_database toneRose
class node_listener,node_youtube toneIndigo
```

## Components

### User experience

- [Landing page](https://github.com/gaganarora09/saas-music-platform/blob/main/app/page.tsx): `app/page.tsx`
- [Sign-in landing UI](https://github.com/gaganarora09/saas-music-platform/blob/main/app/components/appbar.tsx): `app/components/appbar.tsx`
- [Room dashboard](https://github.com/gaganarora09/saas-music-platform/blob/main/app/dashboard/page.tsx): `app/dashboard/page.tsx`
- [Room view](https://github.com/gaganarora09/saas-music-platform/blob/main/app/stream/%5BcreatorId%5D/page.tsx): `app/stream/[creatorId]/page.tsx`

### Room and playback API

- [Stream management](https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/Streams/route.ts): `app/api/Streams/route.ts`
- [Current playback](https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/Streams/current/route.ts): `app/api/Streams/current/route.ts`
- [Upvote handler](https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/Streams/upvote/route.ts): `app/api/Streams/upvote/route.ts`
- [Downvote handler](https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/Streams/downvote/route.ts): `app/api/Streams/downvote/route.ts`
- [Vote cleanup](https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/Streams/deleteVote/route.ts): `app/api/Streams/deleteVote/route.ts`
- [YouTube search](https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/youtube/search/route.ts): `app/api/youtube/search/route.ts`

### Identity

- [Authentication routes](https://github.com/gaganarora09/saas-music-platform/blob/main/app/api/auth/%5B...nextauth%5D/route.ts): `app/api/auth/[...nextauth]/route.ts`
- [Session provider](https://github.com/gaganarora09/saas-music-platform/blob/main/app/provider.tsx): `app/provider.tsx`

### Persistence

- [Prisma client](https://github.com/gaganarora09/saas-music-platform/blob/main/app/lib/db.ts): `app/lib/db.ts`
- **Application database**

### Other components

- **Room participant**
- **YouTube**

## Connections

- Landing page → Sign-in landing UI: renders (evidence: `app/page.tsx`)
- Room dashboard → Stream management: fetches streams (evidence: `app/dashboard/page.tsx`)
- Room dashboard → Stream management: submits streams (evidence: `app/dashboard/page.tsx`)
- Room dashboard → Vote cleanup: clears votes (evidence: `app/dashboard/page.tsx`)
- Authentication routes → Prisma client: upserts users (evidence: `app/api/auth/[...nextauth]/route.ts`)
- Authentication routes → Prisma client: loads user (evidence: `app/api/auth/[...nextauth]/route.ts`)
- Upvote handler → Authentication routes: loads auth options (evidence: `app/api/Streams/upvote/route.ts`)
- Upvote handler → Prisma client: creates vote (evidence: `app/api/Streams/upvote/route.ts`)
- Downvote handler → Prisma client: deletes vote (evidence: `app/api/Streams/downvote/route.ts`)
- Vote cleanup → Prisma client: deletes votes (evidence: `app/api/Streams/deleteVote/route.ts`)
- Current playback → Prisma client: reads playback (evidence: `app/api/Streams/current/route.ts`)
- Current playback → Prisma client: updates playback (evidence: `app/api/Streams/current/route.ts`)
