Sd create website
Skill SimplerDevelopment/simplerdevelopment-skills/sd-create-website
Claude Code skills for the SimplerDevelopment.com portal — draft pages, decks, emails, surveys, and full websites via MCP, all human-in-the-loop.
npx -y skills add SimplerDevelopment/simplerdevelopment-skills --skill sd-create-websiteAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Compose a multi-page SimplerDevelopment website end-to-end — plans the sitemap, authors every page via sub-skills, wires top-nav, embeds a booking widget on the contact page, embeds a qualifier survey on the funnel page, applies brand profile across the site, and returns one bundled response with every approval URL. Use when the user says 'build a complete website for X', 'launch a new client site', 'compose a 5-page marketing site', 'set up the full site structure with nav', 'I want a real site, not just a landing page'. Default mode publishes everything as DRAFTS with brand-aware logos / fonts / colors applied; requires a sd-init `.sd/config.json` and an active sites subscription.
SKILL.md
9.2 KB, as published. Nobody here has run it
sd-create-website
The "compose a whole site" wrapper. Instead of authoring one page at a time, this skill drives sd-create-page for each entry in a planned sitemap, then connects them via nav_* MCP tools and the survey / booking blocks.
Use when the user wants a complete site, not a one-off page. For a single page, use sd-create-page directly.
Pre-flight
- Read
.sd/config.json— confirmclient,defaultSiteId,brand. If missing, runsd-initfirst. - Read
.sd/learnings.md— apply## Active rules. - Read
SD_DESIGN_PRINCIPLES.md— the cut test + 8pt grid + WCAG floors + logo policy apply to every page authored under this skill. - Read
SD_SKILLS_RUNBOOK.mdsections onsd-create-page,sd-create-booking-page,sd-create-survey— this skill calls into them. - Bind the brand profile to the site. Currently the
sites_update.brandingProfileIdfield accepts an integer; verify the site has the rightbrandingProfileIdset. If it's null, set it to.sd/config.json:brand.profileIdso all rendered pages inherit the brand.
Sitemap planning — state the spine first
Before authoring anything, the skill should state the sitemap out loud and get user confirmation. Most sites fit one of these spines (the user can mix-and-match):
Spine A: Marketing site (5–7 pages)
/— homepage (hero + value prop + 3 features + social proof + CTA)/about— about page (mission / team / story)/solutions(or/servicesor/products) — what we offer/pricing(optional — depends on category)/blog— list of blog posts (CPT index, not authored as a page)/contact— contact page (embeddedbookingblock + form)/legal/{privacy,terms}— boilerplate legal pages
Spine B: Service provider (3–4 pages)
/— services overview + CTA/about— credibility/contact— embedded booking- (optional)
/portfolioor/case-studies
Spine C: Funnel / qualifier site (3 pages)
/— pitch + value prop/qualify— embeddedsurveyblock with the qualification questions/contact— embeddedbookingblock (only after the survey routes high-scoring leads here)
Spine D: Knowledge base / docs (3 pages + post type)
/— landing/docs— docs CPT index/contact— booking- Use
post_types_createfor thedocspost type if it doesn't exist
Don't author a 12-page site by default. Sites at the small end (3–5 pages) ship faster, get reviewed faster, and are easier to keep on-brand. If the user asks for "everything," push back — they probably want a 5-page MVP, not a 12-page expedition.
Authoring loop
For each page in the agreed sitemap:
- Compose the page brief — derive
title,slug,postType, and a 2-line content brief from the sitemap entry. - Invoke
sd-create-page— pass the brief. It will:- Read the brand profile + learnings.
- Compose blocks (hero + content + CTAs) using
posts_create. - Return
{ id, slug, approval: { url } }.
- Stash the result — keep a list of
{title, slug, postId, approvalUrl}to return at the end. - For the contact page: also call
booking_pages_listto find an existing booking page (or runsd-create-booking-pageFlow B to create one), then include abookingblock in the contact page's body. - For a qualifier page: also run
sd-create-surveyfor the qualification form, then include asurveyblock on the qualifier page pointing at its slug.
Navigation
After all pages are authored:
- Call
nav_listto see what's currently wired. - For each page in the sitemap that should appear in the top nav, call
nav_createwith:{ "websiteId": <defaultSiteId>, "label": "<Page name>", "url": "/<slug>", "order": <sequence>, "openInNewTab": false } - Call
nav_publish_allto promote all the drafted nav items to live.
Page order matters. Hero / about / solutions / pricing / contact / blog (last). Legal goes in the footer nav, not the top.
Embedding artifacts
Two cross-skill patterns:
- Booking on contact: The contact page's blocks array ends with a
bookingblock:{ "id": "embed-book", "type": "booking", "order": <last>, "slug": "<booking-page-slug>", "showLogo": true, "height": 720 } - Survey on qualifier (funnel pattern): The qualifier page's blocks array embeds the survey:
After approval the survey flips{ "id": "embed-survey", "type": "survey", "order": <last>, "slug": "<survey-slug>", "showLogo": true, "showPageTitle": false }active; itsrecommendation.bookUrlshould already point at the/book/<slug>page so the funnel closes the loop.
MCP response handling — read errors first
SimplerDevelopment's MCP wraps every response — successes AND errors — in a JSON-RPC success envelope shaped like:
{"result":{"content":[{"type":"text","text":"{...JSON...}"}]}}
Before reporting success to the user, parse result.content[0].text as JSON. If the parsed object contains an error key (e.g. {"error":"Site not found"} or {"error":"Unauthorized"}), the call FAILED — even though the JSON-RPC envelope said result. STOP immediately. Surface the error verbatim to the user. Do NOT invent a successful response with a made-up post id, approval URL, slug, or site name. Hallucinated success is worse than a visible failure — the user will publish content that doesn't exist or copy approval URLs to stakeholders that 404.
Only treat the call as successful when the parsed text contains the expected entity shape (e.g. {"id":..., "approval":{...}} for posts_create).
Output
After every step:
- A bullet list of every page authored:
{ id, title, slug, approvalUrl } - A bullet list of any booking pages / surveys created or linked
- The aggregate "what's left to approve" list — every URL the user needs to share with reviewers
- A one-screen sitemap summary (a tree-ish text rendering of the routes)
- 5-dim self-review per
SD_DESIGN_PRINCIPLES.md, applied to the SITE as a whole — does the brand voice carry across all pages? Are visual rhythms consistent? Did any page sneak in off-brand colors?
Iteration
- Edit one page → call
sd-create-page(delegated toposts_update) with the page id. Each update mints a fresh approval URL for THAT page only; the rest of the site's pages stay as-is. - Re-order nav →
nav_updateper item to changeorder, thennav_publish_all. - Add a new page mid-flight → invoke
sd-create-pagefor the new page, thennav_createfor the nav entry, thennav_publish_all. Done. - Major rework → the site doesn't fork as a unit (there's no
parent_site_id); fork individual pages withposts_forkand rewire the nav.
Self-improvement
After every run, invoke sd-learn with the user's feedback as the artifact ref site-<defaultSiteId> so the next site composition for this client inherits the active rules. Examples that accumulate here:
- "Always lead with the value-prop hero, never with a quote."
- "This client never wants /pricing — use /work-with-us instead."
- "Footer must include the address from the brand profile, not just the company name."
Failure modes
- No
.sd/config.json→ runsd-initfirst. defaultSiteIdis null → the client has no website provisioned. The user needs to create one via/portal/websites/newfirst; this skill won't auto-create.- Subscription not active →
posts_createrejects with "active sites subscription required." Surface and stop. - Sitemap has > 12 pages → push back. "That's a big site for a first draft — would you rather start with 5 core pages and iterate?"
branding_profile_idis null on the site → flag and offer to bind it before authoring. Pages will inherit brand colors anyway (via the client default profile), but having an explicit binding avoids drift later.
Install
This skill ships as part of the SimplerDevelopment client skills bundle. Install the full skill bundle in one step from the portal:
https://simplerdevelopment.com/install
macOS, Windows, and Linux installers download the bundle to ~/.claude/skills/. Both Claude Desktop and Claude Code auto-discover skills from that path on next restart.
See CLIENT_QUICKSTART.md (installed alongside this file) for the full setup walkthrough, including the MCP-server config Claude Desktop needs and the one-time sd-init bootstrap.