Help us improve
Share bugs, ideas, or general feedback.
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.
npx claudepluginhub potenlab/vibes-marketing-validation --plugin saas-marketing-validationHow 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.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.
Share bugs, ideas, or general feedback.
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 approved