πŸ“„ 2026-04-26.md 5,805 bytes Apr 26, 2026 πŸ“‹ Raw

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 + "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
  • 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
    1. "Hello World, Meet The Board" (openclaw) β€” hello-meet-the-board
    1. "How a Python Data Guy Built a Website Without Writing a Single JS Framework" (openclaw) β€” building-a-website-without-javascript-frameworks
    1. "The Learning Curve Is Real" (homelab) β€” learning-curve-is-real
    1. "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"