diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index 1273e1ce0..8972d2d08 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -18,7 +18,7 @@ import { // Module routes import { calendarRoutes } from './modules/calendar/routes'; import { contactsRoutes } from './modules/contacts/routes'; -import { mukkeRoutes } from './modules/mukke/routes'; +import { musicRoutes } from './modules/music/routes'; import { chatRoutes } from './modules/chat/routes'; import { contextRoutes } from './modules/context/routes'; import { pictureRoutes } from './modules/picture/routes'; @@ -48,7 +48,7 @@ app.use('/api/*', authMiddleware()); // ─── Module Routes ────────────────────────────────────────── app.route('/api/v1/calendar', calendarRoutes); app.route('/api/v1/contacts', contactsRoutes); -app.route('/api/v1/mukke', mukkeRoutes); +app.route('/api/v1/music', musicRoutes); app.route('/api/v1/chat', chatRoutes); app.route('/api/v1/context', contextRoutes); app.route('/api/v1/picture', pictureRoutes); diff --git a/apps/api/src/modules/music/routes.ts b/apps/api/src/modules/music/routes.ts index 50b57bfdf..b75b83fb7 100644 --- a/apps/api/src/modules/music/routes.ts +++ b/apps/api/src/modules/music/routes.ts @@ -1,6 +1,6 @@ /** - * Mukke module — Audio upload, presigned URLs, cover art - * Ported from apps/mukke/apps/server + * Music module — Audio upload, presigned URLs, cover art + * Renamed from Mukke. */ import { Hono } from 'hono'; @@ -18,8 +18,8 @@ routes.post('/songs/upload', async (c) => { const key = `users/${userId}/songs/${songId}/${filename}`; try { - const { createMukkeStorage } = await import('@manacore/shared-storage'); - const storage = createMukkeStorage(); + const { createMusicStorage } = await import('@manacore/shared-storage'); + const storage = createMusicStorage(); const uploadUrl = await storage.getUploadUrl(key, { expiresIn: 3600 }); return c.json({ @@ -38,8 +38,8 @@ routes.get('/songs/:id/download-url', async (c) => { if (!storagePath) return c.json({ error: 'storagePath required' }, 400); try { - const { createMukkeStorage } = await import('@manacore/shared-storage'); - const storage = createMukkeStorage(); + const { createMusicStorage } = await import('@manacore/shared-storage'); + const storage = createMusicStorage(); const url = await storage.getDownloadUrl(storagePath, { expiresIn: 3600 }); return c.json({ url }); } catch { @@ -47,6 +47,35 @@ routes.get('/songs/:id/download-url', async (c) => { } }); +// ─── Cover Art Upload (via mana-media) ───────────────────── + +routes.post('/cover/upload', async (c) => { + const userId = c.get('userId'); + const formData = await c.req.formData(); + const file = formData.get('file') as File | null; + + if (!file) return c.json({ error: 'No file' }, 400); + if (file.size > 10 * 1024 * 1024) return c.json({ error: 'Max 10MB' }, 400); + if (!file.type.startsWith('image/')) return c.json({ error: 'Must be an image' }, 400); + + try { + const { uploadImageToMedia } = await import('../../lib/media'); + const buffer = await file.arrayBuffer(); + const result = await uploadImageToMedia(buffer, file.name, { app: 'music', userId }); + + return c.json( + { + coverArtPath: result.id, + coverUrl: result.urls.thumbnail || result.urls.original, + mediaId: result.id, + }, + 201 + ); + } catch { + return c.json({ error: 'Upload failed' }, 500); + } +}); + // ─── Cover Art URL ────────────────────────────────────────── routes.get('/songs/:id/cover-url', async (c) => { @@ -54,8 +83,8 @@ routes.get('/songs/:id/cover-url', async (c) => { if (!coverArtPath) return c.json({ url: null }); try { - const { createMukkeStorage } = await import('@manacore/shared-storage'); - const storage = createMukkeStorage(); + const { createMusicStorage } = await import('@manacore/shared-storage'); + const storage = createMusicStorage(); const url = await storage.getDownloadUrl(coverArtPath, { expiresIn: 3600 }); return c.json({ url }); } catch { @@ -70,8 +99,8 @@ routes.post('/library/cover-urls', async (c) => { if (!paths?.length) return c.json({ urls: {} }); try { - const { createMukkeStorage } = await import('@manacore/shared-storage'); - const storage = createMukkeStorage(); + const { createMusicStorage } = await import('@manacore/shared-storage'); + const storage = createMusicStorage(); const urls: Record = {}; for (const path of paths.slice(0, 50)) { @@ -88,4 +117,4 @@ routes.post('/library/cover-urls', async (c) => { } }); -export { routes as mukkeRoutes }; +export { routes as musicRoutes }; diff --git a/apps/manacore/apps/web/src/hooks.server.ts b/apps/manacore/apps/web/src/hooks.server.ts index 531778161..e43291723 100644 --- a/apps/manacore/apps/web/src/hooks.server.ts +++ b/apps/manacore/apps/web/src/hooks.server.ts @@ -36,8 +36,8 @@ const PUBLIC_STORAGE_API_URL_CLIENT = process.env.PUBLIC_STORAGE_API_URL_CLIENT || process.env.PUBLIC_STORAGE_API_URL || ''; const PUBLIC_CARDS_API_URL_CLIENT = process.env.PUBLIC_CARDS_API_URL_CLIENT || process.env.PUBLIC_CARDS_API_URL || ''; -const PUBLIC_MUKKE_API_URL_CLIENT = - process.env.PUBLIC_MUKKE_API_URL_CLIENT || process.env.PUBLIC_MUKKE_API_URL || ''; +const PUBLIC_MUSIC_API_URL_CLIENT = + process.env.PUBLIC_MUSIC_API_URL_CLIENT || process.env.PUBLIC_MUSIC_API_URL || ''; const PUBLIC_NUTRIPHI_API_URL_CLIENT = process.env.PUBLIC_NUTRIPHI_API_URL_CLIENT || process.env.PUBLIC_NUTRIPHI_API_URL || ''; const PUBLIC_ULOAD_SERVER_URL_CLIENT = @@ -63,7 +63,7 @@ const APP_SUBDOMAINS = new Set([ 'presi', 'nutriphi', 'photos', - 'mukke', + 'music', 'picture', 'calc', 'citycorners', @@ -100,7 +100,7 @@ window.__PUBLIC_SYNC_SERVER_URL__ = ${JSON.stringify(PUBLIC_SYNC_SERVER_URL_CLIE window.__PUBLIC_CHAT_API_URL__ = ${JSON.stringify(PUBLIC_CHAT_API_URL_CLIENT)}; window.__PUBLIC_STORAGE_API_URL__ = ${JSON.stringify(PUBLIC_STORAGE_API_URL_CLIENT)}; window.__PUBLIC_CARDS_API_URL__ = ${JSON.stringify(PUBLIC_CARDS_API_URL_CLIENT)}; -window.__PUBLIC_MUKKE_API_URL__ = ${JSON.stringify(PUBLIC_MUKKE_API_URL_CLIENT)}; +window.__PUBLIC_MUSIC_API_URL__ = ${JSON.stringify(PUBLIC_MUSIC_API_URL_CLIENT)}; window.__PUBLIC_NUTRIPHI_API_URL__ = ${JSON.stringify(PUBLIC_NUTRIPHI_API_URL_CLIENT)}; window.__PUBLIC_ULOAD_SERVER_URL__ = ${JSON.stringify(PUBLIC_ULOAD_SERVER_URL_CLIENT)}; window.__PUBLIC_MEMORO_SERVER_URL__ = ${JSON.stringify(PUBLIC_MEMORO_SERVER_URL_CLIENT)}; @@ -124,7 +124,7 @@ window.__PUBLIC_GLITCHTIP_DSN__ = ${JSON.stringify(PUBLIC_GLITCHTIP_DSN)}; PUBLIC_CHAT_API_URL_CLIENT, PUBLIC_STORAGE_API_URL_CLIENT, PUBLIC_CARDS_API_URL_CLIENT, - PUBLIC_MUKKE_API_URL_CLIENT, + PUBLIC_MUSIC_API_URL_CLIENT, PUBLIC_NUTRIPHI_API_URL_CLIENT, PUBLIC_ULOAD_SERVER_URL_CLIENT, PUBLIC_MEMORO_SERVER_URL_CLIENT, diff --git a/apps/manacore/apps/web/src/lib/api/services/index.ts b/apps/manacore/apps/web/src/lib/api/services/index.ts index 0e8193b99..13fdbf3fb 100644 --- a/apps/manacore/apps/web/src/lib/api/services/index.ts +++ b/apps/manacore/apps/web/src/lib/api/services/index.ts @@ -13,7 +13,7 @@ export { pictureService, type GeneratedImage, type GenerationStats } from './pic export { cardsService, type Deck, type Card, type LearningProgress } from './cards'; export { clockService, type Timer, type Alarm, type ClockStats } from './clock'; export { storageService, type StorageFile, type StorageStats } from './storage'; -export { mukkeService, type Song, type MukkeStats } from './mukke'; +export { musicService, type Song, type MusicStats } from './music'; export { presiService, type PresiDeck, type PresiStats } from './presi'; export { contextService, diff --git a/apps/manacore/apps/web/src/lib/api/services/music.test.ts b/apps/manacore/apps/web/src/lib/api/services/music.test.ts index 42f54d5b6..f8ddd4675 100644 --- a/apps/manacore/apps/web/src/lib/api/services/music.test.ts +++ b/apps/manacore/apps/web/src/lib/api/services/music.test.ts @@ -12,9 +12,9 @@ vi.mock('$lib/stores/auth.svelte', () => ({ }, })); -import { mukkeService } from './mukke'; +import { musicService } from './music'; -describe('mukkeService', () => { +describe('musicService', () => { beforeEach(() => { vi.restoreAllMocks(); }); @@ -25,27 +25,27 @@ describe('mukkeService', () => { describe('formatDuration', () => { it('should format 0 seconds', () => { - expect(mukkeService.formatDuration(0)).toBe('0:00'); + expect(musicService.formatDuration(0)).toBe('0:00'); }); it('should format seconds only', () => { - expect(mukkeService.formatDuration(45)).toBe('0:45'); + expect(musicService.formatDuration(45)).toBe('0:45'); }); it('should format minutes and seconds', () => { - expect(mukkeService.formatDuration(185)).toBe('3:05'); + expect(musicService.formatDuration(185)).toBe('3:05'); }); it('should format hours', () => { - expect(mukkeService.formatDuration(3661)).toBe('1:01:01'); + expect(musicService.formatDuration(3661)).toBe('1:01:01'); }); it('should pad seconds with zero', () => { - expect(mukkeService.formatDuration(60)).toBe('1:00'); + expect(musicService.formatDuration(60)).toBe('1:00'); }); it('should handle negative values', () => { - expect(mukkeService.formatDuration(-10)).toBe('0:00'); + expect(musicService.formatDuration(-10)).toBe('0:00'); }); }); @@ -63,7 +63,7 @@ describe('mukkeService', () => { json: () => Promise.resolve(mockStats), }); - const result = await mukkeService.getStats(); + const result = await musicService.getStats(); expect(result.data).toEqual(mockStats); expect(global.fetch).toHaveBeenCalledWith( @@ -80,7 +80,7 @@ describe('mukkeService', () => { json: () => Promise.resolve([{ id: 's-1', title: 'Song 1' }]), }); - const result = await mukkeService.getRecentSongs(); + const result = await musicService.getRecentSongs(); expect(result.data).toHaveLength(1); expect(global.fetch).toHaveBeenCalledWith( diff --git a/apps/manacore/apps/web/src/lib/api/services/music.ts b/apps/manacore/apps/web/src/lib/api/services/music.ts index 4150ea91b..c4d8ceeff 100644 --- a/apps/manacore/apps/web/src/lib/api/services/music.ts +++ b/apps/manacore/apps/web/src/lib/api/services/music.ts @@ -1,17 +1,17 @@ /** - * Mukke API Service + * Music API Service * - * Fetches music library stats from the Mukke backend for dashboard widgets. + * Fetches music library stats from the Music backend for dashboard widgets. */ import { browser } from '$app/environment'; import { createApiClient, type ApiResult } from '../base-client'; -// Get Mukke API URL dynamically at runtime -function getMukkeApiUrl(): string { +// Get Music API URL dynamically at runtime +function getMusicApiUrl(): string { if (browser && typeof window !== 'undefined') { - const injectedUrl = (window as unknown as { __PUBLIC_MUKKE_API_URL__?: string }) - .__PUBLIC_MUKKE_API_URL__; + const injectedUrl = (window as unknown as { __PUBLIC_MUSIC_API_URL__?: string }) + .__PUBLIC_MUSIC_API_URL__; if (injectedUrl) { return `${injectedUrl}`; } @@ -24,13 +24,13 @@ let _client: ReturnType | null = null; function getClient() { if (!_client) { - _client = createApiClient(getMukkeApiUrl()); + _client = createApiClient(getMusicApiUrl()); } return _client; } /** - * Song entity from Mukke backend + * Song entity from Music backend */ export interface Song { id: string; @@ -49,7 +49,7 @@ export interface Song { /** * Music library statistics */ -export interface MukkeStats { +export interface MusicStats { totalSongs: number; totalPlaylists: number; totalProjects: number; @@ -58,14 +58,14 @@ export interface MukkeStats { } /** - * Mukke service for dashboard widgets + * Music service for dashboard widgets */ -export const mukkeService = { +export const musicService = { /** * Get library statistics */ - async getStats(): Promise> { - return getClient().get('/library/stats'); + async getStats(): Promise> { + return getClient().get('/library/stats'); }, /** @@ -83,7 +83,7 @@ export const mukkeService = { }, /** - * Format duration for display (seconds → MM:SS or HH:MM:SS) + * Format duration for display (seconds -> MM:SS or HH:MM:SS) */ formatDuration(seconds: number): string { if (seconds <= 0) return '0:00'; diff --git a/apps/manacore/apps/web/src/lib/app-registry/apps.ts b/apps/manacore/apps/web/src/lib/app-registry/apps.ts index e89e2004b..a8d3d5e5e 100644 --- a/apps/manacore/apps/web/src/lib/app-registry/apps.ts +++ b/apps/manacore/apps/web/src/lib/app-registry/apps.ts @@ -377,12 +377,12 @@ registerApp({ }); registerApp({ - id: 'mukke', - name: 'Mukke', + id: 'music', + name: 'Music', color: '#F97316', views: { - list: { load: () => import('$lib/modules/mukke/ListView.svelte') }, - detail: { load: () => import('$lib/modules/mukke/views/DetailView.svelte') }, + list: { load: () => import('$lib/modules/music/ListView.svelte') }, + detail: { load: () => import('$lib/modules/music/views/DetailView.svelte') }, }, }); diff --git a/apps/manacore/apps/web/src/lib/components/dashboard/widgets/CalendarEventsWidget.svelte b/apps/manacore/apps/web/src/lib/components/dashboard/widgets/CalendarEventsWidget.svelte index 15ee4de3f..0dceee754 100644 --- a/apps/manacore/apps/web/src/lib/components/dashboard/widgets/CalendarEventsWidget.svelte +++ b/apps/manacore/apps/web/src/lib/components/dashboard/widgets/CalendarEventsWidget.svelte @@ -1,20 +1,30 @@ - Mukke - ManaCore + Music - ManaCore
-

Mukke

+

Music

@@ -62,21 +62,21 @@ diff --git a/apps/manacore/apps/web/src/routes/(app)/music/library/+page.svelte b/apps/manacore/apps/web/src/routes/(app)/music/library/+page.svelte index 9021a2cdd..2aa14b657 100644 --- a/apps/manacore/apps/web/src/routes/(app)/music/library/+page.svelte +++ b/apps/manacore/apps/web/src/routes/(app)/music/library/+page.svelte @@ -1,15 +1,15 @@ - Bibliothek - Mukke - ManaCore + Bibliothek - Music - ManaCore
diff --git a/apps/manacore/apps/web/src/routes/(app)/music/playlists/+page.svelte b/apps/manacore/apps/web/src/routes/(app)/music/playlists/+page.svelte index 19e2936e1..2cac11a94 100644 --- a/apps/manacore/apps/web/src/routes/(app)/music/playlists/+page.svelte +++ b/apps/manacore/apps/web/src/routes/(app)/music/playlists/+page.svelte @@ -1,8 +1,8 @@ - Playlists - Mukke - ManaCore + Playlists - Music - ManaCore
@@ -50,7 +50,7 @@
@@ -83,7 +83,7 @@
{#each playlistsCtx.value as playlist (playlist.id)}
- {playlist?.name || 'Playlist'} - Mukke - ManaCore + {playlist?.name || 'Playlist'} - Music - ManaCore
@@ -78,7 +78,7 @@
@@ -222,6 +222,6 @@ onClose={() => (showShare = false)} url={shareUrl} title={playlist?.name ?? 'Playlist'} - source="mukke" + source="music" description="{songs.length} {songs.length === 1 ? 'Song' : 'Songs'}" /> diff --git a/apps/manacore/apps/web/src/routes/(app)/music/projects/+page.svelte b/apps/manacore/apps/web/src/routes/(app)/music/projects/+page.svelte index 4c32bc7da..93c7a612b 100644 --- a/apps/manacore/apps/web/src/routes/(app)/music/projects/+page.svelte +++ b/apps/manacore/apps/web/src/routes/(app)/music/projects/+page.svelte @@ -1,8 +1,8 @@ - Projekte - Mukke - ManaCore + Projekte - Music - ManaCore
@@ -54,7 +54,7 @@
diff --git a/apps/manacore/apps/web/src/routes/(app)/spiral/+page.svelte b/apps/manacore/apps/web/src/routes/(app)/spiral/+page.svelte index 81be30353..29cb5bd91 100644 --- a/apps/manacore/apps/web/src/routes/(app)/spiral/+page.svelte +++ b/apps/manacore/apps/web/src/routes/(app)/spiral/+page.svelte @@ -26,7 +26,7 @@ Picture: 'image', Clock: 'clock', Storage: 'hard-drive', - Mukke: 'music', + Music: 'music', Presi: 'presentation', Context: 'file-text', Cards: 'layers', diff --git a/apps/manacore/apps/web/src/routes/status/+page.server.ts b/apps/manacore/apps/web/src/routes/status/+page.server.ts index 3a4e09ff7..08d9d8cea 100644 --- a/apps/manacore/apps/web/src/routes/status/+page.server.ts +++ b/apps/manacore/apps/web/src/routes/status/+page.server.ts @@ -16,7 +16,7 @@ const SERVICES = [ { name: 'Chat API', url: process.env.PUBLIC_CHAT_API_URL || 'http://localhost:3030' }, { name: 'Storage API', url: process.env.PUBLIC_STORAGE_API_URL || 'http://localhost:3034' }, { name: 'Cards API', url: process.env.PUBLIC_CARDS_API_URL || 'http://localhost:3036' }, - { name: 'Mukke API', url: process.env.PUBLIC_MUKKE_API_URL || 'http://localhost:3037' }, + { name: 'Music API', url: process.env.PUBLIC_MUSIC_API_URL || 'http://localhost:3037' }, { name: 'NutriPhi API', url: process.env.PUBLIC_NUTRIPHI_API_URL || 'http://localhost:3038' }, { name: 'Uload Server', url: process.env.PUBLIC_ULOAD_SERVER_URL || 'http://localhost:3070' }, { name: 'Memoro Server', url: process.env.PUBLIC_MEMORO_SERVER_URL || 'http://localhost:3015' }, diff --git a/packages/shared-auth-ui/src/components/GuestWelcomeModal.svelte b/packages/shared-auth-ui/src/components/GuestWelcomeModal.svelte index 8fb0bab4c..6065dc06a 100644 --- a/packages/shared-auth-ui/src/components/GuestWelcomeModal.svelte +++ b/packages/shared-auth-ui/src/components/GuestWelcomeModal.svelte @@ -58,7 +58,7 @@ questions: ['Recherche mit System', 'Quelloffen & unabhängig', 'Privat by Design'], context: ['Dein Wissen, strukturiert', 'Quelloffen & unabhängig', 'Privat by Design'], presi: ['Präsentationen neu gedacht', 'Quelloffen & unabhängig', 'Privat by Design'], - mukke: ['Musik machen, einfach so', 'Quelloffen & unabhängig', 'Privat by Design'], + music: ['Musik machen, einfach so', 'Quelloffen & unabhängig', 'Privat by Design'], storage: ['Deine Dateien, dein Tresor', 'Quelloffen & unabhängig', 'Privat by Design'], times: ['Zeiterfassung ohne Overhead', 'Quelloffen & unabhängig', 'Privat by Design'], inventar: ['Alles im Überblick behalten', 'Quelloffen & unabhängig', 'Privat by Design'], @@ -91,7 +91,7 @@ questions: ['Research with structure', 'Open-source & independent', 'Private by design'], context: ['Your knowledge, organized', 'Open-source & independent', 'Private by design'], presi: ['Presentations reimagined', 'Open-source & independent', 'Private by design'], - mukke: ['Make music, just like that', 'Open-source & independent', 'Private by design'], + music: ['Make music, just like that', 'Open-source & independent', 'Private by design'], storage: ['Your files, your vault', 'Open-source & independent', 'Private by design'], times: ['Time tracking without overhead', 'Open-source & independent', 'Private by design'], inventar: ['Keep track of everything', 'Open-source & independent', 'Private by design'], diff --git a/packages/shared-branding/src/app-icons.ts b/packages/shared-branding/src/app-icons.ts index 19d3e5d18..b86df902e 100644 --- a/packages/shared-branding/src/app-icons.ts +++ b/packages/shared-branding/src/app-icons.ts @@ -119,7 +119,7 @@ export const APP_ICONS = { guides: svgToDataUrl( `` ), - mukke: svgToDataUrl( + music: svgToDataUrl( `` ), photos: svgToDataUrl( diff --git a/packages/shared-branding/src/config.ts b/packages/shared-branding/src/config.ts index 0d1ee0992..433f8b847 100644 --- a/packages/shared-branding/src/config.ts +++ b/packages/shared-branding/src/config.ts @@ -272,9 +272,9 @@ export const APP_BRANDING: Record = { logoStroke: true, logoStrokeWidth: 1.5, }, - mukke: { - id: 'mukke', - name: 'Mukke', + music: { + id: 'music', + name: 'Music', tagline: 'Music Workspace', primaryColor: '#ec4899', secondaryColor: '#f472b6', diff --git a/packages/shared-branding/src/index.ts b/packages/shared-branding/src/index.ts index 18f849471..4717dd3a6 100644 --- a/packages/shared-branding/src/index.ts +++ b/packages/shared-branding/src/index.ts @@ -35,7 +35,7 @@ export { SkillTreeLogo, PlantaLogo, LightWriteLogo, - MukkeLogo, + MusicLogo, ContextLogo, CitycornersLogo, } from './logos'; diff --git a/packages/shared-branding/src/logos/MusicLogo.svelte b/packages/shared-branding/src/logos/MusicLogo.svelte index e42aa8f1b..d8fb7fa4f 100644 --- a/packages/shared-branding/src/logos/MusicLogo.svelte +++ b/packages/shared-branding/src/logos/MusicLogo.svelte @@ -10,4 +10,4 @@ let { size = 55, color, class: className = '' }: Props = $props(); - + diff --git a/packages/shared-branding/src/logos/index.ts b/packages/shared-branding/src/logos/index.ts index f52b0fd1e..92212b279 100644 --- a/packages/shared-branding/src/logos/index.ts +++ b/packages/shared-branding/src/logos/index.ts @@ -22,6 +22,6 @@ export { default as QuestionsLogo } from './QuestionsLogo.svelte'; export { default as SkillTreeLogo } from './SkillTreeLogo.svelte'; export { default as PlantaLogo } from './PlantaLogo.svelte'; export { default as LightWriteLogo } from './LightWriteLogo.svelte'; -export { default as MukkeLogo } from './MukkeLogo.svelte'; +export { default as MusicLogo } from './MusicLogo.svelte'; export { default as ContextLogo } from './ContextLogo.svelte'; export { default as CitycornersLogo } from './CitycornersLogo.svelte'; diff --git a/packages/shared-branding/src/mana-apps.ts b/packages/shared-branding/src/mana-apps.ts index f82cca187..ad7c39ba7 100644 --- a/packages/shared-branding/src/mana-apps.ts +++ b/packages/shared-branding/src/mana-apps.ts @@ -514,8 +514,8 @@ export const MANA_APPS: ManaApp[] = [ requiredTier: 'beta', }, { - id: 'mukke', - name: 'Mukke', + id: 'music', + name: 'Music', description: { de: 'Musikproduktion', en: 'Music Production', @@ -524,7 +524,7 @@ export const MANA_APPS: ManaApp[] = [ de: 'Erstelle und verwalte Songs, Playlists und Musikprojekte mit Markern und Arrangements.', en: 'Create and manage songs, playlists, and music projects with markers and arrangements.', }, - icon: APP_ICONS.mukke, + icon: APP_ICONS.music, color: '#ec4899', comingSoon: false, status: 'beta', @@ -759,7 +759,7 @@ export const APP_URLS: Record = { cards: { dev: 'http://localhost:5173/cards', prod: 'https://mana.how/cards' }, zitare: { dev: 'http://localhost:5173/zitare', prod: 'https://mana.how/zitare' }, clock: { dev: 'http://localhost:5173/clock', prod: 'https://mana.how/clock' }, - mukke: { dev: 'http://localhost:5173/mukke', prod: 'https://mana.how/mukke' }, + music: { dev: 'http://localhost:5173/music', prod: 'https://mana.how/music' }, storage: { dev: 'http://localhost:5173/storage', prod: 'https://mana.how/storage' }, presi: { dev: 'http://localhost:5173/presi', prod: 'https://mana.how/presi' }, inventar: { dev: 'http://localhost:5173/inventar', prod: 'https://mana.how/inventar' }, diff --git a/packages/shared-branding/src/types.ts b/packages/shared-branding/src/types.ts index 831ec2c69..04794f883 100644 --- a/packages/shared-branding/src/types.ts +++ b/packages/shared-branding/src/types.ts @@ -24,7 +24,7 @@ export type AppId = | 'planta' | 'lightwrite' | 'context' - | 'mukke' + | 'music' | 'citycorners'; /** diff --git a/packages/shared-links/src/deep-links.ts b/packages/shared-links/src/deep-links.ts index 46017ab40..7d8bcafb6 100644 --- a/packages/shared-links/src/deep-links.ts +++ b/packages/shared-links/src/deep-links.ts @@ -46,7 +46,7 @@ const DEEP_LINK_PATTERNS: Record> = { decks: '/decks/{id}', cards: '/decks/{id}', // Navigate to deck containing the card }, - mukke: { + music: { songs: '/', playlists: '/playlists/{id}', }, diff --git a/packages/shared-storage/README.md b/packages/shared-storage/README.md index 8f9086c23..0180d24d2 100644 --- a/packages/shared-storage/README.md +++ b/packages/shared-storage/README.md @@ -27,7 +27,7 @@ Each app gets its own isolated bucket, created automatically by `minio-init`: | `storage-storage` | Storage | Cloud drive files | | `mail-storage` | Mail | Email attachments | | `inventory-storage` | Inventory | Product photos | -| `mukke-storage` | Mukke | Music tracks, beats, covers | +| `music-storage` | Music | Music tracks, beats, covers | | `planta-storage` | Planta | Plant photos | | `projectdoc-storage` | ProjectDoc | Document files | @@ -88,7 +88,7 @@ import { createStorage } from '@manacore/shared-storage'; // Instead of app-specific factories: const storage = createStorage('PICTURE'); const storage = createStorage('CHAT'); -const storage = createStorage('MUKKE'); +const storage = createStorage('MUSIC'); ``` App-specific aliases still work: `createPictureStorage()`, `createChatStorage()`, etc. diff --git a/packages/shared-storage/src/factory.ts b/packages/shared-storage/src/factory.ts index 5a48362c9..bee70e142 100644 --- a/packages/shared-storage/src/factory.ts +++ b/packages/shared-storage/src/factory.ts @@ -110,6 +110,6 @@ export const createContactsStorage = () => createStorage('CONTACTS'); export const createStorageStorage = (publicUrl?: string) => createStorage('STORAGE', publicUrl); export const createMailStorage = () => createStorage('MAIL'); export const createInventoryStorage = (publicUrl?: string) => createStorage('INVENTORY', publicUrl); -export const createMukkeStorage = () => createStorage('MUKKE'); +export const createMusicStorage = () => createStorage('MUSIC'); export const createPlantaStorage = (publicUrl?: string) => createStorage('PLANTA', publicUrl); export const createProjectDocStorage = () => createStorage('PROJECTDOC'); diff --git a/packages/shared-storage/src/index.ts b/packages/shared-storage/src/index.ts index b02bf6818..d26846e38 100644 --- a/packages/shared-storage/src/index.ts +++ b/packages/shared-storage/src/index.ts @@ -16,7 +16,7 @@ export { createStorageStorage, createMailStorage, createInventoryStorage, - createMukkeStorage, + createMusicStorage, createPlantaStorage, createProjectDocStorage, } from './factory'; diff --git a/packages/shared-storage/src/types.ts b/packages/shared-storage/src/types.ts index 728dd06b6..1c85e6e50 100644 --- a/packages/shared-storage/src/types.ts +++ b/packages/shared-storage/src/types.ts @@ -136,7 +136,7 @@ export const BUCKETS = { STORAGE: 'storage-storage', MAIL: 'mail-storage', INVENTORY: 'inventory-storage', - MUKKE: 'mukke-storage', + MUSIC: 'music-storage', PLANTA: 'planta-storage', PROJECTDOC: 'projectdoc-storage', } as const; diff --git a/packages/shared-uload/src/types.ts b/packages/shared-uload/src/types.ts index cacc78b5f..a45514097 100644 --- a/packages/shared-uload/src/types.ts +++ b/packages/shared-uload/src/types.ts @@ -45,7 +45,7 @@ export type AppSource = | 'chat' | 'storage' | 'presi' - | 'mukke' + | 'music' | 'cards' | 'picture' | 'uload' @@ -59,7 +59,7 @@ export const APP_SOURCE_LABELS: Record = { chat: 'Chat', storage: 'Storage', presi: 'Presi', - mukke: 'Mukke', + music: 'Music', cards: 'Cards', picture: 'Picture', uload: 'uLoad', diff --git a/packages/shared-utils/src/analytics.ts b/packages/shared-utils/src/analytics.ts index 93c05fa65..222f54a78 100644 --- a/packages/shared-utils/src/analytics.ts +++ b/packages/shared-utils/src/analytics.ts @@ -160,7 +160,7 @@ const track = { questions: createModuleTracker('questions'), photos: createModuleTracker('photos'), storage: createModuleTracker('storage'), - mukke: createModuleTracker('mukke'), + music: createModuleTracker('music'), zitare: createModuleTracker('zitare'), presi: createModuleTracker('presi'), subscription: createModuleTracker('subscription'), @@ -434,21 +434,21 @@ export const StorageEvents = { }; /** - * Mukke App Events + * Music App Events */ -export const MukkeEvents = { - songUploaded: () => track.mukke('song_uploaded'), - songUploadFailed: () => track.mukke('song_upload_failed'), - songPlayed: () => track.mukke('song_played'), - songFavorited: (favorited: boolean) => track.mukke('song_favorited', { favorited }), - songDeleted: () => track.mukke('song_deleted'), - playlistCreated: () => track.mukke('playlist_created'), - playlistDeleted: () => track.mukke('playlist_deleted'), - playlistPlayAll: () => track.mukke('playlist_play_all'), - playlistShufflePlay: () => track.mukke('playlist_shuffle_play'), - projectCreated: () => track.mukke('project_created'), - projectDeleted: () => track.mukke('project_deleted'), - projectExported: (format: string) => track.mukke('project_exported', { format }), +export const MusicEvents = { + songUploaded: () => track.music('song_uploaded'), + songUploadFailed: () => track.music('song_upload_failed'), + songPlayed: () => track.music('song_played'), + songFavorited: (favorited: boolean) => track.music('song_favorited', { favorited }), + songDeleted: () => track.music('song_deleted'), + playlistCreated: () => track.music('playlist_created'), + playlistDeleted: () => track.music('playlist_deleted'), + playlistPlayAll: () => track.music('playlist_play_all'), + playlistShufflePlay: () => track.music('playlist_shuffle_play'), + projectCreated: () => track.music('project_created'), + projectDeleted: () => track.music('project_deleted'), + projectExported: (format: string) => track.music('project_exported', { format }), }; /** diff --git a/packages/spiral-db/src/schema.ts b/packages/spiral-db/src/schema.ts index 38927183b..4cfe24499 100644 --- a/packages/spiral-db/src/schema.ts +++ b/packages/spiral-db/src/schema.ts @@ -183,7 +183,7 @@ export const MANA_APP_INDEX: Record = { picture: 5, clock: 6, storage: 7, - mukke: 8, + music: 8, presi: 9, context: 10, cards: 11,