# 2026-04-26 — Brand Deployment, File Audit, Weather Fix ## Wordmark Fix - **Problem:** SVG wordmark was crunched — "Desk" text and tagline overlapping in `400×128` viewBox - **Fix:** Expanded canvas to `440×160`, dropped `scale(0.85)` on mark, re-spaced typography stack (Hoff y=70, Desk y=112, tagline y=142 with 30px clearance). Applied to `shared/design-tokens/brand/wordmark.svg` and `hoffdesk/blog/static/brand-preview.html` - **Note:** Preview page is served at `notes.hoffdesk.com/static/brand-preview.html` ## Brand Migration — All Endpoints ✅ Deployed brand identity (logo mark + "HoffDesk" with indigo accent + favicon) across: | Endpoint | Change | |----------|--------| | `hoffdesk.com` (public blog) | Plain text → inline mark + "Hoff**Desk**" lockup + favicon | | `notes.hoffdesk.com/admin/blog/` | Emoji 📝 icon → inline mark + brand name + favicon | | `family.hoffdesk.com` (dashboard) | Favicon added, footer branded | | `family.hoffdesk.com/login` | Generic house icon → HoffDesk mark, branded footer | | `notes.hoffdesk.com/admin/blog/login` | Mark + branded footer | ## View Blog Link Fix - **Problem:** "View Blog" link at `notes.hoffdesk.com/admin/blog/` pointed to `/` which 302-redirects to admin login (loop) - **Fix:** Changed to `https://hoffdesk.com` (absolute URL to public blog domain) ## File Confusion Audit **Critical finding:** Live server reads templates from 3 paths **only**: - `hoffdesk/blog/templates/` — public blog - `shared/project-docs/blog/templates/admin/` — admin (NOT `workspace/blog/admin/templates/`) - `shared/project-docs/dashboard/templates/` — family dashboard **Stale copies identified:** - `workspace/blog/admin/templates/` — NOT served, edits here do nothing - `hoffdesk/blog/admin/` — old pre-v2 admin, dead - `hoffdesk-agents/agents/daedalus/blog/templates/` — agent training copy - `hoffdesk/blog/templates/` is the canonical public blog source **Action:** Always target `shared/project-docs/` for admin/dashboard templates, `hoffdesk/blog/templates/` for public blog. ## Blog SVG Diagrams — Light Theme Conversion - **Problem:** All 5 SVG diagrams used dark-mode colors (dark bg `#0f1117`, light text `#e2e8f0`) but the blog renders in light mode by default. Result: dark boxes on white pages, low-contrast subtitle text (`#64748b` on `#0f1117`). - **Fix:** Rewrote all 5 SVGs to light theme — white `#ffffff` outer bg, `#f7f7f5` card bg, dark text `#1a1a1a`, subtle gray borders. Preserved all color semantics (red/green status, indigo accent, orange/yellow labels) with lighter fills. - **Files patched:** `hoffdesk/blog/static/images/posts/` — `dns-spof.svg`, `board-architecture.svg`, `cost-comparison.svg`, `full-stack.svg`, `learning-curve.svg` - **Cache:** Cloudflare has 4hr max-age, ~45 min remaining at time of fix ## Weather Time Format Fix - **Problem:** wttr.in returns `1500` (24h format), backend sends `15:00` to frontend. Family dashboard showed military time. - **Fix:** Added `formatHour(h)` JS helper that converts `15:00` → `3 PM`, handles 12/24 AM/PM properly - **Applied to:** `shared/project-docs/dashboard/templates/index.html` (the live copy) ## Brand Assets Deployed - `hoffdesk/blog/static/favicon.svg` — favicon for all endpoints - `hoffdesk/blog/static/logo-mark.svg` — stand-alone mark - `hoffdesk/blog/static/wordmark.svg` — full wordmark lockup ## Blog Content Published (5 posts) - **5 posts written, SVG diagrams generated, and published** via admin API - Tone: "bench notes from an amateur in way over his head" ### Posts - 1. "The Night I Broke DNS" (homelab) — `the-night-i-broke-dns` - 2. "Hello World, Meet The Board" (openclaw) — `hello-meet-the-board` - 3. "How a Python Data Guy Built a Website Without Writing a Single JS Framework" (openclaw) — `building-a-website-without-javascript-frameworks` - 4. "The Learning Curve Is Real" (homelab) — `learning-curve-is-real` - 5. "Building a Blog With a Three-Agent Team" (openclaw) — `building-a-blog-with-ai-agents` ### SVG Assets - `board-architecture.svg`, `dns-spof.svg`, `learning-curve.svg`, `full-stack.svg`, `cost-comparison.svg` ### Template Fixes (pre-existing bugs found & fixed) - **Mismatched field names:** `body_html`→`content_html`, `read_time`→`reading_time` in 4 templates - **Removed unregistered filters:** `pluralize`, `format_date`, `rfc822`, `xml_escape` — replaced w/ built-ins - **Added safe `category_label_safe()` macro** — prevents crash when `category_labels` is missing from context - **Fixed RSS + sitemap XML feeds** — were 500-ing from same category of issues - **Server restarted 3x** (no `--reload` on uvicorn) ## Wired-style Hero SVGs (2026-04-26) - Created 6 pure-SVG hero illustrations in Wired magazine aesthetic for HoffDesk blog: - `hero-wired.svg` — Blog index hero (duotone magenta/cyan, grid, scanlines, glitch bands) - `dns-spof-wired.svg` — Red/amber warning, broken chain link, flatline monitor - `board-wired.svg` — Three-agent network nodes with animated data flow particles - `full-stack-wired.svg` — Layered stack abstraction with code snippet inset - `learning-curve-wired.svg` — 4-phase competency curve with animated particle (red→amber→green→cyan) - `agents-wired.svg` — Interlocking Venn-style collaboration circles with orbital animation - All SVGs ~6-8KB, pure XML, zero JS, dark-field with duotone gradients, scanlines, grain noise - Set `cover_image` for all 5 posts via API (had to fix missing `.svg` extension in DB) - Added hero image section to `blog_article.html.j2` template - Added `.blog-article-hero` + `.blog-article-hero-img` CSS - Bumped cache buster to `v=4` - Matt approved: "You fucking CRUSHED that design. Keep that style for the remainder of our public facing website"