From 6bdc127057a426a03d70320f564d95acd84a4f09 Mon Sep 17 00:00:00 2001 From: Javier Cicchelli Date: Sun, 19 Jul 2026 03:35:50 +0000 Subject: [PATCH] Improvements to Icons for the Website service (#21) Reviewed-on: https://repo.rock-n-code.com/rock-n-code/loud-amsterdam/pulls/21 Co-authored-by: Javier Cicchelli Co-committed-by: Javier Cicchelli --- Services/Website/README.md | 21 ++++++++++++++++++ Services/Website/Resources/Static/favicon.ico | Bin 766 -> 700 bytes .../Website/Resources/Static/icon-192.png | Bin 0 -> 4501 bytes .../Website/Resources/Static/icon-512.png | Bin 0 -> 13856 bytes Services/Website/Resources/Static/icon.png | Bin 4029 -> 0 bytes Services/Website/Resources/Static/icon.svg | 2 +- .../Website/Resources/Static/site.webmanifest | 6 ++++- .../Internal/Enumerations/StaticFile.swift | 14 +++++++++--- .../Library/Internal/Pages/IndexPage.swift | 8 +++++++ .../Enumerations/StaticFileTests.swift | 12 +++++++--- .../Cases/Internal/Pages/IndexPageTests.swift | 1 + 11 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 Services/Website/Resources/Static/icon-192.png create mode 100644 Services/Website/Resources/Static/icon-512.png delete mode 100644 Services/Website/Resources/Static/icon.png diff --git a/Services/Website/README.md b/Services/Website/README.md index 5f85d3a..7e410c7 100644 --- a/Services/Website/README.md +++ b/Services/Website/README.md @@ -213,6 +213,27 @@ Preview the optimized output locally — requires only Docker and writes to the make ast-minify ``` +### Icons +All icons are renditions of the star mark in `icon.svg`, which is the canonical source — there is no external design file to regenerate from. + +| File | Size | Used by | Dark mode | +| --- | --- | --- | --- | +| `icon.svg` | vector | Tab icon in modern browsers (preferred over the ICO) | Adapts: an embedded `prefers-color-scheme` style flips the accent paths from `#000` to `#f3ecf5`. | +| `favicon.ico` | 32×32 | Tab icon in browsers without SVG favicon support (Safari) | Theme-neutral **by design**: it is the orange star *without* the accent paths, so one raster reads on both themes. Keep it accent-free when regenerating. | +| `icon-192.png`, `icon-512.png` | 192/512 | `site.webmanifest` install icons and splash screens | None (no platform mechanism); full artwork, light rendering, on a transparent background. | +| `apple-touch-icon.png` | 180×180 | iOS home-screen bookmarks | None (fetched once, outside any page context); full artwork, deliberately opaque — iOS fills transparent regions with black. | + +The landing page pairs the icons with two `theme-color` metas: `#0c0710` (media-qualified for dark, listed first — the first matching entry wins) and `#fafafa` as the fallback. + +The raster icons are committed binaries, regenerated from `icon.svg` on demand via a throwaway container (no local toolchain needed) — e.g. for the 512px rendition: +```sh +docker run --rm -v "$PWD/Resources/Static:/work" alpine sh -c ' + apk add --no-cache imagemagick librsvg oxipng && + magick -background none -density 256 /work/icon.svg -depth 8 PNG32:/work/icon-512.png && + oxipng --opt max --strip safe /work/icon-512.png' +``` +(`-density` scales the 192px viewBox: `96 × target ÷ 192`. For `favicon.ico`, rasterize a star-only copy of the SVG at 32px and pack it with `icotool -c --raw`.) + ### Required variables The Makefile and Compose files read these from a `.env` file (or the environment). Provide your own values — do **not** commit secrets. | Variable | Used for | diff --git a/Services/Website/Resources/Static/favicon.ico b/Services/Website/Resources/Static/favicon.ico index be74abd69ad6a32de7375df13cab9354798e328f..2b5bcda7da4eb605b59c7837ef35b2c7204f30cc 100644 GIT binary patch literal 700 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 L+n6>Qqmupy;%#;E literal 0 HcmV?d00001 diff --git a/Services/Website/Resources/Static/icon-512.png b/Services/Website/Resources/Static/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..6412cb0e8bcc61ba7dc75c05103fa6ed9fc1f30b GIT binary patch literal 13856 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 + diff --git a/Services/Website/Resources/Static/site.webmanifest b/Services/Website/Resources/Static/site.webmanifest index 222ae16..e5e517f 100644 --- a/Services/Website/Resources/Static/site.webmanifest +++ b/Services/Website/Resources/Static/site.webmanifest @@ -2,9 +2,13 @@ "short_name": "", "name": "", "icons": [{ - "src": "icon.png", + "src": "icon-192.png", "type": "image/png", "sizes": "192x192" + }, { + "src": "icon-512.png", + "type": "image/png", + "sizes": "512x512" }], "start_url": "/?utm_source=homescreen", "background_color": "#fafafa", diff --git a/Services/Website/Sources/Library/Internal/Enumerations/StaticFile.swift b/Services/Website/Sources/Library/Internal/Enumerations/StaticFile.swift index aed99f7..69afb22 100644 --- a/Services/Website/Sources/Library/Internal/Enumerations/StaticFile.swift +++ b/Services/Website/Sources/Library/Internal/Enumerations/StaticFile.swift @@ -10,8 +10,12 @@ enum StaticFile: CaseIterable, Sendable { case error /// The `favicon.ico` icon. case favicon - /// The `icon.png` and `icon.svg` icons. + /// The `icon.svg` icon. case icon + /// The `icon-192.png` icon for the web manifest. + case icon192 + /// The `icon-512.png` icon for the web manifest. + case icon512 /// The `css/index.css` stylesheet and `js/index.js` script for the landing page. case index /// The `robots.txt` crawler directives. @@ -57,12 +61,14 @@ extension StaticFile { /// The file extensions the file is available with. var fileExtensions: [Extension] { switch self { - case .appleTouchIcon: [.png] + case .appleTouchIcon, + .icon192, + .icon512: [.png] case .error, .index, .shared: [.css, .js] case .favicon: [.ico] - case .icon: [.png, .svg] + case .icon: [.svg] case .robots: [.txt] case .site: [.webmanifest] case .sitemap: [.xml] @@ -76,6 +82,8 @@ extension StaticFile { case .error: "error" case .favicon: "favicon" case .icon: "icon" + case .icon192: "icon-192" + case .icon512: "icon-512" case .index: "index" case .robots: "robots" case .shared: "shared" diff --git a/Services/Website/Sources/Library/Internal/Pages/IndexPage.swift b/Services/Website/Sources/Library/Internal/Pages/IndexPage.swift index 7f8bf19..6a9b6e2 100644 --- a/Services/Website/Sources/Library/Internal/Pages/IndexPage.swift +++ b/Services/Website/Sources/Library/Internal/Pages/IndexPage.swift @@ -74,6 +74,14 @@ struct IndexPage: HTMLDocument, Sendable { .rel("manifest"), .href(StaticFile.site.urlPath(for: .webmanifest)) ) + meta( + .name("theme-color"), + .content("#0c0710"), + .custom( + name: "media", + value: "(prefers-color-scheme: dark)" + ) + ) meta( .name("theme-color"), .content("#fafafa") diff --git a/Services/Website/Tests/Library/Cases/Internal/Enumerations/StaticFileTests.swift b/Services/Website/Tests/Library/Cases/Internal/Enumerations/StaticFileTests.swift index 4cb579f..24bde11 100644 --- a/Services/Website/Tests/Library/Cases/Internal/Enumerations/StaticFileTests.swift +++ b/Services/Website/Tests/Library/Cases/Internal/Enumerations/StaticFileTests.swift @@ -114,7 +114,7 @@ struct StaticFileTests { @Test func `all cases`() { - #expect(File.allCases.count == 9) + #expect(File.allCases.count == 11) } } @@ -159,7 +159,9 @@ private extension StaticFileTests { [.png], [.css, .js], [.ico], - [.png, .svg], + [.svg], + [.png], + [.png], [.css, .js], [.txt], [.css, .js], @@ -171,6 +173,8 @@ private extension StaticFileTests { "error", "favicon", "icon", + "icon-192", + "icon-512", "index", "robots", "shared", @@ -181,7 +185,9 @@ private extension StaticFileTests { ["apple-touch-icon.png"], ["css/error.css", "js/error.js"], ["favicon.ico"], - ["icon.png", "icon.svg"], + ["icon.svg"], + ["icon-192.png"], + ["icon-512.png"], ["css/index.css", "js/index.js"], ["robots.txt"], ["css/shared.css", "js/shared.js"], diff --git a/Services/Website/Tests/Library/Cases/Internal/Pages/IndexPageTests.swift b/Services/Website/Tests/Library/Cases/Internal/Pages/IndexPageTests.swift index a754d77..fc308d2 100644 --- a/Services/Website/Tests/Library/Cases/Internal/Pages/IndexPageTests.swift +++ b/Services/Website/Tests/Library/Cases/Internal/Pages/IndexPageTests.swift @@ -23,6 +23,7 @@ struct IndexPageTests { #expect(html.contains("/icon.svg")) #expect(html.contains("/apple-touch-icon.png")) #expect(html.contains("/site.webmanifest")) + #expect(html.contains(#"media="(prefers-color-scheme: dark)""#)) #expect(html.contains("Hello world!")) #expect(html.contains("/js/shared.js")) #expect(html.contains("/js/index.js"))