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 metadatasrc/content/team/*.yaml: one file per team membersrc/content/locations/*.md: one file per service areasrc/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:
- Open each page in
src/pages/and wire up components - Drop client images into
public/images/[type]/ - Run the optional
npm run enrichpass if the copy is thin npm run buildand 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.