desktop: embed Navidrome again (needs ND_HTTPHEADERS_FRAMEOPTIONS on the Navidrome host)

This commit is contained in:
Martin Dvořák 2026-09-25 08:36:08 +00:00
commit 19fa915e74
3 changed files with 21 additions and 14 deletions

View file

@ -41,15 +41,18 @@ interface IconEntry {
// `embed: true` renders the real site in an iframe, which the browser refuses
// (blank window) when the server sends X-Frame-Options / frame-ancestors.
// Llama.cpp and Jellyfin allow framing; Navidrome sends `X-Frame-Options: DENY`
// and Forgejo (GitDXD) sends `SAMEORIGIN`, so those two use their link card or
// the dedicated GitDXD app instead.
// Llama.cpp and Jellyfin allow framing out of the box. Navidrome sends
// `X-Frame-Options: DENY` unless it is started with
// `ND_HTTPHEADERS_FRAMEOPTIONS=ALLOWALL`, which replaces that header with an
// unrecognised value the browser ignores (that env var is set on the Navidrome
// host — without it this window is blank again). Forgejo (GitDXD) sends
// `SAMEORIGIN`, so it keeps its dedicated app card.
const SERVICE_SHORTCUTS: Shortcut[] = [
{ id: "svc-proxmox", icon: "🖥️", label: "Proxmox", appId: "alacritty", color: "#1257a0", desc: "Server Management" },
{ id: "svc-ai", icon: "🦾", label: "Llama.cpp", url: "https://ai.dvorakmortonxd.dev/", color: "#157347", desc: "Local AI Server", embed: true },
{ id: "svc-jellyfin", icon: "🎬", label: "Jellyfin", url: "https://jelly.dvorakmortonxd.dev/", color: "#6a4fb3", desc: "Local Media Server", embed: true },
{ id: "svc-smp", icon: "🎮", label: "SMP", appId: "smp", color: "#c0392b", desc: "My Survival Minecraft Server" },
{ id: "svc-navidrome", icon: "🎸", label: "Navidrome", url: "https://navidrome.dvorakmortonxd.dev/", color: "#b3005f", desc: "Music Streaming" },
{ id: "svc-navidrome", icon: "🎸", label: "Navidrome", url: "https://navidrome.dvorakmortonxd.dev/", color: "#b3005f", desc: "Music Streaming", embed: true },
{ id: "svc-gitdxd", icon: "🐙", label: "GitDXD", appId: "gitdxd", color: "#6a4fb3", desc: "Best Git Hosting OAT" },
];