How to take a laundromat client from an intake file to a polished, launch-ready website using the Suds system — by giving instructions, answering decisions, and reviewing pages. The AI does the building; you steer it.
Audience: the site builder / operator. No web-development background assumed. Deeper references are linked at each step and indexed in the documentation registry.
Every Suds site is the same engine wearing a different brand. The Suds Digital Website Builder plugin carries everything — a library whose current count is published in its generated manifest (62 sections today), 7 design archetypes (visual personalities) × 4 hero layouts, the page templates, and the safety rules. Each client gets only a tiny brand theme (their name + colors) that the system generates. You do not need to edit code: choose Claude Code or Codex as the builder, answer decisions in Mission Control, and polish visually in the Section Studio. Both agents consume the same intake, canonical plan, lock, engine, and claim-safety rules; the adapter changes, not the project truth. Data-dependent sections hide themselves instead of inventing facts, and QA remains the final check.
| Thing | What it is |
|---|---|
| A Local site from the blueprint | The site in Local (by Flywheel), created from the Suds blueprint — the BCB parent theme, engine plugin, ACF Pro, WPForms, etc. should already be installed. Before a build, verify that the engine and framework match the release you intend to use. |
| Onboarder access or an intake file | Recommended: connect the site's Prepare Build screen to Onboarder so it installs the framework and fetches the selected project directly. Manual fallback: export SD-<id>-client.json and place it in wp-content/.claude/intake/. In either path, localize photo/logo assets promptly while their signed links are fresh. |
| Claude Code or Codex | Open the chosen agent in the workspace that contains .claude and .codex (normally the site's wp-content folder). Prepare Build installs both adapters; you choose which one drives the build. |
| An unlicensed local build target | Use a client-specific Local site with WP_ENVIRONMENT_TYPE=local or development. Do not build client sites on catalog.local; that site is the component-library workbench. Local and ordinary client staging sites remain unenrolled. |
Website Builder — Local, then select Create key.sd_live_… value immediately. The intake app shows the raw key only once and stores only its SHA-256 hash.https://suds.onboarder.website/api/v1, paste the key, choose wp-content/.claude, and select Save credentials.wp suds compatibility --format=json and wp suds release status --format=json. Resolve any reported engine, thin-theme, protocol, framework, or Codex-skill mismatch, and confirm release status shows "enrolled": false. Do not create a production enrollment code yet. Then choose one intake path:wp-content/.claude and wp-content/.codex/skills/suds-build, preserves existing project state, and writes the selected intake to .claude/intake/.wp suds install-framework --location=wp_content and place the exported SD-<id>-client.json in wp-content/.claude/intake/.| Builder | Where to open it | First instruction |
|---|---|---|
| Claude Code | The site's wp-content directory | Run /suds:init for a fresh prepared project, then follow the /suds:* sequence. |
| Codex | The same wp-content directory | Invoke $suds-build and say: Initialize and build this project from the newest prepared intake. |
.claude is the historical name of the shared project-state directory; its name does not mean the project belongs to Claude. Start with one builder and do not initialize both agents at the same time.
wp suds handoff-agent --to=codex or wp suds handoff-agent --to=claude, then continue in the target agent. The command verifies the current lock, regenerates only the adapter projection/comparison/lock, and proves the intake and canonical plan stayed unchanged. If it reports REVIEW_DIFFERENCES, review the comparison first; only then rerun with --accept-review-differences. Never switch by re-running initialization on a project already in progress.The command names below are the Claude interface. Codex follows the same stages and gates through $suds-build, using the roadmap, task files, protocol lock, and live WordPress state.
Reads the newest intake in .claude/intake/, pins its SHA-256 so the raw export remains immutable, downloads the client's assets before signed links expire, and writes the plan (pages, priorities, roadmap). Init then runs the database-independent protocol gate and writes .claude/product/suds-build.lock.json; this step is mandatory even when Local's database is stopped. Continue on MATCH, review differences when requested, and stop on a factual mismatch or missing lock. If the site was already built by someone else, init routes you to /suds:backfill instead — follow it.
Generates the client's brand theme and turns the engine on. At this design checkpoint, confirm the suggested archetype (one of 7 personalities — Express, Warm, Value, Commercial, Premium, Eco, Basecamp), hero layout, and the color palette derived from the client's logo. The system checks color contrast for accessibility automatically.
After bootstrap, use this order (paths shown from the WordPress root): wp suds import-intake wp-content/.claude/intake/SD-<id>-client.json (pages, menu, services, locations, and each location's own hours). Treat that raw intake as immutable. For a photo-poor client, copy it to wp-content/.claude/product/derived-intake.json, run /suds-placeholder-kit on the derived file only, then run wp suds import-assets wp-content/.claude/product/derived-intake.json. When no derived file is needed, import assets from the raw intake. Finally run /suds:copy for claim-safe, client-tailored writing. Normal runs preserve existing operator content; explicit options such as --refresh-intake, --force-framework, or /suds:copy --force can overwrite their documented scope, so use them deliberately.
Run /suds:next to create the next small work package (a “spec”), then run /suds:execute <task-id> with the task ID it returns. Repeat until the roadmap is complete. Watch progress and answer Decisions Needed in Mission Control (/suds:mission-control — a local dashboard in your browser). Every submitted answer is written to the project's decision file and reused by later commands.
On the running site, three URLs are your workbench (also linked from the admin bar):
| URL | What you do there |
|---|---|
?sbs_compose=<page> | Section Builder — reorder, add, remove, and tune the sections of any page, next to a live preview. Works on every page, the /services/ and /locations/ archive pages, and individual service/location pages. |
?sbs_review=board | Review Board — the coverage grid. Flag anything that looks off (your note goes straight to the AI's fix queue), mark things ready, approve. |
?sbs_preview=<section> | Preview — any section in any of the 7 skins at real phone/desktop widths. |
Full visual manual with drills: the plugin's Section Studio runbook. What every field and knob does: section-fields.md.
Runs the current deterministic checks across content, design, rendering, claim-safety, and composition. The verdict is READY TO SHARE, SHAREABLE with notes, or NOT READY. /suds:qa --fix applies only documented safe fixes and then rechecks once. FAILs block sharing; WARNs become the review punch-list. Passing here allows the build to move to client staging; it does not enroll the site or replace final production QA.
Building, client review, release publication, and licensing are separate gates. A merge or an approved Studio system revision does not publish a WordPress update. Licensing controls access to signed updates and support; it must never stop an already-installed public site from rendering.
| Phase | Environment | Central Library enrollment | What happens |
|---|---|---|---|
| Local build | Local URL; local or development | Not enrolled | Intake, content, design, repair, and local QA. |
| Client staging | Temporary HTTPS URL; staging | Not enrolled by default | Migration checks, client review, revisions, and approval. |
| Production | Final client HTTPS URL; production | Enroll once, after URL migration and final QA | Signed stable updates and fleet history begin. |
WP_ENVIRONMENT_TYPE=staging.wp suds release scrub-clone --confirm on staging. This removes copied enrollment metadata without revoking the original site. Never use detach on a clone.A new Engine version follows the complete signed-release process: merge the source revision, approve that exact system revision in Studio, prepare and register canary bytes, verify them on a controlled canary site, promote those exact bytes to stable, then publish and close the release run. Never rebuild different bytes under an existing version. Documentation-only corrections such as this guide use the lighter source PR → Studio bundle and matching catalog capture → revision approval path. They do not create a WordPress release, require offline signing, or update the fleet.
home/siteurl, and set WP_ENVIRONMENT_TYPE=production.wp suds qa --no-color on the final URL.wp suds release status --format=json and wp suds release check --format=json. Confirm the returned origin is the final production origin and the environment is production.printf '%s' "$SUDS_ENROLLMENT_CODE" | wp suds release enroll --code=-
wp suds release status --format=json
wp suds release check --format=json
scrub-clone on a copied database. Use wp suds release detach --confirm only when permanently retiring the actual production site from its matching enrolled URL.Keep the detailed checklist open during migration and launch: Build locally → client staging → production licensing.
?sbs_compose=…) — never edit code.| Symptom | First move |
|---|---|
| A command refuses to run | It tells you which earlier step is missing — run that. The order is init → bootstrap → content → next/execute → qa. |
| Engine/framework version warning | Run wp suds compatibility. Update the engine package first, then refresh its bundled workflow with wp suds install-framework --location=wp_content. |
| /services/ or /locations/ shows "not found" | Run wp rewrite flush (routes need a refresh after theme/plugin activation). |
| Buttons/fonts look unstyled | The engine plugin probably isn't active, or the theme was activated after it. Theme first, then plugin, then flush. |
| A section vanished | It self-gated: it lost the data or signal it needs (that's claim-safety working). Check its requirements in section-fields.md or the "Sections on this page" guide. |
| Anything else | Run /suds:qa — it usually names the problem — and check Mission Control for open blockers. |
| Doc | Read it when… |
|---|---|
DOCUMENTATION.md | you don't know where something is written down (the master index). |
| Operator Manual | you want the whole-system view: repo layout, parity rules, Mission Control, the fleet. |
| Workflow Manual | you want every /suds:* stage explained in depth, with decision points. |
| Section Studio Runbook | you're polishing pages and want the visual tour + stress-test drills. |
| Archetypes | you're choosing/overriding the design personality. |
| Design-System Manual | you want to browse every section and token (searchable). |
| Build-to-launch runbook | you're moving an approved client build through staging, final launch, and production enrollment. |