ForgeKitFORGEKIT

Build Log

Commons Ideate ships, then pivots the same day

July 28, 2026

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.

AlloyCommonsAIIdeation
1
day between shipping a live chat and rebuilding it around different value
2
AI engine jobs in the rebuilt version (gap analysis, then synthesis) vs. one open-ended chat loop before
0
web search built — explicitly rejected as a losing race against tools the contributor already has

Timeline

Start
Commons Ideate built as a live chat
Schema (commonsIdeationSessions/Turns), Crucible-pressure-tested design (architect persona, 2026-07-27), freeform conversational UI
+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
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