feat(mukke): rename LightWrite to Mukke and add music library, player, playlists

Combines LightWrite (beat/lyrics editor) and Mukke (iOS music player) into
a single web-based music workspace app. Archives the old Mukke mobile app.

- Rename: @lightwrite/* → @mukke/*, all branding, configs, Dockerfiles
- New DB schemas: songs, playlists, playlist_songs + songId FK on projects
- New backend modules: SongModule, PlaylistModule, LibraryModule
- New web: app shell with sidebar, library (songs/albums/artists/genres),
  web player (queue/shuffle/repeat/MediaSession), playlists, search,
  upload, dashboard, album/artist/genre detail pages
- Auth: add forgot-password + reset-password pages, extend auth store
- Tests: 40 backend unit tests (song, playlist, library services)
- Config: env generation, MinIO bucket, docker-compose prod, cloudflare
- Docs: update CLAUDE.md, auth guidelines with SvelteKit checklist

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-03-19 09:55:56 +01:00
parent ea4b585f37
commit 7a56699d45
199 changed files with 12406 additions and 75 deletions

View file

@ -105,7 +105,7 @@ services:
SMTP_USER: ${SMTP_USER:-94cde5002@smtp-brevo.com}
SMTP_PASSWORD: ${SMTP_PASSWORD}
SMTP_FROM: Mana <noreply@mana.how>
CORS_ORIGINS: https://mana.how,https://chat.mana.how,https://todo.mana.how,https://calendar.mana.how,https://clock.mana.how,https://contacts.mana.how,https://storage.mana.how,https://presi.mana.how,https://nutriphi.mana.how,https://skilltree.mana.how,https://photos.mana.how,https://matrix.mana.how,https://element.mana.how,https://link.mana.how,https://playground.mana.how,https://lightwrite.mana.how,https://zitare.mana.how,https://questions.mana.how,https://planta.mana.how,https://manadeck.mana.how,https://picture.mana.how
CORS_ORIGINS: https://mana.how,https://chat.mana.how,https://todo.mana.how,https://calendar.mana.how,https://clock.mana.how,https://contacts.mana.how,https://storage.mana.how,https://presi.mana.how,https://nutriphi.mana.how,https://skilltree.mana.how,https://photos.mana.how,https://matrix.mana.how,https://element.mana.how,https://link.mana.how,https://playground.mana.how,https://mukke.mana.how,https://zitare.mana.how,https://questions.mana.how,https://planta.mana.how,https://manadeck.mana.how,https://picture.mana.how
DUCKDB_PATH: /data/analytics/metrics.duckdb
SYNAPSE_OIDC_CLIENT_SECRET: ${SYNAPSE_OIDC_CLIENT_SECRET:-}
# Backend URLs for user data aggregation (GDPR self-service)
@ -593,12 +593,12 @@ services:
retries: 3
start_period: 40s
lightwrite-backend:
mukke-backend:
build:
context: .
dockerfile: apps/lightwrite/apps/backend/Dockerfile
image: lightwrite-backend:local
container_name: mana-app-lightwrite-backend
dockerfile: apps/mukke/apps/backend/Dockerfile
image: mukke-backend:local
container_name: mana-app-mukke-backend
restart: always
depends_on:
mana-auth:
@ -606,15 +606,15 @@ services:
environment:
NODE_ENV: production
PORT: 3010
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD:-mana123}@postgres:5432/lightwrite
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD:-mana123}@postgres:5432/mukke
MANA_CORE_AUTH_URL: http://mana-auth:3001
CORS_ORIGINS: https://lightwrite.mana.how,https://mana.how
CORS_ORIGINS: https://mukke.mana.how,https://mana.how
S3_ENDPOINT: http://minio:9000
S3_PUBLIC_ENDPOINT: https://minio.mana.how
S3_REGION: us-east-1
S3_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin}
S3_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin}
S3_BUCKET: lightwrite-storage
S3_BUCKET: mukke-storage
RUN_DB_PUSH: "true"
ports:
- "3010:3010"
@ -1518,25 +1518,25 @@ services:
retries: 3
start_period: 40s
lightwrite-web:
mukke-web:
build:
context: .
dockerfile: apps/lightwrite/apps/web/Dockerfile
dockerfile: apps/mukke/apps/web/Dockerfile
args:
PUBLIC_BACKEND_URL: http://lightwrite-backend:3010
PUBLIC_BACKEND_URL: http://mukke-backend:3010
PUBLIC_MANA_CORE_AUTH_URL: http://mana-auth:3001
image: lightwrite-web:local
container_name: mana-app-lightwrite-web
image: mukke-web:local
container_name: mana-app-mukke-web
restart: always
depends_on:
lightwrite-backend:
mukke-backend:
condition: service_healthy
environment:
NODE_ENV: production
PORT: 5180
PUBLIC_BACKEND_URL: http://lightwrite-backend:3010
PUBLIC_BACKEND_URL: http://mukke-backend:3010
PUBLIC_MANA_CORE_AUTH_URL: http://mana-auth:3001
PUBLIC_BACKEND_URL_CLIENT: https://lightwrite-api.mana.how
PUBLIC_BACKEND_URL_CLIENT: https://mukke-api.mana.how
PUBLIC_MANA_CORE_AUTH_URL_CLIENT: https://auth.mana.how
ports:
- "5180:5180"