Add a favicon, home-screen icons and a web manifest

The favicon is a bowl of soup: this household's catalog is half keitto, so it
is at least honest. favicon.svg follows the system theme in the tab strip.

Home-screen icons cannot do the same. They must be opaque and must not change
with the theme, so assets/icon.svg is a separate fixed-colour source, with the
artwork inside the central 80% for Android to mask to any launcher shape. The
same 512 is declared maskable in the manifest.

`make icons` rasterises with rsvg-convert and compresses with
`oxipng -o max --zopfli`, which beat `optipng -o7` at every size — 5860 bytes
against 6109 for the three files. Plain `oxipng -o max` was not an upgrade: it
won the two small icons and lost the 512, ending up larger overall. All output
verified pixel-identical to the rasterizer. The PNGs are committed so the
build needs no rasterizer.

Two things that only fail on a real device, so both are covered by smoke
checks: Go has no mime entry for .webmanifest and served it as octet-stream,
which browsers ignore; and a manifest fetch carries no credentials by default,
so behind Basic auth it needs crossorigin="use-credentials" or it 401s.
This commit is contained in:
Esa Kataja
2026-09-05 18:58:42 +03:00
parent d15f741ab1
commit 0538d61ba6
16 changed files with 283 additions and 4 deletions
+19
View File
@@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512"
role="img" aria-label="Foodster">
<!-- Source for the home-screen PNGs; `make icons` rasterises it.
Unlike favicon.svg this one is opaque and fixed-colour: a home screen
icon cannot be transparent and must not change with the system theme.
The bowl sits inside the central 80% so Android can mask it to any
shape without clipping the artwork. -->
<rect width="512" height="512" fill="#15616D"/>
<g transform="translate(112 112) scale(9)">
<g fill="#ECEDE8">
<rect x="1.5" y="12" width="29" height="3.2" rx="1.6"/>
<path d="M3.5 15.2 h25 a12.5 12.5 0 0 1 -25 0 z"/>
</g>
<g fill="none" stroke="#ECEDE8" stroke-width="3" stroke-linecap="round">
<path d="M11.5 9 c0 -2.1 2.1 -2.6 2.1 -4.6"/>
<path d="M19 9 c0 -2.1 2.1 -2.6 2.1 -4.6"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 918 B