TuneBox is a full-stack music streaming app with React (Vite) on the frontend and Spring Boot + Neo4j on the backend.
- Frontend: React 19, TypeScript, Vite 7, Tailwind CSS 4, TanStack Query/Table, Radix UI
- Backend: Spring Boot 4.0.3, Java 21, Spring Security, Spring Data Neo4j, Spring Data Elasticsearch
- Data/Search: Neo4j 5.16 + APOC, Elasticsearch 9.2.1
- Infra: Docker Compose (backend stack), Nginx (production reverse proxy)
TuneBox/
├─ backend/ # Spring Boot API, Docker Compose files, Neo4j seed files
├─ frontend/ # Vite React app
├─ media/ # songs + images mounted into backend
├─ nginx/ # nginx.conf used in production stack
└─ README.md
- Adaptive stream quality per user:
/songs/stream/{songId}resolveslow|normal|highvariants from user settings; guests default tohigh. - User audio preferences:
audioQualityandvolumeCapacityare persisted via/users/*settings APIs. - Similar songs experience: backend query excludes the current song and returns top 5 similar tracks; song detail renders compact cards.
- Genre-first song browsing: Songs page groups genres alphabetically and shows vertical genre sections with left-aligned cards.
- Admin management UX:
Manage Songs/Artists/Playlists tables display 20 rows per page with reliable
Previous/Nextdisabled states. - Live auth-aware UI:
frontend dispatches/listens to
tunebox-auth-changedso admin/sidebar/profile states update on login/logout without refresh. - Playback continuity: global player state is context-driven, and layout bottom padding reacts immediately when a song starts/stops.
- Search + recommendations:
Elasticsearch-backed
/searchplus personalized and un-personalized recommendation endpoints.
- Configure backend environment:
cd backend
cp .env.example .env- Start backend stack (Neo4j + Elasticsearch + backend):
npm run dev- (Optional) Start dev stack with Neo4j seed job:
npm run dev:seed- Start frontend:
cd ../frontend
npm install
npm run dev -- --host --port 5173Default URLs:
- Frontend:
http://localhost:5173 - Backend API:
http://localhost:8080 - Neo4j Browser:
http://localhost:7474 - Elasticsearch:
http://localhost:9200
Backend (backend/):
npm run dev/npm run dev:seednpm run dev:down/npm run dev:cleannpm run testnpm run prod/npm run prod:seed/npm run prod:down
Frontend (frontend/):
npm run devnpm run buildnpm run preview
- Production stack (
backend/docker-compose.prod.yml) runsneo4j,backend,elasticsearch, andnginx. nginxserves built frontend files fromfrontend/dist.- Production seed is manual through
npm run prod:seed(usesbackend/neo4j/prod-seed.cypher).
- Backend details:
backend/README.md - Frontend details:
frontend/README.md
This project is licensed under the MIT License. See LICENSE.