---
description: Design and build a self-contained single-page website for a business and put it live on Cloudflare. Runs the web-intake pipeline end-to-end (guided intake, brand extraction from a URL, a domain-neutral build, social share tiles, and deploy).
---

# /website

Turn photos, an existing website URL, and a few notes into a finished single-page
site plus share-ready social tiles, then put it live.

## Usage

- `/website`, then describe the business in the follow-up
- `/website "a landing page for Ridgeway Joinery, brand from ridgewayjoinery.co.uk, photos in ./photos"`
- `/website "one-page site and social tiles for this cafe, contact form, put it live on its own domain"`

## What the command does

Runs the `web-intake` skill end-to-end. `web-intake` is the single entry
orchestrator; this command hands it whatever the message and attachments already
provide and lets it ask for the rest.

1. Set the objective first: what the site is for, what a visitor should do, which
   CTAs and forms, and whether anything needs gated access or signing.
2. Run `brand-extract` against the website URL for the palette, logo, icon, and the
   company facts it can read (design tokens supplied directly are used verbatim).
3. Curate the supplied photos into a hero rotator and grids.
4. Fill every remaining gap by asking the operator. Never invent a fact.
5. Run `web-design` to build `site/index.html` + `site/llms.txt` with no
   `{{ placeholder }}` left unfilled.
6. Run `socials` to render Open Graph, square, and portrait tiles into
   `site/socials/` and wire the site's `og:image`.
7. Hand off to deploy when the operator wants the site live.

## The core rule: ask, never invent

Every placeholder is a fact about a real business. A fabricated phone number, a
guessed founding year, an invented testimonial, or a made-up company number is a
defect. Anything the sources do not supply is a question for the operator, not a
plausible value to synthesise.

## Editions

The command carries no account assumptions. Where the Cloudflare token and the
site-tree root come from is resolved by `bin/resolve-cf.sh`:

- **Standalone / marketplace:** the token is read from `CLOUDFLARE_API_TOKEN` in the
  environment, and the site tree lands under `$WEB_DESIGNER_SITE_ROOT` (or `./pages`).
  Deploy follows the generic `wrangler pages deploy` sequence. E-signing and
  browser-rendered social tiles are host dependencies, not self-contained in this
  edition.
- **Inside maxy-code:** the same command resolves the account's Cloudflare token and
  account directory automatically and hands the built tree to `cloudflare:site-deploy`
  unchanged. The skill triggers ("design me a website") remain the primary surface
  there; this command is an equivalent entry point.
- **Inside maxy-code, as a client account on a multi-tenant install:** there is no
  account Cloudflare token to resolve — the house holds the only master, and
  `cf-token.sh` denies the `pages` scope (`reason=not-house`). The build is unchanged;
  only going live differs. Publish with `storage-broker:storage-pages-deploy`, naming
  the site folder and the Pages project. The project must already be recorded to the
  account by the house.

## What you get back

A self-contained `site/` directory: a scrollable single-page site, an `llms.txt`, a
`socials/` folder of tiles at exact dimensions (1200x628 / 1200x1200 / 1080x1350)
with a gallery and per-platform captions, and, when the operator asks, a live
Cloudflare deployment with any wired form buckets.
