Skip to content

Repository files navigation

Ripple

A Claude Code skill that runs every morning, fetches what's trending, scores trends against your niches, and drops ready-to-post copy for Instagram, LinkedIn, TikTok, and X into Notion.

Built on the same architecture as trendvane — same trend pipeline, different output: real platform-native post copy instead of video briefs.


What you get per trend (×3 daily)

  • Instagram — full caption with hook, body, CTA + 20–30 hashtags for first comment
  • LinkedIn — professional post, value-first opening, discussion CTA, 3–5 hashtags
  • TikTok — text overlay (≤10 words), display caption, full caption, audio direction, hashtags
  • X — single tweet (≤280 chars) or numbered thread (2–7 tweets)
  • Trend Intel — what it is, why it scored, source URLs

All 12 posts are voice-audited against your examples before pushing to Notion.


Install

# Recommended
npx skills add your-username/ripple -g -a claude-code

# Manual
git clone https://github.com/your-username/ripple
cd ripple
python3 setup.py

Then open Claude Code and type /ripple for the guided setup.


Setup (10–15 min, one time)

When you run /ripple for the first time, Claude walks you through:

  1. Notion — creates your Ripple database and collects workspace/database IDs
  2. Niches — you define 2–5 niches with keywords, weights, and optional subreddits
  3. Voice profile — you paste 2–3 example posts per platform; Claude matches your voice
  4. API keys — optional: YouTube, Reddit, Product Hunt (Ripple works without them)

After setup, run /ripple any time.


Data sources

Source Auth required Notes
HackerNews None Always available
Reddit Optional (app OAuth) Falls back to public JSON
Google Trends None Requires pytrends
YouTube Optional (API key) Skipped if no key
Product Hunt Optional (token) Skipped if no token
TikTok None May be blocked; degrades gracefully

Scoring

Each trend is scored 0–100 across 5 dimensions:

Dimension Default weight
Niche fit 40%
Velocity (rising > peaking > fading) 25%
Cross-platform presence 15%
Recency (7-day decay) 10%
Originality (30-day dedup) 10%

Weights are overridable in my_niches.json. At least 1 of the 3 daily picks always comes from your highest-weighted niche.


Configuration files

All user config lives in ~/.claude/ripple/ and is never overwritten by updates.

File Purpose
my_niches.json Niche definitions, keywords, weights, subreddits, scoring weights
voice_examples.md Your example posts per platform — Claude matches this voice
notion_config.json Notion workspace ID and database ID
secrets.json Optional API keys
used_angles.json 14-day content angle history (prevents repetition)

Notion database schema

Your Ripple database needs these properties:

Property Type
Name Title
Date Date
Score Number
Velocity Select: rising / peaking / fading
Niche Select
Sources Multi-select
Time to Stale Number
Status Select: Draft / Reviewed / Posted

Each page body contains: IG → LinkedIn → TikTok → X → Trend Intel.


Running

On demand:

/ripple

Or: "what should I post today?" inside Claude Code.

Scheduled (daily):

# 5:30am fetch + 6:00am generate
# Set up via cron or the Claude Code /schedule skill

Score only (skip fetch):

python3 ~/.claude/skills/ripple/scripts/run_all.py --score

Voice audit

Before pushing to Notion, Claude re-reads all 12 posts and checks:

  • Zero AI-tell phrases (delve, leverage, game-changing, etc.)
  • Matches your voice_examples.md patterns
  • Per-platform format rules (char limits, hook placement, hashtag counts)
  • No brand-unsafe content (politics, alcohol, gambling, explicit, competitor attacks)

Requirements

  • Claude Code (npm install -g @anthropic-ai/claude-code or claude.ai/code)
  • Notion MCP configured in Claude Code
  • Python 3.10+
  • Notion workspace with a Ripple database

File structure

ripple/
├── .claude-plugin/plugin.json
├── .github/workflows/ci.yml
├── skills/ripple/
│   ├── SKILL.md                    # Full workflow — what Claude reads
│   ├── requirements.txt
│   ├── references/setup_guide.md   # Step-by-step first-run flow
│   ├── scripts/
│   │   ├── common.py               # Shared utils, TrendCandidate class
│   │   ├── run_all.py              # Orchestrator: fetch + score
│   │   ├── score_trends.py         # Scoring + clustering engine
│   │   ├── validate_setup.py       # Pre-flight config check
│   │   ├── fetch_hackernews.py
│   │   ├── fetch_reddit.py
│   │   ├── fetch_google_trends.py
│   │   ├── fetch_youtube.py
│   │   ├── fetch_producthunt.py
│   │   ├── fetch_tiktok.py
│   │   └── push_to_notion.py       # Notion schema reference
│   ├── templates/
│   │   ├── post_template.md        # Output format for all 4 platforms
│   │   └── platform_rules.md       # Per-platform constraints
│   ├── memory/                     # Shipped defaults (read-only)
│   │   ├── my_niches.json
│   │   ├── voice_examples.md
│   │   ├── notion_config.example.json
│   │   ├── secrets.example.json
│   │   └── used_angles.json
│   └── tests/test_scoring.py
├── README.md
├── setup.py
├── pyproject.toml
└── requirements.txt

Development

# Lint
ruff check skills/ripple/scripts skills/ripple/tests

# Fix
ruff check --fix skills/ripple/scripts

# Test
python3 -m unittest discover -s skills/ripple/tests -v

License

MIT

About

Claude Code skill — fetches trending topics daily and drops ready-to-post copy for IG, LinkedIn, TikTok, and X into Notion

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages