Use when the words span a marketing surface — value proposition, section copy, microcopy, launch and email sequences, channel adaptation, SEO-aware structure — grounded in the brand study, which it stops and builds if missing. NOT one conversion page (that is `landing-copy`), NOT tone rules (that is `brand-voice`), NOT pixels (that is `design`).
npx skills add https://github.com/ericrisco/rsc-harness --skill marketing
*The words, not the pixels. Ground in the brand study first, then write copy that is specific, benefit-led, and unmistakably this brand.*
This skill owns conversion copywriting: value proposition, headlines, section-by-section landing copy, microcopy, CTAs, email/launch sequences, channel adaptation, and SEO-aware copy structure. The sibling design skill owns the visual/UX (type, color, layout, motion); nextjs owns the build — including rendering in React the Metadata and JSON-LD this skill specifies. Long-form articles, blog posts, or social content systems with no landing/web surface are a content job, not landing copy. When asked for "a landing page", you write the copy.
Hard rule: never produce landing, web-page, or marketing copy without a complete brand study. Generic copy is the failure mode this skill exists to prevent, and the cure is grounding every word in a real, persisted brand profile. An incomplete brand study is a hard STOP, not a warning.
Run this gate before writing a single line of copy:
CLAUDE.md and look for a ## Brand & voice section linking into 02-DOCS/wiki/brand/ (the harness Karpathy-wiki convention: compiled brand articles live under 02-DOCS/wiki/brand/, raw inputs the user pastes live under 02-DOCS/raw/brand/). If CLAUDE.md is absent, the link is missing, or it points nowhere, treat the study as ABSENT.references/brand-grounding.md. The study is complete only when every dimension is filled: brand name & one-line positioning; ICP / audience & their pains & desires; value proposition & differentiation; tone & voice WITH do/don't word lists and 3–5 voice samples pasted from the user's real writing; proof/credibility; offers & primary CTA; channels; SEO keywords. Any empty dimension = INCOMPLETE.references/brand-grounding.md, one focused batch at a time (do not dump all questions at once; ask, wait, then continue). Voice samples are mandatory — request 3–5 pieces of the user's real writing; never fabricate a voice. Then:02-DOCS/wiki/brand/ as wiki articles (one article per dimension or a single index.md plus per-dimension articles), following the wiki article format in references/brand-grounding.md, and index it in 02-DOCS/wiki/index.md (the Knowledge map). Save any raw text the user pastes verbatim into 02-DOCS/raw/brand/ and link to it from the article's > Raw: line. Create the directories if they do not exist.## Brand & voice section in the root CLAUDE.md linking to the brand study — a short pointer only. Create CLAUDE.md if absent (additive only — never delete existing sections). The exact snippet to insert is in references/brand-grounding.md.02-DOCS/wiki/brand/value-proposition.md and voice.md") so the user can trace every claim back to the study. Every line you then write must plausibly come from the brand's own writing; if it reads like a different author, rewrite.If the user explicitly says "skip the brand study, just draft something rough", you may produce a clearly-labelled DRAFT (ungrounded — not brand-checked) and still recommend running the gate before anything ships. That is the only exception, and it must be labelled.
Full completeness checklist, the exact question script (batched), and the persistence format → references/brand-grounding.md.
Run in order. Each step feeds the next; skipping one shows up as vague copy downstream.
02-DOCS/wiki/brand/.references/copy-frameworks.md.references/copy-frameworks.md.references/landing-copy.md.references/copy-frameworks.md.references/campaigns-and-channels.md.scripts/verify.sh. Fix every flag or justify it.The headline is the highest-leverage copy on the page. Build it from the canvas, not from a thesaurus. It has one test: a stranger reads the hero and can say *what it is, who it's for, why it's better* — within 5 seconds. If it fails, rewrite it before anything else on the page.
VALUE-PROP CANVAS (fill before writing the headline)
Customer job ....... the outcome they're hired to achieve
Top pain ........... the friction that blocks the job today
Top gain ........... what "great" looks like to them
Pain reliever ...... how the product removes that friction
Gain creator ....... the upside the product unlocks
Headline ........... compress the strongest reliever+gain into one line
Subhead ............ who it's for + how it works in one clause + proof if you have it
Headline formula slots (pick one, fill with brand specifics):
Bad — "Revolutionize your workflow with our seamless, cutting-edge platform"
Good — "Ship a fix in 4 minutes — no YAML, no on-call page"
Full canvas walk-through, PAS/AIDA/FAB/BAB/JTBD with Bad→Good rewrites, headline formulas, microcopy & CTA tables → references/copy-frameworks.md.
Each section earns its place by doing one job. Cut any section with no job. This maps 1:1 to the design skill's section anatomy — design owns the visual treatment, this skill owns the words inside it. Within every section, climb feature → benefit → proof, stop at the rung the reader cares about (the benefit), and back it with proof.
| Section | Copy job | Framework |
| --- | --- | --- |
| Hero | State the value prop; pass the 5s test | Outcome + timeframe headline |
| Social-proof strip | Borrow credibility instantly | Quantified, attributed |
| Problem / agitation | Name the pain in the reader's words | PAS |
| Solution | Show the product doing the job | FAB |
| Features → benefits | Translate each capability into an outcome | FAB / JTBD per item |
| Objection handling | Preempt the top reason not to buy | "X without Y" |
| Pricing | Make the choice easy; frame value | Value framing, anchored |
| FAQ | Answer the real blockers | Question → direct answer |
| Final CTA | One action, value on the button | CTA verb + reassurance |
Bad (features list) — "Includes automated teardown, RBAC, and audit logs."
Good (benefit-led) — "Environments tear down on merge, so you never pay for idle infra
or clean up by hand."
Full per-section copy patterns, hero variants, social-proof formats, pricing copy, FAQ writing → references/landing-copy.md.
When the task is bigger than the page — a launch, an email sequence, cross-channel messaging. One claim per asset: a post, an email, a section each carry one real claim, not five hedged ones.
Full email templates, subject-line patterns, launch arc, X/LinkedIn/newsletter adaptation, SEO-aware structure → references/campaigns-and-channels.md.
Keep copy *SEO-aware* by default: one <h1>, scannable subheads that answer queries, benefit in the
first 160 chars. Keyword stuffing *lowers* AI citation. When the task is the visibility layer itself
— ranking on Google/Bing and getting cited by AI engines — go to references/seo-geo.md. It owns
technical + on-page SEO, JSON-LD schema, per-engine GEO, and keyword/SERP research.
Optimization) = get *cited* inside an AI answer (**ChatGPT, Perplexity, Gemini/AI Overviews,
Claude, Copilot**). GEO sits on top of SEO; do both.
the few sources an answer is built from is the new "ranking #1" — you optimize to be *quoted and
attributed*, not clicked.
statistics, add quotations, authoritative tone* — the same "specificity beats adjectives, no
invented proof, one claim per asset" discipline this skill enforces everywhere else. Keyword
stuffing lowers AI citation (~−10%). The proof rule is absolute: **never fabricate the stat or
quote that earns the lift** — mark [[NEEDS PROOF]] and source it.
python3 scripts/seo_audit.py "https://yoursite.com" reportstitle/description lengths, single-<h1>, JSON-LD count, load time, robots/AI-bot access, sitemap.
OAI-SearchBot/Claude-SearchBot/PerplexityBot (+ the *-Userfetchers) earn citations; GPTBot/ClaudeBot are *training* crawlers — independently
controllable. INP replaced FID in Core Web Vitals (Mar 2024; ≤ 200 ms good).
Full GEO method table, robots.txt template, schema library, per-engine factors, keyword workflow,
and SEO/GEO QA gate → references/seo-geo.md. Implementing schema/Metadata in code → nextjs.
State once, enforce everywhere. These are defects, not style: they signal AI-template copy and erode trust. scripts/verify.sh greps for them.
revolutionary · game-changer · cutting-edge · world-class · unlock · seamless · elevate · supercharge · next-level · "In today's landscape" · "In today's fast-paced world" · bait questions ("Tired of slow deploys?") · "not X, just Y" / "not just X" · forced lowercase as a style · "Excited to share" · hollow proof ("thousands trust us") · generic CTAs ("Learn more", "Click here", "Submit") · fake urgency with no real deadline.
Bad — "Excited to share our game-changing, world-class platform!"
Good — "We rebuilt deploys around one CLI step. Here's what changed: 22 min → 90 sec."
The brand study's do/don't word lists EXTEND this list per project — always apply both.
| Anti-pattern | Why it fails / the fix |
| --- | --- |
| Skipping the brand study because "I know the brand" | Your default voice is AI-median. Run the gate; cite the articles. |
| Leaning on the image and letting the copy stay vague | Copy carries the value prop. Pass the 5s test in words. |
| Reaching for adjectives to sound premium | They make it sound generic. Replace with a number or mechanism. |
| Listing every feature "so they see the value" | Feature dumps bury the benefit. Climb to benefit, back with proof. |
| Dropping in any testimonial to fill the proof slot | A vague rave < one hard number. Quantify and attribute. |
| Five CTAs "to give them options" | Choice kills conversion. One primary action per viewport. |
| Hype words because "they test well" | They erode trust and trip the ban-list. Specificity converts. |
| Inventing a plausible metric to fill a gap | Never. Mark [[NEEDS PROOF]] and ask the user. |
| Reusing the same copy on X and LinkedIn | Resize ≠ adapt. Different format per platform, same claim. |
Run before claiming done. scripts/verify.sh automates the greppable subset.
<h1>; subheads scannable and query-answering.[[NEEDS PROOF]].Automate → scripts/verify.sh (read-only grep gate; warns by default, --strict to gate CI).
Take ericrisco/marketing from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.