FreeVibes 2.0 is a portfolio-grade full-stack streaming platform that evolves the original FreeVibes concept into a modern, Docker-first product. It combines a Next.js 15 frontend, a NestJS API, Prisma, PostgreSQL, Redis, uploads, real playlists, user library flows, playback history and an admin panel, while preserving the original black / yellow / white visual identity.
Built by Jesus Manzanero | GitHub profile
FreeVibes 2.0 ships with two complementary demo layers:
- Public showcase via GitHub Pages
A static but playable showcase lives in
docs/and is deployed automatically bypages.yml. It includes a full-length CC0 jazz track, architecture framing, validation notes and clear CTAs for trying the full stack locally. - Full Docker demo The complete product experience runs locally with Docker Compose: auth, playlists, library, uploads, admin and the real API.
Important:
- GitHub Pages cannot host the full NestJS + PostgreSQL + Redis stack.
- The Pages site is an honest public entry point, not a fake full-stack deployment.
- The repository is prepared for a future split deploy where frontend, backend and database move to dedicated services.
FreeVibes 2.0 is designed as a serious portfolio piece, not just a UI clone:
- product thinking over static screens
- full-stack architecture with modular backend boundaries
- Docker-first reproducibility
- persistence, uploads and admin tooling
- public GitHub presentation plus a future-ready deployment strategy
- Frontend: Next.js 15, TypeScript, App Router
- UI: Tailwind CSS v4, shared components, dark premium styling and motion-safe transitions
- State: Zustand
- Backend: NestJS, Swagger, DTO validation, guards, throttling and hardened uploads
- ORM: Prisma
- Database: PostgreSQL
- Cache foundation: Redis
- Infra: Docker Compose, Nginx, GitHub Actions, GitHub Pages
/apps
/api
/web
/packages
/config
/types
/ui
/infra
/docker
/nginx
/scripts
/docs
/assets
/.github/workflows
/docker-compose.yml
/.env.example
/README.md
apps/web: landing, browse, search, artist, album, playlist, library, profile, auth and adminapps/api:health,auth,users,catalog,search,uploads,playlists,library,playback,admindocs/: public GitHub Pages showcase, publication kit and deployment notesassets/legacy-dataset/: bundled XML seed source so the repo can seed itself without an external sibling folder
- JWT auth with refresh token flow
- editable profile
- real playlists with add, remove and reorder
- favorites, saved albums and followed artists
- playback history and recently played
- persistent player state
- admin CRUD for genres, artists, albums and tracks
- local uploads with validation and future S3-ready structure
- public GitHub Pages showcase with a full-length CC0 jazz track
The public Pages showcase includes one legally reusable jazz track:
- Track:
Jazz at the park - Source page: https://commons.wikimedia.org/wiki/File:Jazz_at_the_park.ogg
- License:
CC0 1.0 - Local note:
docs/audio-license.md
This audio is only used by the static showcase. The full Docker application still relies on the project seed and local development assets.
Validated with real commands and runtime checks before preparing the repo for publication.
postgresredisapiwebnginx
- register
- login
- logout
- profile update
- browse
- search
- artist page
- album page
- playlist page
- favorites
- saved albums
- followed artists
- playback history
- recently played
- admin bootstrap
- audio upload
- large image upload
- Docker runtime and proxy routing
docker compose configdocker compose up --build -ddocker compose psdocker compose exec web pnpm lintdocker compose exec web pnpm testdocker compose exec web pnpm builddocker compose exec api pnpm --filter @freevibes/api test:e2edocker compose exec api pnpm --filter @freevibes/api exec prisma validatedocker compose exec api sh -lc "unset LEGACY_ROOT && export SEED_FORCE_RESET=true && cd /workspace && pnpm --filter @freevibes/api prisma db seed"
- Direct web:
/,/browse,/search,/artists/[slug],/albums/[slug],/playlists/[slug],/library,/profile,/admin,/login,/register - Proxy:
/,/search,/health,/docs,/audio/demo/... - Static showcase:
/,/styles.css,/app.js,/assets/audio/jazz-at-the-park.ogg
- Admin:
admin@freevibes.local/FreevibesAdmin123! - Demo user:
listener@freevibes.local/FreevibesUser123!
docker compose up --buildServices:
- Web:
http://localhost:3000 - API:
http://localhost:3001 - Swagger:
http://localhost:3001/docs - Health:
http://localhost:3001/health - Unified proxy:
http://localhost:8080
pnpm install
pnpm --filter @freevibes/api exec prisma generate
pnpm --filter @freevibes/api exec prisma migrate deploy
pnpm --filter @freevibes/api exec prisma db seed
pnpm devTemplate: ./.env.example
Main variables:
NEXT_PUBLIC_API_BASE_URLDATABASE_URLREDIS_URLJWT_ACCESS_SECRETJWT_REFRESH_SECRETREFRESH_TOKEN_COOKIE_NAMELOCAL_STORAGE_BASE_URLALLOWED_ORIGINSCOOKIE_SECURESEED_FORCE_RESET
Optional:
LEGACY_ROOTif you explicitly want to point the seed to an external legacy dataset
- Only
freevibes-v2is intended to be published as the public repository - Secrets are not stored in the repository;
.envfiles remain ignored - The seed is self-contained thanks to the bundled XML dataset under
assets/legacy-dataset - CI is included in
ci.yml - GitHub Pages is included in
pages.yml - Code is licensed under
MIT
The repository is prepared for a professional GitHub publication flow:
docs/contains the static showcase for GitHub Pagespages.ymldeploys the showcase automatically from GitHub Actionsdeployment-notes.mddocuments the split between showcase, local Docker demo and future production deploypublication-kit.mdcontains reusable copy for GitHub and portfolio
This gives the repo:
- a public URL for instant exploration
- a real audio element users can try directly in the browser
- a local Docker path for full-stack proof
- a clean future path toward managed frontend/backend/database hosting
- Public showcase:
docs/ - README hero:
freevibes-readme-hero.svg - Social preview:
freevibes-social-preview.png - Social preview source:
freevibes-social-preview.svg - Publication copy:
publication-kit.md
- real metadata sync module with MusicBrainz and Cover Art Archive
- S3-compatible storage provider
- richer admin tables with filtering and pagination
- more API and UI e2e coverage
- managed split deployment for frontend, backend, database and object storage