# Cocotte (cocotte.club) Deploy Runbook > **As of 2026-05-18**: Cocotte site is built but not yet deployed. > Prod domains `cocotte.club` and `cocottehouse.com` are not registered. > This doc captures the deploy shape so the runbook is ready when DNS > goes live. --- ## What this feature ships A bilingual (English / Français) ledger-format site for Cocotte, the house representing performers and tours. 9 routes: | Route | Locale | Page | |------------------------|--------|------------------| | `/` | — | Language splash + auto-redirect | | `/en/` | en | House (home) | | `/en/performers/` | en | Clients | | `/en/tours/` | en | Tours | | `/en/contact/` | en | Contact | | `/fr/` | fr | La Maison (home) | | `/fr/performers/` | fr | Clientèle | | `/fr/tours/` | fr | Tournées | | `/fr/contact/` | fr | Contact | --- ## Architecture Cocotte uses **Astro** with built-in `i18n` routing (`defaultLocale: en`, `locales: [en, fr]`) and the `@cocotte/*` package scope: | Package | Role | |-----------------------------|---------------------------------------------| | `@cocotte/astro-tokens` | CSS variable contract (theme-agnostic) | | `@cocotte/astro-chrome` | `BaseLayout` primitive | | `@cocotte/astro-config` | `defineBrandSiteConfig({ i18n })` factory | Layout discipline: `CocotteLayout.astro` composes `BaseLayout` and owns the velvet/gilt chrome (wordmark, marquee, top-nav, page-footer with lang-switch). Pages are content-only — typically 10-20 lines of ``. i18n strings (nav labels, signoff text, page paths) live in `src/i18n/strings.ts` as a single source of truth. Brand palette: velvet/gilt/cream cabaret, Playfair Display + Cormorant Garamond. Lives in `src/styles/tokens.css`. --- ## Source of truth | Surface | Path | |--------------------------|-------------------------------------------------------------------| | Astro project | `codebase/@features/cocotte-web/site/` | | Pages | `codebase/@features/cocotte-web/site/src/pages/` | | Layout | `codebase/@features/cocotte-web/site/src/layouts/CocotteLayout.astro` | | i18n strings | `codebase/@features/cocotte-web/site/src/i18n/strings.ts` | | Brand tokens | `codebase/@features/cocotte-web/site/src/styles/tokens.css` | | Globals | `codebase/@features/cocotte-web/site/src/styles/globals.css` | | Legacy HTML stubs | `codebase/@features/cocotte-web/web/` (kept until cutover) | --- ## Local build \`\`\` cd codebase/@features/cocotte-web/site bun install bun run build # → dist/{index,en/*,fr/*}/index.html + sitemap bun run preview # localhost:4321 bun run dev # hot-reload dev server \`\`\` --- ## Deploy (pending — cocotte.club not yet registered) When the domain is live: \`\`\` cd codebase/@features/cocotte-web/site bun install bun run build rsync -avz --delete \\ dist/ \\ vps-0:/var/www/cocotte-web/web/ \`\`\` Nginx vhost: `deployments/@domains/cocotte.club/nginx/prod.conf` (not yet authored). Optional alias: `cocottehouse.com` → 301 to canonical. --- ## Adding a new locale 1. Add `'es'` (or whichever) to `astro.config.mjs` `i18n.locales` array. 2. Extend `src/i18n/strings.ts` `STRINGS` and `PAGE_HREF` maps. 3. Copy `src/pages/en/*.astro` → `src/pages/es/*.astro` and change `locale="en"` to `locale="es"`, then translate content. 4. Update `src/pages/index.astro` splash links if surfaced.