repo: remove confirmed cross-project DockDeck Stitch scratch
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
GeoIntel release gates / AI image, SBOM and container scan (push) Canceled after 0s

This commit is contained in:
2026-08-27 00:05:24 +02:00
parent 05ad5cbddd
commit b3cc1fe7c7
@@ -1,440 +0,0 @@
<!DOCTYPE html>
<html class="dark" lang="nl"><head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<title>DockDeck | Dashboard</title>
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&amp;family=Geist:wght@400;500;600;700;800&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
<script id="tailwind-config">
tailwind.config = {
darkMode: "class",
theme: {
extend: {
"colors": {
"on-surface-variant": "#c7c4d7",
"on-surface": "#dbe2fd",
"tertiary-container": "#d97721",
"surface-dim": "#0b1326",
"on-secondary-fixed": "#002114",
"on-error": "#690005",
"background": "#0b1326",
"primary-container": "#8a8cc6",
"on-primary-container": "#222457",
"inverse-primary": "#585990",
"surface-container-lowest": "#060d20",
"secondary-fixed-dim": "#4edea3",
"tertiary": "#ffb783",
"primary-fixed-dim": "#c0c1ff",
"surface-container-highest": "#2d3449",
"secondary-container": "#00b47d",
"on-primary-fixed-variant": "#404176",
"surface-container-low": "#131b2e",
"on-tertiary-container": "#452000",
"on-tertiary-fixed": "#301400",
"on-secondary-fixed-variant": "#005236",
"error": "#ffb4ab",
"primary": "#c0c1ff",
"secondary": "#4edea3",
"outline-variant": "rgba(30, 41, 59, 0.5)",
"tertiary-fixed-dim": "#ffb783",
"surface-tint": "#c0c1ff",
"tertiary-fixed": "#ffdcc5",
"error-container": "#93000a",
"surface-container-high": "#222a3e",
"primary-fixed": "#e1e0ff",
"on-secondary-container": "#003e28",
"outline": "#908fa0",
"on-primary-fixed": "#131449",
"status-offline": "#ffb4ab",
"inverse-surface": "#dbe2fd",
"secondary-fixed": "#6ffbbe",
"on-tertiary-fixed-variant": "#703700",
"status-degraded": "#ffb783",
"on-background": "#dbe2fd",
"surface-glass": "rgba(15, 23, 42, 0.6)",
"on-tertiary": "#4f2500",
"status-online": "#4edea3",
"surface": "#0b1326",
"surface-container": "#171f33",
"surface-bright": "#31394e",
"on-secondary": "#003824",
"on-error-container": "#ffdad6",
"surface-variant": "#2d3449",
"inverse-on-surface": "#283044",
"on-primary": "#292b5e"
},
"borderRadius": {
"DEFAULT": "0.25rem",
"lg": "0.5rem",
"xl": "0.75rem",
"full": "9999px"
},
"spacing": {
"gutter": "24px",
"margin-desktop": "40px",
"stack-lg": "48px",
"base": "8px",
"margin-mobile": "16px",
"stack-md": "24px",
"container-max": "1440px",
"stack-sm": "12px"
},
"fontFamily": {
"headline-lg-mobile": ["Geist"],
"label-md": ["Geist"],
"code-sm": ["Geist"],
"headline-md": ["Geist"],
"display-lg": ["Geist"],
"body-lg": ["Inter"],
"headline-lg": ["Geist"],
"body-md": ["Inter"]
},
"fontSize": {
"headline-lg-mobile": ["24px", {"lineHeight": "32px", "fontWeight": "600"}],
"label-md": ["14px", {"lineHeight": "20px", "letterSpacing": "0.02em", "fontWeight": "500"}],
"code-sm": ["13px", {"lineHeight": "18px", "fontWeight": "400"}],
"headline-md": ["24px", {"lineHeight": "32px", "fontWeight": "500"}],
"display-lg": ["48px", {"lineHeight": "56px", "letterSpacing": "-0.02em", "fontWeight": "600"}],
"body-lg": ["18px", {"lineHeight": "28px", "fontWeight": "400"}],
"headline-lg": ["32px", {"lineHeight": "40px", "letterSpacing": "-0.01em", "fontWeight": "600"}],
"body-md": ["16px", {"lineHeight": "24px", "fontWeight": "400"}]
}
},
},
}
</script>
<style>
body {
background-color: #0b1326;
color: #dbe2fd;
font-family: 'Inter', sans-serif;
overflow-x: hidden;
}
.glass-panel {
background: rgba(15, 23, 42, 0.6);
backdrop-filter: blur(12px);
border: 1px solid rgba(30, 41, 59, 0.5);
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.glass-panel:hover {
background: rgba(45, 52, 73, 0.5);
transform: translateY(-2px);
border-color: rgba(99, 102, 241, 0.3);
}
.active-dot {
width: 8px;
height: 8px;
border-radius: 50%;
position: relative;
}
.status-online-dot {
background-color: #4edea3;
box-shadow: 0 0 8px #4edea3;
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.2); opacity: 0.7; }
100% { transform: scale(1); opacity: 1; }
}
.search-container:focus-within {
box-shadow: 0 0 0 2px #8a8cc6;
transform: scale(1.01);
}
/* Material Symbols weight settings */
.material-symbols-outlined {
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
}
.fill-icon {
font-variation-settings: 'FILL' 1;
}
.sidebar-item-active {
background-color: #00b47d;
color: #003e28;
}
</style>
</head>
<body class="min-h-screen flex flex-col md:flex-row">
<!-- Sidebar Navigation -->
<aside class="hidden xl:flex flex-col gap-base p-margin-mobile h-screen w-64 docked left-0 bg-surface-container-low border-r border-outline-variant sticky top-0">
<div class="mb-stack-md px-2">
<img alt="DockDeck Logo" class="h-10 w-auto object-contain" src="https://lh3.googleusercontent.com/aida-public/AB6AXuARFmQsJNz9lu_scBfpGoziJcpALmL8l2l3ZlVf_OIGLaBjpbegIzdvoCKv6mqg6RikG1n2hCh4Mdafsdgz1an2ngqLsQcVHpwUBpwtHCnV-rfdD6yuV6pHIRf-YHCDFF7Fdj0eUXtzx9QPMBx4EoqFHi9yScPNpJZqF2l4W_Zkz-iGUMQJCkXJfFlR-S8gOabCnmIMEy6LZ794BCzI-BBGR7Hzuwtvmv83KqdS-tS-5E7g5JofB4K0eeTgBYTEKx2MiFTbj5m-_lux"/>
</div>
<nav class="flex flex-col gap-1">
<a class="sidebar-item-active flex items-center gap-3 px-4 py-3 rounded-lg font-medium transition-all" href="#">
<span class="material-symbols-outlined">dashboard</span>
<span class="font-label-md text-label-md">Algemeen</span>
</a>
<a class="text-on-surface-variant hover:bg-surface-variant/30 flex items-center gap-3 px-4 py-3 rounded-lg transition-all group" href="#">
<span class="material-symbols-outlined group-hover:translate-x-1 duration-200">apps</span>
<span class="font-label-md text-label-md">Apps</span>
</a>
<a class="text-on-surface-variant hover:bg-surface-variant/30 flex items-center gap-3 px-4 py-3 rounded-lg transition-all group" href="#">
<span class="material-symbols-outlined group-hover:translate-x-1 duration-200">star</span>
<span class="font-label-md text-label-md">Favorieten</span>
</a>
<a class="text-on-surface-variant hover:bg-surface-variant/30 flex items-center gap-3 px-4 py-3 rounded-lg transition-all group" href="#">
<span class="material-symbols-outlined group-hover:translate-x-1 duration-200">category</span>
<span class="font-label-md text-label-md">Categorieën</span>
</a>
<a class="text-on-surface-variant hover:bg-surface-variant/30 flex items-center gap-3 px-4 py-3 rounded-lg transition-all group" href="#">
<span class="material-symbols-outlined group-hover:translate-x-1 duration-200">palette</span>
<span class="font-label-md text-label-md">Weergave</span>
</a>
<a class="text-on-surface-variant hover:bg-surface-variant/30 flex items-center gap-3 px-4 py-3 rounded-lg transition-all group" href="#">
<span class="material-symbols-outlined group-hover:translate-x-1 duration-200">extension</span>
<span class="font-label-md text-label-md">Integraties</span>
</a>
<a class="text-on-surface-variant hover:bg-surface-variant/30 flex items-center gap-3 px-4 py-3 rounded-lg transition-all group" href="#">
<span class="material-symbols-outlined group-hover:translate-x-1 duration-200">backup</span>
<span class="font-label-md text-label-md">Back-up</span>
</a>
</nav>
<div class="mt-auto pt-stack-md border-t border-outline-variant px-2">
<h3 class="font-label-md text-label-md font-bold text-primary">Instellingen</h3>
<p class="text-xs text-on-surface-variant">Beheer uw dashboard</p>
</div>
</aside>
<!-- Main Content Area -->
<main class="flex-1 flex flex-col min-w-0">
<!-- Top Navigation / Search -->
<header class="bg-surface-glass backdrop-blur-md border-b border-outline-variant shadow-sm sticky top-0 z-50">
<div class="flex justify-between items-center w-full px-gutter h-16 max-w-container-max mx-auto">
<div class="flex items-center gap-stack-md flex-1">
<img alt="Logo" class="h-8 xl:hidden" src="https://lh3.googleusercontent.com/aida-public/AB6AXuARFmQsJNz9lu_scBfpGoziJcpALmL8l2l3ZlVf_OIGLaBjpbegIzdvoCKv6mqg6RikG1n2hCh4Mdafsdgz1an2ngqLsQcVHpwUBpwtHCnV-rfdD6yuV6pHIRf-YHCDFF7Fdj0eUXtzx9QPMBx4EoqFHi9yScPNpJZqF2l4W_Zkz-iGUMQJCkXJfFlR-S8gOabCnmIMEy6LZ794BCzI-BBGR7Hzuwtvmv83KqdS-tS-5E7g5JofB4K0eeTgBYTEKx2MiFTbj5m-_lux"/>
<div class="search-container bg-surface-container-low flex items-center px-4 py-2 rounded-full w-full max-w-xl transition-all duration-300">
<span class="material-symbols-outlined text-on-surface-variant mr-3">search</span>
<input class="bg-transparent border-none focus:ring-0 text-on-surface font-body-md text-body-md w-full placeholder-on-surface-variant/50" placeholder="Quick Launch..." type="text"/>
</div>
</div>
<div class="flex items-center gap-4">
<button class="hover:bg-surface-variant/50 p-2 rounded-full transition-all active:scale-95">
<span class="material-symbols-outlined text-on-surface-variant">notifications</span>
</button>
<button class="hover:bg-surface-variant/50 p-2 rounded-full transition-all active:scale-95">
<span class="material-symbols-outlined text-on-surface-variant">settings</span>
</button>
<div class="h-8 w-8 rounded-full bg-primary-container flex items-center justify-center text-on-primary-container font-bold text-xs">
AD
</div>
</div>
</div>
</header>
<!-- Dashboard Canvas -->
<div class="flex-1 px-margin-mobile md:px-margin-desktop py-stack-md md:py-stack-lg max-w-container-max mx-auto w-full">
<!-- Greeting -->
<section class="mb-stack-lg">
<h1 class="font-headline-lg text-headline-lg text-on-surface">Goedenavond, beheerder</h1>
<p class="font-body-md text-body-md text-on-surface-variant mt-1" id="date-display">Donderdag, 24 Augustus 2023</p>
</section>
<!-- Favorites Section -->
<section class="mb-stack-lg">
<div class="flex items-center justify-between mb-stack-md">
<h2 class="font-headline-md text-headline-md text-primary flex items-center gap-2">
<span class="material-symbols-outlined fill-icon">star</span>
Favorieten
</h2>
</div>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-gutter">
<!-- Google -->
<a class="glass-panel p-stack-md rounded-xl flex items-center gap-4" href="#">
<div class="w-12 h-12 rounded-xl bg-surface-container-highest flex items-center justify-center">
<span class="material-symbols-outlined text-2xl">language</span>
</div>
<div class="flex-1">
<h3 class="font-label-md text-label-md text-on-surface">Google</h3>
<p class="text-xs text-on-surface-variant">Zoekmachine</p>
</div>
<span class="material-symbols-outlined text-on-surface-variant text-sm">open_in_new</span>
</a>
<!-- YouTube -->
<a class="glass-panel p-stack-md rounded-xl flex items-center gap-4" href="#">
<div class="w-12 h-12 rounded-xl bg-surface-container-highest flex items-center justify-center">
<span class="material-symbols-outlined text-2xl">play_circle</span>
</div>
<div class="flex-1">
<h3 class="font-label-md text-label-md text-on-surface">YouTube</h3>
<p class="text-xs text-on-surface-variant">Video platform</p>
</div>
<span class="material-symbols-outlined text-on-surface-variant text-sm">open_in_new</span>
</a>
<!-- GitHub -->
<a class="glass-panel p-stack-md rounded-xl flex items-center gap-4" href="#">
<div class="w-12 h-12 rounded-xl bg-surface-container-highest flex items-center justify-center">
<span class="material-symbols-outlined text-2xl">terminal</span>
</div>
<div class="flex-1">
<h3 class="font-label-md text-label-md text-on-surface">GitHub</h3>
<p class="text-xs text-on-surface-variant">Source control</p>
</div>
<span class="material-symbols-outlined text-on-surface-variant text-sm">open_in_new</span>
</a>
</div>
</section>
<!-- Categories & Apps Grid -->
<div class="flex flex-col gap-stack-lg">
<!-- Media Section -->
<section>
<div class="flex items-center gap-2 mb-stack-md border-l-4 border-secondary pl-3">
<h2 class="font-headline-md text-headline-md text-on-surface">Media</h2>
</div>
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-gutter">
<!-- Plex -->
<div class="glass-panel p-gutter rounded-xl flex flex-col items-center text-center relative group cursor-pointer">
<div class="absolute top-3 right-3 flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-secondary/10 border border-secondary/20">
<div class="active-dot status-online-dot"></div>
<span class="text-[10px] font-bold text-secondary uppercase tracking-wider">Online</span>
</div>
<div class="w-16 h-16 rounded-2xl bg-surface-container-high flex items-center justify-center mb-4 transition-transform group-hover:scale-110">
<span class="material-symbols-outlined text-4xl text-primary">movie</span>
</div>
<h3 class="font-label-md text-label-md text-on-surface font-bold">Plex</h3>
<p class="text-xs text-on-surface-variant mt-1">Media Server</p>
</div>
<!-- Overseerr -->
<div class="glass-panel p-gutter rounded-xl flex flex-col items-center text-center relative group cursor-pointer">
<div class="absolute top-3 right-3 flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-secondary/10 border border-secondary/20">
<div class="active-dot status-online-dot"></div>
<span class="text-[10px] font-bold text-secondary uppercase tracking-wider">Online</span>
</div>
<div class="w-16 h-16 rounded-2xl bg-surface-container-high flex items-center justify-center mb-4 transition-transform group-hover:scale-110">
<span class="material-symbols-outlined text-4xl text-primary">shopping_cart</span>
</div>
<h3 class="font-label-md text-label-md text-on-surface font-bold">Overseerr</h3>
<p class="text-xs text-on-surface-variant mt-1">Requests</p>
</div>
</div>
</section>
<!-- Smart Home Section -->
<section>
<div class="flex items-center gap-2 mb-stack-md border-l-4 border-tertiary pl-3">
<h2 class="font-headline-md text-headline-md text-on-surface">Smart Home</h2>
</div>
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-gutter">
<!-- Home Assistant -->
<div class="glass-panel p-gutter rounded-xl flex flex-col items-center text-center relative group cursor-pointer">
<div class="absolute top-3 right-3 flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-error/10 border border-error/20">
<div class="active-dot bg-status-offline"></div>
<span class="text-[10px] font-bold text-status-offline uppercase tracking-wider">Offline</span>
</div>
<div class="w-16 h-16 rounded-2xl bg-surface-container-high flex items-center justify-center mb-4 transition-transform group-hover:scale-110">
<span class="material-symbols-outlined text-4xl text-tertiary">home</span>
</div>
<h3 class="font-label-md text-label-md text-on-surface font-bold">Home Assistant</h3>
<p class="text-xs text-on-surface-variant mt-1">Automation Hub</p>
</div>
<!-- Zigbee2MQTT -->
<div class="glass-panel p-gutter rounded-xl flex flex-col items-center text-center relative group cursor-pointer">
<div class="absolute top-3 right-3 flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-on-surface-variant/10 border border-on-surface-variant/20">
<div class="active-dot bg-outline"></div>
<span class="text-[10px] font-bold text-on-surface-variant uppercase tracking-wider">Onbekend</span>
</div>
<div class="w-16 h-16 rounded-2xl bg-surface-container-high flex items-center justify-center mb-4 transition-transform group-hover:scale-110">
<span class="material-symbols-outlined text-4xl text-tertiary">hub</span>
</div>
<h3 class="font-label-md text-label-md text-on-surface font-bold">Zigbee2MQTT</h3>
<p class="text-xs text-on-surface-variant mt-1">Bridge</p>
</div>
</div>
</section>
<!-- Netwerk Section -->
<section>
<div class="flex items-center gap-2 mb-stack-md border-l-4 border-primary pl-3">
<h2 class="font-headline-md text-headline-md text-on-surface">Netwerk</h2>
</div>
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-gutter">
<!-- Sonarr -->
<div class="glass-panel p-gutter rounded-xl flex flex-col items-center text-center relative group cursor-pointer">
<div class="absolute top-3 right-3 flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-secondary/10 border border-secondary/20">
<div class="active-dot status-online-dot"></div>
<span class="text-[10px] font-bold text-secondary uppercase tracking-wider">Online</span>
</div>
<div class="w-16 h-16 rounded-2xl bg-surface-container-high flex items-center justify-center mb-4 transition-transform group-hover:scale-110">
<span class="material-symbols-outlined text-4xl text-primary-fixed-dim">tv</span>
</div>
<h3 class="font-label-md text-label-md text-on-surface font-bold">Sonarr</h3>
<p class="text-xs text-on-surface-variant mt-1">TV Management</p>
</div>
<!-- Pi-hole -->
<div class="glass-panel p-gutter rounded-xl flex flex-col items-center text-center relative group cursor-pointer">
<div class="absolute top-3 right-3 flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-secondary/10 border border-secondary/20">
<div class="active-dot status-online-dot"></div>
<span class="text-[10px] font-bold text-secondary uppercase tracking-wider">Online</span>
</div>
<div class="w-16 h-16 rounded-2xl bg-surface-container-high flex items-center justify-center mb-4 transition-transform group-hover:scale-110">
<span class="material-symbols-outlined text-4xl text-primary-fixed-dim">shield</span>
</div>
<h3 class="font-label-md text-label-md text-on-surface font-bold">Pi-hole</h3>
<p class="text-xs text-on-surface-variant mt-1">Ad Blocker</p>
</div>
</div>
</section>
</div>
<!-- Footer / Status Indicator -->
<footer class="mt-stack-lg border-t border-outline-variant pt-stack-md flex flex-col sm:flex-row items-center justify-between gap-4">
<div class="flex items-center gap-3 bg-surface-container-low px-4 py-2 rounded-full border border-outline-variant/30">
<span class="material-symbols-outlined text-primary text-sm">inventory_2</span>
<p class="text-xs font-medium text-on-surface-variant">3 nieuwe containers ontdekt</p>
<a class="text-xs font-bold text-primary hover:underline ml-2" href="#">Beheer apps</a>
</div>
<div class="text-xs text-outline font-code-sm">
DockDeck v2.4.1-stable • System Up: 14d 2h 45m
</div>
</footer>
</div>
</main>
<!-- Mobile Bottom Navigation -->
<nav class="md:hidden fixed bottom-0 left-0 right-0 bg-surface-glass backdrop-blur-lg border-t border-outline-variant flex justify-around items-center h-16 z-50">
<a class="flex flex-col items-center gap-1 text-primary" href="#">
<span class="material-symbols-outlined fill-icon">dashboard</span>
<span class="text-[10px] font-bold">Home</span>
</a>
<a class="flex flex-col items-center gap-1 text-on-surface-variant" href="#">
<span class="material-symbols-outlined">apps</span>
<span class="text-[10px]">Apps</span>
</a>
<a class="flex flex-col items-center gap-1 text-on-surface-variant" href="#">
<span class="material-symbols-outlined">search</span>
<span class="text-[10px]">Zoek</span>
</a>
<a class="flex flex-col items-center gap-1 text-on-surface-variant" href="#">
<span class="material-symbols-outlined">person</span>
<span class="text-[10px]">Profiel</span>
</a>
</nav>
<script>
// Update date display
function updateDate() {
const options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
const today = new Date();
const localeDate = today.toLocaleDateString('nl-NL', options);
const capitalized = localeDate.charAt(0).toUpperCase() + localeDate.slice(1);
document.getElementById('date-display').textContent = capitalized;
}
updateDate();
// Subtle micro-interaction for app tiles
document.querySelectorAll('.glass-panel').forEach(panel => {
panel.addEventListener('mousedown', () => {
panel.style.transform = 'scale(0.98) translateY(0px)';
});
panel.addEventListener('mouseup', () => {
panel.style.transform = 'translateY(-2px)';
});
panel.addEventListener('mouseleave', () => {
panel.style.transform = 'translateY(0px)';
});
});
</script>
</body></html>