Build Log · June 21, 2026

Forge: Quick Capture

Closed the human-input loop — Gino can now push field context into the event furnace from his phone in under 10 seconds.

  • Forge
  • Capture
  • Mobile
  • Events
capture flows shipped
4

capture flows shipped

new event types
2

new event types

schema changes
0

schema changes

spins
0

spins

Timeline

  1. Start

    Scoped Session 3 = Capture

    Capture is not a page — it's an entry point into the event furnace

  2. Plan

    Plan approved with 7 amendments

    Single options endpoint, no leadStatus mutation, full event-display support

  3. Build

    Furnace + presentation layer first

    note_added + call_outcome_recorded wired across all 6 presentation points

  4. Build

    CaptureSheet + 4 sub-forms

    One sheet, step state machine, shared searchable Picker

  5. Build

    Floating launcher in the app shell

    Mobile FAB above bottom nav, desktop button in sidebar

  6. Quench

    tsc --noEmit clean, committed

    9 files, no schema migration

What shipped

  • Floating Capture button — mobile FAB (above bottom nav, safe-area aware) + desktop sidebar button, living in the app shell not the nav

  • CaptureSheet — one bottom-sheet orchestrator with a step state machine (menu | customer-memory | job-note | call-outcome | new-lead)

  • Customer Memory capture → memory_captured event → appears in Customer Detail Forge Memory hub

  • Job Note capture → note record + note_added event

  • Call Outcome capture → call_outcome_recorded event (event only, no leadStatus mutation)

  • New Lead capture → contact + contact_added, optional deal + deal_created using defaultStageId

  • getCaptureOptions server action — loads contacts/activeDeals/defaultStageId once per open, client filters locally

  • Two new event types fully wired across write-event.ts and event-display.ts

“Capture is how Forge stops being a smart inbox and becomes a memory engine.”
— Zeb, scoping Session 3