From 8921830f43f76b088a98d91a6377e57db25f6ad6 Mon Sep 17 00:00:00 2001 From: m Date: Sun, 26 Apr 2026 10:48:27 +0200 Subject: [PATCH] =?UTF-8?q?feat(pwa):=20app-shell=20phase=202=20=E2=80=94?= =?UTF-8?q?=20manifest=20+=20icons=20+=20service=20worker=20+=20install=20?= =?UTF-8?q?prompt=20(t-paliad-042)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ship the installability bits that t-paliad-041 deferred so iOS / Android users can add Paliad to their home screen. What landed: - frontend/public/manifest.json — name=Paliad, theme_color #65a30d (lime), display=standalone, scope=/, start_url=/dashboard, four icon entries (192/512 × any/maskable). Served from /manifest.json with the spec-mandated application/manifest+json content type (servePWAManifest in internal/handlers/pwa.go). - frontend/public/icons/ — lime "p" logo rendered to 192/512 PNGs in both "any" and maskable variants (maskable variant has extra safe-zone padding), 180×180 apple-touch-icon, 32×32 favicon. SVG sources kept under frontend/icons-src/ for regeneration via rsvg-convert. - frontend/public/sw.js — minimal cache-first for /assets/* and /icons/*, network-first for /api/*, network passthrough for everything else. CACHE_VERSION + activate-clean lets us bump and purge cleanly. Served from /sw.js so its scope can claim /; Service-Worker-Allowed: / header set, no-cache on the SW file itself so updates take effect on next load. - frontend/src/components/PWAHead.tsx — head fragment (manifest link, apple-touch-icon, favicon, app-name metas, + + ); +} diff --git a/frontend/src/courts.tsx b/frontend/src/courts.tsx index 8dd6e60..45eda3e 100644 --- a/frontend/src/courts.tsx +++ b/frontend/src/courts.tsx @@ -2,6 +2,7 @@ import { h } from "./jsx"; import { Sidebar } from "./components/Sidebar"; import { BottomNav } from "./components/BottomNav"; import { Footer } from "./components/Footer"; +import { PWAHead } from "./components/PWAHead"; export function renderCourts(): string { return "" + ( @@ -12,6 +13,7 @@ export function renderCourts(): string { + Gerichtsverzeichnis — Paliad diff --git a/frontend/src/dashboard.tsx b/frontend/src/dashboard.tsx index f3d71b2..70ec1e1 100644 --- a/frontend/src/dashboard.tsx +++ b/frontend/src/dashboard.tsx @@ -2,6 +2,7 @@ import { h } from "./jsx"; import { Sidebar } from "./components/Sidebar"; import { BottomNav } from "./components/BottomNav"; import { Footer } from "./components/Footer"; +import { PWAHead } from "./components/PWAHead"; // The /* __PALIAD_DASHBOARD_DATA__ */ token below is replaced at request time // by the Go handler (internal/handlers/dashboard_shell.go) with a JSON blob @@ -19,6 +20,7 @@ export function renderDashboard(): string { + Dashboard — Paliad