# Teahub pages (`green-tea-pages`) The pages convention for orgs on prod: an org's public `site` repo is served at its domain. `PAGES_SITES` in `fly.toml` maps hostnames to `org/site`. The server clones each repo over https (no token), serves static files (directory → `index.html`, missing → `404.html`), and re-pulls every 5 minutes or on `POST /_hook//site` (a Gitea webhook on the repo, push events, no secret: the hook only triggers a pull of public content). Adding a site: a line in `PAGES_SITES` + `fly deploy` (operator lane), `fly certs add `, the `_acme-challenge` CNAME, then A/AAAA to the app's IPs (`fly ips list`), and a push webhook on the `site` repo. Live: persimmons.app → `persimmons/app` (repo root, as its `pages/page.conf` says), phly.cloud → `phly/site`, supertestnet.lol → `supertestnet/app#pages`, yolopreneur.lol and `*.yolopreneur.lol` → `teahubxyz/time#gh-pages/ventures` (`PAGES_WILDCARDS`). A site can be any public repo, `org/repo#branch/subdir`; it doesn't have to be called `site`. A product with a backend serves its own pages instead (phast.app is `phast-app`), so there is never a copy to drift. Files without an extension that start with `