---
name: web-intake
description: Single-entry orchestrator that turns an operator's raw inputs — a folder or zip of photos, an existing website URL, social links, and free-text notes — into a finished single-page website plus share-ready social tiles, starting from what the site is for. Leads with the objective (what a visitor should do), then routes brand-extract → web-design → socials and asks targeted questions to fill every field the sources do not supply. Use whenever the deliverable is "a website for this business" from mixed source material. Trigger phrases include "design a site for this business", "build a landing page from these photos and their website", "put together a one-page site and social tiles".
allowed-tools:
  - Bash
  - Read
  - Write
  - Edit
  - Glob
  - Grep
  - WebFetch
  - Skill
  - AskUserQuestion
---

# web-intake

Orchestrates the `brand-extract → web-design → socials` pipeline and the deploy
hand-off. The deliverable is a self-contained `site/` directory (a scrollable
single-page site, an `llms.txt`, and a `socials/` folder of Open Graph and social
tiles with a gallery and captions), built from whatever the operator provides and
whatever the orchestrator has to ask for, and shaped by what the site is for.

This skill is a playbook, not a programmatic dispatcher. It tells you the routing
and the gap-filling contract; you execute each step under the underlying skills'
own contracts. It dispatches no specialist worker.

## Start with the objective

Before collecting facts, settle what the site is **for** and what a visitor should
**do**. That decision drives the CTAs, the forms, and whether the page needs gated
access or signing — so it comes first, not last. The objective-first questions are
in [`references/intake.md`](references/intake.md) § 0; the rest of that file is the
field-by-field gap list.

## What the operator gives, and what you do with it

| Operator supplies | Used for | If missing |
|---|---|---|
| **Images** (folder or zip of photos) | hero rotator, photo grids, portrait, testimonial, social tiles | the site is image-led. If none, stop and ask. |
| **Website URL** | brand tokens (palette, accent), logo, company name, contact, services, "about" copy | run `brand-extract`; anything it cannot read becomes a question |
| **Social links** | footer + drawer links, handles, extra copy in the operator's own voice | login-walled platforms usually cannot be scraped — say so plainly and ask the operator to paste anything they want used |
| **Free-text notes / pasted quotes** | the person section, testimonials, latest-update cards, service descriptions, taglines | use verbatim where the operator marks a quote; never reword a real client testimonial into marketing prose |
| **Design tokens** (if supplied directly) | the palette `:root` — use them verbatim | if absent, `brand-extract` derives them from the site |

## The core rule: ask, never invent

Every `{{ PLACEHOLDER }}` in the templates is a fact about a real business. For
every placeholder still unfilled after `brand-extract`, ask the operator — do not
synthesise a plausible value. A fabricated phone number, a guessed founding year,
an invented testimonial, or a made-up company number is a defect. Two facts are
load-bearing and frequently wrong if guessed: the **established year** (a business
that "trades since 1987" may have incorporated much later — keep the two distinct)
and any **company-registration detail**, which comes from the register or the
operator, never from a marketing line.

## Process — high level

1. **Set the objective.** Ask `references/intake.md` § 0: what the site is for, what
   a visitor should do, the CTAs, which forms (contact / waitlist / custom bucket),
   whether any page or document needs gated access, whether anything needs signing.
   These answers shape every later step.
2. **Resolve the workspace.** Default output root is the images directory's parent,
   or the operator's stated path. The deliverable lands in `<output>/site/`.
3. **Run `brand-extract`** against the website URL for the palette, logo, icon, and
   the facts it can read, plus a `brand.md` of what is still unknown. If the
   operator supplied design tokens directly, use those verbatim.
4. **Curate the images.** Verify each photo's *content* by eye, measuring first and
   previewing any image over 2000px on its longest edge (downscale to `/tmp`, read,
   delete). Lead the hero with the strongest "arrive here" shot; map the rest to the
   grids. A portrait is for the person section and a portrait tile, never a
   landscape crop.
5. **Fill the gaps.** Compare the token inventory
   ([`../web-design/references/placeholders.md`](../web-design/references/placeholders.md))
   against what brand-extract found and the operator's notes. Ask for everything
   still missing, in grouped questions. Wait for answers. Do not proceed with blanks.
6. **Run `web-design`** to build `site/index.html` + `site/llms.txt`, substituting
   every placeholder. No `{{ }}` may survive.
7. **Run `socials` in `microsite` mode** to render the tiles into `site/socials/`,
   plus `site/socials.html` and `site/social-posts.md`, and to wire the site's
   `og:image`.
8. **Hand off to deploy.** When the operator wants the site live, follow
   `../web-design/references/deploy.md`. If the objective needs gated access or
   signing, follow `../web-design/references/gating.md` and
   `../web-design/references/e-sign.md`.
9. **Verify and report.** Confirm no placeholder survived, every asset resolves over
   a local HTTP server, the site renders at desktop and mobile, and tiles are at
   exact dimensions. Report the `site/` path and every value you had to ask for.

## Completion criteria

- `grep "{{" site/index.html site/llms.txt site/socials.html` returns nothing.
- No invented facts: every value traces to the website, the operator's notes, or an
  answer the operator gave. Anything still unknown is shown as a clear gap.
- The site renders at desktop and a 390px mobile viewport with no horizontal
  overflow and no broken images; the hero rotates; the back-to-top works.
- Social tiles exist at exact sizes (1200×628 / 1200×1200 / 1080×1350); any person
  tile is portrait only.
- The report names the objective, the CTAs and forms wired, and every field asked for.

## When NOT to use this skill

- The operator only wants the site, or only the tiles → call `web-design` or
  `socials` directly.
- The operator only wants brand tokens and a logo from a URL → call `brand-extract`.
- There are no usable photos of the business → the site is image-led; ask for photos
  first.
