docs: where the Site Factory lives, and the line it must not cross - #50
Merged
Merged
Conversation
"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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.tsxagainst nothing. Fix thecardsrenderer once, every site ever generated improves.profile_claimsis already a draft that is not a live profile until its subject claims it. Generalise itsdraftjsonb to cover a fundable business, and add the ingest door (urlor 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
sitekitand 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