6.0 KiB
REPORT — v0.167.x: outlined logo + favicon + centered logo (completes v0.166.0 Part 4)
Date: 2026-07-24 · Deployed & verified live on guest 9201. This is the follow-up that finishes the mobile-nav task — Parts 1–3 shipped as v0.166.0; Part 4 (the outlined-logo swap) was gated then and shipped as v0.167.0 once Viktor pushed the outlined asset.
v0.167.1 (post-acceptance tweak):
.sidebar-logogainedmargin: 0 autoso the logo is horizontally centered in the header (was left-aligned) — one CSS line, applies to the desktop sidebar and the mobile drawer alike; pinned byTestSidebarLogo_Centered(red-proof verified). Deployed 0.167.1 to 9201 (Up healthy); served CSS confirms.sidebar-logo { margin: 0 auto 0.25rem; }. The outlined-logo detail below (v0.167.0) is unchanged.
1. Baselines
| Repo | consumed @ hash | version |
|---|---|---|
| felhom-controller | dbd1ff0 (post-v0.166.0) → committed e9a365e |
v0.166.0 → v0.167.0 |
| felhom.eu (asset source) | live main = be9edb443cab1d2581fa022537e7113f45c3fd92 ("updated logo") |
— |
felhom.eu asset commit consumed: be9edb4 — website/assets/logo.svg, the text-outlined master.
2. What was wrong, and what shipped
Viktor ran Inkscape Object→Path and pushed. The pushed file rendered the wordmark as 17 real
<path> glyphs (good) but still tripped the §3a gate because Inkscape left cruft:
- 2 empty
<text …/>shells (self-closed, zero glyph content) wrapping empty tspans, and style="…font-family:'Vremena Grotesk'/'M+ 2c'…"copied onto the outlined<path>s (inert on a path, but carries the font name → 7font-familytotal). A search forsvg:textmissed all of it — the elements are<text>(default namespace, nosvg:prefix). The correct needles are<textandfont-family(what the gate checks).
Per your decision ("strip the cruft, ship now"), CC did node-level cleanup only — no text-to-path conversion (glyphs already outlined by Viktor):
FelhomLogoSVGreplaced with the outlined master; via an lxml DOM pass removed the 2<text>elements, strippedfont-*/-inkscape-font-specification/text-align/text-anchordeclarations from everystyle(keptfill/stroke/stroke-width/gradients), and dropped the editor-only<sodipodi:namedview>. Glyphd-geometry and palette untouched.FelhomFaviconSVGvestigial empty<text>nodes + theirfont-familyremoved (cloud icon only).
Both constants now contain zero <text, zero font-family, zero backticks (safe in the Go raw
string). Served by the unchanged handlers (serveLogoHandler/serveFaviconHandler — note they serve a
hub-synced file first and fall back to the constant; on 9201 the constant is what's live).
3. viewBox — unchanged (Scenario E requirement)
| Constant | old viewBox | new viewBox | paths | palette |
|---|---|---|---|---|
| FelhomLogoSVG | 0 0 645.30703 408.36403 |
0 0 645.30703 408.36403 (identical) |
17 | #ffffff glyphs, #008ddf .eu, #051343 artwork, 14 gradients |
| FelhomFaviconSVG | 0 0 437.307 296.36403 |
0 0 437.307 296.36403 (identical) |
11 | cloud icon only |
4. Files modified · commits
controller/internal/web/templates.go— both SVG constants (bodies + doc comments).controller/internal/web/mobile_nav_test.go— addedTestLogoSVG_NoLiveText(the v0.166.0 gated red-proof, now committed green).CHANGELOG.md,CONTEXT.md,REPORT.md.- Commit
e9a365e(implementation + docs) + this REPORT commit. Clean tree, HEAD == origin/main.
5. Tests + RED proof
TestLogoSVG_NoLiveText: asserts both constants free of<text/font-family. RED proof recorded (v0.166.0 Phase 1, 2026-07-24): ran against the pre-swap constants → FAILED (FelhomLogoSVGandFelhomFaviconSVGboth contained<text+font-family). Now PASS.- Full repo green:
go build ./... && go vet ./... && go test ./...— 25 pkgs pass, 0 fail. All 3 mechanical gates (template_id / emoji / mojibake) OK. Cleaned SVGs validated well-formed (lxml). - The v0.166.0 suite (mobile drawer / CSS strip-removed / no-customer-name / versioned URLs / nav accordion invariants) still passes unchanged.
6. Deploy + live validation (guest 9201)
Built felhom-controller:0.167.0 (145M) from the clean pushed tree; deployed via the bootstrap
service → Up (healthy). Endpoint-level checks (in-guest curl to 172.17.0.2:8080):
| Surface | Assertion | Result |
|---|---|---|
/static/felhom-logo.svg |
0 <text, 0 font-family, 17 <path>, viewBox 0 0 645.30703 408.36403 |
✅ |
/static/favicon.svg |
0 <text, 0 font-family, 11 <path>, viewBox 0 0 437.307 296.36403 |
✅ |
/login |
logo URL felhom-logo.svg?v=0.167.0 — cache-bust now carries the new version, so CF re-fetches the outlined logo (defeats the 4h edge cache) |
✅ |
Confirms the embedded constant (not a stale hub-synced file) is what serves on 9201.
7. Awaiting Viktor — visual acceptance
- Android/desktop visual check of the outlined wordmark in the sidebar, top-bar (mobile), login page, and browser-tab favicon — the endpoint checks prove the bytes are font-free and geometrically valid, but final "looks right" is your eyes. (Mobile browsing itself already confirmed good by you.)
8. Observations (out of scope — documented only)
- Website + hub still serve their own non-outlined logo copies (
felhom.euwebsitelogo.svgconsumers, the hub'sfelhom-logo.svg,logo_favicon*.svg). Propagating the outlined master there is a separate follow-up in those repos. serveLogoHandlerprefers a hub-synced file over the embedded constant — if a syncedfelhom-logo.svgever lands on a guest's disk it would override this constant; worth keeping in mind when the outlined asset is propagated hub-side.login.html's stylesheet link is still unversioned (/static/style.css, no?v=) — minor, carried over from v0.166.0.