2026-04-27 โ Daily Blog Post: Scope Creep + Inline Wired SVGs
Blog Post โ Scope Creep
- Drafted and published: "Project Icarus and the Scope Creep That Nobody Warned Me About"
- Category:
openclaw - Tags: agents, openclaw, project-management, scope-creep, lessons-learned
- Cover image:
scope-creep-wired.svg(Wired-style hero with expanding concentric rings visualizing scope creep) - Live: https://hoffdesk.com/blog/project-icarus-scope-creep/
Wired-style Hero SVG
- Created
scope-creep-wired.svgwith visual metaphor: - Core circle (cyan) = original V1.0 scope
- Expanding rings (amber โ red) = scope creep layers
- Animated pulse on outer ring = ongoing expansion
- Diagonal slash + glitch bands = Wired aesthetic
- Stats badge: "โ 90 MIN โ 3 HOURS โ SHIPPED"
- 5.9KB pure SVG, duotone gradients, grain noise overlay
Post Summary
- Theme: Managing scope creep when your builders are AI agents
- Hook: Recipe toggle feature that ballooned into a full system
- Key insight: Agents optimize for completeness, not necessity
- Three fixes: acceptance criteria first, hard timeboxes, ship before polish
- Closing: Aundrea as the real acceptance criteria
Inline Wired-Style SVGs Added (2026-04-27)
- Created 5 inline SVG illustrations in
/blog/static/images/inline/for section-level art in post bodies: dns-broken-node-wired.svgโ 3-node network topology with broken upstream (DNS post)three-agents-wired.svgโ Three agent boxes (Wadsworth/Daedalus/Socrates) with arrows (Board post)full-stack-diagram-wired.svgโ Layered sovereign stack (JS-free post)learning-curve-chart-wired.svgโ 4-phase curve chart with animated glow (Learning Curve post)content-pipeline-wired.svgโ Horizontal pipeline flow: markdown โ API โ Jinja2 โ HTML (Blog post)- Added
.blog-inline-artCSS class โ centered, rounded, dark-bg, responsive (max 700px, full-width mobile) - Bumped CSS version to
?v=5for cache-busting - Injected one SVG per post at midpoint section break
- Fixed:
/blog/legacy URL routing (301 redirects to/api/blog/article/{slug}etc.)
2026-04-27 โ Daily Blog Post: Scope Creep + Inline Wired SVGs
Blog Post โ Scope Creep
- Drafted and published: "Project Icarus and the Scope Creep That Nobody Warned Me About"
- Category:
openclaw - Tags: agents, openclaw, project-management, scope-creep, lessons-learned
- Cover image:
scope-creep-wired.svg(Wired-style hero with expanding concentric rings visualizing scope creep) - Live: https://hoffdesk.com/blog/project-icarus-scope-creep/
Wired-style Hero SVG
- Created
scope-creep-wired.svgwith visual metaphor: - Core circle (cyan) = original V1.0 scope
- Expanding rings (amber โ red) = scope creep layers
- Animated pulse on outer ring = ongoing expansion
- Diagonal slash + glitch bands = Wired aesthetic
- Stats badge: "โ 90 MIN โ 3 HOURS โ SHIPPED"
- 5.9KB pure SVG, duotone gradients, grain noise overlay
Post Summary
- Theme: Managing scope creep when your builders are AI agents
- Hook: Recipe toggle feature that ballooned into a full system
- Key insight: Agents optimize for completeness, not necessity
- Three fixes: acceptance criteria first, hard timeboxes, ship before polish
- Closing: Aundrea as the real acceptance criteria
Inline Wired-Style SVGs Added (2026-04-27)
- Created 5 inline SVG illustrations in
/blog/static/images/inline/for section-level art in post bodies: dns-broken-node-wired.svgโ 3-node network topology with broken upstream (DNS post)three-agents-wired.svgโ Three agent boxes (Wadsworth/Daedalus/Socrates) with arrows (Board post)full-stack-diagram-wired.svgโ Layered sovereign stack (JS-free post)learning-curve-chart-wired.svgโ 4-phase curve chart with animated glow (Learning Curve post)content-pipeline-wired.svgโ Horizontal pipeline flow: markdown โ API โ Jinja2 โ HTML (Blog post)- Added
.blog-inline-artCSS class โ centered, rounded, dark-bg, responsive (max 700px, full-width mobile) - Bumped CSS version to
?v=5for cache-busting - Injected one SVG per post at midpoint section break
- Fixed:
/blog/legacy URL routing (301 redirects to/api/blog/article/{slug}etc.)
Inline SVG Color Unification (2026-04-27, post-flush)
- Rebuilt all 5 inline SVGs with exact 7-color hero palette:
- Indigo
#6366f1โ primary elements (Pi-hole node, agent cards, stack layers) - Cyan
#00e5ffโ secondary elements (router, Daedalus, output glow) - Amber
#f59e0bโ warnings/agents (Socrates, frustration phase marker) - Red
#ef4444โ failures (FAILED node, broken link X, glitch bands) - Magenta
#ff00e5โ accents (pipeline Jinja2 box, denial phase marker) - Purple
#7c3aedโ connectors/transitions (arrows, FastAPI layer, stack bracket) - Background
#0a0a12โ dark canvas - Added consistent visual flourishes: grain noise overlays, animated pulse dots, dashed stroke animations, glitch bands
- Removed orphan original SVGs (board-architecture.svg, cost-comparison.svg, dns-spof.svg, full-stack.svg, learning-curve.svg) โ no longer referenced by any template
- All 5 blog posts verified rendering inline SVGs correctly on public site
Family Brain โ Live Network Visualization (2026-04-27)
Matt asked for the Family Brain SVG to be live โ fed by real data, auto-scaling, dynamic.
What was built:
- Stats endpoint
GET /api/system/brain/statsโ queries 6 data stores live:
- Blog: SQLite post counts (9 total, 7 published)
- Ontology: Entities & relations (10 entities, 9 relations)
- Memory: ChromaDB chunk count + file size (~53MB across 3 agents, 795 chunks)
- Calendar: Radicale systemctl status ("active")
- LLM: Ollama model count (9 models)
- Recipes: Ontology recipe-type entities (0 saved) - SVG generator
GET /api/system/brain/svgโ renders full network SVG via Jinja2 template
- Auto-scaling: Blog node grows with posts, LLM with models, Ontology with entities
- Animated: 6 data packet dots traveling along connections, pulsing node glows
- Live subtitle: e.g. "6 DATA STORES ยท 52896KB VECTORS ยท 7 BLOG POSTS ยท 9 LLM MODELS" - Template:
blog/templates/brain_svg.svg.j2โ Jinja2 SVG with Wired aesthetic - Preview page:
blog/static/brain-live.htmlโ HTMX auto-refresh every 60s - Spec:
shared/project-docs/family-brain-spec.mdโ documented for Socrates
Files changed:
family/brain.py(NEW) โ stats + SVG generatormain_v2.pyโ brain router mounted on blog_app + family_app + dev_appshared/session_auth.pyโ added/api/system/to EXEMPT_PREFIXESblog/templates/brain_svg.svg.j2(NEW) โ Jinja2 SVG templateblog/static/brain-live.html(NEW) โ HTMX preview pageshared/project-docs/family-brain-spec.md(NEW) โ spec & docs
Live URLs:
- SVG: https://hoffdesk.com/api/system/brain/svg
- Stats: https://hoffdesk.com/api/system/brain/stats
- Preview: https://hoffdesk.com/blog/static/brain-live.html
Next:
- Phase 2: Socrates adds query_count tracking, last_activity for all stores, cross-connections
- Phase 3: Clickable nodes with detail overlays, animated transitions
Second Blog Post: Waiting for UAT (2026-04-27)
- Drafted and published: "Waiting for the User: Why UAT Is the Hardest Part of Building for Your Family"
- Category:
openclaw - Tags: adoption, lessons-learned, openclaw, project-management, uat
- Cover image:
waiting-for-uat-wired.svg(hourglass with family silhouette, Wired aesthetic) - Draft source:
/home/hoffmann_admin/.openclaw/shared/project-docs/blog/draft-waiting-for-uat.md - Created via PATCH on
/api/blog/admin/posts/{slug} - Published at
2026-04-27T17:11:32.913721Z - Live: https://hoffdesk.com/blog/waiting-for-the-user/
- Theme: The agony of waiting for real users (family) to test your app, edge cases discovered in the gap between "works on my machine" and "works for Aundrea at 7 AM"
Inline SVG Color Unification (2026-04-27, post-flush)
- Rebuilt all 5 inline SVGs with exact 7-color hero palette:
- Indigo
#6366f1โ primary elements (Pi-hole node, agent cards, stack layers) - Cyan
#00e5ffโ secondary elements (router, Daedalus, output glow) - Amber
#f59e0bโ warnings/agents (Socrates, frustration phase marker) - Red
#ef4444โ failures (FAILED node, broken link X, glitch bands) - Magenta
#ff00e5โ accents (pipeline Jinja2 box, denial phase marker) - Purple
#7c3aedโ connectors/transitions (arrows, FastAPI layer, stack bracket) - Background
#0a0a12โ dark canvas - Added consistent visual flourishes: grain noise overlays, animated pulse dots, dashed stroke animations, glitch bands
- Removed orphan original SVGs (board-architecture.svg, cost-comparison.svg, dns-spof.svg, full-stack.svg, learning-curve.svg) โ no longer referenced by any template
- All 5 blog posts verified rendering inline SVGs correctly on public site
Family Brain โ Live Network Visualization (2026-04-27 evening)
Matt asked for the Family Brain SVG to be live โ fed by real data, auto-scaling, dynamic with Wired aesthetic.
What was built:
- Stats endpoint
GET /api/system/brain/statsโ queries 6 data stores live:
- Blog: SQLite post counts (9 total, 7 published)
- Ontology: Entities & relations (10 entities, 9 relations)
- Memory: ChromaDB chunk count + file size (~53MB across all 3 agents, 795 chunks)
- Calendar: Radicale status from systemctl (active, 0 collections)
- LLM: Ollama model count (9 models)
- Recipes: Ontology recipe-type entities (0 saved) - SVG generator
GET /api/system/brain/svgโ renders full network SVG via Jinja2 template
- Auto-scales: Blog node radius with post count, LLM with models, Ontology/Memory with record counts
- Animated: 6 data packet dots traveling along connection paths at varying speeds
- Live subtitle line: e.g. "6 DATA STORES ยท 52896KB VECTORS ยท 7 BLOG POSTS ยท 9 LLM MODELS"
- Wired aesthetic throughout: grain noise filter, duotone gradients, glitch bands, dark backdrop - Template:
blog/templates/brain_svg.svg.j2โ Jinja2 SVG with embedded CSS animations - Preview page:
blog/static/brain-live.htmlโ uses HTMX to auto-refresh SVG every 60s - Spec:
shared/project-docs/family-brain-spec.mdโ documented for Socrates
Files created/changed:
family/brain.py(NEW) โ stats collection + SVG generator logicmain_v2.pyโ brain router mounted on blog_app (public) + family_app (auth-exempt) + dev_appshared/session_auth.pyโ added/api/system/to EXEMPT_PREFIXESblog/templates/brain_svg.svg.j2(NEW) โ Jinja2 SVG templateblog/static/brain-live.html(NEW) โ HTMX preview pageshared/project-docs/family-brain-spec.md(NEW) โ full spec doc
Live URLs:
- SVG: https://hoffdesk.com/api/system/brain/svg
- Stats: https://hoffdesk.com/api/system/brain/stats
- Preview: https://hoffdesk.com/blog/static/brain-live.html
Node layout (orbital):
- CENTER: BEELINK (r=58, cyan)
- TOP-LEFT: CALENDAR (r=38, indigo)
- TOP-RIGHT: MEMORY (r=48, magenta)
- LEFT: BLOG (r=45, purple)
- RIGHT: LLM (r=39, amber)
- BOTTOM-LEFT: RECIPES (r=34, cyan, grayed โ 0 records)
- BOTTOM-RIGHT: ONTOLOGY (r=38, red)
Phase 2 backlog (needs Socrates):
- Add query_count tracking per service
- Add last_activity timestamps for Radicale, Ollama
- Add health checks per store (port/process ping)
- Cross-connections between satellites (e.g. Blog โ Memory for vector search)
Key Decisions (2026-04-27)
- Use PATCH (not PUT) for blog admin post updates
- Jinja2 template path for SVG must resolve to
/home/hoffmann_admin/hoffdesk/blog/templates/ - Brain endpoint publicly accessible (no auth) since it's informational, not administrative
- HTMX polling on dashboard every 60s for brain refresh โ not faster
Family Brain โ SVG Rendering Bug Fixed (2026-04-27 late evening)
Matt reported: "blue box with question mark" when viewing the brain preview page.
Root cause: Raw & character in SVG subtitle text: "Entities & Relations" โ XML parsers reject unescaped ampersands.
Fixes applied:
1. Added <?xml version="1.0" encoding="UTF-8"?> declaration to SVG output (Jinja2 template)
2. Escaped subtitle text in brain.py: "Entities & Relations"
3. Added _escape() helper to brain.py for all dynamic text fields
4. Verified with browserless screenshot: renders clean with all 6 satellites visible
URLs confirmed working:
- https://hoffdesk.com/api/system/brain/svg (now valid SVG)
- https://hoffdesk.com/blog/static/brain-live.html (renders correctly)
Files modified:
- family/brain.py โ added escape helper, fixed subtitle, added XML declaration
- blog/templates/brain_svg.svg.j2 โ no change (escape happens in generator)
Research: Cognitive Load & Reminder Optimization for Family Brief
Matt asked for psychology research on reminders, scheduling, and brief structure optimization for family assistant and Icarus long-term.
Key Findings from Literature
1. Target-Action Reminders (Peper et al. 2022)
- Reminders must include both cue AND action to be effective
- "Pick up Sullivan" = weak. "Exit by 3:15 โ drive to school โ wait in car line" = strong
- Application: Every brief reminder is a mini-script, not a label
2. Hierarchical Progressive Disclosure
- Matches how prospective memory retrieves: gist first, detail on demand
- Four levels align with cognitive load stages:
- Month: Pattern recognition (1-2 sec glance)
- Week: Sequencing, conflicts (3-5 sec)
- Day: Execution details (5-10 sec)
- Hour: Full context + fallback (10-15 sec)
3. Implementation Intentions (Gollwitzer)
- Formula: When [cue], then [action]
- Transforms time-based intentions into cue-driven automatic behaviors
- Day view should frame as chain of when/then transitions, not event list
4. Cost Avoidance
- People use reminders when forgetting penalty > effort of reminder
- Brief should surface high-cost items first (not urgency but forgetting penalty)
- For 7 AM Aundrea: school lunch > forgotten = hangry kid + guilt + scramble
5. Ambient Visibility > Push Notifications
- Environmental cues outperform push alerts (interruption vs recognition cost)
- Brain habituates to push alerts in ~3 days (alert fatigue)
- UAT feedback about "more passive visibility" is validated by research
Strategies for Brief Structure
| Strategy | Application |
|---|---|
| Conflict Nag Window | Visual density comparison, not just overlap alert |
| Evening Glance Mode | 10-second "what's tomorrow" for bedtime encoding |
| Decision Boundaries | Organize by natural transitions (pre-kids-up, lunch, pickup) not clock time |
| Forgetting Budget | Show commitment count vs threshold: "14 active, budget ~8" |
| Anchor Event | One anchor per day structures everything around it |
Proposed Brief Hierarchy
ONE MONTH (28 dots, pure pattern)
โข Busy days highlighted (3+ commitments)
โข Anchor events marked
โข No text โ visual density only
ONE WEEK (7 cards, horizontal)
โข Each: anchor event + commitment count
โข Conflicts = red dots
โข Label: Light/Medium/Heavy per day
ONE DAY (morning brief)
โข When/then chain framing
โข School lunch, dinner plan first
โข Commitment gauge visible
ONE HOUR (on tap detail)
โข Target + action + materials + fallback
โข Implementation intention format
UAT insight validated: Month overview + grounded information + passive visibility are the three pillars. The four-level hierarchy delivers all three.
Next: Spec data model for four-level brief structure, draft Month/Week/Day/Hour templates.