v0.167.0: outlined logo + favicon (Part 4 follow-up to v0.166.0)

Viktor pushed the text-outlined logo.svg to felhom.eu main (be9edb4) — wordmark is
now 17 real path glyphs. Swapped FelhomLogoSVG to it; stripped Inkscape's leftover
empty <text/> shells + font-* style leftovers on the paths via lxml DOM pass (glyphs
untouched, no text-to-path by CC), dropped editor namedview. Cleaned FelhomFaviconSVG
vestigial <text>. Both constants now free of <text>/font-family; viewBoxes unchanged;
palette + gradients preserved. TestLogoSVG_NoLiveText committed green.
This commit is contained in:
2026-07-24 13:48:08 +02:00
parent dbd1ff0c17
commit e9a365e59c
4 changed files with 63 additions and 376 deletions
+24
View File
@@ -1,5 +1,29 @@
## Changelog
### v0.167.0 — Outlined logo + favicon (Part 4, the v0.166.0 gated follow-up) (2026-07-24)
No agent coupling; MinAgent unchanged. Embedded-asset constants + one test only — no backend, no
routes, no template/CSS behavior change.
Completes Part 4 that v0.166.0 deferred at the §3a gate. Viktor pushed the text-outlined
`website/assets/logo.svg` to felhom.eu `main` (`be9edb4`): the wordmark is now **17 real `<path>`
glyphs** (Inkscape Object→Path) instead of live `<text>` with `font-family:'Vremena Grotesk'`/`'M+ 2c'`.
Under `<img>` secure static mode only locally-installed fonts resolve, so the old constants rendered
the wordmark in a fallback font on every device without those fonts — now fixed.
- **`FelhomLogoSVG`** body replaced with the outlined master. Inkscape left behind **2 empty `<text/>`
shells + font-* style leftovers on the paths** (inert, but they carried the font names); these were
stripped via a DOM pass (lxml) — **glyphs untouched, no text-to-path conversion done by CC**. Also
dropped the editor-only `<sodipodi:namedview>`. `viewBox` **unchanged** (`0 0 645.30703 408.36403`);
full palette preserved (white glyphs `#ffffff`, blue `.eu` `#008ddf`, navy `#051343`, all 14
gradients, the cloud/house/server/lock artwork).
- **`FelhomFaviconSVG`** vestigial empty `<text>` nodes + their `font-family` removed (cloud icon only;
`viewBox` unchanged `0 0 437.307 296.36403`, 11 paths).
- Both constants now contain **zero `<text` and zero `font-family`**. Served at their existing paths by
the unchanged handlers (the hub-synced-file-first fallback logic is untouched).
- Test: `TestLogoSVG_NoLiveText` (both constants free of `<text`/`font-family`) — was written as the
gated red-proof in v0.166.0 (FAILED against the old constants), now committed green.
### v0.166.0 — Mobile nav drawer + sidebar cleanup + versioned logo/favicon URLs (2026-07-24)
No agent coupling; MinAgent unchanged. Templates (layout/login/icons) + CSS + one login-handler data
+15 -1
View File
@@ -7,7 +7,21 @@
>
> Ask Claude Code: "Please update CONTEXT.md with what we did today"
Last updated: 2026-07-24 (v0.166.0 — mobile nav drawer + sidebar cleanup + versioned logo/favicon URLs)
Last updated: 2026-07-24 (v0.167.0 — outlined logo + favicon, the v0.166.0 Part-4 follow-up)
> **2026-07-24 — v0.167.0 (outlined logo + favicon — Part 4 unblocked).** Viktor pushed the
> text-outlined `logo.svg` to felhom.eu `main` (`be9edb4`); the wordmark is now 17 real `<path>`
> glyphs. `FelhomLogoSVG` swapped to it; Inkscape's leftover **empty `<text/>` shells + font-* leftovers
> on the paths** were stripped via an lxml DOM pass (glyphs untouched — CC did NOT do text-to-path),
> editor `<sodipodi:namedview>` dropped. `FelhomFaviconSVG` vestigial `<text>` removed. Both constants:
> **0 `<text`, 0 `font-family`**; viewBoxes unchanged; palette + 14 gradients preserved. **Gotcha logged:
> Inkscape "Object→Path" leaves empty `<text/>` shells AND copies `style="…font-family:…"` onto the
> resulting `<path>`s — a search for `svg:text` misses them (elements are `<text>`, no prefix); grep
> `<text` and `font-family`.** Also: `serveLogoHandler`/`serveFaviconHandler` serve a **hub-synced file
> first** (`assetsSyncer.Resolve`) and fall back to the constant only if none is on disk — on 9201 the
> constant is what's live (verified). Still open (separate follow-up): website + hub serve their own
> non-outlined logo copies; login.html stylesheet link still unversioned.
> **2026-07-24 — v0.166.0 (mobile nav = off-canvas drawer; sidebar cleanup; ?v= on logo/favicon).**
> Mobile nav was broken: the ≤768px block predated the v0.146.0 accordion and flattened `.nav-links`
+19 -3
View File
@@ -163,9 +163,25 @@ func TestLogin_CustomerNameKept(t *testing.T) {
}
}
// Group E — versioned asset URLs (Scenario E). The logo-constant no-live-text test ships WITH
// Part 4 (the outlined-asset swap), which is gated on Viktor pushing the outlined master; it is
// intentionally not part of this suite while the constants still carry live <text>.
// Group E — logo constants carry NO live text (Scenario E). Under `<img>` secure static mode only
// locally-installed fonts resolve, so a `font-family` in the SVG renders a fallback font everywhere;
// the wordmark must be outlined paths. Shipped in v0.167.0 once the outlined master landed on
// felhom.eu main and the vestigial empty text nodes were stripped.
//
// Red-proof (recorded 2026-07-24): run against the pre-v0.167.0 constants → FAILS, both constants
// contained `<text` + `font-family`.
func TestLogoSVG_NoLiveText(t *testing.T) {
for name, s := range map[string]string{"FelhomLogoSVG": FelhomLogoSVG, "FelhomFaviconSVG": FelhomFaviconSVG} {
if strings.Contains(s, "<text") {
t.Errorf("%s contains a <text element — the wordmark must be outlined paths, not live text", name)
}
if strings.Contains(s, "font-family") {
t.Errorf("%s contains font-family — it renders in a fallback font under <img> secure static mode", name)
}
}
}
// Group E — versioned asset URLs (Scenario E).
//
// Red-proof: run against the pre-edit layout.html → both assertions FAIL (the /static/ URLs lack
// the ?v= cache-bust). Cloudflare edge-caches /static/* for 4h, so an unversioned logo/favicon keeps
File diff suppressed because one or more lines are too long