Skip to content

Add content-metrics skill: tie DevRel content to product activation - #2

Open
buildwithtalia wants to merge 1 commit into
mainfrom
add-content-metrics-skill
Open

Add content-metrics skill: tie DevRel content to product activation#2
buildwithtalia wants to merge 1 commit into
mainfrom
add-content-metrics-skill

Conversation

@buildwithtalia

Copy link
Copy Markdown

Summary

  • New /devrel-skills:content-metrics skill that pulls blog posts from blog.postman.com and videos from youtube.com/postman over a configurable window (default 30 days), joins per-content Postman product attribution via Looker, has Claude draft a factual Content → Product commentary, and posts a Block Kit digest to Slack.
  • New docs/content-funnel.md design doc: 7-stage funnel, resonance metrics with blogs and videos on parallel axes, YouTube data-source situation, product-attribution architecture with the Looker adapter as the implemented reference, impact_score = resonance + activation + adoption model, honesty caveats and volume-trap red flags.
  • Replaces "we shipped 40 things" reporting with a leaderboard that dominates on activation and adoption. When the product-side data source is not configured, scores collapse to resonance and the Slack digest says attribution pending instead of a misleading zero.

What's implemented today

  • Blog pull — WordPress REST API: title, ship date, URL, comment count for every status=publish post in the window.
  • YouTube pull — YouTube Data API v3 against channel UCocudCGVb3MmhWQ1aoIgUQw: views, likes, comments per video.
  • Product attribution — Looker adapter behind PRODUCT_ANALYTICS_SOURCE=looker. Authenticates via API v4 (client_id / client_secret), runs a saved Look, remaps rows to {content_id: {signups, first_run, day7_return, day30_return}}. Column names configurable via LOOKER_*_COL env vars; adapter prints available columns if defaults don't match.
  • Slack digest — Block Kit message: header (Content → Product — YYYY-Www), context (window + ship count), product-outcome headline, Claude's commentary, top-10-by-views table, footer with pending-instrumentation reminder.
  • Score computationresonance_score, activation_score, adoption_score, impact_score written to CSV.

What's stubbed (adapter interfaces reserved, not implemented)

  • PRODUCT_ANALYTICS_SOURCE=ga4|amplitude|warehouse|postman-admin — dispatch is wired, adapters raise NotImplementedError. Implement in _fetch_*_attribution() when a data source becomes accessible.
  • YouTube Analytics API — needs OAuth + channel-manager access on youtube.com/postman. Env vars reserved (YT_OAUTH_CLIENT_ID, YT_OAUTH_CLIENT_SECRET, YT_OAUTH_REFRESH_TOKEN). Adapter TBD.
  • GA4 / Search Console — needed for blog impressions, CTR, read time, completion %, repeat viewers.

Files

  • docs/content-funnel.md (new, 319 lines)
  • skills/content-metrics/SKILL.md (new, 201 lines)
  • skills/content-metrics/references/pull-metrics.py (new, 808 lines)
  • .gitignore — anchor /content-metrics/ to repo root so skill dir isn't accidentally ignored
  • README.md — one-row addition in the Other Skills table

Test plan

  • Add WP_USERNAME / WP_APP_PASSWORD to ~/.claude/settings.json (already required by other skills)
  • Run python3 skills/content-metrics/references/pull-metrics.py --days 30 and confirm blog rows land in content-metrics/YYYY-Www.csv
  • Add YT_API_KEY (with YouTube Data API v3 enabled) and confirm YouTube rows land in the same CSV
  • Configure the Looker adapter (PRODUCT_ANALYTICS_SOURCE=looker + LOOKER_CLIENT_ID + LOOKER_CLIENT_SECRET + LOOKER_LOOK_ID) and confirm attributed_* columns populate
  • Add SLACK_WEBHOOK_URL for the DevRel team channel and confirm the Content → Product digest lands correctly
  • Run /devrel-skills:content-metrics end-to-end and confirm Claude's commentary matches the CSV contents

Generated with Claude Code

Builds a Content -> Product funnel that ranks blog posts and YouTube
videos on the same axes and joins them to Postman signups / Day-7 /
Day-30 return via Looker. Replaces raw "we shipped 40 things" reporting
with an impact_score that dominates on activation and adoption; when the
product-side data source isn't configured, scores collapse to resonance
and the digest says "attribution pending" instead of misreporting zero.

New:
- docs/content-funnel.md: 7-stage funnel model, resonance metrics by
  content type (blogs and videos on parallel axes), YouTube data-source
  situation (Data API today, Analytics API + channel access needed for
  the rest), product-attribution architecture, honesty caveats, cadence.
- skills/content-metrics/SKILL.md: human-triggered skill that parses a
  window (default 30 days or a phrase like "last week"), pulls the
  data, has Claude draft a Content -> Product commentary, and posts a
  Block Kit digest to Slack.
- skills/content-metrics/references/pull-metrics.py: WordPress + YouTube
  Data API pull, Looker adapter for product attribution (with column-
  name overrides), stubs for GA4/Amplitude/warehouse/postman-admin,
  score computation, CSV I/O, Slack digest with product-outcome header.

Config:
- .gitignore: exclude /content-metrics/ runtime CSVs; anchor to root so
  skills/content-metrics/ still tracks.
- README.md: skill listed alongside the others.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant