feat(header): Versionsnummer unter dem Logo
Some checks failed
Build & Publish Docker Image / build-and-push (push) Has been cancelled

Liest KOCHWAS_TAG via +layout.server.ts aus $env/dynamic/private
und zeigt den Tag als kleine graue Zeile unter dem Brand-Text auf
der Startseite. Fallback "dev" wenn nicht gesetzt. Auf engen
Screens mit ausgeblendetem Brand verschwindet auch die Version.

docker-compose.prod.yml reicht die Host-Env-Variable jetzt in den
Container durch (vorher nur fuers Image-Tag-Binding interpoliert).
This commit is contained in:
hsiegeln
2026-04-20 08:41:18 +02:00
parent 633e497bdc
commit 24bd9c1d1b
3 changed files with 30 additions and 3 deletions

View File

@@ -11,6 +11,8 @@ services:
- IMAGE_DIR=/data/images - IMAGE_DIR=/data/images
- SEARXNG_URL=http://searxng:8080 - SEARXNG_URL=http://searxng:8080
- NODE_ENV=production - NODE_ENV=production
# Im Header als kleine Versionsnummer unter dem Logo angezeigt.
- KOCHWAS_TAG=${KOCHWAS_TAG:-dev}
depends_on: depends_on:
- searxng - searxng
restart: unless-stopped restart: unless-stopped

View File

@@ -0,0 +1,8 @@
import type { LayoutServerLoad } from './$types';
import { env } from '$env/dynamic/private';
export const load: LayoutServerLoad = () => {
return {
version: env.KOCHWAS_TAG ?? 'dev'
};
};

View File

@@ -19,7 +19,7 @@
import { registerServiceWorker } from '$lib/client/sw-register'; import { registerServiceWorker } from '$lib/client/sw-register';
import { SearchStore } from '$lib/client/search.svelte'; import { SearchStore } from '$lib/client/search.svelte';
let { children } = $props(); let { data, children } = $props();
const navStore = new SearchStore({ const navStore = new SearchStore({
pageSize: 30, pageSize: 30,
@@ -115,7 +115,10 @@
<header class="bar"> <header class="bar">
<div class="bar-inner"> <div class="bar-inner">
{#if $page.url.pathname === '/'} {#if $page.url.pathname === '/'}
<div class="brand-stack">
<a href="/" class="brand">Kochwas</a> <a href="/" class="brand">Kochwas</a>
<span class="version" title="Deployment-Tag">{data.version}</span>
</div>
{:else} {:else}
<a href="/" class="home-back" aria-label="Zurück zur Startseite"> <a href="/" class="home-back" aria-label="Zurück zur Startseite">
<ArrowLeft size={22} strokeWidth={2} /> <ArrowLeft size={22} strokeWidth={2} />
@@ -307,6 +310,13 @@
padding: 0.6rem 1rem; padding: 0.6rem 1rem;
position: relative; position: relative;
} }
.brand-stack {
display: flex;
flex-direction: column;
align-items: flex-start;
line-height: 1;
flex-shrink: 0;
}
.brand { .brand {
font-size: 1.15rem; font-size: 1.15rem;
font-weight: 700; font-weight: 700;
@@ -314,6 +324,13 @@
color: #2b6a3d; color: #2b6a3d;
flex-shrink: 0; flex-shrink: 0;
} }
.version {
margin-top: 2px;
font-size: 0.65rem;
color: #9aa8a0;
font-variant-numeric: tabular-nums;
letter-spacing: 0.02em;
}
.home-back { .home-back {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
@@ -544,7 +561,7 @@
} }
@media (max-width: 520px) { @media (max-width: 520px) {
/* App-Icon auf engen Screens komplett aus — die Suche bekommt den Platz. */ /* App-Icon auf engen Screens komplett aus — die Suche bekommt den Platz. */
.brand { .brand-stack {
display: none; display: none;
} }
.nav-link { .nav-link {