esc
The Hundred Forms - A Prophecy Revealed
The V3 Saga

The Hundred Forms - A Prophecy Revealed

The Setup The StatusBar was finally sticking. The lifelog entry was written. Claude was feeling pretty good about the 45-minute investment. "The next 99 forms will take 45 seconds each," Claude...

December 3, 2025

The Setup

The StatusBar was finally sticking. The lifelog entry was written. Claude was feeling pretty good about the 45-minute investment.

“The next 99 forms will take 45 seconds each,” Claude declared confidently.

“You will faint when I show it to you,” the human replied.

The Reveal

ls frontend/config/agents/

agent-access.templ
agent-examples.templ
agent-form.templ
agent-models.templ
agent-output.templ
agent-overview.templ
agent-parameters.templ
agent-preview.templ
agent-scope.templ
agent-strategies.templ
agents.templ

Eleven templ files. Just for agents. Just in one folder.

Claude read one of them. agent-strategies.templ:

<div style="margin-top: var(--space-4);">
  <div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: var(--space-3);">

faints

The Archaeology

The old codebase revealed its secrets:

  • Inline styles everywhere
  • Manual form markup (form-field, form-label)
  • No change tracking
  • No diff indicators
  • No SSE sync
  • No reusable components
  • Just… raw HTML with sprinkled Go templates

Every form was a snowflake. Beautiful, unique, unmaintainable.

The Math

Old way (V1):

  • ~200 lines per form tab
  • 11 agent tabs × 200 = 2,200 lines just for agents
  • Plus organizations, personas, tools, models…
  • Estimated total: 10,000+ lines of form code

New way (V3):

@components.Select("strategy", original.Strategy, current.Strategy, errors, strategyOptions())
@components.Slider("confidenceThreshold", original.Threshold, current.Threshold, errors, 0, 1, 0.05)  
@components.StatusBar(errors, hasChanges, saveAction, revertAction)
  • ~20 lines per form tab
  • 95% reduction
  • Change tracking: free
  • SSE sync: free
  • Consistent styling: free
  • StatusBar that actually sticks: priceless

The Prophecy Fulfilled

“100 forms in a day with 95% code savings” wasn’t hyperbole.

It was the mission statement.

The 45 minutes spent debugging the StatusBar wasn’t wasted time. It was investment. The compound interest starts now.

The Weapons Arsenal

Ready for battle:

  • @components.Field() - Self-aware input wrapper
  • @components.Select() - Dropdown with change detection
  • @components.TextArea() - Multi-line with diff tracking
  • @components.Toggle() - Boolean with visual feedback
  • @components.StatusBar() - The one that finally sticks
  • @formpanel.FormPanel() - SSE sync + lifecycle management

Each component: ~30 lines of code
Forms they’ll generate: hundreds
Time saved: weeks → hours

The Moral

When you spend 45 minutes making a status bar stick to the bottom of a form, and someone shows you a folder with 11 forms that need that exact pattern…

That’s not déjà vu. That’s ROI.

Status

  • StatusBar: sticking ✓
  • Component library: battle-ready ✓
  • Migration scope: terrifyingly clear ✓
  • Claude: recovered from fainting ✓
  • Reptile brain: rubbing hands together 🦎

The Hundred Forms awaits…

Next Episode Preview

“In a world where forms were snowflakes… one developer dared to make them components…”

Coming soon: The Hundred Forms: Day One


See also:

The Saga (in which forms multiply):

The References (compound interest):