chore(sites): remove hosted sites — OrangeCat is not the host - #785
Merged
Conversation
I built this on a wrong premise: that <name>.orangecat.ch means membership in
OrangeCat. It does not. It is an address on a domain George happens to own,
which is why petvity has a site and no profile, and why sinktattoo moved to its
own domain without moving a line of code.
Every site in this studio is its own repository from birth — aslan-tattoo,
kivvi, vitareba, petvity, botsmann, all of them. That is not an accident of
history, it is the property that makes a site handover-able, and a site that
lives inside this codebase can never be handed to anyone. Substrata was the only
violation, and it was mine.
Removed: the group_features 'site' feature, the profile-site renderer, the
positional host resolution and its reserved-subdomain list, the publish API, the
tls-check endpoint, the catch-all Caddy block, and Substrata's configs. Substrata
moves to its own repository, with its own design system — it currently renders in
OrangeCat's tokens and OrangeCat's orange, which is the visible form of the same
mistake.
The RLS policy needs its own DROP: deleting a migration file does not undo a
policy that already ran on production, and an anonymous SELECT grant is not
something to leave behind because nothing writes that row any more.
Kept, because they were never about hosted sites:
- rateLimitDomainSearch — /api/v1/domains still fans one request out to 24
registry lookups for an anonymous caller
- the bounded RDAP result cache, keyed by caller input in a process that runs
for weeks
- clientIp(), collapsing the third copy of the x-forwarded-for read
- the CodeQL fix for the URL substring test
- type-check:scripts, which is why scripts/ is type-checked at all
verify green: 244 suites, 2406 tests.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Why
I built this on a wrong premise: that
<name>.orangecat.chmeans membership in OrangeCat. It doesn't. It's an address on a domain George owns — which is whypetvityhas a site and no profile, and whysinktattoomoved to its own domain without moving a line of code.Every site in this studio is its own repository from birth —
aslan-tattoo(repos-ink),kivvi,vitareba,petvity,botsmann, all of them. That isn't an accident of history; it's the property that makes a site handover-able. A site that lives inside this codebase can never be given to its owner.Substrata was the only violation, and it was mine. It moves to its own repo.
What this removes
The
group_features'site'feature, the profile-site renderer, positional host resolution and its reserved-subdomain list, the publish API, the tls-check endpoint, the catch-all Caddy block, and Substrata's configs. 44 files, −7,146 lines.The RLS policy gets an explicit
DROP: deleting a migration file does not undo a policy that already ran on production, and an anonymousSELECTgrant ongroup_featuresisn't something to leave behind because nothing writes that row any more.What stays, because it was never about hosted sites
rateLimitDomainSearch—/api/v1/domainsstill fans one anonymous request out to 24 registry lookupsclientIp()— collapsed the third copy of thex-forwarded-forreadtype-check:scripts— the only reasonscripts/is type-checked at allThe wildcard
*.orangecat.chDNS record also stays. It's venture-agnostic: it removes the DNS step for every future site regardless of how it's built.Verification
npm run verifygreen: 244 suites, 2406 tests.Substrata's 3,950 lines of research config and renderers were extracted before deletion and are staged for its own repository, where they'll be rebuilt on their own design tokens — it currently renders in OrangeCat's tokens and OrangeCat's orange, which is the visible form of the same mistake.
🤖 Generated with Claude Code