A personal website builder for the Atmosphere

Add site and page authoring: the first write path to the user's PDS master

Until now Mooring only read from the Atmosphere. This lands the other direction: an owner can create their site record and author pages, all written straight to their own PDS through the OAuth session. - lib/server/mooring/records.ts — pure builders for page.mooring.site and page.mooring.page, validated with @atproto/lexicon against the repo-root lexicon JSONs. Builders merge onto the existing record, since putRecord replaces it wholesale and no form edits sections/theme/icon yet. - lib/server/mooring/repo.ts — putRecord/createRecord/deleteRecord through session.fetchHandler; reads reuse the atmosphere xrpc helpers. - lib/server/admin.ts — shared requireSession guard, replacing the per-route cookie-to-restore dance. - Admin routes: site settings on /admin (behind an explicit "Create site" button — first login writes nothing), /admin/pages list with delete, /admin/pages/new, /admin/pages/[rkey]. Three constraints the lexicon can't carry are enforced app-side: visibility is restricted to its three knownValues, path uniqueness is checked per site, and normalizePath forces a leading slash and rejects spaces, control characters, ?, #, \ and ./.. segments. Wind bless you. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>