Skip to main content

From Client Brief to Live Site in an Afternoon

How HoTMoL's intake pipeline turns raw client copy (from a form submission, a Word doc, or freeform notes) into a fully structured Astro site in a single session.

From Client Brief to Live Site in an Afternoon

The slowest part of building a service-business website isn’t the code. It’s the translation layer between what the client sends you and the structured content your components actually need. A wall of text in an email, a Google Doc full of bullet points, a Fluent Forms submission with services jammed into a single textarea. The intake pipeline was built to eliminate that bottleneck entirely.

How It Works

The pipeline is a single command:

cat client-copy.txt | npm run intake

You pipe in whatever the client sent you, in any format. The script passes it to Claude, which extracts every meaningful piece into a structured brief.json checkpoint file. Business name, tagline, description, services with names and descriptions, team members, locations, testimonials, and FAQs are all parsed, normalized, and written to a single reviewable file before anything touches the codebase.

The Checkpoint Step

Before any content files are written, you get to review brief.json. This is the most important part of the workflow. Claude is good at parsing unstructured input, but a client who writes “we do landscaping and also some irrigation stuff and snow removal in winter” needs a human to decide whether that’s two services or three, and what to call them.

The --skip-import flag lets you run the parse without writing anything:

npm run intake -- --skip-import path/to/copy.txt

Edit brief.json to your satisfaction, then run the import manually:

npm run import

What Gets Written

import-brief.js writes Markdown and YAML files for every content collection that has data in the brief:

  • src/content/services/*.md: one file per service, with title, description, and metadata
  • src/content/team/*.yaml: one file per team member
  • src/content/locations/*.md: one file per service area
  • src/content/testimonials/*.yaml: one file per review

The site config at src/content/config/site.yaml gets the business name, contact info, social links, and global CTA defaults. Everything the header, footer, and schema components need is populated automatically.

From There to Live

With content in place, the workflow becomes assembly:

  1. Open each page in src/pages/ and wire up components
  2. Drop client images into public/images/[type]/
  3. Run the optional npm run enrich pass if the copy is thin
  4. npm run build and deploy

For a typical 6–8 page service-business site (home, about, services index, slug pages, locations, contact) the assembly step takes two to three hours. The intake step takes fifteen minutes. That’s the whole day’s work.

Why This Matters

The intake pipeline doesn’t replace developer judgment. It eliminates the mechanical translation work so you can spend your time on the decisions that actually require judgment: which hero variant fits this client’s brand, how to sequence the sections, whether the testimonials are strong enough to lead with. That’s where the value is. The pipeline just clears the path to get there.