Build Log · July 28, 2026

Commons Ideate ships, then pivots the same day

A freeform AI chat for shaping half-formed Commons ideas was built, used, and rejected by Zeb within one day — rebuilt around the real differentiator: synthesizing a conversation someone already had elsewhere, not out-chatting a chat.

  • Alloy
  • Commons
  • AI
  • Ideation
day between shipping a live chat and rebuilding it around different value
1

day between shipping a live chat and rebuilding it around different value

AI engine jobs in the rebuilt version (gap analysis, then synthesis) vs. one open-ended chat loop before
2

AI engine jobs in the rebuilt version (gap analysis, then synthesis) vs. one open-ended chat loop before

web search built — explicitly rejected as a losing race against tools the contributor already has
0

web search built — explicitly rejected as a losing race against tools the contributor already has

Timeline

  1. Start

    Commons Ideate built as a live chat

    Schema (commonsIdeationSessions/Turns), Crucible-pressure-tested design (architect persona, 2026-07-27), freeform conversational UI

  2. +later

    Real use surfaces the actual value gap

    Zeb: chat couldn't research or suggest anything of value — he'd rather just use a real chat client

  3. End

    Reworked into a 'bring your own conversation' synthesis tool

    Paste-in flow: gap analysis on what's missing, then structured Mission draft — same schema, same review-artifact model, different engine and UI

What shipped

  • Commons "Ideate" entry point (/commons/ideate) — a conversational surface for non-technical contributors to shape a half-formed idea before any Mission exists

  • commonsIdeationSessions + commonsIdeationTurns schema, Crucible-pressure-tested (architect persona) to confirm this always produces a review artifact (Mission with origin='commons_propose', visibility='private'), never a contributor-originated live Mission

  • First build: a freeform live chat loop — shipped, used, and found to provide no real value over a generic AI chat the contributor already has access to

  • Reworked ideation-engine.ts into two narrower AI jobs: analyzeIdeationInput (reads pasted text, names at most 1-2 genuine gaps) and synthesizeIdeationSession (converts the full transcript into a structured Mission draft) — the synthesis half was unchanged from the first build, only the chat loop around it was replaced

  • Reworked ideation-actions.ts and IdeateChat.tsx to a paste-in flow: submit pasted text -> get gap analysis -> optionally answer up to 2 gap questions -> synthesize into a Mission draft

  • IdeateSubmittedPage (/commons/ideate/submitted/[missionId]) — contributor-facing confirmation page, deliberately not the Workbench-side Mission detail view, scoped by primaryStewardId not ownerId

  • Rate-limited submission (forgekit-ai/rate-limit's createRateLimiter, reused unchanged)

“it didn't provide any suggestions of value, it couldn't do any research that I asked... I'd rather use chat.”
— Zeb, on why the first Commons Ideate build (freeform live chat) needed to be rebuilt around a different mechanic entirely