
Indie Devlog #05: The Product Bootstrap System
After the first few products, a pattern emerged. Every new app in the monorepo needed the same setup: documentation, marketing website, local pre-commit hooks, GitHub CI, deployment pipeline, App Store screenshots, store listing copy, and a Flutter scaffold. I had personal skills for each piece — saas-doc-setup for docs, setup-pre-commit for git hooks, app-store-screenshots for marketing assets — but there was no single command to run them all in order.
The problem was not that the work was hard. It was that I had to remember the sequence, check what was already done, and switch between three AI agents (Cursor, Claude Code, and Hermes) without missing a step.
So I built microbyte-product-bootstrap.
The orchestrator pattern
The system is simple: a hub skill that reads a JSON manifest and dispatches work to leaf skills and runbooks. Each product gets a bootstrap.jsonc that tracks phase status:
{
"$schema": "../../docs/bootstrap/bootstrap.schema.json",
"product": "Dream Journal",
"slug": "dream-journal",
"mode": "greenfield",
"capabilities": {
"mobile": false,
"api": false,
"website": true
},
"phases": {
"docs": { "status": "done", "completedAt": "2026-05-24" },
"website": { "status": "pending" },
"localCi": { "status": "skipped", "reason": "website-only" },
"githubCi": { "status": "pending" },
"websiteDeploy": { "status": "pending" },
"screenshots": { "status": "skipped", "reason": "capabilities.mobile is false" },
"storeListing": { "status": "pending" },
"mobile": { "status": "skipped", "reason": "capabilities.mobile is false" }
}
}
The orchestrator loads the manifest, validates it against a JSON Schema, lists pending phases, and walks through each one. If the phase has a dedicated leaf skill (saas-doc-setup, setup-pre-commit, app-store-screenshots), it loads that skill. Otherwise it reads a numbered runbook from docs/bootstrap/phases/.
Two modes: greenfield and harden
New products start from scratch with --mode greenfield. The system copies a template manifest, then runs phases 1 through 8 sequentially.
Existing products that drifted from the standard use --mode harden. The orchestrator scans the filesystem for signals — a docs/PRD.md means docs are done, a website/package.json means the website exists, .github/workflows/*.yml means CI is configured — and merges the results into the manifest. It only runs the phases that are missing.
harden dream-journal
→ scanning filesystem...
→ docs: found (docs/PRD.md, docs/branding.md)
→ website: found (website/package.json)
→ localCi: missing
→ githubCi: missing
→ websiteDeploy: missing
→ screenshots: skipped (no mobile)
→ storeListing: missing
→ mobile: skipped (no mobile capability)
→ pending phases: localCi, githubCi, websiteDeploy, storeListing
This was surprisingly useful. I ran it on dream-journal — a product I had been working on for weeks — and discovered I had never set up CI or a proper deploy pipeline. The scan caught it before I shipped.
Multi-agent by design
The skill must work across three AI agents with different capabilities. Cursor has the Skill tool and Task subagents. Claude Code has a similar Skill tool. Hermes Agent uses skill_view() and sequential terminal commands.
The hub skill's SKILL.md is written in agent-neutral language. Instead of "use the Task tool to run phase 1", it says "load the leaf skill and execute the phase runbook." Agent-specific notes live in a separate reference file — for Hermes, references/hermes.md maps the same steps to skill_view() calls:
# Hub workflow (all agents)
Load the leaf skill and execute the phase runbook.
# Hermes equivalents (references/hermes.md)
skill_view("microbyte-product-bootstrap")
skill_view("saas-doc-setup") # docs phase
skill_view("setup-pre-commit") # localCi phase
An install script symlinks the skill into all three agent homes:
bash "$MICROBYTE_SAAS_ROOT/docs/bootstrap/scripts/install-skill.sh"
What I learned
Template drift is real. The system templates come from Fiscify — workflows, deploy configs, CI snippets. When Fiscify changes, the templates diverge. I added a quarterly refresh note to the README, but realistically this needs automation too.
Version 1 is opinionated. The eight phases (docs, website, local CI, GitHub CI, deploy, screenshots, store listing, mobile) are ordered and sequential. Non-mobile products skip three phases via the capabilities flag. But the system assumes every product wants a website, which is not always true. That is a v2 problem.
The manifest is the durable record. Before this system, I kept setup notes in my head or scattered across agent sessions. The bootstrap.jsonc now tracks exactly what has been done, when, and why a phase was skipped. A month later, I can look at a product's manifest and know its maturity at a glance.
The result
Setting up a new product used to take two to three days of context-switching between agents, documentation, and manual checks. With the bootstrap system, I invoke the skill, approve each phase as it completes, and have a fully set up product in about two hours.
The time saved is not the execution — it is not having to remember the sequence every time.
For suggestions and queries, just contact me.
