From b6773785332b3544bd02b5a8d3b437b587b25cb4 Mon Sep 17 00:00:00 2001 From: Thom Lamb Date: Thu, 20 Aug 2026 08:41:35 -0500 Subject: [PATCH] feat(frontend): add an RD monogram app icon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The app had no favicon at all, so every tab showed the browser's default globe. Adds an RD monogram as frontend/public/favicon.svg plus a 180x180 apple-touch-icon.png, and links both from index.html. The mark is the letters knocked out of a filled tile rather than drawn on their own. At 16px — which is the only size that really decides a favicon — a solid shape with a bright interior stays findable in a strip of twenty tabs, where bare strokes turn to grey fuzz. Every candidate was rendered at 16, 32, 64 and 128 in headless Chromium and looked at rather than trusted from the path data, which is what caught the two drafts that did not survive: one had the D's bowl extending past the viewBox and clipping flat, because a stroked arc reaches half the stroke width beyond its centreline; another shared a stem between a mirrored R and the D and read as a Cyrillic Я. Colours are the accent already defined in src/main.tsx, and the SVG inverts with the theme for the same reason that accent does. Chrome ignores media queries inside a favicon and keeps the light rendering; that is acceptable here rather than worked around, because the pale letters still carry the mark against a dark tab strip. The Apple icon is full-bleed with no inner corner radius, since iOS applies its own mask and would otherwise show a small rounded tile floating inside a larger rounded tile. Also sets theme-color for both schemes so the browser chrome on Android and in an installed PWA matches the app rather than fighting it. Verified: build clean, lint clean, and both files land in dist/, which the Dockerfile copies wholesale into the image's public directory. --- frontend/index.html | 9 ++++++++ frontend/public/apple-touch-icon.png | Bin 0 -> 3135 bytes frontend/public/favicon.svg | 32 +++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 frontend/public/apple-touch-icon.png create mode 100644 frontend/public/favicon.svg diff --git a/frontend/index.html b/frontend/index.html index e1ef587..0d50ad5 100755 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,6 +4,15 @@ Redefined Designs + + + + + +
diff --git a/frontend/public/apple-touch-icon.png b/frontend/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..59d28be00476d1c937102d363148654c4fac9be3 GIT binary patch literal 3135 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 E51FvVwg3PC literal 0 HcmV?d00001 diff --git a/frontend/public/favicon.svg b/frontend/public/favicon.svg new file mode 100644 index 0000000..e28cd43 --- /dev/null +++ b/frontend/public/favicon.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + +