These are the exact skill files I run inside Claude to handle video generation, script planning, brand deal replies, analytics, and more — copy any one of them below, paste it into Claude, and it saves itself as a skill you can trigger anytime.
I’ve personally used these workflows to go from 0 to 30,000 followers in under three months.
These are the exact skill files I run inside Claude to handle video generation, script planning, brand deal replies, analytics, and more — copy any one of them below, paste it into Claude, and it saves itself as a skill you can trigger anytime.
---
name: remotion
description: Generates a custom animated video for the user using Remotion. Installs Remotion automatically on first use, asks the user what they want to generate, builds a matching video composition, renders it, and delivers the finished video file. Use this skill whenever the user says "make me a video", "generate a video", "create an animated video", "use remotion", or anything about wanting a custom motion-graphics/animated video made.
---
# Remotion Video Generator
Turns a plain-English description into a finished, rendered video — no code, no setup, no technical steps from the user. Claude handles installation, building, and rendering behind the scenes.
---
## First Interaction — Introduction Message
When this skill is triggered for the first time in a conversation, send this message exactly:
---
**Welcome to the Remotion Video Generator.**
Here's what this does:
1. Sets up everything needed to build videos (one-time, automatic — you don't need to install anything yourself)
2. Asks what you want the video to be
3. Builds and renders it
4. Sends you the finished video file
This only requires one thing on your end: **Code Execution and File Creation** needs to be turned on. It's a free built-in Claude feature — nothing to sign up for or connect.
**If you're not sure it's on:** go to Settings → Features (or the toggle near the message box) and make sure "Code Execution and File Creation" is enabled, then come back and say "ready."
If it's already on, just say "ready" and I'll get everything set up.
---
## Setup Check — Do This Before Anything Else
Before installing anything, confirm the environment actually has code execution access by running a harmless test command (e.g. `echo ready`).
- **If it works:** proceed silently to installation. Do not narrate this check to the user.
- **If it fails / the tool isn't available:** tell the user plainly:
> "Looks like Code Execution and File Creation isn't turned on yet. Head to Settings → Features, enable it, and send me anything to continue — I'll pick up right where we left off."
Do not attempt installation or rendering until this is confirmed working.
- **If it's enabled but setup still won't fully cooperate** (sandbox limitations, missing CLI capability, persistent install failures even after retrying): don't keep looping on it. Tell the user plainly:
> "This one needs more CLI horsepower than this chat can give it. Open Claude Code (the desktop app or terminal version) and paste this same skill in there — it'll have full command-line access and can get everything installed and rendering properly."
This is the fallback whenever the in-chat environment genuinely can't do what's needed — not the first move, but don't burn the user's time retrying indefinitely either.
---
## Step 1 — Install Remotion (First Time Only)
Check whether a Remotion project already exists in the working directory (look for a folder containing `remotion.config.ts` and a `src/` directory). If it does, skip straight to Step 2.
If it does not exist, set it up:
1. Create a project folder (e.g. `/home/claude/remotion-project`) and move into it.
2. Initialize a minimal Node project and install the required packages:
```
npm init -y
npm install remotion @remotion/cli @remotion/bundler @remotion/renderer react react-dom --save
```
3. Create the base Remotion entry files:
- `src/index.ts` — registers the root
- `src/Root.tsx` — where compositions get registered (start empty; compositions are added per request in Step 3)
- `remotion.config.ts` — default config (1080x1920 portrait, 30fps, since this is for short-form social video)
Do not explain any of this setup to the user in technical terms. If it succeeds, just move to Step 2. If it fails, see Error Handling below.
---
## Step 2 — Ask What They Want
Once setup is confirmed (or already existed), ask:
> "What do you want to generate?"
Get enough detail to build it. If the user gives something vague (e.g. "a cool intro video"), ask one quick follow-up to pin down:
- The core message or text that should appear
- Rough vibe/style (bold and punchy, clean and minimal, colorful, dark/premium, etc.)
- Roughly how long it should be (default to 5–8 seconds if they don't care — this is for short-form use)
Don't over-interview them — one clarifying question max, then proceed with reasonable defaults for anything unspecified.
---
## Step 3 — Build the Composition
Create a new React component in `src/` (e.g. `src/GeneratedVideo.tsx`) that matches what the user described:
- Use Remotion's `useCurrentFrame()` and `interpolate()` for animation timing — text fades/slides in, scales, etc.
- Use `<AbsoluteFill>` as the base container with a background color/gradient matching the requested vibe
- Keep typography bold and legible — this is for short-form social video, viewed at small sizes
- Default canvas: 1080x1920 (portrait/reels format) unless the user specifies otherwise
- Register the new composition in `src/Root.tsx` with a unique `id`, the component, `durationInFrames` matching the requested length, `fps={30}`, and the correct `width`/`height`
Keep the code self-contained — no external assets or fonts that require extra downloads unless the user specifically asked for something that needs them (e.g. a specific image — if so, ask them to upload it first).
---
## Step 4 — Render
Render the composition to an actual video file:
```
npx remotion render src/index.ts [CompositionId] out/[descriptive-filename].mp4
```
Wait for the render to complete. This can take anywhere from a few seconds to a couple minutes depending on length/complexity — don't interrupt it.
---
## Step 5 — Deliver
Copy the rendered `.mp4` to the outputs directory and present it to the user. Give one short line confirming what was made — no lengthy explanation of the build process.
---
## Error Handling
**npm install fails:**
> "The setup hit a snag — trying again." Retry once. If it fails a second time, tell the user: "Something's blocking the install — this usually means Code Execution and File Creation isn't fully enabled. Double check that setting and try again."
**Render fails (bad composition code, missing dependency, etc.):**
Diagnose the actual error from the render output, fix the composition code, and re-render. Don't just report the failure — attempt at least one fix-and-retry before telling the user something's wrong.
**Render succeeds but looks broken/empty:**
Re-check the composition's `durationInFrames`, dimensions, and that elements are actually inside the visible frame range before re-rendering.
---
## What This Skill Does NOT Do
- Does not require the user to touch code, npm, or a terminal at any point
- Does not require any MCP connectors — everything runs inside Claude's own code execution environment
- Does not persist the Remotion project between separate conversations — if a new chat doesn't have the project folder, Step 1 will just reinstall automatically (this is expected and still counts as "already working as advertised" from the user's side)
---
## Repeat Use
Once installed in a given conversation, the user can just say "make me another one" — skip straight to Step 2 for subsequent requests in the same chat.
---
## Add This As a Skill
Once you've tested this and it works the way you want, say **"add this as a skill"** and Claude will save it so you can trigger it anytime going forward.
--- name: brand-guidelines description: Applies a consistent brand color palette and typography system to any document, carousel, or design output. Use it whenever brand colors, style guidelines, visual formatting, or consistent design standards apply. --- # Brand Styling ## Overview Applies a consistent color and typography system to anything you're building — carousels, slide decks, documents, or design assets — so your output always looks intentional and on-brand instead of like a random default template. **Keywords:** branding, corporate identity, visual identity, styling, brand colors, typography, visual formatting, visual design ## Default Palette (Swap These for Your Own Brand Colors) **Main Colors:** - Dark: `#141413` — Primary text and dark backgrounds - Light: `#faf9f5` — Light backgrounds and text on dark - Mid Gray: `#b0aea5` — Secondary elements - Light Gray: `#e8e6dc` — Subtle backgrounds **Accent Colors:** - Orange: `#d97757` — Primary accent - Blue: `#6a9bcc` — Secondary accent - Green: `#788c5d` — Tertiary accent Tell Claude your own brand's hex codes and it will swap these defaults for yours — this palette is just the starting point if you don't have your own picked yet. ### Typography - **Headings:** Poppins (with Arial fallback) - **Body Text:** Lora (with Georgia fallback) - **Note:** Fonts should be pre-installed in your environment for best results ## Features ### Smart Font Application - Applies the heading font to headings (24pt and larger) - Applies the body font to body text - Automatically falls back to Arial/Georgia if custom fonts unavailable - Preserves readability across all systems ### Text Styling - Headings (24pt+): heading font - Body text: body font - Smart color selection based on background - Preserves text hierarchy and formatting ### Shape and Accent Colors - Non-text shapes use accent colors - Cycles through your three accent colors - Maintains visual interest while staying on-brand ## Technical Details ### Font Management - Uses system-installed fonts when available - Provides automatic fallback to Arial (headings) and Georgia (body) - No font installation required — works with existing system fonts - For best results, pre-install your chosen fonts in your environment ### Color Application - Uses RGB color values for precise brand matching - Applied via python-pptx's RGBColor class for slide decks - Maintains color fidelity across different systems --- ## Add This As a Skill Once you've told Claude your brand colors and you're happy with the setup, say **"add this as a skill"** and Claude will save it so every future carousel, deck, or document automatically uses your palette without you re-explaining it.
---
name: brainstorm
description: Turns a rough idea into a fully-formed design through collaborative back-and-forth dialogue, before any implementation, writing, or building begins. Use this whenever you pitch a new project, feature, content concept, campaign, or system and haven't already nailed down the specifics — including things that sound simple ("quick script," "just a landing page," "one carousel idea"). Also use when you explicitly say "let's brainstorm," "help me think through this," "flesh this out," or "design this before we build it."
---
# Brainstorming: Ideas Into Designs
Turns a rough idea into a clear, fully-formed design through natural, collaborative dialogue — one question at a time — before any building starts.
## Core Rule
Claude does NOT start building, writing, or otherwise implementing anything until it's presented a design and you've approved it. This applies to every project, no matter how simple it seems.
**Anti-pattern: "this is too simple to need a design."** Quick scripts, single carousels, one-page sites, short captions — all of them benefit from this. Unexamined assumptions, not complexity, are what cause wasted work. For a genuinely simple project, the design can be two or three sentences — but skipping that check is how you end up with the wrong thing built fast.
## The Flow
1. **Understand context** — Claude looks at whatever's already in front of it (uploaded files, prior messages, relevant past work) before asking anything.
2. **Ask clarifying questions, one at a time** — purpose, constraints, success criteria. Multiple-choice when there's a natural set of options; open-ended when there isn't.
3. **Propose 2–3 approaches** — with trade-offs, leading with a recommendation and why.
4. **Present the design** — in sections sized to their complexity, checking in after each one.
5. **Get your approval** — once you're happy, Claude hands off to whatever's next: writing the actual content, building the thing, or handing it to another skill.
## Understanding the Idea
- Checks current context first — what's already been discussed, any files or prior work that bear on this.
- **Assesses scope before drilling into details.** If the idea actually bundles several independent pieces (e.g. "build a content system with scripts, scheduling, analytics, and a CRM"), it says so up front and helps break it into pieces with a sensible build order.
- Asks one question at a time — if a topic needs more digging, it's split into multiple questions rather than stacked in one message.
- Stays focused on: what's this for, what constraints exist (time, budget, platform, audience), what does success look like.
## Exploring Approaches
- Once the goal is clear, Claude proposes 2–3 meaningfully different approaches — not just stylistic variants of the same idea.
- Lays out trade-offs for each plainly: what you gain, what you give up.
- Leads with the recommended option and why, but makes it easy to pick something else.
## Presenting the Design
- Presents the plan as a design, not a finished deliverable.
- Scales each section to its complexity — a couple sentences if straightforward, more if there's real nuance.
- Checks after each section whether it's tracking, rather than dumping everything and asking "thoughts?" at the end.
- For anything with moving parts, covers: what it's made of, how the pieces relate, what could go wrong, how you'd know it worked.
- Backtracks and re-asks if something in the design reveals a misunderstanding earlier in the conversation.
### Design for Clear Boundaries
Applies whether the "thing" is software, a content system, or a campaign:
- Breaks it into smaller units that each do one clear thing and connect through well-defined handoffs.
- For each unit, Claude can say: what it does, how you use it, what it depends on.
- Smaller, well-scoped units are easier to reason about and execute well — a sprawling, do-everything unit is a sign the design needs another pass.
### Working With What Already Exists
- Looks at your existing structure, content, or system before proposing changes to it — matches your existing brand voice, colors, and patterns rather than reinventing them.
- If something existing is actively causing problems relevant to this design, it folds a targeted fix into the design.
- Doesn't scope-creep into unrelated cleanup — stays focused on what serves the thing being designed right now.
## Key Principles
- **One question at a time.** No walls of questions to parse.
- **Multiple choice when it fits.** Easier to answer than fully open-ended.
- **Cut the unnecessary.** If a feature or section isn't earning its place, it gets dropped.
- **Always explore alternatives.** Never settles on the first approach without naming at least one other option.
- **Check in as you go.** A nod on each section rather than the whole design cold at the end.
- **Stay flexible.** If something stops making sense, Claude goes back and re-asks rather than pushing forward on a shaky foundation.
## Wrapping Up
Once the design is approved, the brainstorming is done. Claude summarizes it briefly so there's a clear record of what was agreed, then lets you direct what happens next.
---
## Add This As a Skill
Once you've seen how this works, say **"add this as a skill"** and Claude will save it so every new idea you bring gets this same design-first treatment automatically.
---
name: script-creator
description: Walks the user through a full round of questions covering every strategic decision behind a short-form video — hooks, format, CTA, topic, freebie, editing, captions, posting time, value, length, funnel stage, and angle — offering suggestions at each step, then generates one rough-draft script built entirely from the user's own answers. Use this skill whenever the user runs "/script-creator", says "help me draft a script", or wants help planning out a video from scratch.
---
# Script Creator
This skill does not try to write the user a perfect viral script. Its job is to make the user answer every question they need to answer themselves before posting a video — with suggestions offered at each step — and then hand back one rough draft built strictly from their own answers.
Think of this as a Q&A intake, not a creative-writing tool. Claude organizes and drafts; the user decides.
---
## First Interaction — Introduction Message
When triggered (e.g. `/script-creator`, "help me draft a script"), send this message exactly:
---
**Welcome to Script Creator.**
I'm going to walk you through every decision that goes into a video before you post it — the hook, the format, the CTA, the topic, everything. I'll offer suggestions at each step, but you're the one making the calls.
Once we've been through all of it, I'll take your answers and put together one rough draft script — built entirely from what you told me, not from scratch on my own.
Ready to start?
---
## How to Ask Each Question
For every section below:
1. Ask the question plainly.
2. Offer 3–5 concrete suggestions/options as a starting point — never leave it as an open-ended "what do you want here?" with nothing to react to.
3. Let the user pick one, combine, or give their own answer instead.
4. Confirm their answer in one short line before moving to the next section (so they can course-correct immediately if something got misread).
5. Ask **one section at a time** — do not dump the whole list on them at once. This is a walkthrough, not a form.
If the interface supports interactive multiple-choice input, use it. Otherwise, present the options as a simple numbered list in chat.
---
## The Sections — Ask in This Order
### 1. Topic
What is this video actually about? If they don't have one, suggest a few based on anything they've mentioned wanting to talk about, or ask what pain point their audience has been asking about lately.
### 2. Angle
Given the topic, what specific angle are they taking? A topic can be covered a dozen ways — this narrows it to the one take this particular video is making.
Suggestions: a mistake people make, a myth to debunk, a step-by-step method, a personal result/story, a comparison between two approaches, a contrarian take.
### 3. Level of Awareness
Explain simply if needed: this is about how much the viewer already knows/wants what's being offered.
- **Top of funnel** — stranger just discovering this exists, needs the "what/why" explained
- **Middle of funnel** — knows the problem, is comparing solutions/options
- **Bottom of funnel** — already sold, just needs the final push (offer, CTA, proof)
Ask which one this video is for.
### 4. Value Being Delivered
What is the viewer actually walking away with — a fact, a tool, a template, entertainment, proof/social validation, a shift in how they think about something? Get this specific, not "value."
### 5. Freebie / Lead Magnet
Is there something given away in exchange for engagement (comment a keyword, DM a word, link in bio)? If yes, what exactly is it? If no, confirm this video isn't running a lead magnet this time — that's a valid answer too.
### 6. Verbal Hook
What's said out loud in the first 1–2 seconds? Offer format suggestions: a bold claim, a challenge/dare ("if you've never done X, keep scrolling"), a question, a quiz-style callout, a personal admission ("I almost didn't post this").
### 7. Visual Hook
What's on screen in the first 1–2 seconds? Offer suggestions: the deliverable/result shown immediately, a high-intensity in-the-moment shot, a talking head with strong eye contact, a screen recording already mid-action, a whiteboard/prop visible behind them.
### 8. Written Hook
What text overlay appears on screen, if any, in the first few seconds? Offer suggestions: restating the verbal hook in fewer words, a numeric/list callout ("6 skill files"), a curiosity-gap phrase, or none if the verbal + visual hook are already carrying it.
### 9. Format
How is this video structured? Offer suggestions: best-vs-worst comparison, a listicle, a head-to-head comparison of two tools/methods, a straight explanation/breakdown, a tutorial/walkthrough, a news/reaction piece, a personal story with a lesson at the end.
### 10. Length
Offer suggestions tied to the format they picked: quick list/hook-heavy formats tend to run shorter (15–30 sec), tutorials/explanations often need more room (45–75 sec), story formats vary. Ask what they're targeting.
### 11. CTA
What should the viewer do at the end? Offer suggestions: comment a keyword, follow for more, save the video, share with someone specific, click link in bio, no CTA (pure reach play).
### 12. Editing Style
How should this be cut together? Offer suggestions: fast quick-cuts, minimal cuts/long takes, mixed b-roll and talking head, screen recording heavy, text-overlay heavy, whiteboard/prop-heavy.
### 13. Caption Format
What does the actual post caption look like? Offer suggestions: one-line hook repeat, a short expansion with 2–3 sentences of context, a caption that restates the CTA, hashtag-heavy vs. minimal, a caption that teases something not covered in the video.
### 14. Posting Time
When is this going up? Ask for a specific day/time, or confirm "post ASAP" / "next scheduled slot."
---
## After All Sections Are Answered
Once every section has a confirmed answer, tell the user:
> "That's everything — pulling this into a rough draft now."
Then generate **one rough-draft script**, structured as Audio/Visual line pairs, using the Hook → Workflow → Rehook shape:
- **Hook section:** built from their verbal + visual + written hook answers, exactly as they specified
- **Workflow/body section:** built from their topic, angle, format, and value answers
- **Rehook/close:** built from their CTA and freebie answers
Rules for this draft:
- Do not introduce a hook, angle, format, or CTA the user didn't specify — if something is genuinely missing or contradictory, flag it and ask rather than filling it in yourself
- Match the length target they gave
- Keep it a **rough draft**, not a polished final script — the point is giving them something concrete to react to and revise, built from their own decisions
- Label it clearly as a first draft at the top
---
## Delivering the Draft
- If file creation is available in this environment, create it as a document (Word doc or markdown file) the user can download and edit.
- If not, or if the user hasn't connected any document storage, just present it directly in the chat, clearly formatted, so they can copy it out.
- Do not try to save it to any specific personal folder or account — this skill has no fixed storage location. If the user wants it saved somewhere specific (Google Drive, Notion, etc.) and has that connected, ask where before delivering.
---
## What This Skill Does NOT Do
- Does not invent a hook, angle, or CTA on its own — every strategic decision comes from the user's answers
- Does not promise or imply the resulting script will perform well — it only guarantees the user has actually thought through every part of the video before posting
- Does not skip sections, even if the user seems eager to jump to the draft — all 14 sections get answered first
---
## Add This As a Skill
Once you've tested this and it works the way you want, say **"add this as a skill"** and Claude will save it so you can trigger it anytime going forward.
--- name: simplify-script description: Takes a pasted video script and rewrites it until it reads at a 5th grade reading level — shorter sentences, simpler words, no jargon — while keeping the original meaning, structure, and voice intact. Use this skill whenever the user pastes a script and asks to simplify it, make it easier to understand, dumb it down, or get it to a specific reading level. --- # Simplify Script Takes any script and rewrites it in plain, simple language a 10–11 year old could follow — without losing what the script is actually saying or how it sounds coming from the creator. --- ## First Interaction — Introduction Message When this skill is triggered for the first time, send this message exactly: --- **Welcome to Simplify Script.** Paste your current script below and I'll rewrite it until it reads at a 5th grade level — short sentences, simple words, nothing that makes someone re-read a line to understand it. Nothing to set up. Just paste the script and I'll get started. --- ## Step 1 — Get the Script If the user hasn't already pasted a script, ask: > "Paste the script you want simplified." Work with whatever they give you — a full audio/visual script, plain text, or a rough draft. If it's clearly not a script (e.g. random text), ask them to confirm before proceeding. --- ## Step 2 — Rewrite for 5th Grade Reading Level 5th grade reading level means: - **Short sentences.** Aim for 8–12 words per sentence. Break up anything longer. - **Simple words.** Swap in the plain everyday version of any word a 10-year-old wouldn't use out loud — "use" instead of "utilize," "help" instead of "facilitate," "start" instead of "initiate." - **No jargon without translation.** Technical terms (MCP, API, automation, skill file, etc.) either get replaced with a plain description or get a quick plain-English explanation right where they appear. - **Active voice.** "Claude finds the emails" not "the emails are found by Claude." - **One idea per sentence.** If a sentence is doing two jobs, split it into two sentences. - **Concrete over abstract.** "Claude scrapes 50 LinkedIn profiles" instead of "Claude gathers relevant data." While simplifying, do not: - Change what the script is actually saying or the order of the steps/points - Strip out the creator's first-person, direct voice — simplifying language isn't the same as making it sound robotic or generic - Remove the hook, CTA, or any structural beats that matter for how the video is supposed to perform --- ## Step 3 — Self-Check the Reading Level After rewriting, sanity-check the result against these rough signals before sending it back: - Most sentences are under 12 words - No word longer than 3 syllables unless there's genuinely no simpler option (and if so, it's explained in plain terms nearby) - Reading it out loud, it sounds like natural spoken language, not a simplified-sounding version of the original If any section still fails these checks, revise that section again before delivering. Don't stop at "close enough" — iterate until it actually holds up. --- ## Step 4 — Deliver Send back the fully revised script. If the original had clear audio/visual formatting, keep that same structure in the output so it's a drop-in replacement, not a reformat. Briefly flag (in one line, not a lecture) anything meaningfully cut or changed in meaning to hit the reading level — e.g. "Simplified the MCP explanation down to 'connecting two apps' since the technical name isn't needed for this audience." --- ## Repeat Use If the user pastes another script later in the same chat, just run Steps 2–4 again — no need to repeat the intro message. --- ## Add This As a Skill Once you've tested this and it works the way you want, say **"add this as a skill"** and Claude will save it so you can trigger it anytime going forward.
---
name: carousels
description: Builds a fully self-contained, swipeable Instagram carousel where every slide is designed to be exported as an individual image ready to post. Use this skill whenever the user asks to create a carousel, wants a swipe-style Instagram post, or needs a multi-slide branded graphic for a piece of content.
---
# Instagram Carousel Generator
You are an Instagram carousel design system. When a user asks you to create a carousel, generate a fully self-contained, swipeable HTML carousel where **every slide is designed to be exported as an individual image** for Instagram.
---
## Step 1: Collect Brand Details
Before generating any carousel, ask the user for the following (if not already provided):
1. **Brand name** — displayed on the first and last slides
2. **Instagram handle** — shown in the IG frame header and caption
3. **Primary brand color** — the main accent color (hex code, or describe it and you'll pick one)
4. **Logo** — ask if they have an SVG path, want to use their brand initial, or skip the logo
5. **Font preference** — ask if they want serif headings + sans body (editorial feel), all sans-serif (modern/clean), or have specific Google Fonts in mind
6. **Tone** — professional, casual, playful, bold, minimal, etc.
7. **Images** — ask for any images to be included into the carousel (profile photo, screenshots, product images, etc.)
If the user provides a website URL or brand assets, derive the colors and style from those.
If the user just says "make me a carousel about X" without brand details, ask before generating. Don't assume defaults.
---
## Step 2: Derive the Full Color System
From the user's **single primary brand color**, generate the full 6-token palette:
```
BRAND_PRIMARY = {user's color} // Main accent — progress bar, icons, tags
BRAND_LIGHT = {primary lightened ~20%} // Secondary accent — tags on dark, pills
BRAND_DARK = {primary darkened ~30%} // CTA text, gradient anchor
LIGHT_BG = {warm or cool off-white} // Light slide background (never pure #fff)
LIGHT_BORDER = {slightly darker than LIGHT_BG} // Dividers on light slides
DARK_BG = {near-black with brand tint} // Dark slide background
```
**Rules for deriving colors:**
- LIGHT_BG should be a tinted off-white that complements the primary (warm primary → warm cream, cool primary → cool gray-white)
- DARK_BG should be near-black with a subtle tint matching the brand temperature (warm → #1A1918, cool → #0F172A)
- LIGHT_BORDER is always ~1 shade darker than LIGHT_BG
- The brand gradient used on gradient slides is: `linear-gradient(165deg, BRAND_DARK 0%, BRAND_PRIMARY 50%, BRAND_LIGHT 100%)`
---
## Step 3: Set Up Typography
Based on the user's font preference, pick a **heading font** and **body font** from Google Fonts.
**Suggested pairings:**
| Style | Heading Font | Body Font |
|-------|-------------|-----------|
| Editorial / premium | Playfair Display | DM Sans |
| Modern / clean | Plus Jakarta Sans (700) | Plus Jakarta Sans (400) |
| Warm / approachable | Lora | Nunito Sans |
| Technical / sharp | Space Grotesk | Space Grotesk |
| Bold / expressive | Fraunces | Outfit |
| Classic / trustworthy | Libre Baskerville | Work Sans |
| Rounded / friendly | Bricolage Grotesque | Bricolage Grotesque |
**Font size scale (fixed across all brands):**
- Headings: 28–34px, weight 600, letter-spacing -0.3 to -0.5px, line-height 1.1–1.15
- Body: 14px, weight 400, line-height 1.5–1.55
- Tags/labels: 10px, weight 600, letter-spacing 2px, uppercase
- Step numbers: heading font, 26px, weight 300
- Small text: 11–12px
Apply via CSS classes `.serif` (heading font) and `.sans` (body font) throughout all slides.
---
## Slide Architecture
### Format
- Aspect ratio: **4:5** (Instagram carousel standard)
- Each slide is self-contained — all UI elements are baked into the image
- Alternate LIGHT_BG and DARK_BG backgrounds for visual rhythm
### Required Elements Embedded In Every Slide
#### 1. Progress Bar (bottom of every slide)
Shows the user where they are in the carousel. Fills up as they swipe.
- Position: absolute bottom, full width, 28px horizontal padding, 20px bottom padding
- Track: 3px height, rounded corners
- Fill width: `((slideIndex + 1) / totalSlides) * 100%`
- Adapts to slide background:
- Light slides: `rgba(0,0,0,0.08)` track, BRAND_PRIMARY fill, `rgba(0,0,0,0.3)` counter
- Dark slides: `rgba(255,255,255,0.12)` track, `#fff` fill, `rgba(255,255,255,0.4)` counter
- Counter label beside the bar: "1/7" format, 11px, weight 500
```javascript
function progressBar(index, total, isLightSlide) {
const pct = ((index + 1) / total) * 100;
const trackColor = isLightSlide ? 'rgba(0,0,0,0.08)' : 'rgba(255,255,255,0.12)';
const fillColor = isLightSlide ? B : '#fff';
const labelColor = isLightSlide ? 'rgba(0,0,0,0.3)' : 'rgba(255,255,255,0.4)';
return `<div style="position:absolute;bottom:0;left:0;right:0;padding:16px 28px 20px;z-index:10;display:flex;align-items:center;gap:10px;">
<div style="flex:1;height:3px;background:${trackColor};border-radius:2px;overflow:hidden;">
<div style="height:100%;width:${pct}%;background:${fillColor};border-radius:2px;"></div>
</div>
<span style="font-size:11px;color:${labelColor};font-weight:500;">${index + 1}/${total}</span>
</div>`;
}
```
#### 2. Swipe Arrow (right edge — every slide EXCEPT the last)
A subtle chevron on the right edge telling the user to keep swiping. On the **last slide it is removed** so the user knows they've reached the end.
- Position: absolute right, full height, 48px wide
- Background: gradient fade from transparent → subtle tint
- Chevron: 24×24 SVG, rounded strokes
- Adapts to slide background:
- Light slides: `rgba(0,0,0,0.06)` bg, `rgba(0,0,0,0.25)` stroke
- Dark slides: `rgba(255,255,255,0.08)` bg, `rgba(255,255,255,0.35)` stroke
```javascript
function swipeArrow(isLightSlide) {
const bg = isLightSlide ? 'rgba(0,0,0,0.06)' : 'rgba(255,255,255,0.08)';
const stroke = isLightSlide ? 'rgba(0,0,0,0.25)' : 'rgba(255,255,255,0.35)';
return `<div style="position:absolute;right:0;top:0;bottom:0;width:48px;z-index:9;display:flex;align-items:center;justify-content:center;background:linear-gradient(to right,transparent,${bg});">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none">
<path d="M9 6l6 6-6 6" stroke="${stroke}" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>`;
}
```
---
## Slide Content Patterns
### Layout rules
- Content padding: `0 36px` standard
- Bottom-aligned slides with progress bar: `0 36px 52px` to clear the bar
- **Hero/CTA slides:** `justify-content: center`
- **Content-heavy slides:** `justify-content: flex-end` (text at bottom, visual breathing room above)
### Tag / Category Label
Small uppercase label above the heading on each slide to categorize the content.
```html
<span class="sans" style="display:inline-block;font-size:10px;font-weight:600;letter-spacing:2px;color:{color};margin-bottom:16px;">{TAG TEXT}</span>
```
- Light slides: color = BRAND_PRIMARY
- Dark slides: color = BRAND_LIGHT
- Brand gradient slides: color = `rgba(255,255,255,0.6)`
### Logo Lockup (first and last slides)
Brand icon + brand name displayed together.
- If logo icon provided: 40px circle (BRAND_PRIMARY bg) with icon centered, brand name beside it
- If initials: 40px circle with first letter of brand name in white
- Brand name: 13px, weight 600, letter-spacing 0.5px
### Watermark (optional)
If the user provided a logo icon, use it as a subtle background watermark on key slides (hero, CTA, brand gradient) at opacity 0.04–0.06. Skip if no logo provided.
---
## Standard Slide Sequence
Follow this narrative arc. The number of slides can flex (5–10), but 7 is ideal.
| # | Type | Background | Purpose |
|---|------|------------|---------|
| 1 | Hero | LIGHT_BG | Hook — bold statement, logo lockup, optional watermark |
| 2 | Problem | DARK_BG | Pain point — what's broken, frustrating, or outdated |
| 3 | Solution | Brand gradient | The answer — what solves it, optional quote/prompt box |
| 4 | Features | LIGHT_BG | What you get — feature list with icons |
| 5 | Details | DARK_BG | Depth — customization, specs, differentiators |
| 6 | How-to | LIGHT_BG | Steps — numbered workflow or process |
| 7 | CTA | Brand gradient | Call to action — logo, tagline, CTA button. **No arrow. Full progress bar.** |
**Rules:**
- Start with a hook — the first slide must stop the scroll. Lead with a value proposition or bold claim, not a description. Use visual proof (screenshots, images) to immediately validate the hook.
- End with a CTA on brand gradient — no swipe arrow, progress bar at 100%
- Alternate light and dark backgrounds for visual rhythm
- Adapt the sequence to the topic — not every carousel needs a "problem" slide
- Slides can be reordered, added, or removed based on what the content needs
---
## Reusable Components
### Strikethrough pills
For "what's being replaced" messaging on problem slides.
```html
<span style="font-size:11px;padding:5px 12px;border:1px solid rgba(255,255,255,0.1);border-radius:20px;color:#6B6560;text-decoration:line-through;">{Old tool}</span>
```
### Tag pills
For feature labels, options, or categories.
```html
<span style="font-size:11px;padding:5px 12px;background:rgba(255,255,255,0.06);border-radius:20px;color:{BRAND_LIGHT};">{Label}</span>
```
### Prompt / quote box
For showing example inputs, quotes, or testimonials.
```html
<div style="padding:16px;background:rgba(0,0,0,0.15);border-radius:12px;border:1px solid rgba(255,255,255,0.08);">
<p class="sans" style="font-size:13px;color:rgba(255,255,255,0.5);margin-bottom:6px;">{Label}</p>
<p class="serif" style="font-size:15px;color:#fff;font-style:italic;line-height:1.4;">"{Quote text}"</p>
</div>
```
### Feature list
Icon + label + description rows for feature/benefit slides.
```html
<div style="display:flex;align-items:flex-start;gap:14px;padding:10px 0;border-bottom:1px solid {LIGHT_BORDER};">
<span style="color:{BRAND_PRIMARY};font-size:15px;width:18px;text-align:center;">{icon}</span>
<div>
<span class="sans" style="font-size:14px;font-weight:600;color:{DARK_BG};">{Label}</span>
<span class="sans" style="font-size:12px;color:#8A8580;">{Description}</span>
</div>
</div>
```
### Numbered steps
For workflow or how-to slides.
```html
<div style="display:flex;align-items:flex-start;gap:16px;padding:14px 0;border-bottom:1px solid {LIGHT_BORDER};">
<span class="serif" style="font-size:26px;font-weight:300;color:{BRAND_PRIMARY};min-width:34px;line-height:1;">01</span>
<div>
<span class="sans" style="font-size:14px;font-weight:600;color:{DARK_BG};">{Step title}</span>
<span class="sans" style="font-size:12px;color:#8A8580;">{Step description}</span>
</div>
</div>
```
### Color swatches
For customization or branding slides.
```html
<div style="width:32px;height:32px;border-radius:8px;background:{color};border:1px solid rgba(255,255,255,0.08);"></div>
```
### CTA button (final slide only)
```html
<div style="display:inline-flex;align-items:center;gap:8px;padding:12px 28px;background:{LIGHT_BG};color:{BRAND_DARK};font-family:'{BODY_FONT}',sans-serif;font-weight:600;font-size:14px;border-radius:28px;">
{CTA text}
</div>
```
---
## Instagram Frame (Preview Wrapper)
When displaying the carousel in chat, wrap it in an Instagram-style frame so the user can preview the experience:
- **Header:** Avatar (BRAND_PRIMARY circle + logo) + handle + subtitle
- **Viewport:** 4:5 aspect ratio, swipeable/draggable track with all slides
- **Dots:** Small dot indicators below the viewport
- **Actions:** Heart, comment, share, bookmark SVG breathe icons
- **Caption:** Handle + short carousel description + "2 HOURS AGO" timestamp
Include pointer-based swipe/drag interaction for the preview, but the slides themselves are standalone export-ready images.
**Important:** The `.ig-frame` must be exactly **420px wide**. The carousel viewport inside it has a 4:5 aspect ratio (420×525px). All slide layouts, font sizes, and spacing are designed for this 420px base width. Do NOT change this width — the export process depends on it.
---
## Exporting Slides as Instagram-Ready PNGs
After the user approves the carousel preview, export each slide as an individual **1080×1350px PNG** image ready for direct Instagram upload.
### Critical Export Rules
1. **Use Python for HTML generation** — never use shell scripts with variable interpolation, as shell variables corrupt content (especially numbers and special characters in HTML). Always generate HTML files using Python's `Path.write_text()` or `open().write()`.
2. **Embed images as base64** — all user-uploaded images (screenshots, profile photos, etc.) must be base64-encoded and embedded directly in the HTML as `data:image/jpeg;base64,...` URIs. This ensures the HTML is fully self-contained and renders correctly in the headless browser.
3. **Keep the 420px layout width** — the HTML carousel is designed at 420px wide. The export uses Playwright's `device_scale_factor` to scale up to 1080px output WITHOUT changing the layout. Never set the viewport to 1080px wide — this would reflow the layout and distort everything.
### Export Script
Use this exact Playwright approach to export slides:
```python
import asyncio
from pathlib import Path
from playwright.async_api import async_playwright
INPUT_HTML = Path("/path/to/carousel.html")
OUTPUT_DIR = Path("/path/to/output/slides")
OUTPUT_DIR.mkdir(exist_ok=True)
TOTAL_SLIDES = 7 # Update to match your carousel
VIEW_W = 420
VIEW_H = 525
SCALE = 1080 / 420
async def export_slides():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page(
viewport={"width": VIEW_W, "height": VIEW_H},
device_scale_factor=SCALE,
)
html_content = INPUT_HTML.read_text(encoding="utf-8")
await page.set_content(html_content, wait_until="networkidle")
await page.wait_for_timeout(3000)
await page.evaluate("""() => {
document.querySelectorAll('.ig-header,.ig-dots,.ig-actions,.ig-caption')
.forEach(el => el.style.display='none');
const frame = document.querySelector('.ig-frame');
frame.style.cssText = 'width:420px;height:525px;max-width:none;border-radius:0;box-shadow:none;overflow:hidden;margin:0;';
const viewport = document.querySelector('.carousel-viewport');
viewport.style.cssText = 'width:420px;height:525px;aspect-ratio:unset;overflow:hidden;cursor:default;';
document.body.style.cssText = 'padding:0;margin:0;display:block;overflow:hidden;';
}""")
await page.wait_for_timeout(500)
for i in range(TOTAL_SLIDES):
await page.evaluate("""(idx) => {
const track = document.querySelector('.carousel-track');
track.style.transition = 'none';
track.style.transform = 'translateX(' + (-idx * 420) + 'px)';
}""", i)
await page.wait_for_timeout(400)
await page.screenshot(
path=str(OUTPUT_DIR / f"slide_{i+1}.png"),
clip={"x": 0, "y": 0, "width": VIEW_W, "height": VIEW_H}
)
print(f"Exported slide {i+1}/{TOTAL_SLIDES}")
await browser.close()
asyncio.run(export_slides())
```
### Why This Works
- **`device_scale_factor=2.5714`** tells the browser to render at high DPI. A 420px-wide element becomes 1080px in the output image. The layout stays at 420px — fonts, spacing, and element positions remain exactly as they appear in the HTML preview.
- **`clip`** ensures the screenshot captures only the carousel viewport, not any surrounding browser chrome.
- **`wait_for_timeout(3000)`** gives Google Fonts time to load before screenshotting.
- **`track.style.transition = 'none'`** disables the swipe animation so the slide snaps instantly into position.
### Common Export Mistakes to Avoid
| Mistake | What goes wrong | Fix |
|---------|----------------|-----|
| Setting viewport to 1080×1350 | Layout reflows — fonts become tiny, spacing breaks, images resize | Keep viewport at 420×525, use `device_scale_factor` |
| Using shell scripts to generate HTML | `$` signs, backticks, and numbers get interpolated as shell variables | Always use Python for HTML generation |
| Not waiting for fonts | Headings render in fallback system fonts | `wait_for_timeout(3000)` after page load |
| Not hiding IG frame chrome | Export includes the header, dots, and caption | Hide `.ig-header,.ig-dots,.ig-actions,.ig-caption` |
| Changing `.ig-frame` width | Entire layout shifts, nothing matches preview | Always keep at exactly 420px |
---
## Layout Best Practices
1. **Content must never overlap the progress bar.** Use `padding-bottom: 52px` on any slide content that extends to the bottom.
2. **User-uploaded images may be JPEGs despite `.png` extension.** Always check the actual file format with the `file` command when embedding as base64 — use the correct MIME type (`data:image/jpeg;base64,...` vs `data:image/png;base64,...`).
3. **Test every slide visually before export.** Ask the user to swipe through the HTML preview and screenshot any issues. Iterate on specific slides rather than regenerating the entire carousel.
---
## Design Principles
1. **Every slide is export-ready** — arrow and progress bar are part of the slide image, not overlay UI
2. **Light/dark alternation** — creates visual rhythm and sustains attention across swipes
3. **Heading + body font pairing** — display font for impact, body font for readability
4. **Brand-derived palette** — all colors stem from one primary, keeping everything cohesive
5. **Progressive disclosure** — progress bar fills and arrow guides the user forward
6. **Last slide is special** — no arrow (signals end), full progress bar, clear CTA
7. **Consistent components** — same tag style, same list style, same spacing across all slides
8. **Content padding clears UI** — body text never overlaps with the progress bar or arrow
9. **Iterate fast** — show the preview, get feedback on specific slides, fix those slides. Don't rebuild from scratch unless the direction fundamentally changes.
---
## Add This As a Skill
Once you're happy with how it works, say **"add this as a skill"** and Claude will save it so you can trigger it anytime with `/carousels`.
---
name: brand-deal-replies
description: Scans the user's recent Gmail inbox for brand deal / sponsorship / collab emails that haven't been replied to, summarizes them, then drafts a personalized reply for each based on the user's input (rates, availability, terms). Saves everything as Gmail drafts — never sends automatically. Use this skill whenever the user says "check my brand deals", "find sponsorship emails", "draft replies to brands", or anything about catching up on collab/partnership emails.
---
# Brand Deal Replies
Finds brand deal emails sitting in the inbox that still need a response, and drafts a reply for each one — ready to review and send.
---
## First Interaction — Introduction Message
When this skill is triggered for the first time, send this message exactly:
---
**Welcome to Brand Deal Replies.**
Here's what this does:
1. Looks through your recent Gmail for brand deal / sponsorship / collab emails
2. Figures out which ones still need a reply from you
3. Asks you a few quick things (your rate, availability, what you're open to)
4. Drafts a personalized reply for each one — saved to Gmail as drafts, never sent automatically
**Before we run this, one thing needs to be connected:**
☐ **Gmail MCP connected to Claude** — in Claude settings → Integrations, connect your Gmail account
If you're not sure it's connected, just try it — I'll let you know right away if it's missing.
Once that's confirmed, reply "ready" and I'll start scanning.
---
## Setup — If Gmail Isn't Connected
If a Gmail tool call fails or returns an auth error:
> "Your Gmail isn't connected yet. Go to Claude.ai → Settings → Integrations → find Gmail → click Connect and authorize with your Google account. Come back and say 'ready' once that's done."
Do not proceed to Step 1 until Gmail access is confirmed working.
---
## Step 1 — Search for Brand Deal Emails
Use `Gmail:search_threads` to pull recent inbox activity (last 30 days is a good default — ask the user if they want a different window).
Search using keyword variations to catch brand deal language:
- "collab" OR "collaboration"
- "partnership" OR "paid partnership"
- "sponsorship" OR "sponsored"
- "brand deal" OR "ambassador"
- "influencer" OR "content creator opportunity"
- "rate card" OR "usage rights"
Run a few separate searches rather than one giant OR query — narrower searches return cleaner results.
---
## Step 2 — Filter to Only What Actually Needs a Reply
For each thread that matches, pull it with `Gmail:get_thread` and check:
- **Is this a real brand deal inquiry** (a person/company proposing paid work, a collab, or a sponsorship) — not a newsletter, automated notification, or spam that happens to contain one of the keywords?
- **Does it still need a reply** — is the most recent message in the thread from the brand, not from the user? If the user already replied and the brand hasn't responded since, skip it (nothing to draft).
- **Is it still relevant** — not an expired offer, not a thread that's already been closed out ("no thanks," "we went with someone else," etc.)
Discard anything that fails these checks. Keep a running list of the ones that pass, with: sender name/company, what they're offering, and any specifics mentioned (budget, deliverables, timeline, deadline to respond).
---
## Step 3 — Show the User What Was Found
Before drafting anything, give the user a short summary list, e.g.:
> Found 4 brand deals that need a reply:
> 1. **Company A** — offering $X for 1 reel, wants to know availability
> 2. **Company B** — proposing an ongoing partnership, no rate mentioned
> 3. **Company C** — free product only, no payment offered
> 4. **Company D** — asking for your media kit/rate card
Ask what's needed to draft replies:
> "For these, tell me: your current rate (or rate range), your general availability, and whether there's anything you're not open to (e.g. no free-product-only deals, no exclusivity clauses). If any of these need a different answer than the rest, just call it out."
---
## Step 4 — Draft a Reply for Each
For each brand deal, write a reply using the user's input from Step 3. Structure:
- Thank them, specific to what they actually offered (not generic)
- Answer directly: accept interest, ask clarifying questions, state rate/availability, or politely decline — based on what the user said
- If declining (e.g. free-product-only when the user only does paid): keep it warm, leave the door open, don't over-explain
- Keep the user's natural tone — first-person, direct, not corporate-sounding
- Clear next step at the end (e.g. "Let me know if that works and I'll send over dates," or "Happy to hop on a quick call if useful")
Match reply length to the original email — don't write a long reply to a two-line inquiry.
---
## Step 5 — Save as Gmail Drafts
For each reply, call `Gmail:create_draft` as a reply within the original thread (not a new email) with:
- `to`: the sender's email
- `subject`: matching the original thread subject (prefixed "Re:" if not already)
- `body`: the drafted reply
Never send automatically. Every draft is for the user to review first.
---
## Step 6 — Final Report
Give a clean summary:
| # | Brand | Offer | Action Taken | Draft |
|---|-------|-------|---------------|-------|
| 1 | Company A | $X, 1 reel | Accepted, confirmed rate | Saved |
| 2 | Company B | Ongoing, no rate | Asked for budget details | Saved |
| 3 | Company C | Free product only | Politely declined | Saved |
| 4 | Company D | Requested rate card | Sent rate + availability | Saved |
End with: "All drafts are in Gmail — review each one and send when ready."
---
## Error Handling
**Gmail search returns nothing:**
> "Didn't find any brand deal emails in the last [X] days. Want me to widen the search window?"
**Gmail:create_draft fails for a specific thread:**
Note the failure, continue with the rest, and at the end give the user the drafted text for that one so they can paste it manually.
**Ambiguous emails (unclear if it's a real brand deal or spam):**
Don't guess — include it in the summary list as "not sure this is legit" and let the user decide whether to draft a reply or skip it.
---
## What This Skill Does NOT Do
- Never sends an email — only creates drafts
- Never negotiates or commits to terms on the user's behalf — it drafts based on what the user explicitly says to offer
- Does not chase down brand deals that were never emailed — this only works on what's already in the inbox
---
## Repeat Use
User can say "check my brand deals" again anytime. Each run should skip threads already handled in a previous run (check for an existing draft reply before creating a new one).
---
## Add This As a Skill
Once you've tested this and it works the way you want, say **"add this as a skill"** and Claude will save it so you can trigger it anytime going forward.
---
name: analytics
description: Connects Claude to a user's social media accounts through Metricool's MCP, then handles analytics pulls, post scheduling across platforms, competitor tracking, ad campaign monitoring, and content reporting — all from chat. Use this skill whenever the user asks to check their social media analytics, schedule a post, spy on competitors, review ad performance, or build a content report.
---
# Analytics
Turns Claude into a full social media command center by connecting to Metricool — a platform that links directly into Instagram, TikTok, YouTube, LinkedIn, Facebook, X, and more. Once connected, the user can pull analytics, schedule posts, track competitors, and monitor ad spend without leaving the chat.
---
## First Interaction — Introduction Message
When this skill is triggered for the first time, send this message exactly:
---
**Welcome to Analytics.**
Here's what this unlocks:
1. Pull real analytics from any of your connected platforms — no logging into five different apps
2. Schedule posts across multiple platforms in one message
3. Track competitors and turn what's working for them into ideas for you
4. Check ad performance across Meta, Google, and TikTok Ads
5. Generate clean performance reports on demand
**This needs one thing set up first: a free Metricool account connected to Claude.** It takes about 5 minutes and there's no coding involved. If you've already got this connected, just tell me what you want to do. If not, say "help me set up" and I'll walk you through it.
---
## Setup — If Metricool Isn't Connected Yet
Walk the user through this if they haven't set it up:
### Step 1 — Create a Metricool Account
1. Go to metricool.com and sign up (free plan works to start)
2. Connect every social account they want Claude to be able to touch — the more connected, the more Claude can actually do
3. If they run paid ads, connect those ad accounts too (Meta, Google, TikTok)
4. If they want competitor tracking, add a few competitor accounts in Metricool's Competitors section now — the data needs time to build up before it's useful
### Step 2 — Connect the Metricool MCP to Claude
1. In Claude.ai, go to Settings → Connectors
2. Click the **+** button → Add Custom Connector
3. Name it "Metricool"
4. Paste in this URL exactly: `https://ai.metricool.com/mcp`
5. Save, then authorize the Metricool account when prompted
### Step 3 — Confirm It's Working
Ask Claude: "Show me the brands connected to my Metricool account." If it comes back with real account data, setup is done.
If it fails or comes back empty, walk through Steps 1–2 again — the most common issue is the account not actually being authorized in Step 2.
---
## Core Capabilities
Once connected, match the user's request to one of these categories and pull the right Metricool data. Always ask for a specific date range if they don't give one ("last 30 days," "May 1–15," etc.) — vague ranges lead to vague answers.
### Analytics & Performance
Pull engagement, reach, follower growth, and top/bottom-performing content for any connected platform. When asked "how am I doing," don't just hand back numbers — explain what's actually working and why, based on the pattern in the data (format, timing, hook type if visible from the post).
### Scheduling
Take whatever the user gives you (caption, platforms, timing) and schedule it. When they don't specify a time, use Metricool's best-time-to-post data for that platform rather than guessing. Confirm what got scheduled where before finishing.
### Competitor Intelligence
Pull a tracked competitor's recent top posts, identify what's working for them, and turn that into concrete content ideas — not just a summary of what they posted. This only works for competitors already added inside Metricool; if none are added, tell the user to add them there first.
### Ad Performance
Pull spend, results, and cost-per-result across any connected ad account (Meta, Google, TikTok Ads). Useful for quick check-ins or building a client-style summary.
### Reporting
Assemble a clean report — growth, engagement, top posts, competitor context, and a few concrete recommendations — formatted for either personal review or sending to a client.
---
## Power Workflows
For bigger asks, chain multiple capabilities together in one pass rather than doing them one at a time:
- **Weekly audit:** pull last week's performance, flag the best and worst posts, check what competitors posted that outperformed the user, surface best posting times for the week ahead, then draft new posts based on all of it
- **Repurposing:** take one high-performing piece of content and rewrite it natively for each other connected platform (tone, length, and hashtag use should shift per platform, not just copy-paste), then offer to schedule all versions
- **Competitor reverse-engineering:** pull competitor posts, rank by engagement, identify their top recurring themes, and write a version of each theme in the user's own voice
---
## Tool Reference (What's Actually Happening Behind the Scenes)
Claude doesn't need to be told which tool to use — it should pick automatically based on the request. For reference, the connector exposes tools covering: brand/account lookups, per-platform analytics (Instagram, TikTok, Facebook, LinkedIn, X, YouTube, Pinterest, Threads, Bluesky, Twitch), best-time-to-post calculations, post scheduling and editing, scheduled-post lookups, ad campaign data (Meta, Google, TikTok), and competitor tracking.
---
## Error Handling
**Connector not authorized / auth error:** tell the user to re-check Step 2 of setup — usually the connector was added but never actually authorized.
**No data returned for a date range:** the account may not have been connected long enough to have that history, or the platform wasn't connected at all. Confirm which platforms are actually linked before troubleshooting further.
**Competitor data empty:** competitors need to be added inside Metricool directly (not through Claude) before their data becomes available — point the user there.
**Free plan limits hit:** Metricool's free plan caps analytics history and monthly scheduled posts. If a request exceeds that, tell the user plainly what the limit is and that upgrading removes it — don't just fail silently.
---
## What This Skill Does NOT Do
- Does not post anything without the user's request — every scheduled post is something the user explicitly asked for
- Does not fabricate analytics or competitor data — everything comes from what Metricool actually returns
- Does not manage ad budgets or make spend decisions — it reports on ad performance, it doesn't change campaigns
---
## Add This As a Skill
Once you've tested this and it works the way you want, say **"add this as a skill"** and Claude will save it so you can trigger it anytime going forward.
Comment “SKILLS” on my latest video and I’ll send this whole list over, or follow along for a new one every week.