The crossroads: we built the startup OS shell in one day — and honestly judged it not-best yet
Act 1 of the upheaval, shipped in a day: the app opens onto mission control, every startup gets a JARVIS-style overview (timeline + a 7-cluster business map), zones carry no-fluff essential checklists, and ten playbooks turn checklist items into work screens that pre-type crafted instructions into the startup's own agent. Then the founder asked 'is this best?' — and the honest answer was no: the skeleton is right, but the interaction model is navigation-first while the product's stated soul is language-first. Act 2 is the ⌘K command line. Everything is checkpointed with rollback tags.
Act 1 — what got built (all of it stays)
- The inversion: the app opens onto Portfolio Home — agents waiting on you (portfolio-wide, longest wait first), startups in attention order, an arc-reactor ring of live signals.
- The middle layer: each startup gets a JARVIS overview — a timeline of everything its agents did (the protagonist) and a standing 7-cluster business map (만들다/돌리다/알리다/팔다/벌다/ 지키다/조종하다) where zeros stay visible: emptiness is information.
- The ledger's second axis: facts now carry a
domain(additive field); clusters, zones, tabs are queries. Re-grouping the UI never migrates data. Industry template packs (BLUEPRINT §5.6 — cafes, restaurants, beyond SaaS) become a data problem, not a rewrite. - No-fluff checklists per zone: only items whose absence actually kills indie products — untested payment paths, unrestored backups, no 2FA, no rollback notes.
- Ten playbooks: checklist items open WORK SCREENS — what the agent does vs what you do (honest split), the step order, and one button that jumps to the workspace with a crafted instruction PRE-TYPED into the startup's own agent. Never auto-submitted: the founder presses Enter. (A stray submit into a TUI is our documented incident class.)
72 web tests + 6 Rust tests gate every build. The public update channel never moved during Act 1.
The crossroads
The founder looked at it and asked the right question: is this actually best? The honest answer: no. Firing one task costs ~six interactions of menu-diving. That is navigation-first — but the product's stated soul, in the founder's own words, is language-first: speak clumsily, work happens. Screens should be where state LIVES; commands should start from language, anywhere.
So Act 2 is the ⌘K command line: one input → deterministic playbook/startup matching → dispatch in a single 딸깍, with agent-interpreted matching after. Act 1 isn't wasted — playbooks become the command targets, zones become where outcomes land.
The checkpoint (so we can always come back)
| Tag | Meaning |
|---|---|
v0.2.25-pre-upheaval | before the inversion — full rollback point |
v0.2.26-home-v0 | Home v0 (public channel sits here) |
v0.2.27-act1 | Act 1 complete (local) |
Rollback = checkout the tag, build, install. Recorded in ADR-017 with the full commit map.