Skip to main content
skill CX Codex

copywriting-cta — Claude Code skill: end-of-article CTAs

Designs the call-to-action at the bottom of an article: copy, placement, A/B test plan and an accessibility check. Built for blogs, newsletters and brand publications.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add samber/cc-skills --skill copywriting-cta -a claude-code
Open on GitHub

What copywriting-cta does

The skill runs a short interview, then hands you a finished CTA. It asks about three things: the objective, the audience, and the context — a personal blog, a paid publication on Substack, beehiiv or Ghost, or a company content-marketing blog. Skip those and you land on the usual failure: a generic subscribe box nobody clicks. So the interview is not optional.

A decision tree then picks an archetype: an author-signature subscribe block, an inline action with a source link, a community invite backed by a member count, or a value-gap tease that moves readers to a paid tier. The skill ships a catalog of archetypes with copy templates and form specs, plus a separate file on mechanisms — scarcity, urgency, social proof. Output follows a fixed structure: archetype, why it fits, copy, form, mechanism, A/B test plan, accessibility check.

Questions come one at a time with tappable options instead of a wall of prose. For skeptical or repeat readers the skill advises dropping scarcity-style mechanisms and leading with value alone. It works through Read, Edit, Write, Glob, Grep, Agent and AskUserQuestion. Opening hooks, ledes and post titles are out of scope — that is copywriting-hooks from the same repository. Landing pages, ads and email copy are not covered either.

What it helps with

  • write a bottom-of-post CTA for one specific objective
  • diagnose why a signup box is not converting
  • choose between scarcity, urgency and social proof
  • draft an A/B test plan for a subscribe block
  • check a CTA for accessibility before publishing

Example prompts for the agent

  • Write the end-of-post CTA for this article, objective is newsletter signup
  • Review my subscribe block and tell me what is broken
  • What should I put at the bottom to push readers to the paid tier?

How to install copywriting-cta

1Skills CLI (Vercel)

npx skills add samber/cc-skills --skill copywriting-cta -a claude-code

2Manually: put the files in place

~/.claude/skills/copywriting-cta/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/copywriting-cta/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about copywriting-cta

How do I install copywriting-cta in Claude?

Run npx skills add samber/cc-skills --skill copywriting-cta -a claude-code. The skill then lives at ~/.claude/skills/copywriting-cta/SKILL.md.

What does copywriting-cta do?

It captures the objective, audience and publication context, then prescribes CTA copy, its form and placement on the page, a persuasion mechanism, an A/B test plan and an accessibility check.

How is copywriting-cta different from copywriting-hooks?

This one handles the end of an article. Opening hooks, ledes and titles belong to copywriting-hooks in the same repository.

Source text

SKILL.md · MIT
---
name: copywriting-cta
description: Designs end-of-article CTAs — copy, layout, placement, A/B test plan, accessibility — for blog posts, newsletters, and essays. Use whenever the user asks to write, review, or improve a CTA at the bottom of an article; mentions "end-of-post CTA", "call-to-action", "signup box", "newsletter CTA", "subscribe block", or "what should I put at the bottom"; or asks how to turn readers into subscribers, leads, customers, or paying supporters. Covers personal blogs, paid newsletters (Substack, beehiiv, Ghost), and brand content-marketing blogs. Do NOT use for opening hooks, ledes, or post titles — use samber/cc-skills@copywriting-hooks instead. Not for landing-page, ad, or email copy.
user-invocable: true
license: MIT
compatibility: Designed for Claude or similar AI agents.
metadata:
  author: samber
  version: "1.1.2"
  openclaw:
    emoji: "🎯"
    homepage: https://github.com/samber/cc-skills
allowed-tools: Read Edit Write Glob Grep Agent AskUserQuestion
---

**Questions:** Ask the user through the environment's question tool — never as plain-text prose. One question at a time, 2–4 tappable options, wait for the answer. If the environment has no question tool, ask in prose with the same options, one at a time.

# End-of-Article CTA Designer

Designing an end-of-article CTA is a function of three inputs: the **objective** (what action), the **audience** (who reads it, in what relationship to the author), and the **context** (independent writing, newsletter, brand publication). Get those three right and the copy + form follow almost mechanically. Skip them and you get the universal failure mode: a generic "Subscribe for more" or "Learn More" that converts at the noise floor.

This skill runs a tight interview to capture those three inputs, then prescribes a CTA: copy (what it says), form (how it looks and sits on the page), mechanism (whether to use urgency, scarcity, curiosity, reciprocity, social proof, or none), an A/B test plan, and an accessibility check.

---

## Workflow

Run the four steps below in order. Do not skip the interview. The user may have given partial context already; pull what's available from the conversation, then ask only for the missing pieces.

### Step 1 — Interview

Ask one question at a time. Do not stack questions in prose. Each question must have 2-4 tappable options. Fall back to free text only if the answer genuinely cannot be enumerated.

Ask these in order, skipping any already answered:

**Q1. Article context.** Options: `Personal / independent blog or essay` · `Newsletter / paid publication (Substack, beehiiv, Ghost, etc.)` · `Brand / company / content-marketing blog` · `Other (free text)`

**Q2. Primary objective.** (Pick the one outcome you most want from a reader who finishes the article. If they say "all of them," push back: multiple objectives is the #1 cause of CTA failure.)

Options:

- `Newsletter / email subscription`
- `Social follow / personal branding`
- `Lead generation (download / gated asset)`
- `Product or service signup / free trial`
- `Demo or sales call booking`
- `Direct purchase`
- `Community join (Discord / Slack / forum)`
- `Engagement (reply / comment / share / restack)`
- `Reader support (paid subscription / tip / sponsorship)`
- `Try-it / direct action (use the code, run the tool, fork the template, open the calculator)`
- `Other (free text)`

If the user lists more than one, ask which is primary. You can offer 1-2 secondaries later, but the primary must be singular.

**Q3. Audience and relationship.** Options: `First-time visitor (organic search / social)` · `Returning reader, not subscribed` · `Existing subscriber / customer` · `Mixed / unknown`

**Q4. Funnel stage.** (Where is the reader mentally?) Options: `TOFU: discovery, learning, no buying intent yet` · `MOFU: evaluating options, comparing` · `BOFU: ready to act, just needs a nudge` · `Not applicable (no buying funnel — e.g., personal blog, journalism, hobby content)`

**Q5. Mechanism preference.** (Only ask if a mechanism could legitimately help. See `references/mechanisms.md`. For sophisticated, skeptical, or repeat-reader audiences, default to "None / value-only" without asking.) Options: `None: value statement only` · `Curiosity gap ("Want to know more?")` · `Reciprocity (free asset first)` · `Discount / offer` · `Urgency (real deadline)` · `Scarcity / FOMO (limited spots)` · `Social proof (count / testimonial)`

Capture any free-text constraints the user volunteers (length limit, brand voice, no popups, multi-language, etc.). Note them.

### Step 2 — Diagnose

Map the inputs to a CTA archetype. The decision logic:

```
context = INDEPENDENT / PERSONAL
├── objective = newsletter / email      → Archetype A: Author-signature subscribe
├── objective = try-it / direct action  → Archetype B: Inline action + source link
├── objective = reader support / tip    → Archetype C: Reader-supported funding link
├── objective = community               → Archetype D: Proof-counted community invite
├── objective = social follow           → Archetype A (variant: lead with social links)
├── objective = engagement              → Archetype E: Specific reply prompt
└── objective = product / demo          → ⚠️ FLAG. Only valid on personal/professional
                                          blog where the author IS the product
                                          (consultants, coaches, solo founders, indie devs).
                                          Frame as "if you hit this, here's how I help"
                                          — never "Book a Demo" verbatim.

context = NEWSLETTER PUBLICATION
├── objective = growth / subs           → Archetype F: Share/restack + native widget
├── objective = engagement              → Archetype E: Specific reply prompt
├── objective = paid conversion         → Archetype G: Value-gap tease
├── objective = monetization / sponsor  → Archetype H: Inline sponsor block (not bottom)
├── objective = community               → Archetype D
└── objective = direct purchase         → Archetype K (rare on newsletters; use BOFU only)

context = BRAND / CONTENT MARKETING
├── stage = TOFU                        → Archetype I: Transitional asset (lead magnet)
├── stage = MOFU                        → Archetype J: Direct + Transitional pair
├── stage = BOFU                        → Archetype K: Direct CTA + risk reversal
├── objective = community               → Archetype D
└── objective = engagement              → Archetype E (rarely the right call here)
```

Read `references/taxonomy.md` for the full archetype catalog with copy templates, form specs, when each works, and verbatim examples from named publications.

### Step 3 — Compose the recommendation

Output the recommendation in this exact structure. Do not deviate. Do not add filler.

```markdown
## Recommended CTA

**Archetype:** [letter + name from decision tree] **Why this fits:** [1-2 sentences naming the input combination]

### Content (copy)

**Headline / value line:**

> [exact text]

**Body / proof line (1-2 lines):**

> [exact text]

**Button copy:**

> [exact text]

**Risk reversal / subtext (if applicable):**

> [exact text, or "Omit: would feel forced for this audience"]

### Form (structure)

- **Placement:** [end-only / end + sticky / end + mid-article repeat]
- **Visual weight:** [low / medium / high, with justification]
- **Layout:** [single button / button + text link / native widget cluster / one-line signature]
- **Proof to co-locate:** [subscriber count / star count / testimonial / named recommenders / logo wall / none]

### Mechanism

[Named mechanism + 1 sentence on why it is appropriate, OR "None: value statement carries it. Mechanisms would erode trust for this audience."]

### A/B test plan

- **First test:** [single variable, e.g., button copy A vs. B]
- **Why this one first:** [1 sentence]
- **Sample size needed:** [rough estimate based on baseline traffic, or "skip A/B for now — traffic too low" with the alternative recommendation]
- **Next 2 tests to queue:** [in priority order]

### Accessibility check

- **Color contrast:** [target ratio + concrete pairing if colors known]
- **Touch target:** [size requirement]
- **Semantic markup:** [<button> vs. <a> vs. form]
- **ARIA:** [only if non-obvious]
- **Keyboard / focus:** [requirement]
- **Color-independence:** [non-color affordance]
```

After printing the recommendation, list 2-3 anti-patterns the user is at risk of falling into given their inputs, directly, as a contrarian check. Pull these from `references/anti-patterns.md`.

If the user is writing in a non-English language, translate the content section into that language but keep the structure (headings, labels) in English. Honor formality cues (e.g., `tu` vs. `vous` in French, `du` vs. `Sie` in German) based on prior conversation context, and flag the choice explicitly.

### Step 4 — Offer next moves

Suggest 2-3 follow-up directions:

1. **Steelman the opposite.** Offer to design the CTA you would recommend against — e.g., the hard-sell version on a TOFU post — so the user can see why it fails.
2. **Variant for a different audience or platform.** If the article will be cross-posted (own site + Medium + LinkedIn + a syndication network), offer to rewrite per platform.
3. **End-to-end review.** Offer to audit the rest of the article for CTA-supporting signals: author bio, related-post links, in-line proof.

---

## Style inheritance

The copy templates in `references/taxonomy.md` are starting points, not finished copy. Always adapt them to:

- The user's stated brand voice or any `<userPreferences>` in scope (formality, language, em-dash avoidance, length limits).
- The language of the article. Output copy in the article's language; never default to English.
- The publication's existing voice. If the user has prior posts visible, mirror their cadence and vocabulary.
- The reader's expected level of expertise. A CTA for a beginner-finance blog uses different vocabulary than one for a quant-trading newsletter.

Never output a template verbatim if it conflicts with the user's stated style preferences.

---

## Reference files

Read these as needed during diagnosis and composition. Read the relevant file in full before composing the recommendation; do not paraphrase from memory.

- **`references/taxonomy.md`**: All 11 archetypes (A through K) with copy templates, form specs, verbatim examples from named publications, and conversion expectations.
- **`references/mechanisms.md`**: When to use urgency, scarcity, FOMO, discount, curiosity, reciprocity, social proof, authority, unity. When NOT to use them.
- **`references/ab-testing.md`**: Priority order of variables to test, sample-size rules of thumb, common pitfalls, when to skip A/B testing entirely.
- **`references/accessibility.md`**: WCAG 2.2 specifics for CTA blocks: contrast ratios, touch targets, ARIA patterns, focus states, keyboard support, motion preferences.
- **`references/anti-patterns.md`**: 12 failure modes to call out by name when they apply to the user's inputs.

---

## Operating principles

- **One primary CTA per post.** Multiple competing CTAs is the dominant failure mode (single-CTA pages convert ~30%+ better than multi-CTA pages in repeated case studies).
- **Match the voice of the publication.** A personal-essay footer that reads like a SaaS landing page collapses credibility. A SaaS footer that reads like a casual signature converts at noise.
- **Specificity beats cleverness.** "Get one essay a week on indie filmmaking" beats "Subscribe to our awesome newsletter." Joanna Wiebe's "I want to \_\_\_" completion test is the cleanest filter for button copy.
- **Proof co-located with the ask.** Subscriber count, testimonial, customer logos, star count, named recommenders — whichever signal is honest for the context, place it inside or adjacent to the CTA block.
- **Mechanisms are tools, not garnish.** Most well-written value statements need no mechanism. Add urgency, scarcity, FOMO, or discount only when the context genuinely supports them; theatrical mechanisms erode trust faster than they lift conversion.
- **Push back on bad asks.** If the user wants "Book a Demo" at the bottom of a beginner tutorial for first-time visitors, say so. Do not produce a polished version of a CTA that will fail. Propose the alternative, explain why, then if the user still wants the original, deliver it with the failure mode flagged.

© samber · MIT · samber/cc-skills

Similar skills

Everything for Marketing and content →

From the same set20

copywriting-hooks Drafts opening hooks and article titles for long-form content in English or French. Built for essays, newsletters, Substack, Medium, and dev.to. CX Codex +1 5,400installs linkedin-ghostwriting A skill that walks the agent through an interview, hook selection and post assembly for LinkedIn, aimed at results rather than reach. CX Codex +1 4,900installs frontend-design-deslop A skill that steers generated interfaces away from the default AI look: typography, OKLCH color, design tokens, dark mode, accessibility. CX Codex +1 4,800installs copywriting-tone-of-voice-creator Generates a structured TONE.md brand voice guide or adapts an existing one to new channels. Built for content pipelines and agent-driven writing. CX Codex +1 4,800installs technical-article-writer Drafts developer-focused tutorials, benchmarks, and postmortems. It guides you through an intake interview and generates 10 headline options. CX Codex +1 4,700installs deep-research A skill for deep research: parallel web searches, multi-source validation and a finished Markdown report with citations. CX Codex +1 4,700installs humaniseur-fr Goes over French copy and rewrites the phrasing that gives away a machine, keeping the message and the register. Useful when you edit text a chatbot produced. CX Codex +1 4,600installs conventional-git Enforces Conventional Commits v1.0.0 rules for branch names and commit messages. Useful for parseable git history and automated changelogs on GitHub and GitLab. CX Codex +1 4,600installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor