Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
130b1c9
docs: design workspace follower analytics
Sep 23, 2026
72f0488
docs: plan LinkedIn follower analytics v2
Sep 23, 2026
d701cd5
docs: add workspace post analytics design
Sep 23, 2026
f99fcef
docs: expand workspace analytics reporting design
Sep 23, 2026
09bd5fe
docs: plan persisted per-post analytics
Sep 23, 2026
c3bcc78
docs: add Pinterest post metric catalog
Sep 23, 2026
6c04f14
docs: clarify YouTube post analytics
Sep 23, 2026
2673847
docs: audit Buffer per-post metrics
Sep 23, 2026
e757ad3
docs: narrow analytics v1 platform scope
Sep 23, 2026
9b4559b
docs: plan native post history import
Sep 23, 2026
0b70cd3
docs: plan workspace analytics backfill
Sep 23, 2026
87700a2
docs: finalize workspace analytics implementation plan
Sep 23, 2026
ae64f83
feat: add workspace analytics schema
Sep 23, 2026
6c8b609
feat: persist analytics observations
Sep 23, 2026
7e6c5c9
feat: collect normalized follower snapshots
Sep 23, 2026
f432293
feat: schedule resilient follower analytics
Sep 23, 2026
b14516d
feat: reconcile analytics publications
Sep 23, 2026
63e3cd4
feat: collect Meta publication history
Sep 23, 2026
8eb9e3d
feat: discover media network publications
Sep 23, 2026
f6e6166
feat: discover open network publications
Sep 23, 2026
217e266
feat: backfill native analytics through jobs
Sep 23, 2026
b6cf945
feat: normalize publication analytics metrics
Sep 23, 2026
b230490
feat: schedule persisted publication metrics
Sep 23, 2026
d272178
feat: query workspace analytics reports
Sep 23, 2026
0d27a16
feat: read analytics exclusively from database
Sep 23, 2026
c56c4d9
feat: add workspace analytics dashboard
Sep 23, 2026
fb6b45b
feat: persist individual publication analytics
Sep 23, 2026
20f7ef3
chore: prepare workspace analytics operations
Sep 23, 2026
39bab9c
test: verify analytics across databases and browser flows
Sep 23, 2026
7fc64e1
fix: resume failed analytics backfill from checkpoint
Sep 23, 2026
e75a7b7
docs: record analytics execution status
Sep 23, 2026
ed08dbc
fix: keep analytics permission failures from disconnecting accounts
Sep 23, 2026
7d0dcf4
fix: complete Pinterest analytics pagination without date ordering
Sep 23, 2026
75bb0f6
fix: persist recent YouTube video metrics before Analytics catches up
Sep 23, 2026
5d21756
Mark X backfill limited at timeline cap
Sep 23, 2026
72c9025
Resume analytics when connected account is reactivated
Sep 23, 2026
4971cfa
Document full analytics branch regression run
Sep 23, 2026
a1a49d4
feat: finish workspace analytics backfill and dashboard
Sep 23, 2026
1889c2f
refactor analytics sync and dashboard aggregation
Sep 23, 2026
26557b5
refactor: harden analytics collection and remove duplicate reads
Sep 23, 2026
ba103d6
Localize workspace analytics detail and number formatting
Sep 23, 2026
4974d36
fix: complete analytics translations and localize chart tooltips
Sep 23, 2026
f0dd1c8
Fix analytics backfill recovery and publication metrics gaps
Sep 23, 2026
a5522c0
fix analytics backfill retries and persisted metrics compatibility
Sep 23, 2026
40c7f5e
use full-width layout for analytics dashboard
Sep 23, 2026
7681935
reorder workspace analytics sections
Sep 23, 2026
50a621c
Default posts analytics chart to bar mode
Sep 23, 2026
e171101
Align workspace analytics with app layout
Sep 23, 2026
65678be
Fix duplicate scrolling on full-width analytics layout
Sep 23, 2026
ad72f0a
Preserve bottom spacing after analytics charts
Sep 23, 2026
7c64122
Fix paid workspace analytics backfill rollout
Sep 23, 2026
79e6ed2
Fix analytics retry, recovery and dashboard refresh edge cases
Sep 23, 2026
1ff59c0
Fix workspace analytics page title localization
Sep 23, 2026
3f5febf
Separate one-time analytics rollout from daily discovery
Sep 24, 2026
4676040
Add 'antigravity' to agents list in boost.json
Sep 24, 2026
b2ae2f8
Use Cashier active scope for analytics rollout eligibility
Sep 24, 2026
32be3a0
Use Cashier subscription status for analytics rollout
Sep 24, 2026
f77a8af
Format analytics model fillable arrays consistently
Sep 24, 2026
fdccbab
Serve persisted post metrics without legacy adapters
Sep 24, 2026
e4a0b5f
Route TryPost analytics details by post ID
Sep 24, 2026
75d3df5
Refactor analytics reads into existing actions
Sep 24, 2026
688132f
Refactor analytics collection and business actions
Sep 24, 2026
11f13e9
Split follower finalization into per-account jobs
Sep 24, 2026
57e14ea
fix: keep analytics jobs reserved past their timeout
Sep 24, 2026
263153b
refactor: express inclusive analytics date ranges with Carbon
Sep 24, 2026
c81dc92
refactor: use Carbon for TikTok video lookup cutoff
Sep 24, 2026
4b29e54
docs: update AGENTS.md with frontend, Inertia SSR, dialog, AI agents,…
Sep 24, 2026
5be2899
refactor analytics to project conventions
Sep 24, 2026
db75f49
test analytics metrics without JSON key order
Sep 24, 2026
9330c2d
Fix analytics date presets and report conventions
Sep 24, 2026
cc9cc39
Refactor follower collectors to use abstract base
Sep 24, 2026
d2828d9
Replace remaining analytics collector interfaces with base classes
Sep 24, 2026
90d3ad7
Expose workspace analytics in API and MCP
Sep 24, 2026
3b4f6cb
fix: restore database queue retry default
Sep 24, 2026
3769cae
refactor: name workspace analytics charts by purpose
Sep 24, 2026
0ced68b
fix: update beanstalkd queue retry_after default to 90 seconds
Sep 24, 2026
0f49bbb
refactor: centralize analytics frontend types
Sep 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
256 changes: 256 additions & 0 deletions .agents/skills/copywriting/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,256 @@
---
name: copywriting
description: When the user wants to write, rewrite, or improve marketing copy for any page — including homepage, landing pages, pricing pages, feature pages, about pages, or product pages. Also use when the user says "write copy for," "improve this copy," "rewrite this page," "marketing copy," "headline help," "CTA copy," "value proposition," "tagline," "subheadline," "hero section copy," "above the fold," "this copy is weak," "make this more compelling," or "help me describe my product." Use this whenever someone is working on website text that needs to persuade or convert. For email copy, see emails. For popup copy, see popups. For editing existing copy, see copy-editing. For the offer underneath the copy (bonuses, guarantees, value framing), see offers.
metadata:
version: 2.0.2
---

# Copywriting

You are an expert conversion copywriter. Your goal is to write marketing copy that is clear, compelling, and drives action.

## Before Writing

**Check for product marketing context first:**
If `.agents/product-marketing.md` exists (or `.claude/product-marketing.md`, or the legacy `product-marketing-context.md` filename, in older setups), read it before asking questions. Use that context and only ask for information not already covered or specific to this task.

Gather this context (ask if not provided):

### 1. Page Purpose
- What type of page? (homepage, landing page, pricing, feature, about)
- What is the ONE primary action you want visitors to take?

### 2. Audience
- Who is the ideal customer?
- What problem are they trying to solve?
- What objections or hesitations do they have?
- What language do they use to describe their problem?

### 3. Product/Offer
- What are you selling or offering?
- What makes it different from alternatives?
- What's the key transformation or outcome?
- Any proof points (numbers, testimonials, case studies)?

### 4. Context
- Where is traffic coming from? (ads, organic, email)
- What do visitors already know before arriving?

---

## Copywriting Principles

### Clarity Over Cleverness
If you have to choose between clear and creative, choose clear. Clarity is not just tidier — it converts: clearer positioning and copy is associated with +81% conversions, a 38% shorter sales cycle, 28% lower CAC, and 175% more referrals. When a reader has to decode your line, you've lost them.

**For message-market fit tools** — the "Now you can" test, the Human Action Model (discomfort → vision → path), the Perception Gap, and the clarity metrics: See [references/copy-frameworks.md](references/copy-frameworks.md#clarity--message-market-fit)

### Benefits Over Features
Features: What it does. Benefits: What that means for the customer.

### Specificity Over Vagueness
- Vague: "Save time on your workflow"
- Specific: "Cut your weekly reporting from 4 hours to 15 minutes"

### Customer Language Over Company Language
Use words your customers use. Mirror voice-of-customer from reviews, interviews, support tickets.

### One Idea Per Section
Each section should advance one argument. Build a logical flow down the page.

---

## Writing Style Rules

### Core Principles

1. **Simple over complex** — "Use" not "utilize," "help" not "facilitate"
2. **Specific over vague** — Avoid "streamline," "optimize," "innovative"
3. **Active over passive** — "We generate reports" not "Reports are generated"
4. **Confident over qualified** — Remove "almost," "very," "really"
5. **Show over tell** — Describe the outcome instead of using adverbs
6. **Honest over sensational** — Fabricated statistics or testimonials erode trust and create legal liability

### Quick Quality Check

- Jargon that could confuse outsiders?
- Sentences trying to do too much?
- Passive voice constructions?
- Exclamation points? (remove them)
- Marketing buzzwords without substance?

For thorough line-by-line review, use the **copy-editing** skill after your draft.

---

## Best Practices

### Be Direct
Get to the point. Don't bury the value in qualifications.

❌ Slack lets you share files instantly, from documents to images, directly in your conversations

✅ Need to share a screenshot? Send as many documents, images, and audio files as your heart desires.

### Use Rhetorical Questions
Questions engage readers and make them think about their own situation.
- "Hate returning stuff to Amazon?"
- "Tired of chasing approvals?"

### Use Analogies When Helpful
Analogies make abstract concepts concrete and memorable.

### Pepper in Humor (When Appropriate)
Puns and wit make copy memorable—but only if it fits the brand and doesn't undermine clarity.

---

## Page Structure Framework

### Above the Fold

**Headline**
- Your single most important message
- Communicate core value proposition
- Specific > generic

**Example formulas:**
- "{Achieve outcome} without {pain point}"
- "The {category} for {audience}"
- "Never {unpleasant event} again"
- "{Question highlighting main pain point}"

**For comprehensive headline formulas**: See [references/copy-frameworks.md](references/copy-frameworks.md)

**Structure the hero as a transformation** — current discomfort → better vision → path to action (the Human Action Model), then run every headline through the "Now you can" test. See [references/copy-frameworks.md](references/copy-frameworks.md#clarity--message-market-fit)

**For natural transition phrases**: See [references/natural-transitions.md](references/natural-transitions.md)

**Subheadline**
- Expands on headline
- Adds specificity
- 1-2 sentences max

**Primary CTA**
- Action-oriented button text
- Communicate what they get: "Start Free Trial" > "Sign Up"

### Core Sections

| Section | Purpose |
|---------|---------|
| Social Proof | Build credibility (logos, stats, testimonials) |
| Problem/Pain | Show you understand their situation |
| Solution/Benefits | Connect to outcomes (3-5 key benefits) |
| How It Works | Reduce perceived complexity (3-4 steps) |
| Objection Handling | FAQ, comparisons, guarantees |
| Final CTA | Recap value, repeat CTA, risk reversal |

**For detailed section types and page templates**: See [references/copy-frameworks.md](references/copy-frameworks.md)

---

## CTA Copy Guidelines

**Weak CTAs (avoid):**
- Submit, Sign Up, Learn More, Click Here, Get Started

**Strong CTAs (use):**
- Start Free Trial
- Get [Specific Thing]
- See [Product] in Action
- Create Your First [Thing]
- Download the Guide

**Formula:** [Action Verb] + [What They Get] + [Qualifier if needed]

Examples:
- "Start My Free Trial"
- "Get the Complete Checklist"
- "See Pricing for My Team"

---

## Page-Specific Guidance

### Homepage
- Serve multiple audiences without being generic
- Lead with broadest value proposition
- Provide clear paths for different visitor intents

### Landing Page
- Single message, single CTA
- Match headline to ad/traffic source
- Complete argument on one page

### Pricing Page
- Help visitors choose the right plan
- Address "which is right for me?" anxiety
- Make recommended plan obvious

### Feature Page
- Connect feature → benefit → outcome
- Show use cases and examples
- Clear path to try or buy

### About Page
- Tell the story of why you exist
- Connect mission to customer benefit
- Still include a CTA

---

## Voice and Tone

Before writing, establish:

**Formality level:**
- Casual/conversational
- Professional but friendly
- Formal/enterprise

**Brand personality:**
- Playful or serious?
- Bold or understated?
- Technical or accessible?

Maintain consistency, but adjust intensity:
- Headlines can be bolder
- Body copy should be clearer
- CTAs should be action-oriented

---

## Output Format

When writing copy, provide:

### Page Copy
Organized by section:
- Headline, Subheadline, CTA
- Section headers and body copy
- Secondary CTAs

### Annotations
For key elements, explain:
- Why you made this choice
- What principle it applies

### Alternatives
For headlines and CTAs, provide 2-3 options:
- Option A: [copy] — [rationale]
- Option B: [copy] — [rationale]

### Meta Content (if relevant)
- Page title (for SEO)
- Meta description

---

## Related Skills

- **copy-editing**: For polishing existing copy (use after your draft)
- **cro**: If page structure/strategy needs work, not just copy
- **emails**: For email copywriting
- **popups**: For popup and modal copy
- **ab-testing**: To test copy variations
126 changes: 126 additions & 0 deletions .agents/skills/copywriting/evals/evals.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
{
"skill_name": "copywriting",
"evals": [
{
"id": 1,
"prompt": "Write homepage copy for a SaaS tool that automates employee onboarding. Target audience is HR directors at mid-size companies (200-2000 employees). Main differentiator is that it integrates with all major HRIS systems and cuts onboarding time from 2 weeks to 2 days.",
"expected_output": "Should check for product-marketing.md first. Should write full page copy organized by section: Headline, Subheadline, CTA (above the fold), then Social Proof, Problem/Pain, Solution/Benefits, How It Works, Objection Handling, and Final CTA. Should follow copywriting principles: clarity over cleverness, benefits over features, specificity (use the '2 weeks to 2 days' stat), customer language. Headline should communicate core value proposition. CTAs should be action-oriented ('Start Free Trial' not 'Submit'). Should provide 2-3 headline alternatives with rationale. Should include annotations explaining key copy choices. Should include meta content (SEO page title and meta description).",
"assertions": [
"Checks for product-marketing.md",
"Writes full page copy organized by section",
"Includes Headline, Subheadline, and CTA above the fold",
"Includes Social Proof, Problem/Pain, Solution/Benefits, How It Works sections",
"Uses the '2 weeks to 2 days' specificity in copy",
"CTAs are action-oriented, not generic",
"Provides 2-3 headline alternatives with rationale",
"Includes annotations explaining copy choices",
"Includes meta content (SEO title and meta description)"
],
"files": []
},
{
"id": 2,
"prompt": "Rewrite this headline: 'An Innovative AI-Powered Platform for Streamlined Business Operations' — it's for a B2B SaaS tool that helps small businesses manage invoicing and payments.",
"expected_output": "Should identify problems: jargon ('innovative,' 'AI-powered,' 'streamlined,' 'business operations'), too vague, company language not customer language. Should apply copywriting principles — specificity over vagueness, benefits over features, customer language over company language. Should provide 2-3 alternative headlines using formulas like '{Achieve outcome} without {pain point}' or 'The {category} for {audience}'. Each alternative should include rationale. Should also suggest a subheadline that adds specificity.",
"assertions": [
"Identifies jargon in original headline",
"Identifies vagueness as a problem",
"Identifies company language vs customer language issue",
"Provides 2-3 alternative headlines",
"Alternatives use headline formulas from the skill",
"Each alternative includes rationale",
"Suggests a subheadline"
],
"files": []
},
{
"id": 3,
"prompt": "i need copy for my pricing page. we have three plans: starter ($29/mo), pro ($79/mo), business ($199/mo). it's a social media scheduling tool for marketers",
"expected_output": "Should trigger on the casual phrasing. Should ask or infer audience context. Should apply Pricing Page guidance: help visitors choose the right plan, address 'which is right for me?' anxiety, make recommended plan obvious. Should write plan names, descriptions, feature lists with benefit-oriented copy (not just feature names). Should include a page headline that addresses the pricing decision. CTAs should be specific per plan. Should handle objection handling (FAQ copy). Should provide alternatives for key elements.",
"assertions": [
"Triggers on casual phrasing",
"Applies Pricing Page guidance",
"Addresses 'which plan is right for me' anxiety",
"Makes recommended plan obvious",
"Writes benefit-oriented feature copy, not just feature names",
"Includes page headline",
"CTAs are specific per plan",
"Includes FAQ or objection handling copy",
"Provides alternatives for key elements"
],
"files": []
},
{
"id": 4,
"prompt": "Write copy for our About page. We're a 3-person startup that built a developer tool for database migrations. Founded because we kept losing data during migrations at our last jobs. Tone should be professional but human.",
"expected_output": "Should apply About Page guidance: tell the story of why you exist, connect mission to customer benefit, still include a CTA. Should adapt voice and tone to 'professional but human' as specified. Should tell the founder origin story authentically. Should connect the personal pain to the customer's pain. Should include a CTA even on the About page. Copy should follow style rules: active voice, confident, specific. Should NOT be overly corporate or generic.",
"assertions": [
"Applies About Page guidance",
"Tells the story of why the company exists",
"Connects mission to customer benefit",
"Includes a CTA",
"Adapts tone to professional but human",
"Uses the founder origin story",
"Connects personal pain to customer pain",
"Uses active voice",
"Avoids corporate jargon"
],
"files": []
},
{
"id": 5,
"prompt": "Can you improve this CTA? We currently have 'Learn More' on our feature page for our analytics dashboard product.",
"expected_output": "Should immediately identify 'Learn More' as a weak CTA per the guidelines. Should apply the CTA formula: [Action Verb] + [What They Get] + [Qualifier]. Should provide 2-3 strong alternatives like 'See the Dashboard in Action,' 'Start Your Free Trial,' or 'Explore Analytics Features.' Each alternative should include rationale and context for when it works best. Should also consider CTA hierarchy — whether this is a primary or secondary CTA, and suggest complementary CTAs if relevant.",
"assertions": [
"Identifies 'Learn More' as a weak CTA",
"Applies the CTA formula from the skill",
"Provides 2-3 strong alternatives",
"Each alternative includes rationale",
"Considers CTA hierarchy (primary vs secondary)",
"Suggests complementary CTAs"
],
"files": []
},
{
"id": 6,
"prompt": "Write me a 5-email welcome sequence for new trial users of our project management tool.",
"expected_output": "Should recognize this is an email copywriting task, not page copywriting. Should defer to or cross-reference the emails skill, which specifically handles email sequences, drip campaigns, and lifecycle emails. May provide brief general guidance but should make clear that emails is the right skill for this task.",
"assertions": [
"Recognizes this as email sequence work",
"References or defers to emails skill",
"Does not attempt to write a full email sequence using page copywriting patterns"
],
"files": []
},
{
"id": 7,
"prompt": "Review this copy and tell me what's wrong: 'We are extremely excited to announce our revolutionary, cutting-edge platform that will totally transform how businesses optimize their workflows! Sign up now!!'",
"expected_output": "Should apply the Quick Quality Check. Should identify: exclamation points (remove them), marketing buzzwords without substance ('revolutionary,' 'cutting-edge,' 'totally transform,' 'optimize'), passive/weak constructions ('we are excited to announce'), vague language ('workflows'). Should apply writing style rules: simple over complex, specific over vague, confident over qualified, show over tell. Should rewrite the copy following these principles. Should provide 2-3 alternatives.",
"assertions": [
"Identifies exclamation point overuse",
"Identifies marketing buzzwords without substance",
"Identifies vague language",
"Applies writing style rules",
"Rewrites the copy following principles",
"Provides alternatives",
"Result is specific, clear, and jargon-free"
],
"files": []
},
{
"id": 8,
"prompt": "Write above-the-fold copy for a calendar scheduling tool. Our differentiator is that the recipient gets to overlay their own calendar on the invite, so picking a time feels fair to both people instead of one-sided. Same product needs to work for indie founders AND for enterprise ops teams.",
"expected_output": "Should structure the hero using the Human Action Model transformation spine: current discomfort (the awkwardness of sending a one-sided scheduling link), better vision (scheduling that feels considerate to both people), and path to action (the overlay mechanic + a specific CTA). Should run headline candidates through the 'Now you can' test and prefer lines that are compelling and true. Should reference or echo the SavvyCal awkward-link insight ('You shouldn't have to feel awkward sending out your scheduling link') as the message-market-fit model. Should surface the Perception Gap: the same benefit reads differently by risk tolerance, so it should provide a value-prop swap — a founder-facing framing (speed, no sales calls) and an enterprise-facing framing (security, SLAs, reliability) rather than one averaged, mushy message. Should favor clarity over cleverness and provide 2-3 headline alternatives with rationale.",
"assertions": [
"Structures the hero as discomfort -> vision -> path (Human Action Model)",
"Applies the 'Now you can' test to headline candidates",
"References the SavvyCal awkward-link message-market-fit insight",
"Surfaces the Perception Gap between segments",
"Provides a value-prop swap: founder framing vs enterprise framing",
"Favors clarity over cleverness",
"Provides 2-3 headline alternatives with rationale"
],
"files": []
}
]
}
Loading
Loading