josephbedminster
UserClaude Code plugins for indie hackers doing their own growth: PostHog funnel investigations, ChatGPT & Apple Search Ads, TikTok Ads, App Store metadata & ASO, AI UGC video ads, programmatic SEO.
Categories
Indexed Skills (17)
app-store-metadata
Write, translate, check and publish the text of an iOS App Store listing (app name, subtitle, keywords field, description, promotional text, release notes / whatsNew, marketing, support and privacy URLs) for every locale, from one JSON file per locale kept in the repo, with a dependency-free script that checks Apple's limits and ASO rules offline, diffs against App Store Connect, pushes only after an explicit OK, and verifies. Use it whenever the user wants to change the App Store title or subtitle, rewrite the description, add or translate a store language, update promo text or release notes, "push the metadata", "sync the listing", prepare the listing for a new version, or asks why an App Store Connect edit is refused, even if they never say "metadata" or "App Store Connect API". Not for screenshots (app-store-screenshots), keyword research (aso-keywords), builds or submitting for review.
app-store-screenshots
Plan, produce, translate and check iPhone and iPad App Store screenshot sets that App Store Connect accepts - the right pixel sizes (6.5-inch 1284x2778 or 1242x2688, iPad 13-inch 2048x2732), locale coverage and inheritance, translated captions checked visually per language, and no unverifiable claims that App Review can reject. Use it whenever the user talks about App Store screenshots, store slides, captions, "redo the screenshots in Italian", an upload refused for its size, or a new screenshot series, even if they don't say "screenshots". If the project has its own screenshot pipeline, this skill follows it. Not for the app preview video or for the listing text (app-store-metadata).
aso-keywords
App Store keyword research (ASO) with the free, open-source aso-mcp MCP server - where the app ranks for each query and country, who leads and with how many ratings, keyword gaps against competitors, off-intent queries to drop, and concrete swaps for the name, subtitle and 100-character keywords field, then measuring the effect a few weeks after release. Use it whenever the user asks "what keywords should I use", "why doesn't my app show up in search", "analyze my competitors on the App Store", "ASO audit", "which title / subtitle", "are my keywords good", wants to enter a new country, or is about to change the listing text, even if they never say "ASO". Not for writing and pushing the listing itself (app-store-metadata) nor for Apple Search Ads bidding.
apple-search-ads
Run Apple Search Ads (Apple Ads, ASA) campaigns through the Campaign Management API v5 with a bundled read-only CLI - campaign status and serving reasons, impressions / taps / installs / spend, CPT and CPI, per-country and per-day reports, keyword and search-term reports, negatives, plus documented payloads to create manual campaigns (exact / broad keywords, Search Match discovery, Search tab, product pages), pause, relaunch, change budgets and bids after an explicit yes. Use it whenever the user mentions Apple Ads, Search Ads, ASA, App Store ads, an auto campaign that doesn't deliver, Apple keywords, CPT, paid installs, "pause / relaunch / raise / lower the Apple campaign", or asks what their App Store ads cost, even if they don't say "API". Not for ChatGPT or TikTok ads (sibling skills), not for the App Store listing's own ASO keywords, and not for judging the in-app funnel (posthog-growth:posthog-paid-funnel). There is no Apple Ads MCP server; don't look for one.
chatgpt-ads
Run ChatGPT Ads (OpenAI Ads Manager) campaigns through the OpenAI Advertiser API with a bundled stdlib Python CLI - campaign status, spend, impressions, clicks, CPC, attributed conversions, pixel health, pause, activate, daily budget, attach conversion events, and create a per-country campaign with localized ad copy and UTMs. Use it whenever the user mentions ChatGPT ads, OpenAI Ads, Ads Manager, sponsored answers in ChatGPT, the oaiq pixel, CPC or budget on ChatGPT, "pause / relaunch / lower / prepare the campaign", or asks what their ads cost this week, even if they don't say "OpenAI" or "API". Not for Apple Search Ads or TikTok (sibling skills), not for installing the pixel in site code, and not for judging the funnel in analytics (posthog-growth:posthog-paid-funnel). There is no OpenAI Ads MCP server; don't look for one.
paid-ads-setup
Create or refresh the project's paid-ads config, a short private markdown file (.claude/paid-ads-config.md) that holds everything the ads skills need to know about this project - which ad platforms are used, account / org / app / pixel ids, landing URL and locales, UTM conventions, budgets and approval rules, copy rules, the campaign table and its history, cost benchmarks already observed, and where credentials live (never the secrets themselves). Use it the first time someone asks anything about their ChatGPT Ads, Apple Search Ads or TikTok Ads in a project that has no such file, when the user says "set up my ads", "configure paid ads", "connect my ad accounts", or when another ads skill finds a missing fact. The chatgpt-ads, apple-search-ads and tiktok-ads-manager skills read this file instead of guessing.
tiktok-ads-manager
Drive TikTok Ads Manager from a browser tool (the built-in browser pane or Claude in Chrome) for an indie app - register the app in Events Manager, create or edit an iOS app-install campaign, add videos to an existing ad for a hook test, go through a pre-publish checklist, publish only after an explicit yes, read results per video (6-second view rate, CTR, CPM, SKAN installs) and cross them with product analytics. Use it whenever the user talks about TikTok ads, launching / updating / analyzing TikTok campaigns, adding a creative to an ad, TikTok budget or results, "how are the TikTok ads doing", even if they don't say "Ads Manager". No TikTok API or MCP is assumed; everything happens in the browser where the user is already signed in.
posthog-experiment-reader
Read a PostHog A/B test or feature flag split honestly at indie-hacker volumes - "can I call it?", "did the variant win?", "should I ship this paywall / pricing / onboarding change?", "is the new version better than the old one?" - by checking the setup (exposures per variant, sample ratio mismatch, people in both arms), pulling per-variant exposures and conversions, computing absolute and relative lift with its margin of error, flagging peeking, short runs and mix-shift, reading replays per variant, and returning a verdict (ship, wait until N, redesign, investigate) instead of a false positive. Also use it for informal before/after comparisons of two versions when the user asks whether a change "worked". Not for designing a new experiment from scratch.
posthog-funnel-map
Build or refresh the funnel map of a PostHog project, a short markdown file (.claude/posthog-funnel-map.md) that holds the business profile (model, price, traffic, what "converted" means), the real event names of each funnel step, the goals, dashboards and insights that already exist, the UTM conventions, the feature flags, the noise to exclude (bots, app reviewers, internal accounts) and what PostHog cannot see. Use it the first time someone asks for any PostHog funnel, conversion, replay, experiment or paid-traffic analysis in a project that has no funnel map yet, when the user says "set me up", "map my funnel", "set up PostHog analysis", "what are my events", or when an investigation finds an event missing from the map. Every other skill of this plugin reads this file instead of guessing.
posthog-investigation
Investigate what happened to a product's funnel over a period with PostHog, and name the one bottleneck with evidence. Reads the dashboards and goals the founder already built, rules out false alarms (incomplete period, normal variance), walks a list of causes (deploy, flag, traffic mix, tracking bug, new vs returning users, device, outage), finds who dropped and where they went instead, reads event timelines, session replays and heatmaps of representative visitors, compares before and after a deploy, cross-checks on a control segment, and writes a prioritized report with a confidence level. Use it whenever the user asks "why no conversions / no sales / no signups", "what happened in the last 24-72 h", "conversion dropped", "analyze my sessions / replays / dashboard / traffic", "is the new onboarding working", "did the deploy break something", or has just turned on ads, even if they never say "funnel". For one paid campaign judged by its UTMs, use posthog-paid-funnel; for an A/B test, posthog-experiment-reade
posthog-paid-funnel
Judge a paid campaign or channel (Google Ads, Meta, TikTok, Apple Search Ads, ChatGPT Ads, Reddit, newsletters, influencers…) by what its visitors actually do in the product, using PostHog filtered on utm_source / utm_campaign - visitors, CTA clicks, signups, paywall, checkout, paying customers, cost per signup and per customer - and read the replays of paid visitors who dropped. Use it whenever the user asks "is this campaign converting", "how many signups / customers come from the ads", "why do clicks give nothing", "was it worth it", "should I kill this campaign", including when the ad platform already shows conversions - platform numbers are flattering, only the product analytics follow people to the payment. For a broad "what happened this week" across all sources, use posthog-investigation.
posthog-weekly-brief
Produce a short recurring growth brief from PostHog (daily or weekly) for a solo founder - traffic, signups, paying customers, funnel rates, sources, errors, experiments - scored against the product's own recent baseline, reporting only what moved beyond normal variance, with links to the replays that explain it. Keeps a watchlist of flows and baselines in a file so each run is cheaper and compares like with like. Use it when the user asks for "a weekly brief / morning brief / growth report", "what moved this week", "keep an eye on my funnel", or wants a scheduled task or routine that reports on PostHog. If a number looks alarming, it hands off to posthog-investigation instead of speculating.
decision-model-batch
Run massive closed questions (classify, filter, tag, route, score, yes/no, link or not) over hundreds or thousands of items at near-zero cost with a typed decision model instead of a text LLM - Jev by TypeSafe through OpenRouter (`typesafe/jev-1.13`, endpoint POST https://openrouter.ai/api/alpha/decisions, not chat/completions). Covers the exact call format, the three question types (noul, choice, score), how to write questions, stacking dozens of questions per call, calibrating on a sample then deciding in code with explicit thresholds, caching raw probabilities, cost and throughput, and the pitfalls. Use it whenever a task is "the same closed question N times", when the user mentions Jev, TypeSafe or a decision model, or complains about what an LLM costs on a bulk job, even if they just say "classify all these" or "filter this list".
pseo-internal-linking
Internal linking for programmatic SEO sites with thousands of generated pages (lessons, glossaries, city pages, recipes, docs) - candidate retrieval in code (TF-IDF plus labels of other pages already written in the text), a cheap decision model answering two closed questions per candidate, deterministic decisions in code (thresholds, caps, same language, closest level), links placed at render time only on anchors that already exist in the text, a cached audit you can re-tune for free, a report to read before applying, and the sitemap rule that keeps thin pages out. Use it whenever pages are generated or regenerated, a new language or country is added, or the user talks about internal links, orphan pages, "related articles", previous / next links, link juice, "Discovered, currently not indexed", or the sitemap of generated pages, even if they only say "relink the new pages" or "rerun the interlink".
ai-persona
Create, replace or adjust a consistent AI-generated persona (the recurring face of a UGC account, a carousel series or a video ad) and verify it with a test shot through the real pipeline prompt. Covers the dense English face description, the reference portrait sent as an image on every face shot, the "plain but pretty, girl or boy next door, not a model" calibration, adults only, generating two portraits for the user to pick, and the known pitfalls (a phone drawn in the frame, the too-beautiful AI face, the too-tired face, identity drift). Use it whenever the user wants "a girl" or "a guy" for an account, a reference face, a portrait, asks to make someone "prettier", "plainer", "blonde", "less tired", starts a new selfie-style account, wants the same person across several images, or complains that a generated person "looks AI", even if they never say "persona" or "face reference".
image-prompt-porting
Port an external photoreal image prompt (a viral JSON prompt from a tweet, another creator's "photorealistic" template, a prompt pasted by the user) into your own image pipeline, or add a new shot type (camera angle, framing, face shot) to it. Keeps the structure that makes these prompts work (subject, pose, wardrobe, setting, light, camera, realism, micro-details, negatives, priorities, output), replaces the domain content, adds your invariants (no readable text or logos, camera never visible, one light source, calm zone for overlay text), keeps the JSON valid after placeholder filling, keeps prompts in files instead of code, and walks the checklist so the new shot type is actually used by the pipeline. Use it whenever the user shares an image prompt or a link to one and says "take inspiration", "rework ours like this", "use this style", or asks for a new angle, framing or photo style for carousels or ads, even if they never say "prompt" or "shot type".
ugc-video-ad
Produce or iterate a 9:16 UGC-style video ad (TikTok, Reels, Shorts) with AI personas and no video SaaS - persona, still photos, image-to-video clips through an API (for example Kling via the OpenRouter video endpoint), a deterministic HTML timeline rendered frame by frame with Playwright, then H.264 with music and synthesized sound design through ffmpeg. Includes the creative rules learned from real campaigns (nobody talks, no breathing or sighing, plain faces, a new setting and topic per video, product only at the end, three hooks per persona, caption safe zones, AI-content disclosure) and the ffmpeg contact-sheet commands to check frames before rendering. Use it whenever the user talks about a video ad, a TikTok or Reels creative, UGC video, a new variant or hook, a new persona for an ad ("a student", "a mom"), a low 6-second view rate, or says a video "looks AI", even if they don't name the pipeline.
Bio shown is the top-scored skill's repo description as a fallback — real GitHub bios land in a future update.