diff --git a/web/src/lib/branding.test.ts b/web/src/lib/branding.test.ts
index f923db51..4b830fda 100644
--- a/web/src/lib/branding.test.ts
+++ b/web/src/lib/branding.test.ts
@@ -1,7 +1,7 @@
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
-import { appName, description, pageTitle } from './branding';
+import { appName, pageTitle } from './branding';
-const setGlobal = (g: { appName: string; description: string } | undefined) => {
+const setGlobal = (g: { appName: string } | undefined) => {
if (g === undefined) {
delete (window as { __MINSTREL__?: unknown }).__MINSTREL__;
} else {
@@ -14,7 +14,7 @@ describe('branding helpers', () => {
afterEach(() => setGlobal(undefined));
it('appName returns the global value when set', () => {
- setGlobal({ appName: 'Family Jukebox', description: 'home' });
+ setGlobal({ appName: 'Family Jukebox' });
expect(appName()).toBe('Family Jukebox');
});
@@ -23,31 +23,22 @@ describe('branding helpers', () => {
});
it('appName falls back to "Minstrel" when value contains an unrendered Go token', () => {
- setGlobal({ appName: '{{ .AppName }}', description: 'x' });
+ setGlobal({ appName: '{{ .AppName }}' });
expect(appName()).toBe('Minstrel');
});
- it('description returns the global value when set', () => {
- setGlobal({ appName: 'Minstrel', description: 'Our home library.' });
- expect(description()).toBe('Our home library.');
- });
-
- it('description falls back to a default tagline when unset', () => {
- expect(description()).toContain('Self-hosted music server');
- });
-
it('pageTitle with section returns "{appName} · {section}"', () => {
- setGlobal({ appName: 'Minstrel', description: 'x' });
+ setGlobal({ appName: 'Minstrel' });
expect(pageTitle('Search')).toBe('Minstrel · Search');
});
it('pageTitle without section returns just the appName', () => {
- setGlobal({ appName: 'Minstrel', description: 'x' });
+ setGlobal({ appName: 'Minstrel' });
expect(pageTitle()).toBe('Minstrel');
});
it('pageTitle composes nested sections via the · separator', () => {
- setGlobal({ appName: 'Minstrel', description: 'x' });
+ setGlobal({ appName: 'Minstrel' });
expect(pageTitle('Library · Artists')).toBe('Minstrel · Library · Artists');
});
});
diff --git a/web/src/lib/branding.ts b/web/src/lib/branding.ts
index 8857b12f..e229661c 100644
--- a/web/src/lib/branding.ts
+++ b/web/src/lib/branding.ts
@@ -1,12 +1,10 @@
declare global {
interface Window {
- __MINSTREL__?: { appName: string; description: string };
+ __MINSTREL__?: { appName: string };
}
}
const DEFAULT_APP_NAME = 'Minstrel';
-const DEFAULT_DESCRIPTION =
- 'Self-hosted music server with Subsonic compatibility, smart shuffle, and Lidarr integration.';
const isRenderedToken = (v: string | undefined): v is string =>
typeof v === 'string' && v.length > 0 && !v.includes('{{');
@@ -18,13 +16,6 @@ export const appName = (): string => {
: DEFAULT_APP_NAME;
};
-export const description = (): string => {
- if (typeof window === 'undefined') return DEFAULT_DESCRIPTION;
- return isRenderedToken(window.__MINSTREL__?.description)
- ? window.__MINSTREL__!.description
- : DEFAULT_DESCRIPTION;
-};
-
export const pageTitle = (section?: string): string =>
section ? `${appName()} · ${section}` : appName();
diff --git a/web/src/lib/theme/applyMetaThemeColor.svelte.ts b/web/src/lib/theme/applyMetaThemeColor.svelte.ts
index 7643a371..acc66895 100644
--- a/web/src/lib/theme/applyMetaThemeColor.svelte.ts
+++ b/web/src/lib/theme/applyMetaThemeColor.svelte.ts
@@ -1,5 +1,8 @@
import { resolvedTheme } from '$lib/stores/theme.svelte';
+// TODO(#375): keep these hex values in sync with tokens.json
+// colors.dark.obsidian / colors.light.obsidian. The duplication is a known
+// drift hazard from #363; consume from the generated CSS layer instead.
const DARK = '#14171A';
const LIGHT = '#F8F5EE';
diff --git a/web/src/routes/playlists/[id]/+page.svelte b/web/src/routes/playlists/[id]/+page.svelte
index 9fe1a8f8..b169d1a8 100644
--- a/web/src/routes/playlists/[id]/+page.svelte
+++ b/web/src/routes/playlists/[id]/+page.svelte
@@ -138,7 +138,7 @@