feat(portal-shell): full favicon set + PWA manifest #84
Reference in New Issue
Block a user
Delete Branch "feat/portal-shell/favicons-pwa-manifest"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
favicon.icowith a complete asset bundle underapps/portal-shell/public/favicons/: SVG primary favicon, PNG fallback (96×96), legacy ICO, Apple touch icon (180×180), and a Web App Manifest with 192 / 512 maskable PNGs.index.htmlvia the standard<link rel="icon|apple-touch-icon|manifest">block and add a matching<meta name="theme-color" content="#ffffff">."APF Portal"(short_name"Portal") so the PWA install banner and home-screen icon read consistently with the in-app header.Why it matters
prefers-color-schemerules. PNG + ICO entries cover legacy and pinned-tab contexts.display: standalone, the portal is installable on Android home-screens and as a desktop PWA in Chromium-based browsers, without shipping a service worker.<meta name="theme-color">aligned with the manifest'stheme_colortints the browser address bar and the PWA chrome to white — matching the app header.Decisions worth flagging
purpose: "maskable"only. The PNGs were generated with the Android safe-zone padding. On Android they render correctly (cropped to the device's adaptive shape); on contexts that ask for"any"the browser falls back to the SVG / PNG / ICO entries from the<link rel="icon">block, so nothing breaks. If we later want a no-padding edge-to-edge variant for desktop, we can add a second icon entry withpurpose: "any"and a different source.theme_color: #ffffffrather than brand teal. The app header is white in the v1 design; tinting the mobile chrome to teal would create a visible seam at the top of the viewport. We can revisit if a darker header lands.?v=20260511). Staticpublic/assets are not hashed by Angular's build (only bundled JS/CSS are), so the explicit version stamp guards against stale caches on icon updates. The date matches the generation day.What this PR explicitly does NOT do
name/short_name, nolangvariant per locale).Test plan
pnpm exec nx build portal-shell --configuration=production— green, 100 kB gzip initial (unchanged).dist/apps/portal-shell/browser/favicons/.index.htmlin the production build contains every<link>+ thetheme-colormeta.