Skip to content

docs: where the Site Factory lives, and the line it must not cross - #50

Merged
github-actions[bot] merged 1 commit into
masterfrom
worktree-site-factory-spec
Aug 27, 2026
Merged

docs: where the Site Factory lives, and the line it must not cross#50
github-actions[bot] merged 1 commit into
masterfrom
worktree-site-factory-spec

Conversation

@catomean

Copy link
Copy Markdown
Collaborator

Answers "is this FleetCrown or OrangeCat?" once, so it isn't re-litigated per PR.

The seam — split where the boundary already falls:

  • sitekit (new shared package, lifted from substrata) — the closed union of section kinds + renderers. This is the efficiency unlock: the generator emits data against a schema, never .tsx against nothing. Fix the cards renderer once, every site ever generated improves.
  • FleetCrown — the prospect pipeline (scrape, assess, generate, pitch, hand over). It calls OrangeCat; it does not own the entity.
  • OrangeCat — the claimable entity. profile_claims is already a draft that is not a live profile until its subject claims it. Generalise its draft jsonb to cover a fundable business, and add the ingest door (url or free text → pending claim) — the piece that was asked for and doesn't exist.

The safety property falls out of the architecture, rather than being bolted on: money can never be routable to a business that hasn't accepted it, provided ingest writes to the claims table and never to profiles. That's the one line in the design that must not be crossed.

On the fake-names idea — camille's own HANDOVER.md §4 already found, against a real repo, that scraped-and-pseudonymised content is demo-only and cannot be handed to a client ("a restyled copy of a competitor's copy"). So the names split by purpose: portfolio pieces stay fully fictional; real pitches use the business's real name, marked as an unsolicited mockup, noindex, takedown on request — and fabricate no facts. A plausible-but-wrong street number is the one detail that damages the business the pitch is meant to win.

First slice is ordered to resist building the pipeline first: extract sitekit and rebuild camille on it (that rebuild is the schema's test), add the OrangeCat ingest endpoint, then walk one real prospect through by hand — and only then write the state machine that walk proved exists.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AZCNYHwjEeqxNpYCUk6Yna

"Paste a link, get a better site plus a fundable OrangeCat entity" spans
three repos, so the split gets decided once here instead of in each PR.

The seam follows a boundary that already exists: substrata's site-as-data
schema becomes a shared package (the generator emits data against a closed
union, never .tsx against nothing), FleetCrown owns the prospect pipeline,
and OrangeCat keeps the claimable entity — because profile_claims is
already a draft that is not a live profile until its subject claims it.

That last point is also the safety property, for free: money can never be
routable to a business that has not accepted it, provided ingest writes to
the claims table and never to profiles.

On fake names — camille's own HANDOVER.md §4 already found, against a real
repo, that scraped-and-pseudonymised content is demo-only and cannot be
handed over. So real pitches use real names, marked as unsolicited mockups,
and fabricate no facts: a plausible-but-wrong street number is the one
detail that damages the business it is meant to win.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AZCNYHwjEeqxNpYCUk6Yna
@github-actions
github-actions Bot merged commit ba82c93 into master Aug 27, 2026
1 check passed
@github-actions
github-actions Bot deleted the worktree-site-factory-spec branch August 27, 2026 18:13
github-actions Bot pushed a commit that referenced this pull request Aug 27, 2026
…cross (#50)" (#51)

This reverts commit ba82c93.

Co-authored-by: Mao Nakamoto <41178744+maonakamoto@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant