2026-04-26 β Brand Deployment, File Audit, Weather Fix
Wordmark Fix
- Problem: SVG wordmark was crunched β "Desk" text and tagline overlapping in
400Γ128viewBox - Fix: Expanded canvas to
440Γ160, droppedscale(0.85)on mark, re-spaced typography stack (Hoff y=70, Desk y=112, tagline y=142 with 30px clearance). Applied toshared/design-tokens/brand/wordmark.svgandhoffdesk/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 + "HoffDesk" 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 (#64748bon#0f1117). - Fix: Rewrote all 5 SVGs to light theme β white
#ffffffouter bg,#f7f7f5card 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 sends15:00to frontend. Family dashboard showed military time. - Fix: Added
formatHour(h)JS helper that converts15: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 endpointshoffdesk/blog/static/logo-mark.svgβ stand-alone markhoffdesk/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
-
- "The Night I Broke DNS" (homelab) β
the-night-i-broke-dns
- "The Night I Broke DNS" (homelab) β
-
- "Hello World, Meet The Board" (openclaw) β
hello-meet-the-board
- "Hello World, Meet The Board" (openclaw) β
-
- "How a Python Data Guy Built a Website Without Writing a Single JS Framework" (openclaw) β
building-a-website-without-javascript-frameworks
- "How a Python Data Guy Built a Website Without Writing a Single JS Framework" (openclaw) β
-
- "The Learning Curve Is Real" (homelab) β
learning-curve-is-real
- "The Learning Curve Is Real" (homelab) β
-
- "Building a Blog With a Three-Agent Team" (openclaw) β
building-a-blog-with-ai-agents
- "Building a Blog With a Three-Agent Team" (openclaw) β
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_timein 4 templates - Removed unregistered filters:
pluralize,format_date,rfc822,xml_escapeβ replaced w/ built-ins - Added safe
category_label_safe()macro β prevents crash whencategory_labelsis missing from context - Fixed RSS + sitemap XML feeds β were 500-ing from same category of issues
- Server restarted 3x (no
--reloadon 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 monitorboard-wired.svgβ Three-agent network nodes with animated data flow particlesfull-stack-wired.svgβ Layered stack abstraction with code snippet insetlearning-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_imagefor all 5 posts via API (had to fix missing.svgextension in DB) - Added hero image section to
blog_article.html.j2template - Added
.blog-article-hero+.blog-article-hero-imgCSS - Bumped cache buster to
v=4 - Matt approved: "You fucking CRUSHED that design. Keep that style for the remainder of our public facing website"