3 Phases · 10 Sessions · 3 Crashes · Zero Work Lost
A two-day architectural overhaul with Amplifier
Feb 20–21, 2026 · amplifier-stories · amplifier-team
Over two days we executed a 3-phase architectural overhaul of Canvas's project type system. The goal: replace per-plugin render logic with a true platform shell every project type could share.
Phase 1 cleaned the foundation — removed 2 dead project types, renamed 5 others, added grouped UI, cleared orphaned DB records.
Phase 2 was the structural shift — CanvasCard became the engine, plugins became pure config objects, ~850 lines of infrastructure deleted.
Phase 3 built the fullscreen experience — a two-zone FullscreenCard replaced the legacy TerminalView monolith,
and session logic was extracted into a single useProjectSession hook shared by both cards. CanvasCard: 319 → 83 lines.
All of it driven by amplifier-bundle-superpowers: design → plan → subagent TDD execution, one task at a time. A mid-session laptop crash at Task 6 of 14 cost zero time — the session-analyst recovered exact state in seconds. The submit-pr skill fixed 3 CI rounds autonomously before merging.
Result: 4 PRs merged, 2,508 tests passing, 0 dead plugin files, and a platform where adding a new project type takes one config object. Delivered across 10 sessions over 49 hours — 3 of which crashed — with 162 agent delegations and zero work lost.
Each project type owned its own rendering. Hooks were duplicated. The fullscreen experience was a monolith nobody wanted to touch.
CanvasCard.tsx — 319 lines, 6 inline hooks, a full send pipeline baked incardBody, headerActions, contextProvider — duplicated per typeamplifier-canvas, artifact-viewer) still loadingTerminalView monolith, sharing nothing with card-mode renderingRule: every phase merges to main independently. No long-lived branches.
The biggest structural shift. CanvasCard becomes the engine. Plugins hand over their components.
cardBody — full render logic per typeheaderActions — per-plugin buttonscontextProvider — per-plugin React contextid, name, archetype, iconarchetype: 'chat' | 'terminal' drives all behavioruseProjectSession hook, composing
four sub-hooks into one. 317 conversation turns in, the machine went dark.
41247b95, read the event log,
identified the last commit (9b2d4aea), and mapped exactly which tasks
were done (T1, T3, T6) vs remaining (T2, T4, T5, T7–T14).
No re-investigation. No lost context. Resumed at T2 immediately.
Built on amplifier-bundle-superpowers — Jesse Vincent's battle-tested Superpowers methodology (43k+ ★) brought natively to Amplifier.
/brainstorm → design the three phases/write-plan → 14-task plan with every code block included/execute-plan → subagent-driven-development recipesubmit-pr skill → autonomous CI loop to mergecardBody/headerActions/contextProvider. Added fullscreenHeaderActions? slot. AmplifierStatsButton fills it for Amplifier Chat.onCardFullscreenEnter → setView('terminal')TerminalView monolithonCardFullscreenEnter → setView('fullscreen')FullscreenCarduseProjectSession — one source of truthconsole.error in App.tsx onClose → structured logger + try/catch. Fixed autonomously.logger.error → structured metadata field. Fixed autonomously.main.| Metric | Before | After |
|---|---|---|
| CanvasCard size | 319 lines, 6 inline hooks | 83 lines, 0 inline hooks |
| Plugin interface | cardBody, headerActions, contextProvider | icon, archetype, fullscreenHeaderActions? |
| Fullscreen path | TerminalView monolith | FullscreenCard (two-zone) |
| Dead plugin files | ~12 unreferenced components | 0 |
| Unit tests passing | ~2,300 (Phase 2 baseline) | 2,508 |
| PRs merged to main | — | 4 (Phase 2, Phase 3, infra, docs) |
The refactor wasn't about cleaning up the past. It was about making the future fast.
| Scenario | Before Phase 3 | After Phase 3 |
|---|---|---|
| Add a new project type | New cardBody + headerActions + contextProvider + context file |
One config object, 5 fields |
| Add a fullscreen panel | Fork the TerminalView monolith | Add a PanelView option + one component |
| Change session send logic | Edit 3+ components independently | Edit useProjectSession once |
| Refactor confidently | Manual testing across all project types | 2,508 tests catch regressions instantly |
| Plugin infrastructure debt | ~850 lines across cardBody / headerActions / providers | Deleted. Gone. Not your problem. |
Data as of: February 21, 2026 · Status: Active — merged to main on amplifier-stories
Verified from source:
Estimates & gaps:
Every project type renders through the same shell. Session logic lives in one hook. Fullscreen is a first-class experience.
Built with Amplifier