From saas-marketing-validation
Enforce the brand approval gate. Use this skill BEFORE any landing page work. Reads/writes `brands/<slug>/approval.json`. Auto-activate when the user says "approve", "looks good, continue", "ship it", `/approve-brand`, or attempts to start the landing page. If approval is missing, refuse to start any landing work and route back to `saas-visual-generator` if visuals also need changes.
How this skill is triggered — by the user, by Claude, or both
Slash command
/saas-marketing-validation:saas-brand-approvalThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are the **hard stop** between brand and landing-page generation. Step 4 cannot run unless you say so.
You are the hard stop between brand and landing-page generation. Step 4 cannot run unless you say so.
/approve-brand.saas-visual-generator with the targeted change.brands/<slug>/approval.json:
{
"approved": true,
"approvedAt": "2026-05-19T11:00:00Z",
"approvedBy": "user",
"notes": "optional free text"
}
Default state (before any approval): file does not exist, or "approved": false.
/approve-brandBy the time this runs, the user already picked the primary logo during step 2 (saas-visual-generator phase 2b), so approval.json.primaryLogo is already set and the picked variant's mono + favicon + identity board all exist. You're just flipping the approved flag.
Check that ALL of these exist:
brand.json, saas-context.json, brand-guidelines.mdapproval.json.primaryLogo set to a v1/v2/v3brands/<slug>/assets/logo/<primary>/{color,mono,favicon}.pngbrands/<slug>/assets/moodboard/01..09-*.pngIf any are missing, refuse and tell the user exactly what's missing + which step it belongs to.
Show a one-screen recap: name, slug, tone trio, palette, picked primary logo + path, identity board tile count.
Ask the user: "Approve this brand? Once approved, I'll start the landing page." via AskUserQuestion:
approved: truesaas-visual-generator for targeted regenOn approve, update approval.json (set approved: true, refresh approvedAt, append to history), then hand off to saas-landing-builder.
/build-landing, "build the website", "make the landing page")brands/<slug>/approval.json.approved !== true, refuse to start and reply:
"Brand isn't approved yet. Run
/approve-brandfirst, or tell me what to change about the visuals."
saas-landing-builder without further prompting.If the user says "change the logo", "different colors", "redo moodboard":
approval.approved = false (or delete the file) and route to saas-visual-generator with the specific change.The primary logo is picked during step 2 by saas-visual-generator (phase 2b) — before any crops or identity tiles are generated. By the time approval runs, approval.json.primaryLogo is already set to one of v1 / v2 / v3.
If primaryLogo is missing when /approve-brand is invoked, refuse and route back to saas-visual-generator to complete the pick — don't try to ask here.
Switching primary mid-stream:
approved: false, then route to saas-visual-generator with the instruction "switch primary to v" — the agent will regenerate crops + the 5 logo-referencing identity tiles (01, 02, 03, 06, 09) and leave the other 4 tiles alone./build-landing first, this skill runs and blocks if not approved./new-brand resets approval state.approval.json.saas-visual-generator — where change requests get routedsaas-landing-builder — what unlocks when approvednpx claudepluginhub potenlab/vibes-marketing-validation --plugin saas-marketing-validationGuides reception of code review feedback: verify before implementing, avoid performative agreement, push back with technical reasoning when needed.
Design banners for social media, ads, website heroes, and print with multiple art direction options and AI-generated visuals.