Skip to content

chore(sites): remove hosted sites — OrangeCat is not the host - #785

Merged
github-actions[bot] merged 1 commit into
mainfrom
chore/remove-hosted-sites
Aug 27, 2026
Merged

chore(sites): remove hosted sites — OrangeCat is not the host#785
github-actions[bot] merged 1 commit into
mainfrom
chore/remove-hosted-sites

Conversation

@catomean

Copy link
Copy Markdown
Collaborator

Why

I built this on a wrong premise: that <name>.orangecat.ch means membership in OrangeCat. It doesn't. It's an address on a domain George owns — 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 (repo s-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 anonymous SELECT grant on group_features isn't something to leave behind because nothing writes that row any more.

What stays, because it was never about hosted sites

  • rateLimitDomainSearch/api/v1/domains still fans one anonymous request out to 24 registry lookups
  • the bounded RDAP result cache — keyed by caller input, in a process that runs for weeks
  • clientIp() — collapsed the third copy of the x-forwarded-for read
  • the CodeQL fix for the URL-substring test
  • type-check:scripts — the only reason scripts/ is type-checked at all

The wildcard *.orangecat.ch DNS 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 verify green: 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

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>
@github-actions
github-actions Bot merged commit b9fb221 into main Aug 27, 2026
9 checks passed
@github-actions
github-actions Bot deleted the chore/remove-hosted-sites branch August 27, 2026 12:13
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