Template-repo extraction plan
PLAN awaiting Brad's four decisions; execution is ~a day once decided2026-09-06
Extracting the kit from bradley.io
Prerequisite 1 of the pilot support plan, and the only one that is a decision before it is work. Today the kit is tangled inside bradley.io's repository with Brad's biography, his other instruments, and his deploy path. A pilot needs a repo they can clone that contains the machine and nothing personal. This plan makes the untangling mechanical.
The shape: a standalone runnable site, not a drop-in
Recommendation: the template is a complete minimal Next.js site with
the tinymachines style kit vendored, one stub home page, and the full House
Calls instrument mounted, runnable with bun install && bun run dev on
clone. The alternative (a drop-in package for an existing Next site) fails
the actual audience: the stand-up checklist already assumes the pilot gets
a site out of this, and most pilots will not have a Next 16 app lying
around. One repo, batteries included, biography sold separately.
Upstream and drift: the style-kit precedent
The flagship stays the source of truth; the template is a vendored
downstream, exactly like app/beta/kit/ is vendored from tinymachines
today. Concretely:
kit-manifest.jsonin bradley.io lists every kit-owned path.scripts/sync-housecalls-kit.shcopies manifest paths into a template working clone, shows the diff, and commits with provenance, mirroringsync-style-kit.sh. Drift stays visible instead of silent.- Kit changes land in bradley.io first (the flagship is where they get proven), then sync outward. "The second operator's problems are the kit's bugs" already forces this direction of flow.
The manifest, drafted
Goes to the template (genericized where marked):
| Path | Notes |
|---|---|
app/housecalls/{page,plain,network} |
copy genericized: {OPERATOR} slots + TODO markers keyed to checklist phase 4 |
app/housecalls/*/opengraph-image.tsx + lib/og-card-v3.tsx |
works as-is |
components/housecalls/* |
as-is (already config-driven) |
lib/housecalls/operator.json |
ships as operator.example.json; real one is the pilot's first edit |
lib/housecalls/fixtures.json |
NOT shipped; generated per territory |
scripts/housecalls-*.mjs (harvest, send, replies, ledger, rfp-watch, fixtures, signal-crawls) |
as-is |
scripts/vendor-census-counties.sh |
as-is (config-driven) |
housecalls-rfp.{service,timer} |
user/paths templated |
docs/housecalls/ KIT docs |
rubric, reply playbook, the 4 letter templates, operator-config, stand-up checklist, subdomain recipe, tile recipe, sending-domain design, letter-ammo (structure only, their citations are theirs) |
public/data/ seeds |
empty ledger (one mission-entry slot), empty map/pins/rig; counties regenerated |
data/housecalls/ |
.gitignore + empty suppression register + platform.json.example |
| minimal site scaffold | kit CSS (resynced from tinymachines), minimal KitShell/nav, stub home, deploy.sh with SERVICE/PORT variables at top, package.json with bun run selftest running all six suites |
Stays in bradley.io (flagship-only): everything else on the site; the batch import scripts (preserved history); the FLAGSHIP business docs: franchise sketch, pilot pitch letter, pilot terms memo, support plan, this plan; the live ledger with its entries; the flagship's operator.json, fixtures, and data.
The four decisions (Brad's, before the day of work)
- Where it lives.
isenbek/housecalls-kitor under the tinymachines org. Recommendation: tinymachines, since the style kit it vendors already lives there and the network page can link it as shared infrastructure rather than one person's repo. - Visibility. Recommendation: public. The hunt runs in the open, the doctrine docs are already in a public repo, and a pilot pitch that says "read the code first" is on brand.
- License. The sharp one. An OSS license means anyone can run the method without the network, which is either the brand spreading or the product leaking depending on the future money design. Recommendation: public but NO license file initially (source-visible, all rights reserved by default), revisit with counsel at the money conversation, which term 12 of the pilot memo already schedules. Do not pick MIT casually on extraction day.
- The template's name on the tin.
housecalls-kitassumes decision 1 from the franchise sketch (House Calls is the franchisable name). Confirming the kit's repo name effectively confirms the brand name; say so out loud before pushing the button.
Execution, once decided (~a day)
- Scaffold the minimal site; resync style kit from tinymachines (2h).
- Copy manifest paths; genericize the three pages and the unit files;
write
operator.example.json+platform.json.example(3h). - Generalize
deploy.sh; add theselftestpackage script (1h). - Acceptance test, the part that makes it real: on a clean checkout,
configure a NON-Michigan state (Ohio), run the vendor script, the
fixture generator, and all six selftest suites with a dummy
platform.json(the config selftest only checks shape,ws_templatepasses). Green suite on a second state proves the extraction; the config-driven work from this week was building exactly this moment (2h). - Write
kit-manifest.json+sync-housecalls-kit.shin bradley.io; first sync is the initial template commit (1h).
What this plan does not do
It does not move anything today. It waits for the four decisions, then the day. And it does not solve prerequisite 2 (the Nominate workspace answer); a pilot with a perfect template and no workspace still cannot harvest.