commit e011bb26cde04eb11be6e23cf8372c60d6b14b93 Author: wehub-resource-sync Date: Mon Jul 13 12:36:55 2026 +0800 chore: import upstream snapshot with attribution diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json new file mode 100644 index 0000000..d620286 --- /dev/null +++ b/.claude-plugin/marketplace.json @@ -0,0 +1,35 @@ +{ + "name": "rampstack", + "owner": { "name": "RampStack" }, + "description": "RampStack Claude Skills: the website lifecycle as installable skills.", + "plugins": [ + { + "name": "rampstack-skills", + "source": "./", + "description": "Full catalog of website-lifecycle skills: research, brand, build, and audit.", + "category": "web-development", + "keywords": ["agent-skills", "seo", "brand", "web-development"] + }, + { + "name": "rampstack-starter", + "source": { "source": "github", "repo": "rampstackco/claude-skills-starter" }, + "description": "Curated starter subset of the RampStack catalog: a general-purpose skill set for the website lifecycle.", + "category": "web-development", + "keywords": ["agent-skills", "starter", "web-development"] + }, + { + "name": "rampstack-seo", + "source": { "source": "github", "repo": "rampstackco/claude-skills-seo" }, + "description": "Focused SEO skills: keyword research, on-page and technical audits, AI-search optimization, traffic diagnosis, site-health triage, competitor and content audits, and programmatic SEO, with content companions.", + "category": "web-development", + "keywords": ["agent-skills", "seo", "aeo", "geo"] + }, + { + "name": "rampstack-pm", + "source": { "source": "github", "repo": "rampstackco/claude-skills-pm" }, + "description": "Focused product management skills across the lifecycle: discovery, roadmaps and OKRs, PRDs, stakeholder communication, launch and beta programs, and measurement.", + "category": "productivity", + "keywords": ["agent-skills", "product-management", "roadmap", "okr"] + } + ] +} diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..bac3748 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,10 @@ +{ + "name": "rampstack-skills", + "description": "Full RampStack catalog of website-lifecycle skills across research, brand, build, and audit.", + "version": "1.2.0", + "author": { "name": "RampStack" }, + "homepage": "https://rampstack.co", + "repository": "https://github.com/rampstackco/claude-skills", + "license": "MIT", + "keywords": ["agent-skills", "claude-skills", "seo", "brand", "web-development", "product-management"] +} diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 0000000..58cfe05 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,95 @@ +name: Bug report +description: Report a bug, broken link, broken trigger, or content error in a skill or reference file. +title: "[Bug]: " +labels: ["bug", "needs-triage"] +body: + - type: markdown + attributes: + value: | + Thanks for reporting a bug. Please fill in as much detail as you can. + + **Not a bug?** Use these instead: + - General questions or proposals: [Discussions](https://github.com/rampstackco/claude-skills/discussions) + - Security issues: see [SECURITY.md](../blob/main/SECURITY.md) + - Improvement to a reference file: use the "Improve a reference file" template + + - type: input + id: skill + attributes: + label: Skill affected + description: Which skill is the bug in? Use the skill folder name. If the bug is in the README, CONTRIBUTING.md, or another root doc, name that file instead. + placeholder: seo-traffic-diagnosis + validations: + required: true + + - type: input + id: file + attributes: + label: Specific file (if applicable) + description: If the bug is in a specific reference file, name it. + placeholder: references/diagnosis-checklist.md + + - type: dropdown + id: bug-type + attributes: + label: Type of bug + options: + - "Broken link (internal cross-reference or external URL)" + - "Trigger doesn't fire when it should" + - "Trigger fires when it shouldn't (false positive)" + - "Factual error in content" + - "Em dash or formatting violation" + - "Em dash in catalog count or stats" + - "Skill output doesn't match documented format" + - "Cross-skill reference points to non-existent skill" + - "YAML frontmatter parse error" + - "Other" + validations: + required: true + + - type: textarea + id: description + attributes: + label: Description + description: What is the bug? Be specific. + placeholder: | + The skill `seo-traffic-diagnosis` references `references/diagnoses-checklist.md` (typo) but the actual file is `references/diagnosis-checklist.md`. + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected behavior + description: What should happen instead? + placeholder: | + The Reference files section in SKILL.md should match the actual filename in the references/ folder. + validations: + required: true + + - type: textarea + id: reproduce + attributes: + label: Steps to reproduce + description: How did you find this? If applicable, include the exact prompt that triggered the wrong behavior. + placeholder: | + 1. Opened `skills/seo-traffic-diagnosis/SKILL.md` + 2. Searched for "diagnoses" (typo) and "diagnosis" + 3. Found mismatch between the SKILL.md text and the actual file in references/ + + - type: textarea + id: context + attributes: + label: Additional context + description: Anything else worth knowing? Screenshots welcome. + + - type: dropdown + id: willingness + attributes: + label: Are you willing to submit a fix? + options: + - "Yes, I will draft a PR" + - "Maybe, depending on complexity" + - "No, just reporting" + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..77af200 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,11 @@ +blank_issues_enabled: false +contact_links: + - name: Question or proposal + url: https://github.com/rampstackco/claude-skills/discussions + about: For general questions, design discussions, or proposals, please open a Discussion instead of an Issue. + - name: Security issue + url: https://github.com/rampstackco/claude-skills/security/advisories/new + about: Report security vulnerabilities privately via GitHub Security Advisories. See SECURITY.md for the full policy. + - name: Documentation + url: https://github.com/rampstackco/claude-skills/blob/main/SKILL_AUTHORING.md + about: Read SKILL_AUTHORING.md and CONTRIBUTING.md before opening a new-skill issue. diff --git a/.github/ISSUE_TEMPLATE/improve-reference.yml b/.github/ISSUE_TEMPLATE/improve-reference.yml new file mode 100644 index 0000000..7104f79 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/improve-reference.yml @@ -0,0 +1,104 @@ +name: Improve a reference file +description: Suggest an improvement to a reference file (template, checklist, decision matrix, worked example). +title: "[Improve]: / " +labels: ["improvement", "needs-triage"] +body: + - type: markdown + attributes: + value: | + Thanks for suggesting an improvement. Reference files are the deep-dive material that go beyond what fits in a SKILL.md. They get better with every well-shaped contribution. + + Before filling this out, please confirm: + - You have read the existing reference file end to end + - You have read [CONTRIBUTING.md](../blob/main/CONTRIBUTING.md) + - The improvement does not belong in the SKILL.md instead + + - type: input + id: skill + attributes: + label: Skill + description: Which skill folder does the reference file belong to? + placeholder: seo-keyword-gap-audit + validations: + required: true + + - type: input + id: reference-file + attributes: + label: Reference file + description: Which file in the references/ folder are you improving? + placeholder: references/opportunity-scoring-rubric.md + validations: + required: true + + - type: dropdown + id: improvement-type + attributes: + label: Type of improvement + options: + - "Add a worked example" + - "Add a missing edge case" + - "Update outdated guidance" + - "Improve a template or checklist" + - "Add a missing reference (table, formula, decision tree)" + - "Fix factual error" + - "Improve clarity or structure" + - "Other" + validations: + required: true + + - type: textarea + id: gap + attributes: + label: What is missing or wrong? + description: Describe the gap specifically. Quote the existing text if you can. + placeholder: | + The opportunity-scoring-rubric.md does not cover [specific scenario]. The current scoring formula assumes [assumption], but this breaks down when [edge case]. + validations: + required: true + + - type: textarea + id: proposal + attributes: + label: Proposed change + description: | + Sketch the addition or change. Doesn't have to be final wording, but should be specific enough to evaluate. + placeholder: | + Add a section "Adjusting weights for goal" with three preset weight configurations: + - Quick wins focus + - Strategic territory focus + - Defensive (protect rankings) + validations: + required: true + + - type: textarea + id: justification + attributes: + label: Why does this earn its place? + description: | + Reference files should go deeper than the SKILL.md, not duplicate it, and should be useful in real work. + placeholder: | + Without this, users running an audit on a low-DR site cannot calibrate the rubric correctly and the priority list mis-ranks. I have hit this in two real audits. + + - type: dropdown + id: willingness + attributes: + label: Are you willing to draft the change? + options: + - "Yes, I will draft a PR" + - "I can collaborate on a PR" + - "I am only suggesting, not authoring" + validations: + required: true + + - type: checkboxes + id: terms + attributes: + label: Confirmation + options: + - label: I have read the existing reference file end to end + required: true + - label: I confirmed this content does not belong in the SKILL.md instead + required: true + - label: I have read [CONTRIBUTING.md](../blob/main/CONTRIBUTING.md) + required: true diff --git a/.github/ISSUE_TEMPLATE/new-skill.yml b/.github/ISSUE_TEMPLATE/new-skill.yml new file mode 100644 index 0000000..84d143e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/new-skill.yml @@ -0,0 +1,113 @@ +name: Propose a new skill +description: Suggest a new skill for the library. Read CONTRIBUTING.md first. +title: "[New skill]: " +labels: ["new-skill", "needs-triage"] +body: + - type: markdown + attributes: + value: | + Thanks for proposing a new skill. Before filling this out, please confirm: + - You have read [CONTRIBUTING.md](../blob/main/CONTRIBUTING.md) and [SKILL_AUTHORING.md](../blob/main/SKILL_AUTHORING.md) + - You have searched the [existing skills](../tree/main/skills) and confirmed this gap is real + - The proposed skill is stack-agnostic (or has a strong reason to be tool-bound) + + - type: input + id: proposed-name + attributes: + label: Proposed skill name + description: Use lowercase-hyphenated format. Example: `seo-rank-tracking` + placeholder: my-new-skill + validations: + required: true + + - type: textarea + id: description + attributes: + label: Draft description (frontmatter) + description: | + 2-4 sentences. Should include: + - One sentence: what the skill does + - One sentence: situations where it should fire + - Trigger words and phrases + - An "Also triggers when..." edge case line + placeholder: | + Audits X for Y using Z. Use this skill when [specific situation], scoping a [related task], or [another situation]. Triggers on [phrase 1], [phrase 2], [phrase 3]. Also triggers when [edge case]. + validations: + required: true + + - type: textarea + id: gap + attributes: + label: Why existing skills don't cover this + description: Name the closest existing skills and explain why they fall short for this use case. + placeholder: | + - `existing-skill-a` covers part of this but stops at... + - `existing-skill-b` is adjacent but focuses on... + - There is no skill that handles [specific need]. + validations: + required: true + + - type: textarea + id: triggers + attributes: + label: Example user prompts that should trigger this skill + description: List 3-5 realistic prompts a user would type that should fire this skill. + placeholder: | + - "Help me audit X for Y" + - "Why is Z happening to my A" + - "Compare B options across C" + validations: + required: true + + - type: textarea + id: framework + attributes: + label: The framework + description: | + What is the durable insight the skill teaches? 1-3 sentences. If you cannot articulate this, the skill is not yet ready. + placeholder: | + There are N categories of X, and they each need different treatment. Phase 1 is..., phase 2 is..., phase 3 is... + validations: + required: true + + - type: textarea + id: references + attributes: + label: Reference files + description: What templates, checklists, or worked examples will live in `references/`? + placeholder: | + - `template.md` - Blank template for the deliverable + - `checklist.md` - Pre-flight checklist + - `example.md` - Worked example for [scenario] + + - type: textarea + id: pairs-with + attributes: + label: Pairs with which existing skills? + description: Which sibling skills will this cross-reference in "When NOT to use" or workflow sections? + placeholder: | + - `skill-a` - for adjacent task X + - `skill-b` - for downstream task Y + + - type: dropdown + id: willingness + attributes: + label: Are you willing to author the skill? + options: + - "Yes, I will draft a PR" + - "I can collaborate on a PR" + - "I am only proposing, not authoring" + validations: + required: true + + - type: checkboxes + id: terms + attributes: + label: Confirmation + options: + - label: I have read [CONTRIBUTING.md](../blob/main/CONTRIBUTING.md) and [SKILL_AUTHORING.md](../blob/main/SKILL_AUTHORING.md) + required: true + - label: I confirmed this skill is not duplicating an existing one + required: true + - label: I understand the proposal may be declined if the gap is not real or the framework is not durable + required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..bc5f0fb --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,73 @@ + + +## What this PR does + + + +## Type of change + + + +- [ ] New skill (adds a folder under `skills/`) +- [ ] Update to an existing skill (`SKILL.md` body or frontmatter) +- [ ] Update to a reference file +- [ ] Bug fix (broken link, typo, formatting violation, etc.) +- [ ] Documentation (README, CONTRIBUTING, SKILL_AUTHORING, MAPPING, CHANGELOG) +- [ ] Tooling or CI + +## Linked issue + + + +Closes # + +--- + +## Contributor checklist + + + +### For all changes + +- [ ] I have read [CONTRIBUTING.md](../blob/main/CONTRIBUTING.md) +- [ ] No em dashes anywhere in the changed files (search for U+2014) +- [ ] No private brand, personal handle, or proprietary domain references +- [ ] Internal links resolve to real files +- [ ] Cross-references to sibling skills name skills that actually exist +- [ ] PR title follows the format: `Add: ` / `Fix: ` / `Improve: reference` / `Update: ` + +### If adding a new skill + +- [ ] Skill folder name is `lowercase-hyphenated` +- [ ] `SKILL.md` exists with valid YAML frontmatter +- [ ] `name` in frontmatter matches the folder name exactly +- [ ] `description` is 2-4 sentences with explicit triggers and an "Also triggers when..." line +- [ ] All 10 sections are present in the documented order (When to use, When NOT to use, Required inputs, The framework, Workflow, Failure patterns, Output format, Reference files) +- [ ] At least one reference file exists in `references/` +- [ ] `Reference files` section in SKILL.md matches the actual files in `references/` +- [ ] No vendor-specific framework references in the SKILL.md body +- [ ] No version-specific references (e.g., "Tailwind 4", "Next.js 15") in the SKILL.md body +- [ ] `SKILL.md` is under 250 lines (hard cap 500) +- [ ] Each reference file is under 400 lines +- [ ] I added the new skill to the catalog table in `README.md` +- [ ] I added an entry to `CHANGELOG.md` under `[Unreleased]` +- [ ] I ran a quick check for trigger collisions with existing skills + +### If modifying an existing skill + +- [ ] Changes preserve the uniform section order +- [ ] If renaming files, all references in SKILL.md are updated +- [ ] If renaming the skill, all cross-references in other SKILL.md files are updated +- [ ] I added an entry to `CHANGELOG.md` under `[Unreleased]` if the change is user-visible + +### If fixing a bug + +- [ ] I described the bug in the linked issue or in this PR +- [ ] I verified the fix actually resolves the problem +- [ ] I checked for the same bug pattern elsewhere in the repo + +--- + +## Notes for the reviewer + + diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..1964619 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,22 @@ +# Dependabot configuration +# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + # Keep GitHub Actions versions current. The repo's lint workflow uses + # actions/checkout and actions/setup-python; when a new major version + # ships, Dependabot opens a PR with release notes attached. + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + day: "monday" + time: "09:00" + timezone: "America/Denver" + open-pull-requests-limit: 5 + commit-message: + prefix: "ci" + include: "scope" + labels: + - "dependencies" + - "github-actions" diff --git a/.github/scripts/lint_skills.py b/.github/scripts/lint_skills.py new file mode 100644 index 0000000..153d30f --- /dev/null +++ b/.github/scripts/lint_skills.py @@ -0,0 +1,471 @@ +#!/usr/bin/env python3 +""" +Lint script for the Brand Build Skills catalog. + +Validates structural conventions documented in SKILL_AUTHORING.md and CONTRIBUTING.md. +Run from the repo root via `python .github/scripts/lint_skills.py`. + +Exit codes: + 0 All checks passed. + 1 One or more checks failed. + +Designed to be: +- Stdlib-only except for PyYAML (frontmatter parsing). +- Loud about failures, quiet about passes. +- Easy to extend: each check is a function appended to CHECKS. +""" + +from __future__ import annotations + +import re +import sys +from dataclasses import dataclass, field +from pathlib import Path +from typing import Callable, Iterable + +try: + import yaml +except ImportError: + print("ERROR: PyYAML is required. Install with: pip install pyyaml", file=sys.stderr) + sys.exit(1) + + +REPO_ROOT = Path(__file__).resolve().parents[2] +SKILLS_DIR = REPO_ROOT / "skills" +README = REPO_ROOT / "README.md" + +# Brand watchlist. Any case-insensitive hit fails the build, except for the +# explicitly-allowed legitimate public references in ALLOWED_BRAND_CONTEXTS. +BRAND_WATCHLIST = [ + "adunn08", + "GameDesk", + "ANDY.md", + "bankranked", + "wirly", + "vehiclemd", + "carcabin", + "codeblu", + "stayrentals", + "insurrates", + "mycarneedsthis", + "tereks", + "checkvin", + "credit-factor", + "straightstocks", + "econgrader", + "degreemath", + "taxgrader", + "retiregrader", + "smallbizgrader", + "bankscored", + "401klens", + "diplomavalue", + "degreegrade", + "studentdebtmath", + "nesteggnerd", + "bizmoneymath", + "retireranked", + "taxscoped", +] + +# `rampstack` requires special handling: legitimate as the public org name +# `rampstackco` and the public domain `rampstack.co`, never as `rampstack` +# in isolation. The check enforces this with a regex below. + +SKILL_MD_LINE_LIMIT = 500 # Hard cap; warns above 400. +SKILL_MD_LINE_TARGET = 400 +REFERENCE_LINE_LIMIT = 500 + + +@dataclass +class LintResult: + errors: list[str] = field(default_factory=list) + warnings: list[str] = field(default_factory=list) + + def fail(self, message: str) -> None: + self.errors.append(message) + + def warn(self, message: str) -> None: + self.warnings.append(message) + + def merge(self, other: "LintResult") -> None: + self.errors.extend(other.errors) + self.warnings.extend(other.warnings) + + @property + def ok(self) -> bool: + return not self.errors + + +def list_skill_dirs() -> list[Path]: + return sorted(p for p in SKILLS_DIR.iterdir() if p.is_dir()) + + +def read_text(path: Path) -> str: + return path.read_text(encoding="utf-8") + + +def parse_frontmatter(skill_md: Path) -> tuple[dict, str]: + """Return (frontmatter_dict, body_text) or raise ValueError on malformed YAML.""" + text = read_text(skill_md) + match = re.match(r"^---\s*\n(.*?)\n---\s*\n(.*)$", text, re.DOTALL) + if not match: + raise ValueError("No YAML frontmatter delimited by --- markers") + frontmatter_text, body = match.group(1), match.group(2) + try: + data = yaml.safe_load(frontmatter_text) + except yaml.YAMLError as exc: + raise ValueError(f"YAML parse error: {exc}") + if not isinstance(data, dict): + raise ValueError("Frontmatter is not a dict") + return data, body + + +# --------------------------------------------------------------------------- +# Checks +# --------------------------------------------------------------------------- + + +def check_em_dashes(result: LintResult) -> None: + """Em dashes are forbidden anywhere in tracked Markdown.""" + for md in REPO_ROOT.rglob("*.md"): + # Skip git internal and node_modules if any. + if any(part in (".git", "node_modules") for part in md.parts): + continue + text = read_text(md) + if "\u2014" in text: + for i, line in enumerate(text.splitlines(), start=1): + if "\u2014" in line: + result.fail( + f"Em dash found in {md.relative_to(REPO_ROOT)}:{i}" + ) + + +def check_brand_leaks(result: LintResult) -> None: + """Forbidden brand mentions from the watchlist.""" + for md in REPO_ROOT.rglob("*.md"): + if any(part in (".git", "node_modules") for part in md.parts): + continue + text = read_text(md) + + text_lower = text.lower() + for needle in BRAND_WATCHLIST: + if needle.lower() in text_lower: + result.fail( + f"Brand watchlist hit '{needle}' in {md.relative_to(REPO_ROOT)}" + ) + + +def check_frontmatter_and_name_match(result: LintResult) -> None: + """Every SKILL.md must have valid frontmatter; name must match folder name.""" + for skill_dir in list_skill_dirs(): + skill_md = skill_dir / "SKILL.md" + if not skill_md.exists(): + result.fail(f"Missing SKILL.md in {skill_dir.relative_to(REPO_ROOT)}") + continue + try: + fm, _ = parse_frontmatter(skill_md) + except ValueError as exc: + result.fail(f"{skill_md.relative_to(REPO_ROOT)}: {exc}") + continue + name = fm.get("name") + description = fm.get("description") + if not name: + result.fail(f"{skill_md.relative_to(REPO_ROOT)}: missing 'name' in frontmatter") + elif name != skill_dir.name: + result.fail( + f"{skill_md.relative_to(REPO_ROOT)}: frontmatter name '{name}' " + f"does not match folder name '{skill_dir.name}'" + ) + if not description: + result.fail(f"{skill_md.relative_to(REPO_ROOT)}: missing 'description' in frontmatter") + elif len(description.strip()) < 80: + result.warn( + f"{skill_md.relative_to(REPO_ROOT)}: description is short " + f"({len(description.strip())} chars); aim for 2-4 sentences" + ) + + +def check_framework_section(result: LintResult) -> None: + """Every SKILL.md must contain a section starting with `## The framework`.""" + pattern = re.compile(r"^## The framework(:|\s|$)", re.MULTILINE) + for skill_dir in list_skill_dirs(): + skill_md = skill_dir / "SKILL.md" + if not skill_md.exists(): + continue + text = read_text(skill_md) + if not pattern.search(text): + result.fail( + f"{skill_md.relative_to(REPO_ROOT)}: missing '## The framework' " + f"section (canonical text is required; descriptive colon-suffix is allowed)" + ) + + +def extract_reference_section(text: str) -> str | None: + """Extract the body text under the actual `## Reference files` heading. + + Skips matches inside fenced code blocks. Uses the last canonical occurrence + in case the heading is also referenced inside a code-block template. + Returns None if the section is not found. + """ + lines = text.splitlines() + in_code_fence = False + section_starts: list[int] = [] + + for i, line in enumerate(lines): + stripped = line.strip() + if stripped.startswith("```"): + in_code_fence = not in_code_fence + continue + if not in_code_fence and stripped == "## Reference files": + section_starts.append(i) + + if not section_starts: + return None + + start = section_starts[-1] + + in_code_fence = False + section_lines: list[str] = [] + for i in range(start + 1, len(lines)): + line = lines[i] + stripped = line.strip() + if stripped.startswith("```"): + in_code_fence = not in_code_fence + section_lines.append(line) + continue + if not in_code_fence and stripped.startswith("## "): + break + section_lines.append(line) + + return "\n".join(section_lines) + + +def check_reference_files_match(result: LintResult) -> None: + """SKILL.md 'Reference files' list must match actual files in references/. + + Only the `## Reference files` section is parsed. References mentioned + elsewhere (e.g., naming-convention examples in the body, or the canonical + skill template inside a code block) are ignored. + """ + ref_pattern = re.compile(r"`references/([^`]+)`") + + for skill_dir in list_skill_dirs(): + skill_md = skill_dir / "SKILL.md" + ref_dir = skill_dir / "references" + if not skill_md.exists(): + continue + + text = read_text(skill_md) + section_text = extract_reference_section(text) + if section_text is None: + result.fail( + f"{skill_md.relative_to(REPO_ROOT)}: missing '## Reference files' section" + ) + continue + cited_refs = set(ref_pattern.findall(section_text)) + + actual_refs = set() + if ref_dir.exists(): + actual_refs = {p.name for p in ref_dir.iterdir() if p.is_file()} + + missing = cited_refs - actual_refs + orphan = actual_refs - cited_refs + + rel = skill_md.relative_to(REPO_ROOT) + for name in sorted(missing): + result.fail(f"{rel}: cites references/{name} but file does not exist") + for name in sorted(orphan): + result.fail( + f"{skill_dir.relative_to(REPO_ROOT)}/references/{name}: " + f"orphan file not cited from SKILL.md" + ) + + +def check_cross_skill_references(result: LintResult) -> None: + """Cross-skill references like `skill-name` must name skills that exist.""" + skill_names = {p.name for p in list_skill_dirs()} + # Catch backtick-quoted skill names that look like skill folder names + # (lowercase-hyphenated, must contain at least one hyphen to avoid noise). + pattern = re.compile(r"`([a-z][a-z0-9]*(?:-[a-z0-9]+)+)`") + + for skill_dir in list_skill_dirs(): + skill_md = skill_dir / "SKILL.md" + if not skill_md.exists(): + continue + text = read_text(skill_md) + for match in pattern.finditer(text): + candidate = match.group(1) + # Heuristic: only check tokens that look like full skill names + # (start with one of our known prefixes or are exactly a skill name). + if candidate in skill_names: + continue + # Looks-like-skill heuristic: has 2+ hyphens or starts with known prefix. + known_prefixes = ( + "seo-", "brand-", "content-", "design-", "code-", "frontend-", + "qa-", "ux-", "pm-", "cro-", "form-", "media-", "email-", + "domain-", "monitoring-", "backup-", "security-", "launch-", + "incident-", "after-", "analytics-", "journey-", "usability-", + "performance-", "accessibility-", "art-", "creative-", + "information-", "landing-", "skill-", "stakeholder-", + "documentation-", "vendor-", "team-", "internationalization", + "dependency-", "cost-", "roadmap-", + ) + if any(candidate.startswith(p) for p in known_prefixes): + result.fail( + f"{skill_md.relative_to(REPO_ROOT)}: references unknown skill " + f"`{candidate}` (not a valid skill folder name)" + ) + + +def check_line_lengths(result: LintResult) -> None: + """SKILL.md soft cap 400, hard cap 500. Reference files cap 500. + + Counts file line counts via len(splitlines()), not characters + per line. The function name is misleading shorthand for file + line counts. Consider renaming in a future cleanup. + """ + for skill_dir in list_skill_dirs(): + skill_md = skill_dir / "SKILL.md" + if skill_md.exists(): + n = len(read_text(skill_md).splitlines()) + rel = skill_md.relative_to(REPO_ROOT) + if n > SKILL_MD_LINE_LIMIT: + result.fail(f"{rel}: {n} lines (hard cap is {SKILL_MD_LINE_LIMIT})") + elif n > SKILL_MD_LINE_TARGET: + result.warn(f"{rel}: {n} lines (target is under {SKILL_MD_LINE_TARGET})") + ref_dir = skill_dir / "references" + if ref_dir.exists(): + for ref in ref_dir.iterdir(): + if not ref.is_file() or ref.suffix != ".md": + continue + n = len(read_text(ref).splitlines()) + rel = ref.relative_to(REPO_ROOT) + if n > REFERENCE_LINE_LIMIT: + result.warn(f"{rel}: {n} lines (target is under {REFERENCE_LINE_LIMIT})") + + +def check_readme_catalog_generated(result: LintResult) -> None: + """README catalog content must match the output of the generator script. + + Runs `scripts/generate_readme_catalog.py --check` and surfaces its diff + on failure. This is the strict version of `check_readme_catalog_count`, + which is kept as a sanity check for badge and header counts. + """ + import subprocess + + generator = REPO_ROOT / "scripts" / "generate_readme_catalog.py" + if not generator.exists(): + result.fail( + f"generator script not found at {generator.relative_to(REPO_ROOT)}" + ) + return + proc = subprocess.run( + [sys.executable, str(generator), "--check"], + cwd=str(REPO_ROOT), + capture_output=True, + text=True, + ) + if proc.returncode == 0: + return + detail = (proc.stdout or proc.stderr or "").strip() + result.fail( + "README catalog out of sync with skill metadata. " + "Run: python scripts/generate_readme_catalog.py --write" + + (f"\n{detail}" if detail else "") + ) + + +def check_readme_catalog_count(result: LintResult) -> None: + """README badge and catalog claims must match the actual SKILL.md count.""" + if not README.exists(): + result.fail("README.md not found") + return + text = read_text(README) + actual = len(list_skill_dirs()) + + # Badge: [![Skills](https://img.shields.io/badge/Skills-59-blue.svg)] + badge_pattern = re.compile(r"badge/Skills-(\d+)-") + for match in badge_pattern.finditer(text): + claimed = int(match.group(1)) + if claimed != actual: + result.fail( + f"README.md skills badge claims {claimed} but actual count is {actual}" + ) + + # Catalog header: e.g. "## The 59-skill catalog" + catalog_pattern = re.compile(r"## The (\d+)-skill catalog") + for match in catalog_pattern.finditer(text): + claimed = int(match.group(1)) + if claimed != actual: + result.fail( + f"README.md catalog header claims {claimed} but actual count is {actual}" + ) + + # Status line: "Status: N of N skills shipped" or similar + status_pattern = re.compile(r"(\d+) of (\d+) skills shipped", re.IGNORECASE) + for match in status_pattern.finditer(text): + claimed_done, claimed_total = int(match.group(1)), int(match.group(2)) + if claimed_total != actual: + result.fail( + f"README.md status claims '{claimed_done} of {claimed_total} skills' " + f"but actual count is {actual}" + ) + + +# --------------------------------------------------------------------------- +# Driver +# --------------------------------------------------------------------------- + + +CHECKS: list[Callable[[LintResult], None]] = [ + check_em_dashes, + check_brand_leaks, + check_frontmatter_and_name_match, + check_framework_section, + check_reference_files_match, + check_cross_skill_references, + check_line_lengths, + check_readme_catalog_count, + check_readme_catalog_generated, +] + + +def main() -> int: + print(f"Linting catalog at {REPO_ROOT}") + if not SKILLS_DIR.exists(): + print(f"ERROR: skills/ directory not found at {SKILLS_DIR}", file=sys.stderr) + return 1 + + skill_count = len(list_skill_dirs()) + print(f"Found {skill_count} skill folders.\n") + + result = LintResult() + for check in CHECKS: + sub = LintResult() + try: + check(sub) + except Exception as exc: + sub.fail(f"Internal error in {check.__name__}: {exc}") + status = "OK" if sub.ok else "FAIL" + warn_count = len(sub.warnings) + warn_suffix = f" ({warn_count} warnings)" if warn_count else "" + print(f" [{status}] {check.__name__}{warn_suffix}") + for err in sub.errors: + print(f" ERROR: {err}") + for warn in sub.warnings: + print(f" WARN: {warn}") + result.merge(sub) + + print() + if result.ok: + print(f"PASSED: {skill_count} skills validated, " + f"{len(result.warnings)} warnings.") + return 0 + print(f"FAILED: {len(result.errors)} errors, " + f"{len(result.warnings)} warnings across {skill_count} skills.") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..f3343da --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,27 @@ +name: Lint skills + +on: + pull_request: + branches: [main] + push: + branches: [main] + workflow_dispatch: + +jobs: + lint: + name: Validate catalog structure + runs-on: ubuntu-latest + steps: + - name: Check out repo + uses: actions/checkout@v7 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: "3.12" + + - name: Install dependencies + run: pip install pyyaml + + - name: Run skill linter + run: python .github/scripts/lint_skills.py diff --git a/.github/workflows/skills-lock.yml b/.github/workflows/skills-lock.yml new file mode 100644 index 0000000..569a1ee --- /dev/null +++ b/.github/workflows/skills-lock.yml @@ -0,0 +1,18 @@ +name: Skills manifest + +on: + pull_request: + paths: + - "skills/**" + - "tools/gen_skills_lock.py" + +jobs: + verify-lock: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-python@v6 + with: + python-version: "3.12" + - name: Verify SKILLS.lock is current + run: python tools/gen_skills_lock.py --check diff --git a/.github/workflows/workflows-manifest.yml b/.github/workflows/workflows-manifest.yml new file mode 100644 index 0000000..fb4d110 --- /dev/null +++ b/.github/workflows/workflows-manifest.yml @@ -0,0 +1,56 @@ +name: Workflows manifest + +on: + pull_request: + paths: + - "workflows/**" + - "SKILLS.lock" + - "tools/gen_workflows_lock.py" + - "tools/check_workflow_drift.py" + - ".github/workflows/workflows-manifest.yml" + +jobs: + verify-lock: + name: WORKFLOWS.lock is current + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-python@v6 + with: + python-version: "3.12" + - name: Verify WORKFLOWS.lock + run: python tools/gen_workflows_lock.py --check + + drift-check: + name: Bound skills exist in SKILLS.lock + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-python@v6 + with: + python-version: "3.12" + - name: Check workflow-to-catalog drift + run: python tools/check_workflow_drift.py + + fence-test: + name: SKILLS.lock untouched by the workflows tier + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + with: + fetch-depth: 0 + - name: Assert the fence + env: + BASE_SHA: ${{ github.event.pull_request.base.sha }} + run: | + touches_workflows=$(git diff --name-only "$BASE_SHA" HEAD -- \ + workflows/ tools/gen_workflows_lock.py tools/check_workflow_drift.py) + skills_lock_changed=$(git diff --name-only "$BASE_SHA" HEAD -- SKILLS.lock) + if [ -n "$touches_workflows" ] && [ -n "$skills_lock_changed" ]; then + echo "FENCE BREACH: this PR changes both the workflows tier and SKILLS.lock." + echo "The workflows tier lives outside the skills source tree and must not" + echo "perturb the skills manifest. Split the skill change into its own PR." + git diff --stat "$BASE_SHA" HEAD -- SKILLS.lock + exit 1 + fi + echo "Fence holds: SKILLS.lock is byte-identical to base for this workflows-tier PR." diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ce92de3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# OS files +.DS_Store +Thumbs.db +desktop.ini + +# Editor files +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Logs +*.log + +# Local environment +.env +.env.local + +# Temporary files +*.tmp +*.bak + +# Internal audit documents +docs/audits/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..33cef6d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,160 @@ +# Changelog + +All notable changes to this library are documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +**Distribution** + +- Claude Code plugin marketplace. `.claude-plugin/marketplace.json` and `.claude-plugin/plugin.json` publish the full catalog as an installable plugin: `/plugin marketplace add rampstackco/claude-skills` then `/plugin install rampstack-skills@rampstack`. + +**README sections** + +- "Install in Claude Code" section documenting the one-command marketplace install path. + +### Changed + +- "The framework's range" cards now link to their live showcase demos (Pulse, Forge, Bloom, Observatory), and the section closes with a CTA to the full creative-direction showcase. +- Hand-authored rampstack.co showcase demo links across the README now open in a new tab (`target="_blank" rel="noopener"`). + +## [1.2.0] - 2026-05-07 + +### Added + +**Skills (38 net additions, 60 → 98)** + +- `logo-design` skill (Brand category). Logo variants across architectures (wordmark, lockup, monogram, letterform-as-symbol, abstract, pictorial, combination, emblem) with rationale and application specs. +- Tier 2 PM experimentation track (6 skills): `experiment-design`, `feature-flagging`, `experimentation-platform-orchestrator`, `experimentation-analytics`, `product-analytics-setup`, `data-warehouse-experimentation`. Statistical discipline for shipping changes with confidence: hypothesis to decision, sample size, sequential testing, CUPED variance reduction, dashboard reconciliation, the failure modes that produce wrong shipping calls. +- Tier 2 PM gap-closing track (4 new + 2 expanded): `feature-launch-playbook`, `jtbd-framing`, `okr-design`, `beta-program-management`, plus expanded coverage in `roadmap-planning` and `pm-spec-writing`. Operational discipline for shipping features that land: positioning, internal alignment, customer comms, sales enablement, support readiness, rollout strategy, monitoring, post-launch measurement. +- Tier 2 content lifecycle (9 skills): `pillar-content-architecture`, `content-brief-authoring`, `programmatic-seo`, `editorial-qa`, `ai-content-collaboration`, `long-form-content-frameworks`, `content-refresh-system`, `content-repurposing`, `content-distribution`. Hub-and-cluster topical authority, per-piece editorial brief authoring, pSEO programs, pre-publish QA, AI-content workflows, long-form structural patterns, refresh cadence, cross-format adaptation, distribution discipline. +- Growth tooling cluster (12 skills): `funnel-flow-architecture` (orchestrator), `lead-magnet-design`, `calculator-design`, `quiz-and-assessment-design`, `multi-step-form-design`, `chatbot-flow-design`, `onboarding-wizard-design`, `interactive-product-tour`, `upgrade-flow-design`, `scheduler-and-booking-design`, `comparison-tool-design`, `product-configurator-design`. Interactive web tools that turn visitors into leads, activate signups, and convert intent to action. +- Marketing paid media (3 skills): `paid-media-strategy`, `ads-creative-development`, `ads-performance-analytics`. Channel selection, creative variations, performance analytics for budgets at scale. +- Research expansion (2 skills): `discovery-research-synthesis`, `user-feedback-aggregation`. Synthesizing customer interviews and feedback into actionable PM decisions; weighted feedback triage across channels. +- `integration-orchestrator` skill (Product category). Sequence creative-direction work across phases, gates, handoffs, and QA verification. + +**Reference files** + +- ~330 new reference files (95 → ~424), bringing every skill above the floor of one reference file each, with most skills carrying 4-6 references covering templates, checklists, decision matrices, and worked examples. +- ARIA patterns reference for `accessibility-audit` skill ([PR #36](https://github.com/rampstackco/claude-skills/pull/36) community contribution). +- "Methodology-level / Implementation choices" closing section added across reference files. + +**Categories (14 → 16)** + +- Growth tooling category (12 skills). Interactive web tools that turn visitors into leads. +- Marketing category (3 skills). Paid media discipline. + +**README sections** + +- "Logo design in action" H2 section showcasing the logo-design skill rendered as two parallel surfaces on rampstack.co (per-brand variant explorer at /showcase/logo-design and architectural taxonomy gallery at /showcase/logos). +- "Surfaces" section naming the rampstack.co commercial layer (skills directory, walkthroughs, integrations directory, showcase) that extends the open-source methodology. +- "How the catalog connects" section with AI-generated hub-and-spoke architecture diagram (Gemini-generated JPG, responsive variants for desktop and mobile via `` element) showing 98 skills at the center and 35 integrations across 6 categories radiating out. +- HTML `` element pattern for responsive image swaps on README and at rampstack.co/integrations. +- Acknowledgments section crediting [@IgnacioChiaravalle](https://github.com/IgnacioChiaravalle) for the PR #36 community feedback (CONTRIBUTING typo fix, cross-linking pass, ARIA patterns reference). + +**Generator scripts** + +- `scripts/generate_readme_catalog.py`. Build-time README generator with `FEATURED_SKILLS`, `SURFACES`, and `COUNT_*` markers driven by skills/ folder contents. Eliminates drift between catalog state and README. +- `scripts/generate_og_card.py`. Pillow-based reproducible OG social card. +- `scripts/crosslink_pass.py`. Idempotent script from PR #36 that maintains cross-references between SKILL.md files and reference files. + +### Changed + +- Catalog renumbered to 98 entries across 16 categories. README catalog tables now drop the # column (was creating mobile readability issues). +- Featured Skills section restructured to 2-column with audience track parenthetical (was 3-column without track). +- Architecture image redesigned as AI-generated illustration (Gemini) matching the rampstack.co aesthetic, replacing the prior Pillow-rendered diagram. JPG variants for desktop and mobile. +- README "Recommended MCPs" section restructured with explicit cost-model framing (free with rate limits, credits-per-call, etc.) per integration. SEO competitive intelligence section expanded to cover Ahrefs, Semrush, DataForSEO, Similarweb with explicit complementarity framing. +- Cross-skill cross-references expanded across the catalog: every skill's "When NOT to use" section names sibling skills, and "Pairs with" references made bidirectional. +- README archetype count updated from "Thirty fictional brands" to "Forty-two fictional brands" reflecting the actual count on rampstack.co/showcase/creative-direction (Wave 1 + Wave 2 expansions). + +### Fixed + +- Stale archetype count reference in README "See it in action" intro. +- Mobile readability of catalog tables (# column was forcing horizontal scroll on narrow viewports). +- Logo showcase mark clipping on /showcase/logos (Tarsus and Caval marks had viewBox declarations too tight for their rendered content; expanded viewBoxes preserve design intent while giving content room to render). Live at rampstack.co/showcase/logos. + +## [1.1.0] - 2026-04-30 + +### Added + +**Community standards** + +- `CONTRIBUTING.md` with full contribution process and authoring discipline. +- `CODE_OF_CONDUCT.md` (Contributor Covenant 2.1). +- `SECURITY.md` with vulnerability reporting process. +- `CHANGELOG.md` (this file). +- Issue templates: new skill request, bug report, improve reference file. +- Pull request template. +- 100% Community Standards score on GitHub repo health check. + +**Reference files** + +- 20 new reference files (75 → 95). + +**README** + +- Recommended MCPs section listing categorical recommendations by skill area. +- Banner image at `docs/banner.jpg`. +- Social profile links (LinkedIn, X/Twitter, Facebook). +- Expanded table of contents. + +### Changed + +- Audit reports moved from repo root to `docs/audits/`. + +### Fixed + +- 21 broken SKILL.md to reference file links. +- 6 orphan reference files (referenced from no SKILL.md). +- Cross-skill reference (`pm-framework` → `pm-spec-writing`). +- 3 SKILL.md framework section headers normalized. +- `SKILL_AUTHORING.md` updated with section-naming clarification. + +## [1.0.0] - 2026-04-28 + +### Added + +The initial public release. 59 stack-agnostic Claude Skills covering the full website lifecycle. + +**Strategy and discovery (4):** `brand-discovery`, `creative-brief`, `information-architecture`, `content-strategy` + +**Brand (4):** `brand-ideation`, `brand-identity`, `brand-style-guide`, `brand-voice` + +**Design (3):** `design-system`, `design-standards`, `art-direction` + +**Content (3):** `content-and-copy`, `landing-page-copy`, `email-sequences` + +**SEO foundation (7):** `seo-onpage`, `seo-technical`, `seo-keyword`, `seo-competitor`, `seo-offpage`, `seo-content-audit`, `seo-aeo-geo` + +**SEO audit suite (Ahrefs MCP-powered) (7):** `seo-audit-orchestration`, `seo-backlink-audit`, `seo-keyword-gap-audit`, `seo-content-gap-audit`, `seo-traffic-diagnosis`, `seo-site-health-audit`, `seo-rank-tracking` + +**Product (2):** `pm-spec-writing`, `roadmap-planning` + +**Development (4):** `code-review-web`, `frontend-component-build`, `accessibility-audit`, `performance-optimization` + +**Quality assurance (1):** `qa-testing` + +**Operations (9):** `launch-runbook`, `incident-response`, `after-action-report`, `domain-strategy`, `monitoring-and-alerting`, `backup-and-disaster-recovery`, `security-baseline`, `email-deliverability`, `media-asset-management` + +**Growth (2):** `analytics-strategy`, `cro-optimization` + +**Research (3):** `ux-research`, `usability-testing`, `journey-mapping` + +**Cross-cutting workflows (5):** `form-strategy`, `content-migration`, `internationalization`, `dependency-management`, `cost-optimization` + +**Process and team (5):** `stakeholder-communication`, `documentation-strategy`, `vendor-evaluation`, `team-onboarding-playbook`, `skill-creation-walkthrough` + +### Repo metadata + +- 59 `SKILL.md` files +- 75 reference files +- Companion docs: `README.md`, `SKILL_AUTHORING.md`, `MAPPING.md`, `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `SECURITY.md`, `CHANGELOG.md` +- MIT License + +[Unreleased]: https://github.com/rampstackco/claude-skills/compare/v1.2.0...HEAD +[1.2.0]: https://github.com/rampstackco/claude-skills/releases/tag/v1.2.0 +[1.1.0]: https://github.com/rampstackco/claude-skills/releases/tag/v1.1.0 +[1.0.0]: https://github.com/rampstackco/claude-skills/releases/tag/v1.0.0 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..aaf4d8c --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,77 @@ +# Code of Conduct + +## Our pledge + +We as members, contributors, and leaders pledge to make participation in this project a respectful and welcoming experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. + +## Our standards + +Examples of behavior that contributes to a positive environment: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall community + +Examples of unacceptable behavior: + +- The use of sexualized language or imagery, and sexual attention or advances of any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email address, without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Enforcement responsibilities + +Project maintainers are responsible for clarifying and enforcing standards of acceptable behavior. They will take appropriate and fair corrective action in response to any behavior they deem inappropriate, threatening, offensive, or harmful. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned with this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. + +## Scope + +This Code of Conduct applies within all project spaces, and also applies when an individual is officially representing the project in public spaces. Examples include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the project maintainers at conduct@rampstack.co. All complaints will be reviewed and investigated promptly and fairly. + +All project maintainers are obligated to respect the privacy and security of the reporter of any incident. + +## Enforcement guidelines + +Project maintainers will follow these guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community impact:** Use of inappropriate language or other behavior deemed unprofessional or unwelcome. + +**Consequence:** A private, written warning from project maintainers, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community impact:** A violation through a single incident or series of actions. + +**Consequence:** A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. + +### 3. Temporary ban + +**Community impact:** A serious violation of community standards, including sustained inappropriate behavior. + +**Consequence:** A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. + +### 4. Permanent ban + +**Community impact:** Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. + +**Consequence:** A permanent ban from any sort of public interaction within the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html). + +Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). + +For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq). Translations are available at [https://www.contributor-covenant.org/translations](https://www.contributor-covenant.org/translations). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..c636953 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,215 @@ +# Contributing to Brand Build Skills for Claude + +Thank you for considering a contribution. This library is opinionated by design: every skill follows the same structure, the same voice, and the same authoring conventions. That uniformity is what makes the skills compose cleanly. Contributions that respect those conventions are welcome. + +If you have not read [SKILL_AUTHORING.md](SKILL_AUTHORING.md), start there. It is the source of truth for the skill structure and the bar for shipping. + +--- + +## What we accept + +- **New skills** that fill a real gap in the lifecycle and follow the uniform structure +- **Reference file improvements** to existing skills (better templates, deeper checklists, worked examples) +- **Bug fixes** in cross-references, broken internal links, typos, or stale information +- **Clarifications** to existing skills that improve trigger reliability or output quality + +## What we will likely decline + +- Stack-specific skills that hard-code one framework (Next.js-only, WordPress-only). The library is stack-agnostic by policy. +- Skills that duplicate an existing skill in scope. Check the catalog first. +- Skills that depend on a specific commercial tool, with the single exception of the SEO audit suite which depends on the Ahrefs MCP. New tool-bound skills need a strong justification. +- Marketing or promotional content disguised as a skill. +- Additions to the README MCP shortlist that a maintainer has not used and vouched for. See **Recommending an MCP server** below. + +--- + +## Recommending an MCP server + +The README keeps a short, curated list of MCP servers grouped by lifecycle phase. It points builders at tools the maintainers have used on real site work and will put the catalog's name behind. It is a recommendation, not a directory, and it stays short on purpose. + +The bar reflects what this catalog is for. RampStack is a framework for original creation: building the brands, sites, and content that did not exist before you built them. The tools we recommend serve that work, and they have to be safe to hand to a real business, from a one-person shop to an enterprise team. Much of the AI tooling built around scraping, data copying, and platform automation attracts bad actors and carries legal and reputational risk, so we keep it out. That keeps the catalog something a serious business can adopt without a second thought. + +What that means in practice: + +- **It has to sit inside the website lifecycle this catalog covers** (research, brand, design, content, SEO, dev, ops, growth). Tools whose core job is scraping, bulk data extraction, or off-platform automation are out of scope, even the well engineered ones. +- **A maintainer has to have used it** on a real build and be willing to vouch for it. We do not list tools we have only read about. +- **Vendors do not add their own tools.** If you build or work on an MCP server, you are welcome to suggest it, but disclose the affiliation and expect it to clear the same bar as everything else. Self-submitted vendor PRs that add a product to the list will be closed with a link to this section. +- **The list recommends capabilities, not links.** Anything that reads as placement for traffic, backlinks, or customer acquisition gets declined. + +If you think a tool belongs on the list, open a thread in [Discussions](https://github.com/rampstackco/claude-skills/discussions) with the tool and a concrete use case you hit on a real project. Direct PRs that edit the MCP list will generally be closed in favor of that thread. + +--- + +## Quick contribution steps + +1. **Open an issue first** for any new skill or major change. This prevents wasted effort. +2. **Fork the repo.** +3. **Create a feature branch.** Name it descriptively: `add-skill-form-strategy`, `fix-broken-link-in-seo-keyword`, etc. +4. **Follow the uniform structure** documented in [SKILL_AUTHORING.md](SKILL_AUTHORING.md). +5. **Run the contributor checklist** below. +6. **Submit a PR** with a clear title, description, and link to the originating issue. + +--- + +## Adding a new skill + +The README catalog section is generated from skill folder metadata. Do not hand-edit it. + +1. Create the skill folder at `skills/your-skill-name/`. +2. Author `SKILL.md` with these YAML frontmatter fields: + - `name` (string, must match folder name) + - `description` (string, 2 to 4 sentences with triggers) + - `category` (one of: `strategy-and-discovery`, `brand`, `design`, `content`, `seo-foundation`, `seo-audit-suite`, `product`, `development`, `qa`, `operations`, `growth`, `research`, `cross-cutting`, `process-and-team`) + - `catalog_summary` (string, one-line description for the catalog table) + - `display_order` (integer, controls position within the category; omit for alphabetical-by-slug) +3. Add at least one reference file under `skills/your-skill-name/references/`. +4. Run `python scripts/generate_readme_catalog.py --write`. The generator updates the badge, subtitle, "What you get" counts, table-of-contents anchor, catalog header, and the catalog table. +5. Verify with `python .github/scripts/lint_skills.py`. +6. Open the PR. + +The catalog content between `` and `` (and the six smaller marker pairs) is owned by the generator. Hand edits inside markers are overwritten on the next run. The generator is the source of truth. + +--- + +## Skill structure (the short version) + +``` +your-skill-name/ + SKILL.md + references/ + template.md + checklist.md + example.md +``` + +Your `SKILL.md` must include these sections, in this exact order: + +1. YAML frontmatter (`name`, `description`) +2. One-paragraph purpose statement +3. `## When to use` +4. `## When NOT to use` +5. `## Required inputs` +6. `## The framework` +7. `## Workflow` +8. `## Failure patterns` +9. `## Output format` +10. `## Reference files` + +The full spec, with examples and rationale, lives in [SKILL_AUTHORING.md](SKILL_AUTHORING.md). The fastest path to writing a compliant skill is to use the [`skill-creation-walkthrough`](skills/skill-creation-walkthrough/SKILL.md) skill itself. + +--- + +## Voice and style + +The library has a specific voice. Match it. + +- **Punchy short sentences.** Avoid run-ons. +- **No em dashes.** Use periods, colons, parentheses, or commas. +- **No first-person.** Neutral instructional voice. +- **Concrete examples beat abstract advice.** Failure patterns should name the mistake specifically, not generically. +- **Stack-agnostic.** Never hard-code framework versions in SKILL.md. Move stack-specific patterns to reference files if absolutely needed. +- **No emojis** unless the skill is explicitly about content where they fit (and even then, sparingly). +- **No private brand or company references.** Skills are public, so they should be generic. + +--- + +## Contributor checklist + +Before opening a PR, verify all of the following: + +- [ ] Skill folder name is `lowercase-hyphenated` +- [ ] `SKILL.md` exists with valid YAML frontmatter +- [ ] `name` in frontmatter matches the folder name exactly +- [ ] `description` is 2-4 sentences with explicit triggers and an "Also triggers when..." line +- [ ] All 10 sections are present in the documented order +- [ ] At least one reference file exists in `references/` +- [ ] Reference files in the SKILL.md "Reference files" section match the actual files +- [ ] No em dashes anywhere (search files for U+2014) +- [ ] No vendor-specific framework references in the SKILL.md body +- [ ] No version-specific references (e.g., "Tailwind 4", "Next.js 15") in the SKILL.md body +- [ ] No private brand, personal handle, or proprietary domain references +- [ ] Cross-references to sibling skills name skills that actually exist +- [ ] `SKILL.md` is under 250 lines (hard cap 500) +- [ ] Each reference file is under 400 lines +- [ ] You have read at least one existing skill in a similar category and matched its style +- [ ] If you added a new skill, the new SKILL.md frontmatter has `category`, `catalog_summary`, and `display_order` fields, and `python scripts/generate_readme_catalog.py --write` was run to update the README catalog +- [ ] If you added a new skill, you ran a quick local search for trigger collisions with existing skills + +--- + +## Pull request guidelines + +- **One concept per PR.** Do not bundle a new skill, three bug fixes, and a refactor. Split them. +- **Clear PR title.** Format: `Add: [skill-name]`, `Fix: [short description]`, `Improve: [skill-name] reference file`. +- **Description includes:** + - Link to the originating issue + - What the contribution adds or changes + - Why it earns its place (especially for new skills) + - Any decisions you made that future maintainers should know about +- **Be patient.** This is a maintained library. Reviews take time. +- **Be open to feedback.** The reviewer's goal is uniformity and quality, not gatekeeping. + +--- + +## Reviewing process + +1. A maintainer reviews the PR for structural compliance, voice match, and substance. +2. Comments may be left for clarification or required changes. +3. Once approved, the PR is merged. +4. CI runs the lint suite on every PR, including the generator-sync check. Stale README catalog blocks the merge. + +--- + +## Security and review requirements + +Every skill, whether authored in-house or contributed, is held to the same +review standard before it merges. + +### All contributions + +- Follow [SKILL_AUTHORING.md](SKILL_AUTHORING.md) for SKILL.md structure and + metadata. +- Commits to `main` are signed and merged through a pull request with linear + history. +- Each skill and its bundled files must pass the safety checklist below. +- PRs are squash-merged. + +### Safety checklist + +Unless the behavior is the skill's explicit, documented purpose, a skill must +not: + +- Make network calls or reference external domains from bundled scripts. +- Read environment variables, credentials, or secret files. +- Spawn shells or subprocesses. +- Contain instructions that redirect Claude away from the user's task. +- Use trigger conditions broader than the skill's actual scope. +- Write to agent memory or persistence files. + +Anything that legitimately needs one of these must declare it in the PR and +gets extra review. An advisory scan (`tools/scan_skills.py`) flags these +patterns to focus review; it is a guide, not a gate. + +### When external contributions are open (curator mode) + +These apply once the catalog accepts outside contributors: + +- Sign off each commit under the Developer Certificate of Origin + (`git commit -s`). +- Complete the PR template, declaring what the skill does and what it accesses. +- The scan is promoted to a required status check. +- Skills carrying executable code get two-person review. + +--- + +## Code of conduct + +Be respectful. Be constructive. Disagree on substance, not personality. Bad-faith contributions, harassment, or self-promotional spam will be closed without comment. + +--- + +## Questions + +Open a [GitHub Discussion](https://github.com/rampstackco/claude-skills/discussions) for general questions or proposals. Use [Issues](https://github.com/rampstackco/claude-skills/issues) for bugs and concrete change requests. + +Thank you for contributing. The library gets better with every well-shaped addition. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9d5acfd --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 RampStack Co. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/MAPPING.md b/MAPPING.md new file mode 100644 index 0000000..3252897 --- /dev/null +++ b/MAPPING.md @@ -0,0 +1,168 @@ +# Mapping: Existing Skills → Public v1 + +This document records the historical porting decisions for the initial public skill set (v1). It exists so contributors can see why a skill looks the way it does. + +> **Note**: This is a historical document covering the initial v1 port. The current catalog has expanded substantially (see `README.md` for the current count and full list). The mapping below covers only the original v1 ports and net-new writes. + +--- + +## Summary + +The starting position: 5 user-scoped skills. The public v1: 11 skills. Five of the public skills are generic ports of existing ones. Six were net-new and written from scratch. Subsequent versions added many more skills covering the full lifecycle. + +| Existing skill | Maps to | Action | +|---|---|---| +| `design-framework` | `design-standards` | Port + genericize | +| `pm-framework` | `pm-spec-writing` | Port + genericize | +| `seo-review` | `seo-foundations` | Port + lighten | +| `dev-code-review` | `code-review-web` | Port + abstract | +| `qa-testing` | `qa-testing` | Port + lighten | + +| New skill | Source | Action | +|---|---|---| +| `brand-discovery` | New | Write from scratch | +| `creative-brief` | New | Write from scratch (prototype done) | +| `information-architecture` | New | Write from scratch | +| `content-and-copy` | New | Write from scratch | +| `launch-runbook` | New | Write from scratch | +| `after-action-report` | New | Write from scratch | + +--- + +## Port decisions, skill by skill + +### `design-framework` → `design-standards` + +**Keep:** +- WCAG AA contrast ratios and the contrast checker JS +- The pre-ship checklist (mostly) +- Section pattern philosophy (hero, card grid, data row, CTA banner) + +**Genericize or remove:** +- Tailwind class libraries → reference patterns conceptually, give one Tailwind example as a reference file, give equivalent vanilla CSS +- `#E47200 not #FF9900` Amazon orange rule → genericize as "verify brand color contrast against actual backgrounds" +- The specific hex tokens (`#1A1D23`, etc.) → replace with role-based tokens that the user fills in +- Affiliate-specific markup (`rel="nofollow sponsored"`) → keep but make optional + +**Add:** +- Stack-agnostic component patterns (React + vanilla HTML side by side in a reference file) +- Type scale guidance independent of Tailwind classes +- Spacing system explanation (8px grid as the default reference) + +**Risk:** stripping the Tailwind classes makes it less immediately useful for your own projects. Mitigation: ship a `references/tailwind-patterns.md` reference file that contains the existing Tailwind library, so you don't lose anything. + +--- + +### `pm-framework` → `pm-spec-writing` + +**Keep:** +- The IDEA → SPEC → BRIEF → SHIP loop +- The dev brief structure (CONTEXT / TASK / CONSTRAINTS / VERIFY) +- Impact vs effort quadrant +- Feature planning templates (new page, content entry, bug report) +- Decision log structure + +**Genericize or remove:** +- Multi-agent orchestration section → split out. This is a power-user pattern that doesn't belong in a generic public skill. Consider a separate `ai-agent-orchestration` skill later. +- Sprint rhythm → keep but loosen the SEO-revenue-affiliate framing +- Launch checklist → move to the new `launch-runbook` skill (this is its proper home) + +**Add:** +- User story format (As a / I want / So that) for teams that prefer it +- Acceptance criteria patterns +- A worked example from idea to ticket + +**Risk:** removing the launch checklist creates churn. Mitigation: it lives in `launch-runbook` now, where it belongs, and `pm-spec-writing` references it. + +--- + +### `seo-review` → `seo-foundations` + +**Keep:** +- Technical SEO checklist (canonical, sitemap, robots.txt, schema) +- On-page patterns +- E-E-A-T signals +- AEO and GEO sections +- Schema markup patterns + +**Genericize or remove:** +- Any references to specific affiliate networks +- Project-specific examples from your own portfolio +- Stack-specific implementation (Next.js metadata API, etc.) → move to a `references/stack-implementations.md` file + +**Add:** +- Pre-launch SEO checklist as a separate quick-reference file +- llms.txt guidance (since this is becoming standard) + +--- + +### `dev-code-review` → `code-review-web` + +**Keep:** +- Bug-finding mindset +- Security review patterns +- Performance review patterns + +**Genericize or remove:** +- Next.js/Supabase-specific failure modes → move to a `references/stack-quirks.md` file with Next.js, WordPress, and vanilla sections +- TypeScript-specific patterns → keep but mark as optional +- ISR-specific guidance → reference file + +**Add:** +- A general code review checklist that works for any web stack +- Accessibility review section (was implicit, make explicit) + +**Risk:** loses some of its punch when stripped of stack opinions. Mitigation: the reference files preserve the depth, and the trigger description still hooks the same review intent. + +--- + +### `qa-testing` → `qa-testing` (same name) + +**Keep:** +- Functional QA flow +- Accessibility checks +- Performance checks +- Cross-browser checks + +**Genericize or remove:** +- Any Vercel/Supabase-specific deploy verification → reference file +- WordPress-specific patterns (you have a section on these) → reference file + +**Add:** +- A QA report template (markdown) so the output is consistent +- Pre-launch vs post-deploy QA distinction (different scopes) + +--- + +## What does NOT get ported + +A few patterns from your existing skills are intentionally not in the public set: + +- **Multi-agent orchestration** - too specific to your workflow. Could be a separate skill later. +- **`/go/[slug]` affiliate redirects** - too specific to your monetization model. Mention briefly in `seo-foundations` as one valid pattern, not as the standard. +- **`llms.txt` on all sites** - keep as a recommendation in `seo-foundations` but not a non-negotiable. +- **Personal style preferences** (em dash prohibition, hashtag-in-comments, specific monetization patterns). These live in your private skills, not the public set. + +--- + +## v1 ship plan + +Suggested order to write the remaining skills: + +1. **Done:** `creative-brief` (prototype, sets the pattern) +2. **Port next** (lowest risk, you already have the content): `design-standards`, `pm-spec-writing`, `qa-testing` +3. **Port after that:** `seo-foundations`, `code-review-web` +4. **Write new:** `brand-discovery` (precedes `creative-brief`, so write next) +5. **Write new:** `information-architecture`, `content-and-copy` +6. **Write new last:** `launch-runbook`, `after-action-report` + +This order means the most-used skills land first, so you can dogfood them on a real project before the rest are written. + +--- + +## Open questions to revisit + +- Do `brand-discovery` and `creative-brief` stay separate or merge? Default: separate. Different triggers, different outputs. +- Should `code-review-web` split into `code-review-frontend` and `code-review-backend`? Default: no for v1. Revisit if the skill gets too long. +- Should there be a `accessibility` skill, or does it stay distributed across `design-standards`, `qa-testing`, and `code-review-web`? Default: distributed. Accessibility is a quality dimension, not a phase. +- License: MIT. Confirm this is what you want before publishing. diff --git a/README.md b/README.md new file mode 100644 index 0000000..56b4602 --- /dev/null +++ b/README.md @@ -0,0 +1,881 @@ +
+ +Complete Claude Skills for the full web lifecycle. Build, ship, audit, optimize. + +# Brand Build Skills for Claude + +**A complete, opinionated library of [Claude Skills](https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview) covering the full lifecycle of building, launching, running, and growing a brand and a website.** + +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md) +[![Skills](https://img.shields.io/badge/Skills-103-blue.svg)](#the-103-skill-catalog) +[![Made for Claude](https://img.shields.io/badge/Made%20for-Claude-orange.svg)](https://claude.ai) + +[![Website](https://img.shields.io/badge/rampstack.co-FF6B35?style=for-the-badge&logo=googlechrome&logoColor=white)](https://rampstack.co) +[![LinkedIn](https://img.shields.io/badge/LinkedIn-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://linkedin.com/company/rampstack/) +[![X](https://img.shields.io/badge/Follow-000000?style=for-the-badge&logo=x&logoColor=white)](https://x.com/RampStackco) +[![Facebook](https://img.shields.io/badge/Facebook-1877F2?style=for-the-badge&logo=facebook&logoColor=white)](https://facebook.com/rampstack) + +
+ + +> 103 stack-agnostic skills covering brand, design, content, SEO, dev, ops, growth, and research. Includes an Ahrefs MCP-powered SEO audit suite. Use them on Next.js, WordPress, Shopify, Webflow, plain HTML, or anything else. + + +*Featured in [awesome-claude-skills](https://github.com/ComposioHQ/awesome-claude-skills) under Business & Marketing.* + +--- + +## Install in Claude Code + +Add the marketplace, then install the plugin you want: + +``` +/plugin marketplace add rampstackco/claude-skills + +# full catalog (103 skills) +/plugin install rampstack-skills@rampstack + +# focused subsets +/plugin install rampstack-starter@rampstack +/plugin install rampstack-seo@rampstack +/plugin install rampstack-pm@rampstack +``` + +Prefer a lighter marketplace that lists only the curated subsets (no full catalog)? Add `rampstackco/plugins` instead and install the same three plugins from there: + +``` +/plugin marketplace add rampstackco/plugins +/plugin install rampstack-starter@rampstack +``` + +Skills load on demand: each contributes roughly its name and description until Claude needs it. + +--- + +## Table of contents + +- [What are Claude Skills?](#what-are-claude-skills) +- [What is in this library](#what-is-in-this-library) +- [Featured skills](#featured-skills) +- [See it in action](#see-it-in-action) +- [Logo design in action](#logo-design-in-action) +- [Reference build in action](#reference-build-in-action) +- [Getting started](#getting-started) +- [Quick example](#quick-example) +- [How they compose](#how-they-compose) +- [How the catalog connects](#how-the-catalog-connects) +- [Surfaces](#surfaces) + +- [The 103-skill catalog](#the-103-skill-catalog) + +- [Recommended MCPs](#recommended-mcps) +- [Authoring conventions](#authoring-conventions) +- [Repository structure](#repository-structure) +- [Trust and security](#trust-and-security) +- [Contributing](#contributing) +- [Acknowledgments](#acknowledgments) +- [Resources](#resources) +- [License](#license) + +--- + +## What are Claude Skills? + +Claude Skills are reusable capability packages that teach Claude how to handle a specific kind of task with a consistent framework, vocabulary, and output format. Each skill is a folder containing a `SKILL.md` (instructions plus YAML metadata) and optional reference files (templates, checklists, worked examples). Claude loads a skill automatically when a user request matches the skill's description. + +Skills work across [Claude.ai](https://claude.ai), [Claude Code](https://docs.claude.com/en/docs/claude-code/overview), and the [Anthropic API](https://docs.claude.com/en/api/agent-skills). Once you write a skill, it is portable across all three. + +For the official deep dive, see [Anthropic's Agent Skills documentation](https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview). + +--- + +## What is in this library + +This is not a curated list of other people's skills. It is a single, opinionated library where every skill follows the same structure and conventions, so the skills compose cleanly across a real project lifecycle. + +What you get: + + +- **103 skills** across 16 categories, every one with a complete `SKILL.md` and at least one reference file +- **490 reference files** (templates, checklists, decision matrices, worked examples) + +- **Stack-agnostic.** Works on any web stack. The only named-tool exception is the SEO audit suite, which assumes the Ahrefs MCP. +- **Future-proof.** Principles over tools. Stable concepts over trending techniques. References to durable specs (W3C, WHATWG, Schema.org, MDN, NN/g, WCAG) over content that ages with each algorithm update. +- **Uniform structure.** Every skill uses the same section order, the same tone, and the same authoring conventions. Predictable in, predictable out. +- **Composable.** Skills reference each other. `creative-brief` points to `brand-voice`. `incident-response` points to `monitoring-and-alerting`. Each skill's "When NOT to use" tells you which sibling fits your adjacent work. + +Highlight categories: brand strategy and identity, design systems, content production with full Tier 1 and Tier 2 coverage, full SEO suite (foundation plus Ahrefs MCP-powered audit suite), product management with experimentation and gap-closing tracks, growth tooling for interactive web tools, paid media discipline, frontend dev and accessibility, performance and QA, launch and incident ops, UX research, plus a meta-skill that teaches you to write your own. + +--- + +## Featured skills + + +Six entry-point skills, one per audience track. Run any of these standalone, or compose them with the rest of the catalog. + +| Skill | What it does | +|---|---| +| [`creative-direction`](skills/creative-direction/SKILL.md) (Brand and creative) | Four-axis brief (tone, aesthetic, audience, sensory ambition) that gives every downstream skill a coherent direction | +| [`experiment-design`](skills/experiment-design/SKILL.md) (PM, experimentation) | From hypothesis to decision: sample size, duration, segment analysis, and the failure modes that produce wrong shipping calls | +| [`feature-launch-playbook`](skills/feature-launch-playbook/SKILL.md) (PM, gap-closing) | The discipline of launching a feature well: positioning, internal alignment, customer comms, enablement, rollout, monitoring | +| [`pillar-content-architecture`](skills/pillar-content-architecture/SKILL.md) (Content) | Hub-and-cluster topical authority: pillar selection, cluster planning, internal linking, refresh discipline | +| [`landing-page-copy`](skills/landing-page-copy/SKILL.md) (Marketing) | Landing pages, sales pages, hero-to-CTA flow with copy that converts | +| [`funnel-flow-architecture`](skills/funnel-flow-architecture/SKILL.md) (Growth tooling) | Cross-tool conversion flows architected to match the audience and the funnel stage | + + +--- + +## See it in action + +The creative-direction skill rendered as a live showcase → + +Forty-two fictional brands generated from briefs that all use the same skill. Each is a fully styled brand site, not a mockup. The showcase demonstrates what the four-axis framework produces in practice and lets you filter by axis position to see how each combination renders. + +

+ + + Creative Direction skill highlight diagram. Navy header card reads 'Impactful Creative Direction' with the subtitle 'Direction for art, taste, and style'. Four quadrants below show: Framework Axes 4 (Tone, Aesthetic, Relationship, Sensory), Framework Positions 16 (each axis combines into 16 distinct positions), Example Treatments 42 (Pulse, Bloom, Forge, Observatory, and 38 others), and Possible Compositions infinity (Motion: Static, Light, Medium, High). Caption reads 'No templates, only guided outputs.' + +

+ +

+ Showcase grid of brand archetypes including Pulse, Volt, Anode, Drift, and others, with type and motion intensity filter pills above the cards. +

+ +### Filter by any axis position + +The skill defines four axes: tone, aesthetic, relationship, sensory. The showcase lets you filter by any combination and see which examples match. Pre-filtered URLs deep-link from the [SKILL.md](skills/creative-direction/SKILL.md) and [axes-explained reference](skills/creative-direction/references/axes-explained.md), so you can read about a position and click straight through to the rendered examples. + +

+ Showcase grid filtered by Tone equals Provocative and Sensory equals Resonant, showing eight matching brand cards with the axis disclosure auto-expanded. +

+ +### The empty state is the lesson + +The framework is generative. The showcase is illustrative. Most rare-but-powerful combinations are valid creative choices that simply have not been built yet. Set Provocative + Editorial Restrained + Coach + Resonant and the grid is empty. + +

+ Showcase grid with all four axis filters set to Provocative, Editorial Restrained, Coach, and Resonant, showing zero matching examples and the empty state copy: No example yet. The framework allows this combination, it just hasn't been built as one of the thirty worked examples. +

+ +### The framework's range + +Same skill, same brief format. Four completely different visual systems. Notice that Pulse and Bloom share identical axis positions yet read as opposite visual languages. The reference brands and aesthetic interpretation do the rest. + + + + + + + + + + + + + + + + + + +
Pulse music streaming brand. Saturated gradient hero with the headline 'Sound that moves with you' and pink-to-cyan equalizer bars below.Forge boutique fitness studio. Dark industrial hero with intense typography and motivational copy.
Pulse · music streaming
Sound that moves with you.
Playful / Expressive Maximalist / Companion / Resonant
See Pulse demo example →
Forge · boutique fitness
Show up. Get hammered.
Provocative / Expressive Maximalist / Coach / Resonant
See Forge demo example →
Bloom adaptogenic soda brand. Peachy gradient hero with tri-color headline 'Soda that loves you back' and a strawberries-around-soda-can product photo.Observatory Editorial. Cream paper hero with restrained serif headline 'An observability tool for the engineers who already know what they are doing'.
Bloom · adaptogenic soda
Soda that loves you back.
Playful / Expressive Maximalist / Companion / Resonant
See Bloom demo example →
Observatory Editorial · observability tool
An open-source tool that respects engineer time.
Conversational / Editorial Restrained / Peer / Considered
See Observatory demo example →
+ +

+ See all the brands in the showcase → +

+ +### Run this on your own brand + +The creative-direction skill lives at [`skills/creative-direction/`](skills/creative-direction/). Install it (see below), give Claude a project name and a few inspiration references, and the skill walks you through producing a brief that downstream skills can consume. The brand sites in the showcase were built from briefs of exactly that shape. + +--- + +## Logo design in action + +The logo-design skill is rendered on rampstack.co as two parallel surfaces. The variant explorer goes deep on one brand at a time: a primary mark, variants across architectures, applied contexts. The taxonomy gallery goes wide across the architecture space: ten fictional marks demonstrating eight mark architectures (wordmark, lockup, monogram, letterform-as-symbol, abstract, pictorial, combination, emblem). Same skill, two different lenses. + +

+ + + Logo Design skill highlight diagram. Navy header card reads 'Bespoke Logo Design' with the subtitle 'Bringing brands to life.' Below the header, a simulated construction guide shows a stylised letterform B rendered against gridlines, with a Golden Ratio overlay, Primary Curve and Secondary Shape callouts, a Kerning marker, and a six-swatch color palette. Three columns at the bottom show: Verticals (Tech, Finance, Healthcare, Retail), Brand Voice (Trustworthy, Innovative, Premium, Approachable), and Architectures (Monogram, Wordmark, Emblem, Abstract). + +

+ +### Per-brand depth + +The variant explorer → + +Each brand has a primary mark plus variants across architectures and applied contexts. The logo-design skill walks through the discipline of choosing one architecture and rendering it consistently across the system the brand will actually use. + +

+ + + Logo design variant explorer showing six fictional brand cards in a three-by-two grid: Whitfield Carter (legal counsel lockup), Wren and Bough (consumer goods lockup), Highline (hospitality wordmark), Sentinel (tech and AI symbol-only), Lacuna (fashion wordmark), and Roost (restaurant lockup). Each card pairs a primary mark with three classification chips for architecture, typographic register, and category, plus a four-variants and five-application-contexts subtext. + +

+ +The brands are filterable by architecture, typographic register, and category. The intent is reference work, not consumable templates. + +### Architectural taxonomy + +The marks gallery → + +Ten fictional marks across eight mark architectures: wordmark, lockup, monogram, letterform-as-symbol, abstract, pictorial, combination, emblem. The taxonomy makes the architectural distinctions concrete by showing all eight side-by-side, with three wordmarks at three typographic registers so the architectural label does less work than the execution. + +

+ + + Marks gallery showing six fictional brand cards in a three-by-two grid: knurl (lowercase serif wordmark with knurled texture), TARSUS (uppercase sans lockup with stacked-bar mark), PLINTH (classical serif inside a double-lined emblem frame), Caval (italic horse silhouette plus italic wordmark combination), Ostend (flowing OS monogram resolving to a single connected glyph), and GLINT (high-contrast Didone wordmark with hairline I crossbar). Each card carries the brand name, descriptor, and three classification chips for mark architecture, vertical, and brand voice. + +

+ +Filter by architecture, vertical, or brand voice; click any mark card to read its design rationale. + +--- + +## Reference build in action + +The full catalog rendered as a 4-phase reference build: blank brief through deployed audited launch site. Threshold is a fictional PLG onboarding analytics product, but the research, brand foundations, build, and audit findings are all real. The reference build is the catalog's single strongest demonstration of how the skills compose end-to-end. + +

+ + + Reference build hero card. Navy header card reads 'Reference Build' with subtitle 'A fictional B2B SaaS launch, end-to-end.' Below, four white phase cards arranged in a 2x2 grid: Phase 01 Strategy and Research with caption 'Real Ahrefs research applied to a fictional brief'; Phase 02 Brand and Design with caption 'Working brand system with live tokens and components'; Phase 03 Build and Ship with caption 'Deployed launch microsite at /demo/threshold'; Phase 04 Audit and Optimize with caption 'Real audit findings with applied fixes.' Footer caption reads 'Threshold is fictional. The methodology is not.' + +

+ +### The four phases + +**[Phase 1: Strategy and research →](https://rampstack.co/walkthroughs/saas-launch-research-and-strategy)** +Real Ahrefs keyword research, competitor analysis, content gap audit, and backlink opportunity mapping applied to a fictional B2B SaaS brief. Live data tables sourced from the Ahrefs API. + +**[Phase 2: Brand and design →](https://rampstack.co/walkthroughs/saas-launch-brand-and-design)** +Logo system, color and typography tokens, working brand component primitives. The brand system renders live on the walkthrough page in real fonts and tokens, not just described. + +**[Phase 3: Build and ship →](https://rampstack.co/walkthroughs/saas-launch-build-and-ship)** +The actual launch microsite built with Next.js using Phase 2's brand foundations. Live at [rampstack.co/demo/threshold](https://rampstack.co/demo/threshold). Persistent demonstration banner; noindex; local-only waitlist form. + +**[Phase 4: Audit and optimize →](https://rampstack.co/walkthroughs/saas-launch-audit-and-optimize)** +Real audit on the deployed site using the catalog's audit suite (axe-core, Lighthouse, manual checks). Real findings with severity, real fixes applied, real before/after metrics. The closing chapter where the catalog audits its own output. + +### The deployed result + +The four phases compose into a working microsite at [rampstack.co/demo/threshold](https://rampstack.co/demo/threshold). Real Next.js code, real brand foundations from Phase 2 referenced via cross-route imports, real working multi-step waitlist form (no data stored), persistent demonstration banner, and the inline data visualizations that came out of the post-audit polish pass. + +

+ + + Full-page screenshot of the deployed Threshold demo at rampstack.co/demo/threshold. Persistent navy demonstration banner at top reads 'Demonstration · Threshold is a fictional product built to illustrate how the catalog composes from blank brief to deployed launch microsite.' Below, the hero section shows a serif headline 'Know how new users actually get to value' next to a stylized product dashboard mockup with KPI tiles, an activation funnel chart, and recent cohorts comparison. Further down the page: a fictional cohort trust strip, a 'The gap' problem section, a wedge section with inline funnel and time-to-first-value charts, a comparison table against Mixpanel/Amplitude/Heap and Pendo/Userpilot, a 'How it works' section with three connected cards, a multi-step waitlist form, and a FAQ section. + +

+ +### Why a fictional product + +Real client work cannot be open-sourced; portfolio claims trigger conflict-of-interest concerns in interviews and consulting conversations. A fictional product with a documented brief plus real research, real brand foundations, real working code, and real audit findings produces a teaching artifact that demonstrates methodology without claiming relationships. Threshold is a measurement tool that does not exist; the methodology that built it is the catalog working end-to-end. + +--- + +## Getting started + +Skills install in three different places depending on where you use Claude. Pick the platform that matches your workflow. + +### Option 1: Claude.ai (web and desktop) + +If your Claude.ai plan supports custom Skills: + +1. Go to **Settings → Capabilities → Skills**. +2. Upload the skill folder you want as a `.zip` (one zip per skill folder containing `SKILL.md` and the `references/` subfolder). +3. Enable the skill in the chat interface. + +Claude will load the skill automatically when your request matches its description. + +For current plan availability and the exact upload UI, see [Anthropic's Skills user guide](https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview). + +### Option 2: Claude Code (recommended) + +Skills are first-class citizens in Claude Code. Drop them into your skills directory and Claude Code picks them up automatically. + +**User-level skills** (available in every project): + +```bash +# macOS / Linux +mkdir -p ~/.claude/skills +cp -r skills/* ~/.claude/skills/ + +# Windows (PowerShell) +New-Item -ItemType Directory -Force -Path "$HOME\.claude\skills" +Copy-Item -Recurse skills\* "$HOME\.claude\skills\" +``` + +**Project-level skills** (available only in a specific project): + +```bash +mkdir -p .claude/skills +cp -r path/to/this-repo/skills/* .claude/skills/ +``` + +Start (or restart) Claude Code. Skills load automatically. + +For exact current paths and config flags, see the [Claude Code documentation](https://docs.claude.com/en/docs/claude-code/overview). + +### Option 3: Anthropic API + +Use Skills programmatically by referencing them in your API calls. Skills must first be uploaded to your workspace (via the Console or API), then referenced by ID when creating messages. + +For the current API surface, request format, and limits, see the [Agent Skills API documentation](https://docs.claude.com/en/api/agent-skills). + +### Want only a few skills? + +You do not have to install all 103. Pick the categories that match your work. The library is modular: each skill stands on its own. + +--- + +## Quick example + +Once installed, skills trigger automatically based on your request. You do not have to name the skill or change how you talk to Claude. + +**You ask:** + +> "Our organic traffic dropped 30% last week. Help me figure out why." + +**What happens:** + +Claude recognizes the request matches `seo-traffic-diagnosis`, loads the skill, and walks through its 5-layer root cause framework: confirm the change is real → localize the change → page-level analysis → technical analysis → external analysis. By the end, you have a hypothesis statement, evidence, and an action plan, structured the same way every time. + +**Other natural triggers:** + +- "Help me write a creative brief" → `creative-brief` +- "Audit my homepage for SEO" → `seo-onpage` +- "We need a backlink audit" → `seo-backlink-audit` +- "Plan our content roadmap for Q3" → `seo-content-gap-audit` plus `content-strategy` +- "Postmortem template for last night's incident" → `after-action-report` +- "How do I write my own skill?" → `skill-creation-walkthrough` + +You can also call a skill explicitly: "Use the `seo-audit-orchestration` skill to run a full audit on example.com." + +--- + +## How they compose + +The skills compose into a full project flow: + +``` +brand-discovery → brand-ideation → brand-identity → brand-style-guide → brand-voice + ↓ +creative-brief → information-architecture → content-strategy → design-system + ↓ +seo-keyword → seo-content-audit → content-and-copy → landing-page-copy + ↓ +seo-onpage → seo-technical → seo-aeo-geo → seo-offpage → seo-competitor + ↓ +frontend-component-build → accessibility-audit → performance-optimization + ↓ +code-review-web → qa-testing → security-baseline → launch-runbook + ↓ +domain-strategy → monitoring-and-alerting → backup-and-disaster-recovery + ↓ +incident-response → after-action-report + ↓ +analytics-strategy → cro-optimization → ux-research → usability-testing → journey-mapping +``` + +The SEO audit suite (Ahrefs MCP-powered) wraps around the SEO foundation skills: + +``` +seo-audit-orchestration + ├── seo-site-health-audit + ├── seo-backlink-audit + ├── seo-keyword-gap-audit + ├── seo-content-gap-audit + ├── seo-traffic-diagnosis (also runs standalone for incident-style work) + └── seo-rank-tracking (ongoing, feeds the others) +``` + +The catalog also includes four audience tracks that compose alongside the foundational lifecycle. Each track has its own internal flow: + +**Paid media (Marketing track):** + +``` +paid-media-strategy → ads-creative-development → ads-performance-analytics +``` + +Pairs with the paid media platforms in the integrations catalog at rampstack.co (Google Ads, Meta, LinkedIn, TikTok, plus Synter as the multi-platform aggregator). + +**Growth tooling (interactive web tools):** + +``` +funnel-flow-architecture (orchestrator) + ├── lead-magnet-design (capture) + ├── calculator-design (capture / activate) + ├── quiz-and-assessment-design (capture / activate) + ├── multi-step-form-design (activate) + ├── chatbot-flow-design (activate) + ├── onboarding-wizard-design (activate) + ├── interactive-product-tour (activate / convert) + ├── upgrade-flow-design (convert) + ├── scheduler-and-booking-design (convert) + ├── comparison-tool-design (convert) + └── product-configurator-design (convert) +``` + +`funnel-flow-architecture` is the orchestrator: it sequences which interactive tool fits each audience and funnel stage, distinguishing matched-funnels from kitchen-sink-funnels. + +**Tier 2 content lifecycle:** + +``` +content-strategy → pillar-content-architecture → content-brief-authoring + ↓ + content-and-copy / long-form-content-frameworks / email-sequences + ↓ + editorial-qa → content-distribution → programmatic-seo + ↓ + content-refresh-system → content-repurposing → content-migration +``` + +`ai-content-collaboration` is a workflow layer that runs across every phase rather than a single step. `documentation-strategy` operates continuously alongside the rest. + +**Tier 2 product management (two parallel tracks):** + +``` +Experimentation track: +experiment-design → feature-flagging → experimentation-platform-orchestrator + ↓ + experimentation-analytics → data-warehouse-experimentation + +Gap-closing track: +pm-spec-writing → roadmap-planning → feature-launch-playbook + ↓ + beta-program-management → product-analytics-setup → integration-orchestrator +``` + +The experimentation track ships changes with statistical discipline; the gap-closing track ships features with operational discipline. Both compose with the foundational lifecycle above. + +Operations, cross-cutting, and team skills (`stakeholder-communication`, `documentation-strategy`, `vendor-evaluation`, `team-onboarding-playbook`, `dependency-management`, `cost-optimization`, etc.) cut across every track. + +You can also pull individual skills for one-off work. Need just a backlink audit? Use `seo-backlink-audit`. Need to write a creative brief? Use `creative-brief`. Each skill stands on its own. + +--- + +## How the catalog connects + +The skills compose with the tools your team already uses. 103 skills at the center; 35 integrations across 6 integration categories radiating out via MCPs. + +

+ + + RampStack architecture diagram. A central navy hub card shows the RampStack mark with the subtitle 'Stack-agnostic methodology'. Six category cards radiate out: Workflow with 6 integrations (Jira, Linear, Notion, Figma, GitHub), Experimentation with 11 integrations (Statsig, PostHog, Optimizely, Amplitude), SEO Intelligence with 3 integrations (Ahrefs, Semrush, Similarweb), Paid Media with 5 integrations (Google Ads, Meta Ads, LinkedIn, TikTok, Synter), Content and SEO with 5 integrations (Webflow, Contentful, Frase, Profound, AirOps), and Data and Analytics with 5 integrations (BigQuery, Snowflake, Mixpanel, dbt, Hex). + +

+ +--- + +## Surfaces + + +This catalog is the open-source methodology layer. Commercial surfaces at [rampstack.co](https://rampstack.co) extend it: + +- **[Skills directory](https://rampstack.co/skills)**. Every skill on a curated landing surface with audience tracks, search, and category navigation. +- **[Walkthroughs](https://rampstack.co/walkthroughs)**. Multi-skill recipes that orchestrate skill clusters end-to-end. Use these when one skill is not enough and a packaged sequence is. +- **[Integrations directory](https://rampstack.co/integrations)**. Curated MCPs, APIs, and tooling that the skills hook into. +- **[Showcase](https://rampstack.co/showcase)**. Real brand sites built from these skills, with the brief that produced each one. + +The skills in this repository remain free, open-source, and stack-agnostic. The surfaces above are how the same methodology is delivered as a product. + + +--- + +## Design principles + +claude-skills follows the [Agent Skills Specification](https://agentskills.io), the open standard for portable AI agent skills originally developed by Anthropic and adopted across the AI tooling ecosystem (Claude Code, OpenAI Codex, Gemini CLI, GitHub Copilot, Cursor, VS Code, Goose, Spring AI, and 30+ other platforms as of early 2026). + +Beyond the format itself, the catalog is designed around three principles aligned with the guidance Anthropic publishes in [Building effective agents](https://www.anthropic.com/engineering/building-effective-agents): + +**Simplicity.** Each skill covers one focused capability rather than trying to be a multi-purpose document. A roadmap-planning skill plans roadmaps. A keyword-research skill researches keywords. Composing them together produces complex workflows; mixing them inside one skill produces unreliable ones. + +**Transparency.** Every skill declares its scope, dependencies, and expected behavior in machine-readable YAML frontmatter. The catalog is inspectable by tooling, not just by humans reading prose. + +**Quality contracts via tooling.** Structural and content quality is enforced through automated checks (run `python .github/scripts/lint_skills.py`) rather than convention alone. Every skill is validated against a schema. Every catalog change is validated in CI. + +Skills in this catalog are designed to compose into the common agentic workflow patterns Anthropic documents: prompt chaining (sequential steps), routing (classify and direct), parallelization (sectioning or voting), orchestrator-workers (dynamic delegation), and evaluator-optimizer (iterative refinement). + +Because the catalog conforms to the open Agent Skills standard, skills work across any platform supporting the specification without modification. + +## Family repos + +claude-skills is the parent catalog. Curated subsets and companion repos focus on specific specialties: + +| Repo | Focus | Skills | +|---|---|---| +| [claude-skills](https://github.com/rampstackco/claude-skills) | Full catalog (you are here) | 103 | +| [claude-skills-starter](https://github.com/rampstackco/claude-skills-starter) | General-purpose lite | 14 | +| [claude-skills-seo](https://github.com/rampstackco/claude-skills-seo) | SEO consulting | 12 | +| [claude-skills-pm](https://github.com/rampstackco/claude-skills-pm) | Product management | 12 | +| [claude-skills-widgets](https://github.com/rampstackco/claude-skills-widgets) | UI patterns + components | 65 + 32 | +| [awesome-claude-skills](https://github.com/rampstackco/awesome-claude-skills) | Curated discovery list | n/a | + +Each family repo is MIT-licensed, conforms to the Agent Skills Specification, and is stack-agnostic. Use the full catalog for breadth; use a specialty subset when working in one domain. + +--- + + +## The 103-skill catalog + + + +All 103 skills are shipped. Each has a complete SKILL.md plus at least one reference file (template, checklist, or playbook). + + + + +### Strategy and discovery (5) + +| Skill | What it does | +|---|---| +| [`brand-discovery`](skills/brand-discovery/SKILL.md) | Audience research, competitive scan, positioning territory exploration | +| [`creative-brief`](skills/creative-brief/SKILL.md) | Project briefs that align stakeholders before work starts | +| [`creative-direction`](skills/creative-direction/SKILL.md) | Four-axis aesthetic brief (tone, aesthetic, audience, sensory ambition) for cross-skill coherence | +| [`information-architecture`](skills/information-architecture/SKILL.md) | Sitemap, navigation, URL structure, content types, taxonomy | +| [`content-strategy`](skills/content-strategy/SKILL.md) | Editorial strategy, content calendar, topical authority planning | + +### Brand (7) + +| Skill | What it does | +|---|---| +| [`brand-ideation`](skills/brand-ideation/SKILL.md) | Naming, positioning territories, mood directions, narrative angles | +| [`brand-identity`](skills/brand-identity/SKILL.md) | Logo system, color, typography, imagery, iconography, motion | +| [`brand-style-guide`](skills/brand-style-guide/SKILL.md) | The canonical reference document for the full brand system | +| [`brand-voice`](skills/brand-voice/SKILL.md) | Voice attributes, tone shifts, vocabulary, paired-example library | +| [`brand-archetype-system`](skills/brand-archetype-system/SKILL.md) | 12 archetype defaults across 18 verticals: color, type, voice, imagery starters | +| [`logo-design`](skills/logo-design/SKILL.md) | Logo variants across architectures (wordmark, lockup, monogram, letterform-as-symbol), with rationale and application specs | +| [`creative-brief-selector`](skills/creative-brief-selector/SKILL.md) | Live-reference-grounded creative briefs with divergence check against prior builds | + +### Design (4) + +| Skill | What it does | +|---|---| +| [`design-system`](skills/design-system/SKILL.md) | Component library, design tokens, design system documentation | +| [`design-standards`](skills/design-standards/SKILL.md) | Production-grade page and component design standards | +| [`art-direction`](skills/art-direction/SKILL.md) | Photography, illustration, and visual direction for campaigns | +| [`vertical-site-conventions`](skills/vertical-site-conventions/SKILL.md) | Vertical page and site composition built to the experience bar | + +### Content (13) + +| Skill | What it does | +|---|---| +| [`pillar-content-architecture`](skills/pillar-content-architecture/SKILL.md) | Hub-level content architecture: pillar topic selection, cluster planning, internal linking, URL structure, pillar and cluster page anatomy, topical authority signals, refresh discipline | +| [`content-brief-authoring`](skills/content-brief-authoring/SKILL.md) | Per-piece editorial brief: target keyword, intent, audience, outline, entity coverage, internal linking, success criteria, and the discipline that distinguishes useful briefs from bloat | +| [`content-and-copy`](skills/content-and-copy/SKILL.md) | Website copy, blog content, content production frameworks | +| [`landing-page-copy`](skills/landing-page-copy/SKILL.md) | Landing pages, sales pages, hero-to-CTA flow | +| [`email-sequences`](skills/email-sequences/SKILL.md) | Onboarding flows, lifecycle campaigns, transactional copy | +| [`programmatic-seo`](skills/programmatic-seo/SKILL.md) | Designing pSEO programs that work: data sources, template design, quality control at scale, internal linking, crawl budget, AEO/GEO patterns, refresh discipline, and when pSEO is and is not the right answer | +| [`editorial-qa`](skills/editorial-qa/SKILL.md) | Pre-publish QA framework: brief adherence, voice consistency, fact accuracy, AI-content audit, AEO/SEO compliance, sampling at scale, and the workflow that distinguishes catch-problems QA from process theater | +| [`ai-content-collaboration`](skills/ai-content-collaboration/SKILL.md) | How humans and AI compose in content workflows: participation boundaries, hybrid patterns, voice ownership, the AI slop problem, disclosure and transparency, team calibration, and the ethics of honest AI-assisted production | +| [`long-form-content-frameworks`](skills/long-form-content-frameworks/SKILL.md) | Structural patterns for individual long-form pieces (case studies, whitepapers, research reports, definitive guides, manifestos, ebooks, long-form tutorials) that distinguish publication-quality work from bloggy-long padding or academic bloat | +| [`content-refresh-system`](skills/content-refresh-system/SKILL.md) | Systematic content refresh: quarterly audits, refresh prioritization, refresh-vs-merge-vs-delete decisions, the lifecycle discipline that distinguishes intentional programs from set-and-forget decay | +| [`content-repurposing`](skills/content-repurposing/SKILL.md) | Cross-format content adaptation: one piece becomes many (blog series, email, social, webinar, podcast, video) with per-format adaptation rather than mass-blast that ignores medium constraints | +| [`content-distribution`](skills/content-distribution/SKILL.md) | Content distribution discipline: owned, earned, and paid channels matched to audience and content type. Channel-fit decisions, distribution cadence, the strategic alternative to spam-everywhere or hope-and-pray | +| [`evidence-based-reviews`](skills/evidence-based-reviews/SKILL.md) | Evidence tiers, methodology disclosure, honest review claims | + +### SEO foundation (7) + +Tool-agnostic SEO skills. These define the conceptual frameworks. The SEO audit suite below adds the Ahrefs MCP-powered execution layer. + +| Skill | What it does | +|---|---| +| [`seo-onpage`](skills/seo-onpage/SKILL.md) | Single-page audits and optimization across 8 dimensions | +| [`seo-technical`](skills/seo-technical/SKILL.md) | Crawlability, indexability, rendering, schema, page experience | +| [`seo-keyword`](skills/seo-keyword/SKILL.md) | Discovery, intent classification, clustering, prioritization | +| [`seo-competitor`](skills/seo-competitor/SKILL.md) | SERP overlap, content gaps, backlink gaps, technical comparison | +| [`seo-offpage`](skills/seo-offpage/SKILL.md) | Link building, digital PR, citations, linkable assets | +| [`seo-content-audit`](skills/seo-content-audit/SKILL.md) | Keep/update/merge/redirect/delete decisions across a site | +| [`seo-aeo-geo`](skills/seo-aeo-geo/SKILL.md) | AI search optimization, llms.txt, extraction-friendly content | + +### SEO audit suite (Ahrefs MCP-powered) (7) + +End-to-end SEO audit workflows that pull data from the Ahrefs MCP and produce concrete deliverables. These skills assume the Ahrefs MCP is connected. + +| Skill | What it does | +|---|---| +| [`seo-audit-orchestration`](skills/seo-audit-orchestration/SKILL.md) | Master orchestrator: sequences the suite, produces a rollup report | +| [`seo-backlink-audit`](skills/seo-backlink-audit/SKILL.md) | Profile health, anchor mix, toxic links, reclamation, gap analysis | +| [`seo-keyword-gap-audit`](skills/seo-keyword-gap-audit/SKILL.md) | Competitor keyword gaps with opportunity scoring and clustering | +| [`seo-content-gap-audit`](skills/seo-content-gap-audit/SKILL.md) | Missing topics, thin coverage, outdated content, decay diagnosis | +| [`seo-traffic-diagnosis`](skills/seo-traffic-diagnosis/SKILL.md) | Diagnose drops, stalls, or wins via 5-layer root cause analysis | +| [`seo-site-health-audit`](skills/seo-site-health-audit/SKILL.md) | Triage Ahrefs Site Audit findings by SEO impact, not severity | +| [`seo-rank-tracking`](skills/seo-rank-tracking/SKILL.md) | Setup, baseline, segmentation, alerting, dashboarding | + +### Product (13) + +| Skill | What it does | +|---|---| +| [`pm-spec-writing`](skills/pm-spec-writing/SKILL.md) | PRDs, user stories, acceptance criteria, dev briefs | +| [`roadmap-planning`](skills/roadmap-planning/SKILL.md) | Quarterly planning, prioritization, dependency mapping | +| [`integration-orchestrator`](skills/integration-orchestrator/SKILL.md) | Sequence creative-direction work across phases, gates, handoffs, and QA verification | +| [`experiment-design`](skills/experiment-design/SKILL.md) | Hypothesis to decision: sample size, duration, segment analysis, interpretation, and the failure modes that produce wrong shipping calls | +| [`feature-flagging`](skills/feature-flagging/SKILL.md) | Flags as production infrastructure: types, naming, lifecycle, targeting, rollout, stale flag cleanup, governance | +| [`experimentation-analytics`](skills/experimentation-analytics/SKILL.md) | Read result panels without fooling yourself: confidence intervals, p-values, multiple testing, sequential testing, CUPED, ratio metrics, network effects, dashboard reconciliation | +| [`experimentation-platform-orchestrator`](skills/experimentation-platform-orchestrator/SKILL.md) | Pick the right experimentation platform, migrate when wrong, coordinate when multi-platform: a decision framework for Statsig, PostHog, GrowthBook, Optimizely, Amplitude, Eppo, Kameleoon | +| [`product-analytics-setup`](skills/product-analytics-setup/SKILL.md) | Instrument product analytics correctly: event taxonomy, properties, naming conventions, schema versioning, funnels, retention cohorts, North Star selection, and the instrumentation debt that compounds without discipline | +| [`data-warehouse-experimentation`](skills/data-warehouse-experimentation/SKILL.md) | Run experiments out of the warehouse: SQL assignment, exposure logs, dbt metric definitions, statistical analysis, variance reduction with CUPED, sequential testing, and the operational tradeoffs vs platforms | +| [`feature-launch-playbook`](skills/feature-launch-playbook/SKILL.md) | The operational discipline of launching a feature well: positioning, internal alignment, customer comms, sales enablement, support readiness, rollout strategy, monitoring, and post-launch measurement | +| [`jtbd-framing`](skills/jtbd-framing/SKILL.md) | Jobs-to-be-Done framework. Job statements, struggling moments, hire/fire criteria, the difference between feature-thinking and job-thinking. Honest about where JTBD earns its keep and where it becomes performative | +| [`okr-design`](skills/okr-design/SKILL.md) | OKR design discipline. Outcome statements, key results, scoring, mid-quarter recalibration. Distinguishes sandbagged OKRs (always hit, useless) from aspirational fantasy (impossible, demoralizing) from stretch OKRs (genuine ambition with quarterly accountability) | +| [`beta-program-management`](skills/beta-program-management/SKILL.md) | Running betas that produce real signal. Participant selection, structured feedback, beta-to-GA decisions. Distinguishes soft-launch (no structure) from kitchen-sink (everyone in) from structured-beta (calibrated cohort with intentional feedback loops) | + +### Development (4) + +| Skill | What it does | +|---|---| +| [`code-review-web`](skills/code-review-web/SKILL.md) | PR review, build error diagnosis, security and quality checks | +| [`frontend-component-build`](skills/frontend-component-build/SKILL.md) | Component architecture, props design, accessibility from the start | +| [`accessibility-audit`](skills/accessibility-audit/SKILL.md) | WCAG compliance audit with remediation plan | +| [`performance-optimization`](skills/performance-optimization/SKILL.md) | Core Web Vitals, asset optimization, render performance | + +### Quality assurance (1) + +| Skill | What it does | +|---|---| +| [`qa-testing`](skills/qa-testing/SKILL.md) | Pre-launch QA, regression testing, cross-browser checks | + +### Operations (9) + +| Skill | What it does | +|---|---| +| [`launch-runbook`](skills/launch-runbook/SKILL.md) | Go-live runbook, DNS cutover, deploy day procedures | +| [`incident-response`](skills/incident-response/SKILL.md) | Incident triage, comms, mitigation, escalation | +| [`after-action-report`](skills/after-action-report/SKILL.md) | Post-mortems, retros, learnings documentation | +| [`domain-strategy`](skills/domain-strategy/SKILL.md) | DNS architecture, redirects, registrars, multi-domain portfolios | +| [`monitoring-and-alerting`](skills/monitoring-and-alerting/SKILL.md) | SLO design, uptime checks, alert routing, on-call rotations | +| [`backup-and-disaster-recovery`](skills/backup-and-disaster-recovery/SKILL.md) | RPO/RTO targets, backup strategy, restoration drills | +| [`security-baseline`](skills/security-baseline/SKILL.md) | HTTPS, security headers, CSP, secrets management, vulnerability scans | +| [`email-deliverability`](skills/email-deliverability/SKILL.md) | DMARC, SPF, DKIM, sender reputation, deliverability monitoring | +| [`media-asset-management`](skills/media-asset-management/SKILL.md) | Image pipelines, video hosting, asset libraries, format selection | + +### Growth (2) + +| Skill | What it does | +|---|---| +| [`analytics-strategy`](skills/analytics-strategy/SKILL.md) | Measurement frameworks, dashboard design, event taxonomy | +| [`cro-optimization`](skills/cro-optimization/SKILL.md) | Hypothesis-driven testing, conversion optimization | + +### Growth tooling (12) + +Interactive web tools that turn visitors into leads. Lead magnets, calculators, quizzes, multi-step forms, chatbots, and the cross-tool funnel architecture that orchestrates them. + +| Skill | What it does | +|---|---| +| [`lead-magnet-design`](skills/lead-magnet-design/SKILL.md) | Designing gated content that earns the email. Distinguishes thin-bait (overpromises, underdelivers) from kitchen-sink-resource (everything, helps with nothing) from earned-value-magnet (delivers standalone value while qualifying the lead) | +| [`calculator-design`](skills/calculator-design/SKILL.md) | Designing interactive calculators that deliver decision-support value while qualifying leads. Distinguishes vanity-calculator (no real value) from lead-trap (hides answer behind email) from transparent-decision-tool (gives genuine value, captures leads honestly) | +| [`quiz-and-assessment-design`](skills/quiz-and-assessment-design/SKILL.md) | Designing quizzes and assessments that produce actionable segmentation. Distinguishes clickbait-quiz (engagement only) from vanity-result (entertaining, not useful) from actionable-segmentation (genuine categorization that drives next-step recommendations) | +| [`multi-step-form-design`](skills/multi-step-form-design/SKILL.md) | Designing multi-step forms that respect cognitive load while maintaining completion intent. Distinguishes kitchen-sink-single-page (overwhelms) from progress-theater (steps without genuine staging) from genuinely-staged (each step earns its own page) | +| [`chatbot-flow-design`](skills/chatbot-flow-design/SKILL.md) | Designing conversational flows for chatbots and AI agents on websites. Distinguishes scripted-bot (rigid trees, fail edge cases) from hallucinating-bot (LLM without structure, makes things up) from structured-guided-conversation (LLM-powered with intent architecture and fallback discipline) | +| [`funnel-flow-architecture`](skills/funnel-flow-architecture/SKILL.md) | Architecting cross-tool conversion flows that match audience and stage. Distinguishes silo-funnels (every tool standalone) from kitchen-sink-funnels (every audience squeezed through one path) from matched-funnels (architecture matched to audience-and-stage) | +| [`onboarding-wizard-design`](skills/onboarding-wizard-design/SKILL.md) | Designing first-run product onboarding wizards. Distinguishes tutorial-overload (dump everything upfront) from skip-friendly-empty (skipped onboarding leads to abandoned product) from earned-progressive-disclosure (right things at the right moments) | +| [`interactive-product-tour`](skills/interactive-product-tour/SKILL.md) | Designing in-product tours and contextual help. Distinguishes tooltip-spam (every button has a tour stop) from one-and-done (tour shows once, never seen again) from contextual-when-needed (surfaces help at the moment friction occurs) | +| [`upgrade-flow-design`](skills/upgrade-flow-design/SKILL.md) | Designing free-to-paid conversion flows. Distinguishes paywall-everywhere (gates everything aggressively) from free-forever-trap (no upgrade path surfaces) from value-triggered-upgrade (paywall surfaces at moments of demonstrated value) | +| [`scheduler-and-booking-design`](skills/scheduler-and-booking-design/SKILL.md) | Designing schedulers and booking flows. Distinguishes any-time-friction (no qualification, just a booking link) from interrogation-gate (so much qualification it scares users off) from qualified-fast-path (just enough qualification to set up the call well) | +| [`comparison-tool-design`](skills/comparison-tool-design/SKILL.md) | Designing comparison tools that help users decide. Distinguishes feature-list-dump (every feature in a row, no decision support) from hidden-recommendation (biased comparison pretending to be neutral) from honest-comparison-with-guidance (genuine comparison plus opinionated recommendation) | +| [`product-configurator-design`](skills/product-configurator-design/SKILL.md) | Designing interactive product configurators. Distinguishes infinite-options (decision paralysis from too many options) from canned-bundles-only (no real customization) from guided-configuration (smart defaults plus meaningful constraints plus escape hatches) | + +### Marketing (3) + +Paid media discipline: strategy, creative, and performance analytics. Pairs with the paid media platforms in the /integrations catalog at rampstack.co. + +| Skill | What it does | +|---|---| +| [`paid-media-strategy`](skills/paid-media-strategy/SKILL.md) | Hypothesis to spend: channel selection, budget allocation, audience targeting, bid strategy, attribution reality, and the failure modes that burn agency-scale budgets | +| [`ads-creative-development`](skills/ads-creative-development/SKILL.md) | Hook patterns, format selection, video pacing, variation systems, testing methodology, fatigue detection, and the platform-specific creative norms that separate ads from clutter | +| [`ads-performance-analytics`](skills/ads-performance-analytics/SKILL.md) | Read paid media dashboards without fooling yourself: attribution models, platform reporting quirks, ROAS vs LTV, multi-platform reconciliation, incrementality testing, and the interpretation failures that compound into wasted budget | + +### Research (6) + +| Skill | What it does | +|---|---| +| [`ux-research`](skills/ux-research/SKILL.md) | Research planning, user interviews, qualitative synthesis | +| [`usability-testing`](skills/usability-testing/SKILL.md) | Test design, moderation, findings reports | +| [`journey-mapping`](skills/journey-mapping/SKILL.md) | Customer journey maps, service blueprints, friction analysis | +| [`discovery-research-synthesis`](skills/discovery-research-synthesis/SKILL.md) | Synthesizing customer interviews, research notes, and support tickets into actionable PM decisions. Distinguishes data-dump (no synthesis) from insight-theater (overpolished narrative) from actionable synthesis (decision-grade clarity) | +| [`user-feedback-aggregation`](skills/user-feedback-aggregation/SKILL.md) | Collecting and synthesizing user feedback across channels into continuous decision signal. Triage discipline that distinguishes loudest-voice (whoever complains most) from averaged-noise (every signal weighted equally) from triaged-synthesis (weighted by source quality and decision relevance) | +| [`competitor-experience-audit`](skills/competitor-experience-audit/SKILL.md) | Cross-site experience patterns and gaps across a vertical | + +### Cross-cutting workflows (5) + +| Skill | What it does | +|---|---| +| [`form-strategy`](skills/form-strategy/SKILL.md) | Form design, validation patterns, spam prevention, conversion tuning | +| [`content-migration`](skills/content-migration/SKILL.md) | Platform migrations with SEO equity preservation | +| [`internationalization`](skills/internationalization/SKILL.md) | Locale strategy, hreflang, translation workflow, RTL design | +| [`dependency-management`](skills/dependency-management/SKILL.md) | Package updates, security patches, lockfile hygiene | +| [`cost-optimization`](skills/cost-optimization/SKILL.md) | Infrastructure spend audits, rightsizing, contract negotiation | + +### Process and team (5) + +| Skill | What it does | +|---|---| +| [`stakeholder-communication`](skills/stakeholder-communication/SKILL.md) | Status updates, exec readouts, project communications | +| [`documentation-strategy`](skills/documentation-strategy/SKILL.md) | Documentation systems, what to document, maintenance cadence | +| [`vendor-evaluation`](skills/vendor-evaluation/SKILL.md) | Tool and vendor selection using a structured rubric | +| [`team-onboarding-playbook`](skills/team-onboarding-playbook/SKILL.md) | 30-60-90 onboarding plans for new hires and contractors | +| [`skill-creation-walkthrough`](skills/skill-creation-walkthrough/SKILL.md) | The meta-skill: how to write your own custom skills | + + +--- + +## Recommended MCPs + +Skills compose best when Claude has live access to your data and tools. [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) servers provide that bridge. The skills in this library work without any MCPs, but pair them with the right ones and they go from "frameworks Claude follows" to "workflows Claude executes against your real systems." + +Below is the MCP shortlist by skill area. None of these are required (except the Ahrefs MCP for the SEO audit suite). All are categorical recommendations: where multiple options exist for the same job, pick the one that fits your stack. + +### SEO, competitive intelligence, and search data + +The SEO audit suite (skills 23-29) is built around Ahrefs as its primary backend; foundation SEO skills (16-22) work with any equivalent. Competitive intelligence MCPs (Ahrefs, Semrush, Similarweb) cover overlapping but distinct data shapes: backlinks and keywords, traffic estimation, audience behavior. Use them in combination for the strongest signal. + +**A note on MCP costs**: many of these MCPs are wrappers around APIs you are already paying for through a subscription, where MCP calls do not add marginal cost. Others (Ahrefs, Semrush, Similarweb, DataForSEO) use paid API credits per call, and long agentic sessions against these platforms can burn meaningful credit volume quickly. The cost model is documented on each integration's landing page at rampstack.co/integrations. Free with rate limits is called out where it applies (Google Search Console, PageSpeed Insights). When in doubt, check the platform's API pricing before running multi-hour agent workflows. + +**Backlink and keyword data** + +- **Ahrefs MCP** - primary backend for the audit suite; backlink profiles, keyword data, content explorer, site audit. Referenced explicitly by `seo-audit-orchestration` and the 6 audit suite skills (backlink, keyword gap, content gap, traffic, site health, rank tracking). Credits-per-call. +- **Semrush MCP** - alternative or complement to Ahrefs with stronger US keyword data and SEO-PR features (Topic Research, brand monitoring) Ahrefs does not cover. Pairs with `seo-keyword`, `seo-competitor`, `seo-content-gap-audit`. Verify the official MCP endpoint at authoring time; Semrush has shipped first-party MCP tooling. Credits-per-call. +- **DataForSEO MCP** - programmatic SEO data (SERP, keywords, backlinks) at developer-friendly pricing; useful as a third source for cross-validation when methodology decisions hinge on data agreement. Credits-per-call (free tier available). + +**Traffic estimation and competitive intelligence** + +- **Similarweb MCP** - competitive traffic estimation, audience demographics, channel mix (organic, paid, direct, referral, social, email), industry benchmarks, audience overlap analysis. Pairs with `seo-competitor`, `seo-traffic-diagnosis` (external-factor layer), `brand-discovery` (competitive scan), `analytics-strategy` (industry benchmarks). Where Ahrefs answers "how do they rank" and Semrush answers "what keywords drive what," Similarweb answers "how much traffic, from where, from whom." Credits-per-call. + +**Search Console and Core Web Vitals** + +- **Google Search Console MCP** - free, official Google data; essential for `seo-traffic-diagnosis` and any audit that needs ground-truth click and impression data. Free with rate limits. +- **PageSpeed Insights MCP** - free, paired with `performance-optimization` and `seo-site-health-audit` for Core Web Vitals field data. Free with rate limits. + +### Development and code + +- **GitHub MCP** - paired with `code-review-web`, `pm-spec-writing`, `roadmap-planning`, `incident-response`. Lets Claude read PRs, file issues, search code, and reference real commits. +- **Filesystem MCP** - local file and code operations; pairs with most dev and content skills +- **Sentry MCP** - paired with `monitoring-and-alerting` and `incident-response`. Real error data turns generic incident frameworks into specific diagnoses. + +### Hosting and infrastructure + +- **Cloudflare MCP** - paired with `domain-strategy`, `security-baseline`, `performance-optimization`. DNS records, redirects, page rules, security headers. +- **Vercel MCP** - paired with `launch-runbook` and `incident-response`. Deployments, env vars, build logs. +- **Supabase MCP** - paired with `code-review-web`, `pm-spec-writing`, `backup-and-disaster-recovery`. Schema, queries, edge functions. + +### Analytics and monitoring + +- **PostHog MCP** - paired with `analytics-strategy`, `cro-optimization`, `journey-mapping`. Event taxonomy review and funnel analysis grounded in real data. +- **Datadog MCP** - paired with `monitoring-and-alerting`, `incident-response`. SLO design and alert routing against actual metrics. + +### Communication and project management + +- **Slack MCP** - paired with `incident-response`, `stakeholder-communication`, `after-action-report`. Read channel context, draft updates, post incident comms. +- **Linear MCP** (or Jira MCP) - paired with `pm-spec-writing`, `roadmap-planning`. Spec writing against the actual issue tracker, not a generic template. + +### Research and search + +- **Web search** (built into Claude in most environments) - paired with `brand-discovery`, `seo-keyword`, `seo-competitor`, `ux-research` +- **Tavily MCP** or **Brave Search MCP** - alternatives for deeper research workflows + +### Where to find them + +- [modelcontextprotocol.io/servers](https://modelcontextprotocol.io/servers) - the canonical directory of MCP servers +- The Connectors directory inside Claude.ai (Settings → Connectors) +- `claude mcp add` in Claude Code for direct installation +- Vendor websites for first-party servers (most major SaaS tools now ship official MCPs) + +### Building your own MCP + +If a skill in this library would benefit from a tool integration that does not yet exist, the [MCP documentation](https://modelcontextprotocol.io/) walks through building one. The `seo-audit-orchestration` skill is a worked example of how to design a skill suite around a specific MCP's capabilities. + +--- + +## Authoring conventions + +Every skill follows the same structure. See [SKILL_AUTHORING.md](SKILL_AUTHORING.md) for the full spec. + +Highlights: + +- **Stack-agnostic.** No specific framework versions in SKILL.md. Stack-specific patterns go in reference files. The Ahrefs-powered audit suite is the single named-tool exception. +- **Future-proof.** Reference durable specs (W3C, WHATWG, Schema.org, MDN, NN/g, WCAG). Avoid trend pieces. +- **Uniform structure.** Every SKILL.md has the same section order: When to use, When NOT to use, Required inputs, The framework, Workflow, Failure patterns, Output format, Reference files. +- **Tight length.** SKILL.md under 250 lines. References under 400. +- **Punchy voice.** Short sentences. Concrete examples beat abstract advice. + +--- + +## Repository structure + +``` +skills/ + skill-name/ + SKILL.md + references/ + template.md + checklist.md + example.md +SKILL_AUTHORING.md (the authoring guide) +CONTRIBUTING.md (how to contribute) +MAPPING.md (origin notes for skills ported from existing work) +README.md (this file) +LICENSE (MIT) +``` + +--- + +## Trust and security + +Skills are instructions and code that run with your agent's permissions, so how +a catalog is maintained matters. Changes reach `main` only through pull requests +with signed commits and linear history. Each skill is hashed into a checksum +manifest (`SKILLS.lock`) you can verify against, and reviewed against a +documented safety checklist before it merges. + +This process catches known classes of unsafe content and lets you confirm a +skill matches the reviewed version. It is not a promise that any skill is +risk-free. See [SECURITY.md](SECURITY.md) for the full process and how to report +an issue. + +--- + +## Contributing + +Contributions are welcome. Whether you want to fix a typo, add a reference file, or propose an entirely new skill, the bar is the same: follow the uniform structure, keep the voice consistent, and prove the skill earns its place. + +See [CONTRIBUTING.md](CONTRIBUTING.md) for the full process. + +The fastest path: use the [`skill-creation-walkthrough`](skills/skill-creation-walkthrough/SKILL.md) skill itself. It teaches the same authoring discipline used across all 103 skills, with worked examples and a blank template. + +--- + +## Acknowledgments + +Thanks to [@IgnacioChiaravalle](https://github.com/IgnacioChiaravalle) for the community feedback that shaped [PR #36](https://github.com/rampstackco/claude-skills/pull/36): a CONTRIBUTING.md typo fix, a cross-linking pass between SKILL.md files and their reference files, and the new [ARIA patterns reference](skills/accessibility-audit/references/aria-patterns.md) for the accessibility-audit skill. + +--- + +## Resources + +### Official Anthropic documentation + +- [Agent Skills overview](https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview) - The canonical reference +- [Anthropic engineering blog on Skills](https://www.anthropic.com/engineering) - Background on the design +- [Claude Code documentation](https://docs.claude.com/en/docs/claude-code/overview) - Where most of these skills will run +- [Anthropic API reference](https://docs.claude.com/en/api/getting-started) - For programmatic use + +### Other skill libraries worth knowing + +- [Anthropic's official skills repository](https://github.com/anthropics/skills) - Examples and primitives published by Anthropic +- [Awesome Claude Skills (Composio)](https://github.com/ComposioHQ/awesome-claude-skills) - A curated index of community skills, where this library is featured under Business & Marketing + +### Companion concepts + +- [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) - The protocol behind the Ahrefs MCP and other tool integrations referenced in this library +- [WCAG quick reference](https://www.w3.org/WAI/WCAG22/quickref/) - Accessibility standard cited by the accessibility audit and design skills +- [Schema.org](https://schema.org/) - Structured data vocabulary cited across the SEO suite + +--- + +## License + +[MIT](LICENSE). Use it. Fork it. Ship things with it. diff --git a/README.wehub.md b/README.wehub.md new file mode 100644 index 0000000..d94fefc --- /dev/null +++ b/README.wehub.md @@ -0,0 +1,7 @@ +# WeHub 来源说明 + +- 原始项目:`rampstackco/claude-skills` +- 原始仓库:https://github.com/rampstackco/claude-skills +- 导入方式:上游默认分支的最新快照 +- 原作者、版权和许可证信息以原始仓库及本仓库 LICENSE 为准 +- 本文件仅用于记录来源,不代表 WeHub 是原项目作者 diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..995d531 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,42 @@ +# Security Policy + +This describes how skills in this catalog are reviewed, signed, and verified, +and how to report a security issue. + +## How skills are protected + +Every skill goes through the same process before it lands on `main`: + +- Provenance. Changes merge through required pull requests with signed commits + and linear history enforced on `main`, so every skill traces back to a + verified identity. +- Integrity. Each skill and its bundled files are hashed, and the checksums are + committed to `SKILLS.lock`. Verify a skill matches the reviewed version by + regenerating the manifest with `python tools/gen_skills_lock.py --check`. +- Review. Before merge, each skill is checked against a documented safety + checklist covering bundled script behavior, network calls, environment and + secret access, instruction content, trigger scope, and writes to agent memory + files. See CONTRIBUTING.md for the checklist. + +## What this does and does not cover + +This process is designed to catch known classes of unsafe skill content and to +give you a way to verify what you installed. It is not a guarantee that a skill +is free of all risk. Skills are instructions and code that run with the +permissions of your agent, so review any skill against your own environment +before use, as you would any third-party code. + +## Reporting a vulnerability + +Report security issues privately through GitHub's private vulnerability +reporting on this repository (Security tab, then Report a vulnerability). If you +cannot use that, email security@rampstack.co. + +Include the affected skill, a description of the issue, and reproduction steps +if you have them. Do not open a public issue or PR for a security report. + +## Disclosure + +We aim to acknowledge a report within 3 business days and to agree a disclosure +timeline with the reporter. Security discussion stays in the private advisory +until a fix ships. diff --git a/SKILLS.lock b/SKILLS.lock new file mode 100644 index 0000000..849cbdd --- /dev/null +++ b/SKILLS.lock @@ -0,0 +1,801 @@ +{ + "accessibility-audit": { + "SKILL.md": "4261e12c948d0832ac8c14431df3b40d2feb4b126356e4215be223ef64688503", + "references/aria-patterns.md": "de9cb4934e62903d7d1676b4d4166a43f47e742bdcfd247ca8364c697b779b63", + "references/audit-report-template.md": "0ed3d29c53a7f25ad2a72f5918181fd7f7e871d3253e3c66816baac425e09b87", + "references/wcag-quick-reference.md": "4d70c669894200c64c9940dbec2ddf959173d7ad8d9dcb594206ea0c18d3cd8e" + }, + "ads-creative-development": { + "SKILL.md": "2663c08171e2abe3abc758947afe679eee7c2a5b8f8095fc5ce0dee1a153543b", + "references/brand-voice-performance-balance.md": "1bbfe4c196fd80ebc4635ccf7a79e3a901eee0ea6648ab4825fc00e34e9ca7eb", + "references/creative-variation-templates.md": "6639d23b01a813d84656ec2f163fad8ce38ed6b68e3be91375c17674234212a7", + "references/fatigue-detection-checklist.md": "8cc07d83c0245c0380cadb08fca5ff59799de43cd23c45552e0d6e1ae2c1aeab", + "references/format-decision-matrix.md": "6a323059143aba50c1561bde659547a31c81a3a7b11a93b44c437dcc891af37a", + "references/hook-pattern-library.md": "900cd2a43ab2440f434bf039886f8fbd0ec1801f18d14a268ff7fb71c3874e3d", + "references/platform-creative-norms.md": "7fa8579b1ac1f029ae124c0204acfe143213c29b9dd4386962bf98fcd7bf3562", + "references/testing-cadence-playbook.md": "7266af1fe12d7f0b374589cb93682c83458634fc0229809c64873b46896a9bb5" + }, + "ads-performance-analytics": { + "SKILL.md": "9f45008134458f37e12812c42ad4bf863a5595e65db5c8cfa771aab8d9db58e7", + "references/attribution-model-comparison.md": "fff3d7c5afc4c55ca9c75888a949b827de0338b2de9bb646a7733570cee96a63", + "references/cohort-analysis-templates.md": "c15602571f8ce6d28b92d6c50918b2c6c07314b16f83c0d910e694fa332d460f", + "references/common-interpretation-failures.md": "754a4c0ed869899d876fca5d38c5b6e0d2563f43fff4675dd567fcc38dbe2149", + "references/dashboard-reconciliation-patterns.md": "8d9acce69c46b159866d823a2b38841eebc538bbadf4fdc4263b3afdbf011e80", + "references/incrementality-testing-playbook.md": "5bc88f03f7173636edcf249f67efd660466de4439961a340485ec7498a92e010", + "references/metric-definitions-glossary.md": "33baa687b9af6fbcf3edcacc411d714e7869df6bf7bb0ae03719c89895fbbdd2", + "references/platform-reporting-quirks.md": "5df612e2f8a93adda50ed7830e5becee254e5f9ec7e87154e179b3d949c9a9e9" + }, + "after-action-report": { + "SKILL.md": "89bcf92ced995da4701b560163775bae0168a6b55e49937c224b223edf09ba6e", + "references/aar-template.md": "b44409782f5a5cd8840b174b69a1a09ae0bb6b183cea9fab0f35fc2075a3495d" + }, + "ai-content-collaboration": { + "SKILL.md": "8c31ddb0f21751a412c2836f66e70a9b9a2093b436ac8184baa802808a52f0bf", + "references/ai-participation-boundaries.md": "c5af7df14589717a8724f60426b993eceb3167b9baa385fee79e5c9149006de0", + "references/ai-slop-detection-and-avoidance.md": "61239daf4cf9e319b31ffba1250daff591f21cd2224a33bb9cbcf3ef4f006395", + "references/common-collaboration-failures.md": "2f94e41c0e8eab7c7c708601bef3a53293cd9b9cfebac704c52bdfa897d1f0fb", + "references/disclosure-and-transparency-patterns.md": "5a1c02e114c5e1a20e18ccf19c78082fc20387d53108f3200bba5b8ce6a7b948", + "references/ethics-and-intellectual-honesty.md": "ebc9864cdd3cef048fe5e72362f47f0d45b4cdab371581c91b320a568ecd9446", + "references/hybrid-workflow-patterns.md": "38c43768caa17c5de10145fcc0723515e45a997545a5b9ee1c854e6c5ae87b9b", + "references/quality-calibration-with-ai-in-loop.md": "6954375301ca09f7865fd0dfcb277ddea6e6bd1e8f5e1b795864f37dff55f0df", + "references/team-training-and-calibration.md": "691e4cec4fb5977f0862bd01a77d1fa5c936051d06d8cf266fb635b050ae8bf1", + "references/voice-ownership-preservation.md": "0cd7699f30bcc0384d26f42dee423d8d0952b1ced2847ff92e463164f24e56f7" + }, + "analytics-strategy": { + "SKILL.md": "111bcd57af348b778dfc2e8801b79f79c83a5bfdea28da670113a3c9437e6cb4", + "references/event-taxonomy-template.md": "74bea752cf246b3c5c73a9597554c9786ae8836b627541708ca2f0d676adb8e4" + }, + "art-direction": { + "SKILL.md": "51b14631eae09deaf93bc3a9caefa93adb9a6f378163b4cc62b4129dfa74d346", + "references/creative-brief-template.md": "dead6a017ca53c2109f324481e9481a785a86670f07922c92144efb7134593a2", + "references/illustration-brief.md": "5f5d4be6388c11bcdcd1aeda2e8c6a13709f25d778be7c2fc3fc32b245687c00", + "references/photo-shoot-brief.md": "531a005e77f7d10d71d9b4320fd4f13a2f6734516b92422c36a7aefe34d28e83" + }, + "backup-and-disaster-recovery": { + "SKILL.md": "ac0e58600d3332a87b64d06f91f13385eb74a599242a2c3634517479dff5dbd9", + "references/restore-runbook-template.md": "96c6cb2b6921ade948d7a0667828148ba36e4845c30e8d7c9feed6f2a7f7c056" + }, + "beta-program-management": { + "SKILL.md": "5142f007fa6d68c3f4cba3d689bae8748834634687b161ba5ba795b0fc3d321d", + "references/beta-onboarding-templates.md": "20a4d965287f9def6536853e00ae6310b18cc19ccfc84bf13592c46ca8bbf92e", + "references/beta-to-ga-graduation-criteria.md": "e687ef9ed64b4e84c5f1caa339cb92088d9907ef80290e994999752a89d29a25", + "references/beta-type-decisions.md": "2bca68ad9bde5a0977abe563111286b3d6852cd6e88b1ff6e47ef9e296860058", + "references/beta-wind-down-communication.md": "0a71f64073aa7bdd3dfe29ac8235df05a3ce9f086ac53749515b8ee1f83e1116", + "references/cohort-sizing-patterns.md": "aa733dd8ba320312d72716fc724ec9e5a174186b376dd3d2e2e5b0d60db42b32", + "references/common-beta-failures.md": "d2edb34aa0ccc85d47e659b1c993d73fb31d736c1931b2955e3053460fe8d1da", + "references/feedback-collection-patterns.md": "45db8bae42f42093c18a0bd38062e759e04672ad8dbbf973a4205a4c5ff68c2d", + "references/mid-beta-triage-and-iteration.md": "b39c0445716ec16a89c7d55c120edad36f671de61eaf8416a6ea7a60e0284078", + "references/participant-selection-criteria.md": "70ebffba5fbeb412c749198de249b35d8549189a684a9769602257feef15c478" + }, + "brand-archetype-system": { + "SKILL.md": "639b0266c564547bf0d6c616fee6951e024a6f174e883cbb31c38810e83cfea0", + "references/00-archetype-system-overview.md": "4b9d470007b2b0a7a4e6b0cb49ced91f46ce4ae0521733a0ceb66f123307a119", + "references/01-how-to-apply-an-archetype.md": "df22f17123818fccd7f249d6aa28087866963cd35daa1536356a54fa625bd8b1", + "references/by-vertical/01-b2b-saas-developer-tools.md": "f617311a386ecd333f9b9f057e623a50cd67ac7ef11f2d1e97f340f4f2df162e", + "references/by-vertical/02-b2b-saas-business-productivity.md": "d40d5aab365f3dc5f0f68436259e79653ca92273ddf193e3190099ce1d4624cd", + "references/by-vertical/03-b2b-saas-marketing-sales.md": "b9662134c889e02c0136b1d8b24f93440859d65d0b12ef5624ee3d599dbd0a85", + "references/by-vertical/04-b2b-saas-data-analytics.md": "3501620c1817e97ee15ec3cc35f77fc440621be27d5c227c459f15417afe5a1a", + "references/by-vertical/05-fintech-consumer.md": "851bee3ce84af8c6c85f45ee4d043e7bff0bab5370ebf0ce54aedc3793b6e4a5", + "references/by-vertical/06-fintech-enterprise.md": "87e525819af123b3d173eaabe4005eb495e1f0ccd79b08a2a14a77b65a3bf4ae", + "references/by-vertical/07-dtc-fashion.md": "6efd298dab611e4269f8462e0d1febd753b0ce70dc3d6be09f9fec7f46d7f3ba", + "references/by-vertical/08-dtc-beauty.md": "18b46980f4a2fba4f95747825806b76f596a22af76b8f0d64d7cc04bf53478f2", + "references/by-vertical/09-dtc-home-lifestyle.md": "d55116081a8531747ba8f76b748e3a5acc825f653024f3e383426380d15719b7", + "references/by-vertical/10-dtc-food-beverage.md": "d30df48afdbe57da926ca0f4ffd76001eb8ab25d9f6db46d18a66594df3c9251", + "references/by-vertical/11-consumer-health-wellness.md": "be53d490f627d85b538e82d8712ca2e2a1e678b5873a76491def4b5f0729448b", + "references/by-vertical/12-hospitality-travel.md": "a336fbc969e1c25b52059e6e0150af167eb31dcf4e3dce14a27657ea7a857ce0", + "references/by-vertical/13-media-publishing.md": "b77ddc25aea3cd1e03e8313886369c5f44947f11b67926bde1b6a5805afeb345", + "references/by-vertical/14-edtech.md": "0ea7800014ebb21f7d54750eb9ce7674ee2115b7f7fbfd4496806b75d0d88170", + "references/by-vertical/15-gaming-entertainment.md": "02a41387caa0d88d12e1aa5c9ea6d7249d6fd20c0cd91834282c98798ea0c423", + "references/by-vertical/16-marketplace.md": "9e04a05cbd002b311badde6db75fbaf971352cb709ab8c1a76536d9b69db9900", + "references/by-vertical/17-crypto-web3.md": "14b87a942df5a92960c65227b570a0702125325a084b74f150c03957b9cbdbf3", + "references/by-vertical/18-real-estate-proptech.md": "6693693d018c9341cb7d746980cd9317762706ea3075262cb232fa01f9379f39", + "references/core-archetypes/01-editorial-restrained.md": "218bd73686228013751da565650bd9c153c3619b4755d38e04fe69113b64ff4a", + "references/core-archetypes/02-technical-precise.md": "0e98fc931d9862bbba8c2bce438cc0d0816105798fb0075e2ace87dc04adc45f", + "references/core-archetypes/03-warm-conversational.md": "b7a9fd6dca13df0345b4312696fd599d6bb420a8f60e62e200fb9b3d1f454f44", + "references/core-archetypes/04-bold-confident.md": "c0f73226687ecd90e1469cbbcb1dabe1cb770ca24ea43fddb358e0fe2c65409c", + "references/core-archetypes/05-playful-energetic.md": "f01cae4d9cac0e1af5e79484a7d1e4f0cd24f9393a6150ce3e1b472a7c58a216", + "references/core-archetypes/06-luxe-considered.md": "77bbefa139cf6decbf7b1bfa5ced755c1a96e1dd717ea4c1aeae7f4c60cd11a0", + "references/core-archetypes/07-clinical-trustworthy.md": "da38b9e3e28b2510cf68fef8c0170b53c7f0c3c686260186b2d482b71918aff2", + "references/core-archetypes/08-rugged-utilitarian.md": "2512aa063ba2d87cbc1655a2fe1dbea546d029cf354f2ceb6ec24712b3e6c0f9", + "references/core-archetypes/09-retro-nostalgic.md": "1c7bb79ded48f5be4c0f17d080c461affb730335490e0dd313f5b9f172e9119c", + "references/core-archetypes/10-minimal-essentialist.md": "b04d099f90be855edb36a274d8368661e37cd867bb4bc96001861d6f364266b3", + "references/core-archetypes/11-vibrant-saturated.md": "af335912eda0e0426b365177be9996ed078fbd9fc7d627113d64a7685b8b0124", + "references/core-archetypes/12-documentary-honest.md": "08812b3563f6bcaac6326f1875589dc37da3cc1d14a21fe402c889d6dd6dcc84" + }, + "brand-discovery": { + "SKILL.md": "9a7a3a2fe3565401ed54921d13d2c2b0865dbe5753231cd121276953cef89bfd", + "references/discovery-report-template.md": "bd86756ba7e05d2a14017447976e699ec7943cc49f9162574617ade7aa65c19c", + "references/interview-guide.md": "284421b5bd389ebcd0f0eac36beff90eb5661f691a12f8e62b04652d29b83c46" + }, + "brand-ideation": { + "SKILL.md": "cbfa399301eed7dea1559f0c431ee9deab22ce54393c75353e19c241b5e8c746", + "references/ideation-output-template.md": "57e4312d98f9db6f527bd2913480a6b6b6febc9a5756305db9c5db6eb771252e", + "references/naming-evaluation-rubric.md": "b7f5c2b68229a4e992385519be8499a41f89744930372aee182a5f77ad4b9c57" + }, + "brand-identity": { + "SKILL.md": "91dc7f2acc3a0ad57867329adc327c0d531e1df3881c83f4115409079a67b63b", + "references/contrast-and-accessibility.md": "180f2472fca45b4ac0cf17dd8c23dc2b1dcc2ee408cf908387e44b863b0b494c", + "references/identity-system-spec.md": "57c239004570288f85abf57b6ff14b621b6f2b26da339187479e420891abf168" + }, + "brand-style-guide": { + "SKILL.md": "e5de2c8ff359f2c6204b3efbceb52e06d980545f50a915af38216e27de5845ff", + "references/maintenance-playbook.md": "03911db7a3b797ef69c160a72ec99c84cab866cf19cd87f2dd46e0dab5eba2d3", + "references/style-guide-template.md": "e7e67c874d4495f6a558437cc06a05ac6f5e060ebf5c089e5f718fc498a10006" + }, + "brand-voice": { + "SKILL.md": "b9fdadbcbe9b68200edf095c74c8abb7ca6ffa13a1c49fc3b98859ac301f1bc0", + "references/voice-document-template.md": "3ecb680f2fab6ac6c056078eec6af588594b3f4947f56f6fa6342750c435d747", + "references/voice-frameworks.md": "ddf10b3826f5d16806aad27a34d865ec990b0c910102ae7f289bb6ae19173153" + }, + "calculator-design": { + "SKILL.md": "12a86b7868c48e39ef957958a1a7160f9b754ff6d048ffa6f151c3ff0772e035", + "references/calculation-logic-transparency.md": "1e35217d11420184083b2733201483a69ed0e08321390a469683a55336e9b36d", + "references/calculator-anti-patterns.md": "c7889dddefe8cdf6d8ef6635113c14eb5731f71005a84d10c700380de0a1a256", + "references/calculator-investment-criteria.md": "b9475cb4b8f14044dc4881e51d9f03a1d6fa541a2b7ee907c044d8c20bc9e83c", + "references/common-calculator-failures.md": "8349575a83d99ad03ff9d515df0707cd3db7add2b8f0396585c5cc702ff83739", + "references/email-capture-decision-tree.md": "44d21eef67c8d7e481aecfb0f9ffe489091cee7622e2b74f8331acd8144068ab", + "references/input-design-patterns.md": "d2336ae07d4cfd56f16035a5c871a027dcdcf0fc0f175d140c3c9c9692f445ba", + "references/methodology-disclosure-templates.md": "e558bd800287e5fd0768803ee45a50f359e41031cb202c36670650c4147b1cf8", + "references/result-presentation-patterns.md": "5700738f9b85ffa26dd854506da598b9659f857834076d7d0417f44860ffb08a", + "references/tiered-value-structures.md": "d30879cf8be0d490c4833116adad8dcc245a1af63c79b7deceff5d902129cf3f" + }, + "chatbot-flow-design": { + "SKILL.md": "57a6f2a29ba1c37db853e190faab629c0fe5c4b7cfe6a5d0698fd3aaa71e999d", + "references/branching-and-conditional-logic.md": "c203d1d35c516b8a16d58d3dc65280feb43c4c21ba619d81a4ef3d2108db6fe4", + "references/chatbot-anti-patterns.md": "0fb5f3aadb8a5bafdf807ea89cb34cddb1c7aabf8a3ffa81041027e034bfef7a", + "references/chatbot-decision-criteria.md": "b590a527c109b4ce8e1be91fecc25159956da82ddc3752040c184a8909093295", + "references/common-chatbot-failures.md": "ba271152ab0b616017390ba28ebebeaef39b11cbdb19e8b351ea8e7eb132ed5f", + "references/conversation-analytics-patterns.md": "58c66b616cd4c8c42914fc8257eb7017e8318068f386b4977044210507d333bd", + "references/escalation-to-human-patterns.md": "bd1e5e69f8dc0d2f3c3dccc4aa0cc1325715b94f1802210b47ebe8bcd891ed29", + "references/fallback-pattern-design.md": "bb9a5aef2a2b7412f12158e1cd3784307ae969c21fbdcf98a1b61c1bd18534e8", + "references/intent-architecture-patterns.md": "823b5c87d1739ce8d7151e01b629d58870da9cd51ba80fbd88c0404cc646142f", + "references/knowledge-base-grounding-patterns.md": "599e49bb2a6bd5cbd20f5c514659ba2dcde27637ba1f4ac41a755356c3b5cfdc" + }, + "code-review-web": { + "SKILL.md": "1833c32ede91b3cc8fbda7ddc69de495c8f4bf4a6af3044d0b94c4249472efbd", + "references/nextjs-patterns.md": "afdaa25a148693f8209a36c7e5690a7389d0e5490f61781092b9eba6d322836f", + "references/review-template.md": "0ca48f838085ee176dc8098618aa1f8681bbc7f1c5d787464cf087f8282c2f8e", + "references/wordpress-headless-patterns.md": "28ebedafeccf5b3b672d23b9e0551d9ac6a61780bc709f12963cd08b3fc54b8c" + }, + "comparison-tool-design": { + "SKILL.md": "24ce1daec98fc356616d00cf1799f2eca7b80248e980da0ad5e7a863b50b7d0e", + "references/axis-selection-patterns.md": "ee3ebf49e43c1fbf51282eb8d18046d1ac5089ad7623e963693c61f82cd29efc", + "references/common-comparison-failures.md": "cdd74332f89f9fd03299870de8564a5ef671ef69aa75d85c4b13f7474985d9fa", + "references/comparison-anti-patterns.md": "6029133c1a4a7797868ba38194c55be3dc8c1aba77566cc8c1db50b858627379", + "references/comparison-fatigue-patterns.md": "c6973c33e2579e8cfd25ff1de0e04644d43600ac24cdaa74e4afb79fee2b1cb9", + "references/comparison-tool-decision-criteria.md": "6eba4047feaa696b12d236fd4c73d4f8b96abd49230da5dca0d92a0cf8a8ad41", + "references/default-comparison-logic.md": "eecd2eb41e5a544ba280081d287566a1628ea7e367f3d5b6014b58004543859f", + "references/filter-and-toggle-patterns.md": "eb9a4a1d65d1d098d4469174917688afc7104c8fac330012e0977d5a8ef65168", + "references/honest-recommendation-discipline.md": "5aa51c8588736fb2cb2bdc3b30be55fedb9b8439c42468ed50dbfb473c5aa1bb", + "references/recommendation-engine-design.md": "09f150fe3873ff961b44487d51f19a9be9adf6895709b5890dbf53a6333c05f7" + }, + "competitor-experience-audit": { + "SKILL.md": "ec49c12fd5729cc2840dbcbbe44a5369eced85ac2e547e94fdfd8d910d78e011", + "references/audit-template.md": "d35eac714fafe0c24399de42f594e4ddc9655c046a45bf769afc428db293a336", + "references/experience-dimensions-checklist.md": "725882e96410e18d1ed57ea036f4294976d5ee9c97d345d01e85185cdaa60569" + }, + "content-and-copy": { + "SKILL.md": "81daa6c8e6c4ec9470aecfde499c2105bf199f7989ba732f317b7e0002198614", + "references/content-brief-template.md": "a487a56e9d243bf47f4871fad371779a92416507157d1b2c6138bc8d0382c7a0", + "references/content-edit-checklist.md": "050aef4e1a1476bc36f9f368d147810ad54d7ed22bca6ca0ecb281f77840f2f9" + }, + "content-brief-authoring": { + "SKILL.md": "c2230a2512dfb785308532328548913baa0ec4ed7a95c2a7d380747fbd663b21", + "references/brief-governance-patterns.md": "382342645f219bd2b7c563180cb1762fd02af75167618413ed8fb54e68c39bbd", + "references/brief-templates.md": "b7a79d140611d98bf97ac0012b42af95b603dc62b14d19fe569362d664cce0e3", + "references/common-brief-failures.md": "4ffac06f788da3b8c5a9455876d10fc4889d4299e5b8a72d30d36eb57c7e2116", + "references/entity-coverage-checklist.md": "6ff4220eda35ce703fc692a4412244c9cec54448032b0dff6237fe05aca64ad4", + "references/heading-structure-patterns.md": "f6de5d055ad9da0db009c2ef2d8d0a05ceb81b77c5f9e25580348cff7f723ac4", + "references/internal-linking-strategy.md": "583fc4c14248b6cfca9a36fb538307419406aa3b6ee114f9fe4c427417f67ceb", + "references/search-intent-classification.md": "1abb35b731098eab72480adb933ec623525a0e6dc97c56e15d860b3fe44aea0b", + "references/writer-handoff-protocols.md": "8cf53b9a3f5c026bc20b2a861d40f83ce9088e43255f469fdb8e60ade1a0563a" + }, + "content-distribution": { + "SKILL.md": "c64b8f6a494351cd4fb7758a1a916381bce2a3b635a44bf23f96e76c9b1d283c", + "references/audience-channel-matching.md": "5428654883780c23dfe6e757abf44c547a7f80ccf9fb41da9e3b49c311c21bbb", + "references/channel-taxonomy.md": "53756c7e7e6697d87610a46f01f12bf7b2f2435b10747242eab24311b34b2cc7", + "references/common-distribution-failures.md": "73f46f456d0876ee70ec222c2271d4b22242151e91c9392d6a4edad889d187d6", + "references/content-channel-matching.md": "06f73d90652989d55d2c3a8cd0318fd9e11d43931fd001e6bf3130cfd953d1af", + "references/distribution-cadence-patterns.md": "7bab05c454e42ae51b0e6d32b4a362f84b7de39cd93c742988abe1800d456b9f", + "references/distribution-measurement.md": "b45c31337a64b3693b2816116206119325f439185d0ccd11b839a94fa9b47e07", + "references/earned-channel-work.md": "d757f139c9332c094f1c95a4104542951d7abf1e5fc1c87154961bf0136f7815", + "references/owned-channel-discipline.md": "d9dd2c4200ffc3c33481eeef0f94275c1a687ecaea1d9b653651915e7e219565", + "references/paid-promotion-patterns.md": "421229698784ea9de8606340bd0eddb68d68714bef49cc0143738e285d678819" + }, + "content-migration": { + "SKILL.md": "943dabf12d00fe46909ea4df0913eb0c2816dc40e98d5233b58db463b3a19510", + "references/migration-runbook.md": "12432adbabff9b516191922a2cf728d45dc44208f1164370d14970a72b1abaa9" + }, + "content-refresh-system": { + "SKILL.md": "e663127d720b3658a611591277e4b86359b34ccdc4d8c2123fb25b3427c3a48f", + "references/audit-cadence-patterns.md": "01d640512a0975fc8a8a90adbc69c47e38614a3c0a2bb9b6560f0c42803f601e", + "references/common-refresh-failures.md": "3e6b5004fa3256e5944ec71e652816b9c0673662a859cab5ab9aa3fba26c0e5d", + "references/effectiveness-measurement.md": "0ce1c0e2554c273e55556a4d2c5f96132b11a5f101da9892ffb40a12ce45e05d", + "references/re-promotion-after-refresh.md": "9f06b9e79cc8ba12d2dbcb3c9f07ba87591e6a1a10b42a2a2c79541142c7fd41", + "references/refresh-depth-decision.md": "66444168df8b30226672741b02b83a896a6aa2b3fb23b2669b11f1a03cc6056e", + "references/refresh-execution-patterns.md": "c4dd65f01b9d2128708b9ee6af37810fdb3069964dfd391245954bc668db2d1c", + "references/refresh-prioritization-matrix.md": "8e5ffe36ee3c26c7e0a99eef80ae4b2efdcc3b20aeb4f890e39a19ea3de21900", + "references/refresh-signals-checklist.md": "13e55bf62d98b8eefec3605a1aca28428a6db67c56f6e1e35497c27a8e685e23", + "references/refresh-vs-merge-vs-delete.md": "20da2a78819e33b202bb5d969e57f850330c9064f2b8093da7d7b8526241e28c" + }, + "content-repurposing": { + "SKILL.md": "e3845e95d8beda2d5592a6e1ed6cc4a51242e80fd275875f47b6c41e87f96ad1", + "references/aeo-extraction-patterns.md": "43d369809a612ddff65a0612ea077d9add7cba28964b5d11d35ac517cc70c197", + "references/common-repurposing-failures.md": "865db4e58177ebd390d4501004836f102e484152486c4e2510a2cb549abe8291", + "references/cross-promotion-patterns.md": "29c7c8eceeb3217069c6ba60d6a11503260e296bb3781eeaf8653a861d819c40", + "references/format-adaptation-patterns.md": "8652b63ef34e5b2994774ef7829bbc65bb29b62940d935a3c7149b6f3f1ccd2e", + "references/per-format-constraints.md": "08ddd2d86d1614215a10438181a1bcea3868c29d0ecedf22608038db323613f9", + "references/repurposing-pipeline-templates.md": "6ad5112321327b81a588d41d387d9a3211b504011615a411ecff9c2af70d5783", + "references/sequencing-and-cadence-patterns.md": "a88b40085203372c4c8dedde765529ab93815fb216adce3c1000c82a09dd1f23", + "references/source-piece-selection-criteria.md": "38e988bcceefb541d53265b39a310f9670f116c0534b0cc3662d8032507e28db", + "references/voice-consistency-across-formats.md": "18868f761b20ceefbbbc019c7adc1886d1dc1dae783d036b4af1a4c4a1ec0317" + }, + "content-strategy": { + "SKILL.md": "ec5d8e51677956fb73ab58a8bf7c0279c1ddbcef70bedae70c4b75527bcdc3ad", + "references/content-strategy-template.md": "6707df3af82ddf656f3aeb945359ec9df0852e63c49590516d569581fe5a946a", + "references/editorial-calendar-template.md": "feb36bd8373c725f6a13418457e872cca7f63fe7256189233644338453d3130e" + }, + "cost-optimization": { + "SKILL.md": "cf3c13cfc8f896e8941caa5a45d70091937d51882ef2ec66875a7aef9c043ebf", + "references/cloud-audit-checklist.md": "88e90cd841d9e14b9c8d04c2e4f4bcf6d7248b319ed5856873f2a45b8a2fd1ed" + }, + "creative-brief": { + "SKILL.md": "6391b3f973ed4b0b38e2fa6d16fcf96b86fd0ee7c032101c01877a0abcded198", + "references/creative-brief-template.md": "be62abe14c8bcad2776c72aeb4019150e06ab9209bcd9dd7e4a16a896face62d", + "references/example-brief.md": "ada71946c214db87e898d504b9f2992976a77a3d313eb7f05dc7c04a4a968960", + "references/voice-and-tone-guide.md": "0070a3c693d0c955938e1b804a8fba11fcb26602b103f653cc422fa4d1adef8e" + }, + "creative-brief-selector": { + "SKILL.md": "a450d913ee5da71061119f487b69021cfe90cb1274a648f246f0e846feb965ad", + "references/00-overview.md": "7e88dc86fa3ef9a32ec80df6655ad87b00cc821ff39dc9f4d11486463e457eab", + "references/01-process.md": "d1b2156b567c09f7a0a75b4f1dc2ffe0a6191c1c1f94ac6fbacdd37aad8469f6", + "references/02-brief-template.md": "4fcff3d36094fc94dda6b6ccf2af31533d26fef9bc008a6ffc9f0f5d02739c51", + "references/03-divergence-check.md": "7624e929d0889201378eba0d44de2ea90378202cb6bcd52adf9cd84b25924dab", + "references/04-shipped-demos-signatures-example.md": "fc246a3d695d722b86cbc39650a9e675bc8fc47be74e339f31d358ee97a99087", + "references/05-section-shapes-vocabulary.md": "c93deaa40b9fc54791fad7e92c1d40613783ee06502d873a6e1cdf74782417fd", + "references/reference-bank/README.md": "3cba4191eab66335ad03f15f4606769f79c5ca57126c0f1e720939281e9cb226", + "references/reference-bank/bold-confident-editorial-restrained-aaa-game-studio.md": "c3fd4b9aa05977ca787c7526caa08a3e9f4d21be9c1f22e66563c4388c780fcd", + "references/reference-bank/bold-confident-vibrant-saturated-single-ip-game-title.md": "c088c9bb56dfd2bb48eb6ea64ffa98a58ceb8d928300cbdcc4ea3a9bdc331267", + "references/reference-bank/editorial-restrained-documentary-honest-specialty-coffee-subscription.md": "fce75ea111fab93db34d5b94ca5ec929bf8467bac1497dd06023a940badbdde0", + "references/reference-bank/editorial-restrained-literary-quarterly.md": "e18308c05371a4d28f1fbac1919f8968eb8b48cc178eab8dcc97455aa58fbec7", + "references/reference-bank/heritage-local-service-barbershop.md": "ea5759017c562ce5ea307242c1ba416be2a56c393e55c385ce3e48927795a9f3", + "references/reference-bank/hospitality-experience-balloon-ride.md": "281b9b75d4412738aed015987e9cb30ae9494e06b8f13f12278eb59b645d9ac7", + "references/reference-bank/luxe-considered-curated-stays-directory.md": "4e1864874db794d111903cfd0456103233ec4a8adfeada5be14653a03c6b2a9d", + "references/reference-bank/luxe-considered-editorial-restrained-residential-architectural-brokerage.md": "fd879703fdb1fbd13c71284adf04a88e12e5a72a60495f46f21fd142cb59fa55", + "references/reference-bank/minimal-essentialist-documentary-honest-trades-directory.md": "15281a0104033f8e24f23e5869a85134986ccb56bb1e28cd98d03cd4aba4a641", + "references/reference-bank/premium-dtc-maker-western-boots.md": "96fa2f957f14fe6e373732ad58bcb3adae673db3ace7f440a111293af3305252", + "references/reference-bank/rugged-utilitarian-documentary-honest-regional-used-vehicle-marketplace.md": "3e54545c7bb9fa5f0aec2a0689098b9a08a78cdd5dfa87c93cc8c600e5ca2f27" + }, + "creative-direction": { + "SKILL.md": "fc11c13225666233b3e544854a7a46a19d3a04ced7faefaa0fc1cfd892fd0eb4", + "references/axes-explained.md": "26cf20c0146660f1c675fbcabba2f3742f69ebb1543e31c0840deeaff0d77567", + "references/brief-template.md": "bbcf997ba2049d58858758018bb81412c783f1d9a7d1e07ae0dc2615de9f8ddc", + "references/example-aesthetic-brief.md": "9b99900f15182d05c705808691a2941aeb3ad48ab18b533fa28e0d3481282f91" + }, + "cro-optimization": { + "SKILL.md": "01c7b12c4627a5f4898c4cb0dda7cbd94c5b7c32f8771478eb87cf3d9f0980c1", + "references/hypothesis-library.md": "a3a83b4596344c15eaf3f05b0ef165dd023c8e85f15e01cbb0abb60e64a68c98" + }, + "data-warehouse-experimentation": { + "SKILL.md": "42bfce53001c854601cca9b72bab4dffe5b0486d886dfb0f21aa8679b63fd6b0", + "references/assignment-and-exposure-patterns.md": "23295809ed9f51480511647a9294ccf82e47da70f62ada5f1466b1e6080a75c2", + "references/common-pitfalls.md": "3bd66b6477c1340b085f68fb42d550809fd931d0af2efc1cb10d686ea0cfc0b4", + "references/metric-definitions-in-dbt.md": "68d9143d0eccbde123d06517c1b2b8b62304657c1999f7c08c9b7d4bf05c3272", + "references/power-analysis-calculations.md": "f53c0eab73db7786826c590f108e17e21feef00cd40436337a8cb35723bdb78a", + "references/sequential-testing-patterns.md": "e876bab3f9a795cc9c872d46ec128c18116b3ea2439b85fe27ce61953b5a74ae", + "references/statistical-analysis-templates.md": "3a20a29d06a96b79c2e0df7452af0eef40237dc9b874a90587883eaac0abe7a1", + "references/variance-reduction-techniques.md": "726539000ebc237f813a763e1655389784c1f32519c9420a1d6bca049c7efe81", + "references/warehouse-vs-platform-decision.md": "6586a38fb0ca88501f5e5ba912d0effcea381f85159dd86f7c8cc8aa8ffca06a" + }, + "dependency-management": { + "SKILL.md": "ae2f2aad82407f0296e53eae858598d9695fd4fa92f72729fbbc9d63591eff6b", + "references/upgrade-checklist.md": "5f109279239766ecea3303f7e3fd8c423788ec45bd197500d35a39e926f28bcb" + }, + "design-standards": { + "SKILL.md": "39d0e08ebf96c75330accefc409000df9155c7d8ae094a3121ae1c6083e764ff", + "references/design-tokens-template.md": "c685d2f7f977f1e87293dfe796965bd1af73e240e9d69fefeff8276f2e3ccaf0", + "references/preship-checklist.md": "1309a7808768d6628453b2e5b5d88a4728ded7491472c9b4af2d167f0dd0e6f6", + "references/tailwind-patterns.md": "bb402ade1ebef7cea5a703d84bafa331a88ea2ff64f0cf8079639689522213c0" + }, + "design-system": { + "SKILL.md": "048170f41fdf1491b5dbdeaead1927b01622ef4a90cf8c273acdfa6a5fe944ea", + "references/governance-playbook.md": "c9a4d533566bd6c1712884f240acf473a501dca4e7fcd35a29cd4578f93188b5", + "references/system-architecture.md": "5fd27fd24b1794f5536b049fa0e1617b34cb49217ef1006b7f114788c3c26ac7", + "references/system-audit-template.md": "6f55e20262360e19a2b7519d342fde4ba278877b9231f64748465d336591b6e5" + }, + "discovery-research-synthesis": { + "SKILL.md": "9b8117216f510e167d3183860f2c3b8ef0d023c0819164e8e66def9dde150c2b", + "references/common-discovery-synthesis-failures.md": "443841c8b757f103e49f0887d95bcef7b1bee464378597bdab093d2f2a1204ee", + "references/from-pattern-to-product-implication.md": "8e05d4063b81e291eaab9ce3cba0a6c74a359077d9c93850566fe1e5725ffc33", + "references/pattern-naming-patterns.md": "ab31eef4afba854689fbb008f143c344361ffd2dd9e6967ce40dcf85936603a4", + "references/research-types-and-when-each-fits.md": "0b3e9604fb84564be464329e1bc285b43d00af126809930aed30f8bf851b5afe", + "references/synthesis-review-and-validation.md": "f894a570aacf1bc7c6ff1a45e68d7336cfd73cbc1a5b7278fb8d916ab1c5522c", + "references/synthesis-sequence-walkthrough.md": "c53392053544ccc01c0a155f3df4721cba522a0f680a657315d4822f66b68979", + "references/tagging-and-clustering-discipline.md": "9fdab28572262cb0fbcb05d1a88da6e7e7c05465a1907caaa540577346019f8b", + "references/when-to-gather-more-data.md": "927f38ef709106541394198cbb32f0f081737b292a80ad34be12d3d4b7e3f0be", + "references/writing-for-decisions-not-decks.md": "66512c8e9d7ca6cc8ed55f24754afd462a798a6fe28509138a494a88a80f1ecc" + }, + "documentation-strategy": { + "SKILL.md": "c9313863695c971cb8d5dd179d9dd91610a01806fc4a8e3cde3fa44a6b426d52", + "references/doc-types-guide.md": "19f98b891fab1fb2918b7faf47517d839b3cb82b1c0198a976b9d17ed8c95b2d" + }, + "domain-strategy": { + "SKILL.md": "3c793b8980492e65a4006e09f0643112c51b3509b74939d9a80774c7dd07e6d6", + "references/dns-record-reference.md": "bf7f15dcd0e7e3f6e54d789319593c6b94c20415bf81c5b20f604d8c3499127a" + }, + "editorial-qa": { + "SKILL.md": "a1f408fa2445e4576988c42ad05b01ed012e02a0aff47a3d7606e0bb3e54f195", + "references/ai-content-audit-patterns.md": "5af73d5b614ab2456b9b4a6927f8228d9d5a399cb093282ca6d02a8623fcb5ff", + "references/brief-adherence-checklist.md": "75ce474f7fd6ad22b240fe4441e60a47395922fb6b97833e083e261019bda10d", + "references/common-qa-failures.md": "5023275955bd31c8f1934a1bab73bd5e07a33649dce45ba59ab31824f508b35b", + "references/fact-accuracy-and-citation-discipline.md": "2a9bcf77720b5136c9d8d941bff1326a19086387ef8f1e120201c2e8e88132e5", + "references/internal-linking-and-schema-validation.md": "06d81225921d5c59c01906d639a46e9bc5a089ce89496539f09ef370625860c5", + "references/qa-at-scale-patterns.md": "670c89a5ee37207c86df70f0528b61150c6b94cfdf2b2d197694c5e9e618edfd", + "references/qa-workflow-templates.md": "6182aa3efc8c1f7a53cbe4ba827fd3fb8e8aa12f26b5c4fc5de20ef862df7ec7", + "references/seo-aeo-compliance-checklist.md": "9f51c6706673e2df8e1ef8b3b86c5fae74290ce422f165980718261fb54cab6a", + "references/structure-and-clarity-review.md": "002258d5b0d87ed35e42799cc4c28a1da02553bdc707a24900586972dcdf2a6c", + "references/voice-consistency-patterns.md": "65752a7c97f84aad0832ddcd492496e0df0011b02cd0c4c375e000a5d4942377" + }, + "email-deliverability": { + "SKILL.md": "d321d0661dbb471567570631f1b7ee031a7d96e1696206770af362eb2f1119e3", + "references/dmarc-rollout-playbook.md": "da50d90b6fbc7be52f046e077d6be659b36fcbacf7e9c56484c8df8a9e0ed7f5" + }, + "email-sequences": { + "SKILL.md": "1fae7c044e018b024fbf4795bf83ccb7e411bcff17f7c0e9694a3febffe6428a", + "references/sequence-templates.md": "01278eb7b4a30fe73bd609d3f11f641860b45b243520efc7da4393cd08a9f002", + "references/subject-line-patterns.md": "ccb7daafdea47a5dfc632cab458b319a5ded21fc499a74da2aa305ed1a7c01d5" + }, + "evidence-based-reviews": { + "SKILL.md": "44bd22df772d09e8f8fc98cbb3355ff398c5d38c1cb066b709f67391211857ae", + "references/evidence-tiers.md": "fee3b0f7ec78ad8cf9f0f15325679972db4180eafdd3419b257e92b98bfe4fda", + "references/methodology-block-template.md": "74ec061cf5befb94a4db24479df918f1ed8c1dfa35721daaf3476a64e4082ef4" + }, + "experiment-design": { + "SKILL.md": "10e8c08d666170badc5eecc7880be137263a9533620f83ffa6f6f4d430c4ba15", + "references/common-failures.md": "0c059512ada9af9831dbd6351c752fd77aa91e5e86b814268aa3a18d3d954a5c", + "references/hypothesis-templates.md": "e34cf0e22eb6b5ef7cf1b6237d128bb4008a8f6dc29c4fbc408bfe9d555cc6b4", + "references/platform-comparison.md": "0c287a49e0ed260fb98dee0d50f6bd77c59db5582c2cadd8da56292f64381e45", + "references/post-experiment-decision-framework.md": "e6ae462e0500d8cb7bda483e18c6fc39f8929c00e1175a34169cb4bd41dbd872", + "references/pre-experiment-readiness-checklist.md": "4c642e86c8c2c8748fde2a484cc63d74eedc61ec5611a21bf820ab50a26eec6b", + "references/results-interpretation-checklist.md": "150d49b5c07bcbbaf4baf6e1c5122a1484a934ba91419d74a80a198cf92861af", + "references/sample-size-tables.md": "2997f71cc07ddde0619f49b483b8499c4b92a4c4ca62d9c3a68d405e1c8e6319" + }, + "experimentation-analytics": { + "SKILL.md": "95c10f71f94e4d716f7521d6922ec42487361472a01fa67ab45170fdb6c055af", + "references/analytics-platform-comparison.md": "37add0e40f70202abd4ce411cb06f5002027649e706bc379c4637e249fe69992", + "references/common-interpretation-failures.md": "6fdbbda10777f3e88d47c7ac48a6f252f761e2519e08b3bbd0874a67013a9ef4", + "references/confidence-interval-cheatsheet.md": "1230881d5b5a2058197974af63f55dbaf319e012cfbfafc815cc76cf16901351", + "references/dashboard-vs-experiment-reconciliation.md": "05ce85c5d7cba5887facca4f2ddc3cf546bd3cf57d30a19707c6265a2038f7c4", + "references/p-value-interpretation-guide.md": "36bd0903be32d2e94164a3046051191714b48782309fc06e83286cad481ef4a3", + "references/result-presentation-templates.md": "7effb28a5262d2ef42b0c355bb44a3469c21ac1594226e9a05f264eb788aa4d4", + "references/statistical-method-reference.md": "a8d10650a2acdbb991dfb61f1bd8d63cc48eb79f7add496fddd5062bba14c464" + }, + "experimentation-platform-orchestrator": { + "SKILL.md": "75e8c1452c1b3c1881c2e85abad4d43181076f7cb3735af20bbd9c750fd98ea5", + "references/common-mistakes.md": "c467ef375142273a4bc4004d24e0704210ec4cbea4bbc4251b1e350761595cee", + "references/cost-and-pricing-models.md": "a999b39c66630712609a603e95c48843eb732f6951a8278a5eb5564d1321cb73", + "references/governance-and-team-setup.md": "37512f6abb8b95408013f36009f4d2e56bd6d891d4112c05b056b8199c955564", + "references/mcp-capability-comparison.md": "9c4d0a278e708ab775b3ae36775f87da7e46498d496ac8a6459e0d54e1aed13b", + "references/migration-playbook.md": "968442909815c3e2ff71c33c56a8150c603aed238d389d9f9fd06d0d8066b1df", + "references/multi-platform-orchestration.md": "03a113011dfa8cabe29ba4a6874f8d87d25e2d5541e95fdfb7a07e71b357a293", + "references/platform-decision-matrix.md": "1c764fcab98fc2773f4894dab0256970d4a71fe792389c2b7449bde70193e46a" + }, + "feature-flagging": { + "SKILL.md": "a28f31b35b4726e7cd89447d4cefe715f5e65bdf6e27024ae435574b644052b2", + "references/flag-lifecycle-checklist.md": "d35012b27070a4241edc359de60b9de221c77d1858b9f963c26793f56ea6b7fa", + "references/flag-naming-conventions.md": "194ee8e2f9dfc056e48611fbb7e59c841a0e71f854a6fa547300780ad636d664", + "references/flag-rollout-strategies.md": "5282a340234254f2425fb778d5ae632d59967d98ffe6564f06a157013c038f81", + "references/flag-types-reference.md": "469502829e13ec61067e5b40fab54c00753fa3fda33e2226b027b050bf13a0db", + "references/governance-and-permissions.md": "45ba6a05092359ca3d38d66155ea03c84cedb09a6ceb401864604f8042fea234", + "references/stale-flag-cleanup-playbook.md": "a1fa433e4048135f7e508f778d70e80aed676f9c7a6c70794270b358242ac539", + "references/targeting-rule-patterns.md": "0f48ff7c05d602bdbf5bcb2d26dc62c8556b1c555c4b8fcc4abf4fbf869eb017" + }, + "feature-launch-playbook": { + "SKILL.md": "c3d0d12ac22d2c84b11c468197af1a0ae1e0b7994be27db175aa0485b71d7bb2", + "references/common-launch-failures.md": "f23e57a272c71c1f54de80c23d2aef6df1c7826b1fe596e99d70a0b0b8a4ba32", + "references/customer-comms-playbook.md": "38532b0c79bf233347b7aea3de0f6308d4c23b8076b6766bab12be492dd0a9df", + "references/internal-alignment-checklist.md": "c956526d9a0b029c00600f5f6dd0ac6d1449cd46aceaaec14b9def8c808a3ec6", + "references/launch-tier-decision.md": "71c7b0df513a0ec4ae164ae0fa005929d786ea5ae398a28f730eaf1a845357c6", + "references/monitoring-readiness-checklist.md": "f16746da797f14c0699c2663fb14494161fc11a032eb12226c44f39a816a302d", + "references/positioning-canvas.md": "71d3e4d76f7204f470dc9fd0074cb34d4d15a04b2f0dcba240b8d0ff83a3b26f", + "references/post-launch-measurement-framework.md": "64b1e7cadb366cfd192e6c71c278000f0319f27b93b07842c68466ab8de9d577", + "references/rollout-strategy-patterns.md": "97e02d775f55828cb8f8b46b4fd2c21e1684f6312d8b0ba3879f45d2e90f4a89", + "references/sales-enablement-template.md": "abc815936fb9ef3c3a98e55e0e03cc779c42aa1f788dfdcaae71b17061efc450", + "references/support-readiness-checklist.md": "eba17b8edfcf3112e045b651b0f96977fa3534893d11872cd3b4474ea439bd56" + }, + "form-strategy": { + "SKILL.md": "09286f693466cddc5dc8d6bc1d1428fb36ccf757f4ba3d1d3c3aec7dd2b1e56a", + "references/form-anatomy-checklist.md": "4fb48222b1de8ee32939d8cdb398f240e406895bdae1e2611710a5f5a32a21c2" + }, + "frontend-component-build": { + "SKILL.md": "32c9a8c1e655649fd691f01ca33f80bf9efd0d75b9530f3f2000880bf807d34f", + "references/accessibility-patterns.md": "75cd55f7f18e62c7fbf2f14a7cb2d5dc6bbfb48ca307a6f7141648e0e4c962f8", + "references/component-api-patterns.md": "e778bea47205bf1e3542f07d9e267097f1d2b3c7aa0e7ad7d44e13e327c95ead", + "references/component-spec-template.md": "eac4ca7e0f61e9bbece7138c51813f518b4d8e33a1d4283535b123bf589279cb" + }, + "funnel-flow-architecture": { + "SKILL.md": "1388e715dea912dc974e18b45828ebeb6c748d57b8aa419f577b3a868c1495df", + "references/architecture-anti-patterns.md": "249fb92d75bacb53e0f3b9218b3a6bdc4cfd8be9fedbaf3a8f7a30431f9cd8e1", + "references/audience-and-stage-segmentation.md": "a056a112bc6d50e5d257295106a9b5e6f9f710afd87bce8b6af4174290945108", + "references/common-funnel-architecture-failures.md": "a2e75eb73e0ac703e4eb4eb77b17ed1a2d57c0448ed4a85e5fbcf26b1fa2bcc0", + "references/cross-tool-data-flow-patterns.md": "759a515c4b02bac24f48914e17fdba085baae1be17e709d361501460df469b43", + "references/entry-point-architecture-patterns.md": "a6b5bb4ee8465c95903b50b3e55e47a81ec5c1f8de85e3429b17b5dc771aee09", + "references/funnel-iteration-discipline.md": "f496eca2005a357ecacab75558403f40953994187cf7e4b3e1392f7c08c5c091", + "references/funnel-measurement-patterns.md": "0fda814628fc1a8eb9699e86f8313cd7b6250bcbbcbf019460e9e3cb2e822f23", + "references/nurture-sequence-architecture.md": "e0f57015214126619e3a34f3d5e6c7679b242571cf749eff148042f228937efe", + "references/tool-to-funnel-mapping.md": "6654d5665940a9b3e7369d3c13962d5c96d592e9771a468c0be78082949e93c3" + }, + "incident-response": { + "SKILL.md": "d50d603c1198d7ed7de6c61764245dea24ade7aa96e16468a9f5f89d7150ab9b", + "references/incident-playbook.md": "52615b122a79dfdf3f57258048f726f1ebe4588b58b2aaad56b169b8ad339c1c" + }, + "information-architecture": { + "SKILL.md": "5ecfbb75636ac00ba3941a2446332fe0bcec868e0c9006ad6ee9bc7230fd7059", + "references/ia-document-template.md": "74c09120e7d6c2cdcd4f7bc1253a6234310f450e7e8acaaa5086faf672f88127", + "references/url-pattern-library.md": "235a35a3703a3f94a691343cde949bee543550650952ea1a911eb0fa07c61353" + }, + "integration-orchestrator": { + "SKILL.md": "60755b79f1836358b69c5ba29ca289f0175a75bef1255b4d05eb6bb02f00e81b", + "references/automation-and-qa-tooling.md": "1ba201adc00dabc48ad05d2b59c990641292dba12ed510f3b6ddab7384ad543e", + "references/cadence-patterns.md": "9d1ea9739301052736193f705adccfeaf412478e3f6babd3d394d9079e54f222", + "references/example-orchestration.md": "adac8722763e2faa835c20fc4e7f5d5399f3be4cc3c2819746c29f92b99072d6", + "references/gate-definitions.md": "8e1a0f538be3fcfb1ad2c4cafe09caa83ec04f8dad753f3ecd20aff1ac632c49", + "references/handoff-protocols.md": "01634392d91d15f29ba5f1a2ff49aeedfcd914a794e99fee6570dd41f60eb293", + "references/platform-implementation.md": "e7ef3d490607b1d82f8c80beb347ef6f0b6fd148ff559c8bcc2a812d9feebceb", + "references/team-size-modulation.md": "fba5969cb6269b6f12cc2536a0aef10684fbc80bbea68a156121f76c5b7eed84" + }, + "interactive-product-tour": { + "SKILL.md": "becd45906aef2ea0f3fc42a540686ec61b66c0c55690edb15eda87b6432f4077", + "references/common-tour-failures.md": "3c1545aedaf61943bd2a13a86262ad1713518a6d7ae97e83b6f3869529b230f1", + "references/completion-tracking-and-re-trigger.md": "a5b0d32fcda6622666dc53d44a71e294fca936b34f2c34d26accb4d7091c4e81", + "references/contextual-placement-patterns.md": "18988353f588ef415ca40ae080f03632016b2a8c996f1246c8ab0cbe74c0e99d", + "references/dismissal-and-non-intrusion-patterns.md": "9a30a9e2f47ae07e0a7dac24d979659256f649c3976fd5a9310a1a26efccb7d6", + "references/power-user-vs-new-user-patterns.md": "497ac732997e57118c39e65a06ea5116b250d50383c53aa52f4c306c4643cce1", + "references/tour-anti-patterns.md": "9f351b305db1e1467eb0a65d9c147939e6d90e73c28b237d35766b0471c06f5d", + "references/tour-architecture-patterns.md": "0f7450168e4efd18396eb014f862123000087f5518996a98bb82e2c4cb408be3", + "references/tour-decision-criteria.md": "33202ba03afa930d82c8cbbfcbf0e419c734abc9dd193e160c1caada1d4c86c0", + "references/trigger-logic-patterns.md": "95ae0cfc1f9b501228055a3f4ed7b4b919bfe2d0c86dec50aa2673bd49ffde6d" + }, + "internationalization": { + "SKILL.md": "76b12791dff2688827f50917b867b535e6713505cbcd802b8611f2ff5274d7a6", + "references/locale-checklist.md": "c4d2d760448ed12f8a77631c31f9619006e2cac53a1cef024dc842d30146e4ae" + }, + "journey-mapping": { + "SKILL.md": "67e601e554b8e4e1608a751a7c154c4b3d28ba5b01a5cd29d1db6d342006974e", + "references/journey-map-template.md": "6062a7d524126cd89b1d1075b12a1893dbd16b5811670911861290aaafca196d" + }, + "jtbd-framing": { + "SKILL.md": "400bf8ca34f5e11979dbf336ef936e4b90ac72c9e006740a2a7cc06d8e3ba297", + "references/applying-jtbd-to-discovery.md": "24a4f4bc22673cabe559109cec85f2b7555195b4ae2f8526bce6d6e85b55fc23", + "references/applying-jtbd-to-positioning.md": "41f82c8fa88a8a7ef0087504f541c8bb41af990c2d28cd218dd3dcdd991eb699", + "references/applying-jtbd-to-prioritization.md": "22855cd3a942d6470a734e62c5bff1514504be34f8b68ddd646d8e6654b4e71f", + "references/common-jtbd-failures.md": "ce94c5bd7688ce6aecb7d2f217dbb3e9a5eb2eb70a0ce29904a91e36c8511d3a", + "references/functional-emotional-social-dimensions.md": "b28a1771dfed2a254d44cf9b7cbe61f4229ae58d19e14c733ab5972b910dd8d7", + "references/hire-and-fire-criteria.md": "cb4d1a2fdc6d525d37b40073554c157a80977908636cfa17dd1a742ba8ed0f64", + "references/identifying-struggling-moments.md": "ce7683c317251c8949c791836039ab2b99a059722d9df9af8119954415b5411a", + "references/job-statement-structure-patterns.md": "80cac04e5df9c3b27ce922d6e606e00914d899fa2df88053369c3f333fff0033" + }, + "landing-page-copy": { + "SKILL.md": "1e0f504ce254ab088d3af8419d0591646de7a792a618be29448cfb34329a7a4b", + "references/hero-formulas.md": "654fedde24827379c2ef62f9f9c5ef283cf23d0a1e58b991a51714b65d9a47cb", + "references/objection-library.md": "bc0ee97281d1d5710dfb453f1018434d0d86c090fc1f5991506f93e4789ea585" + }, + "launch-runbook": { + "SKILL.md": "8d1f7b18667dfd507d3bdfb31858f5b5ff48205230060785cff40701e8a21adf", + "references/runbook-template.md": "3413ba76c18bf4d1852e0145b6b53e31352a3522b65b4cc306b3ebbdb02f4ad8" + }, + "lead-magnet-design": { + "SKILL.md": "aad4e66576f4f61061f802cf15e1fba9e5b7d5c35bf456ec064571aa95fbcd8d", + "references/audience-fit-qualification.md": "ec967a6a705c86a016ab97101cd79e0f84c32d1ca015ee6ed4640b5d6d4a1699", + "references/common-lead-magnet-failures.md": "ca053b6e50f08a31bd2af37397431ec4b2bd53df2beef595b6d7d597ea9cf527", + "references/delivery-and-follow-up-sequences.md": "19834c41389a46b3ef52f3d6999e3337884157a16b935f89b9324012c7a80002", + "references/format-selection-patterns.md": "fb389f392becc328880708dfcd64bb048f436ee73c48cf104d40143b4e4d5170", + "references/format-specific-quality-gates.md": "04a3f5181444bc8475d406bd81bc8e5ef3cd1c9d9d4f6f9b20b078717f56f616", + "references/lead-magnet-anti-patterns.md": "38d25e6dae7882a5f3218569816af81bff49b8883a3cbe4aaeff714e2e14a65d", + "references/lead-magnet-decision-criteria.md": "bb02fa9def76479951b50ec6a8e7ed55df3d1ee60016f3de054701936a1da638", + "references/title-and-presentation-discipline.md": "24bf554b55e78aca2ea1248cec3fb5b77e5c92c0868bad9423571ddb617413dc", + "references/would-they-pay-for-this-test.md": "258ad4d02453d608e4f8a10f6aeaace320abee8de23465b7b0eacae758f0da7b" + }, + "logo-design": { + "SKILL.md": "81f4dce86b45e901a89c93fa1f5f2e82d6ecb1754fe1ac7b6077d78de1db0711", + "references/application-contexts.md": "5aad2091c8e66c6fc256e75b307544a23095e387d5c8e3f6c493ee0add9fb70e", + "references/architectures-explained.md": "4e23b69addb6837c148c4fd0a23a3cd4586af83c64fdb65a3abcf20cff7a080b", + "references/category-conventions.md": "8e90ead85e315275de3afda451b0af21a9707c0252bb2fee1aeaa257ad4d9546", + "references/client-package.md": "47f4ebb7f34ef971a838f2199dc166cd1a7bab7f11646da9755d0233a3660bd6", + "references/example-variant-spec.md": "7c10711a934233c2b0210d345acae580bbe15aec06dc7feea6cb3bb32361d05e", + "references/symbol-approaches.md": "8d96f44908898be707c76ee6a78ef71ab214a4bc3f6efd53d041d7e66cf974c7", + "references/typographic-registers.md": "df34f7cdb4d24eb5237c163c29aefc1156bce480eb024a5ddbc1c117061e451a" + }, + "long-form-content-frameworks": { + "SKILL.md": "78a9699621fe4249617d1d994308631856602826d83597dd9d737265aea3a67e", + "references/attention-sustaining-techniques.md": "6b059285cec33ab70755a0a2322ab1e33d87aa108ee2452d6f999cfe884ada39", + "references/breakouts-and-visualization.md": "532a234b3d8b04b4084f0c9340c3ea4ceffa30653cc3e8c8103ea236b08cd702", + "references/citation-and-source-authority.md": "ed8515980e30e768c3c62617e1421c51162b0fe583cbd0395a6851b61d7df86f", + "references/closing-patterns.md": "843c1d5889c2991ed5e70dd7f9bcf06f7a8922e827b66647dec94648e7c1c702", + "references/common-long-form-failures.md": "0c737d666fbc47050f480f5975dd37e31c82cc06bb0cc65f62cca13b62d40df7", + "references/format-decision-framework.md": "5b5bcac5d254696fcf3fb1ee9c8ec6240289bcd44a77e5b1dabd6045054ac096", + "references/lede-patterns-for-long-form.md": "c11e46c604c9f526580a3be9485a5563a676b3347e2196be011ab1d28721a19f", + "references/section-weight-calibration.md": "18970774b92adf7c540aa5bff04eea1aa48b3270d3cec8d74db0b8eedfc4b9aa", + "references/structural-archetype-patterns.md": "02d8e18dff2e4ebfee8e55d04375f836e10b265522dfd67121c93d4de22a0b24" + }, + "media-asset-management": { + "SKILL.md": "869278da1465f2b1ae622ef71c7d8396ec41de50775dfc65a3a80d7ff7d74fe4", + "references/responsive-image-patterns.md": "eb7db1ac10ffd4ba5fd054af7f0e5254c642e65387c53783868dcdb2f8ef3db8" + }, + "monitoring-and-alerting": { + "SKILL.md": "49c6556d04de2e03bb3ef0617b994fc933ff941e5ba917afd7fd34658d0c89fc", + "references/slo-design-guide.md": "b1dca1a7bec8b45b490899c918dc6a40f5c2206e29b3e9aecceb466379d2e5ad" + }, + "multi-step-form-design": { + "SKILL.md": "b72db037ba83253b07fc9f80da42514b4267d0aaed8f99908285b51a6481e517", + "references/common-multi-step-form-failures.md": "c277a033d0ef841441f2f5e25d8ffc6f3f2e64e551a50561e14ca2483ac1a3e5", + "references/conditional-logic-patterns.md": "93989ed33af310ad55b699e5220e9749a8503a9a93cd0729595b4f89b7335314", + "references/drop-off-measurement-and-remediation.md": "65e524171cdf346401255d71a06ba39fa9181de25a98e111de15aaabb88c781f", + "references/form-anti-patterns.md": "02edce5273659dea7dfae0edc5bcbca9dbf4cf5a46cfd78beb4bc87c0a71cd0f", + "references/multi-step-decision-criteria.md": "5a728adda666c05ea6345187a265ad917baa72dd9751703911c5f8782de4e902", + "references/progress-indicator-patterns.md": "e9f6d7ce7b8d7e846eef842424745af9865df19f5e25a0f7a2dde0e6ae730316", + "references/save-and-resume-mechanics.md": "b1d95bd5c2a6a9a0a163edfd723857ce2a1f9b6b10c72b142a4c82fae5a8cb1d", + "references/step-architecture-patterns.md": "e4370dca4df49ca19840cf03e9e2b3df4bbaead0a41c6bd22f209f9a7543d2e4", + "references/validation-strategy-patterns.md": "2cad091e2954d9dd7025be5b0d9a9412dfd37ba020c44c2c0354764544269eec" + }, + "okr-design": { + "SKILL.md": "b58bfa9db5b15d67d5e0a663d62f2d2804acdb32c700130181d37996e7ef7298", + "references/cascading-okrs-decisions.md": "8b97e746534784ffe1b151bb87c2cf13ca1b92bb1e473c3fb06847cd22d9c510", + "references/common-okr-failures.md": "c52cad5ce5ad3d2a615cd491e2b261e3f77bd1741104a0328c5a85552c844ca8", + "references/key-result-design-patterns.md": "2effbc61c0d5890759faf550515e4bb5ca7b235e05e07d3f2be64346eb18fdcc", + "references/mid-quarter-recalibration.md": "8c0239c292537f4d71e4384b386df54976104b0de5540991ff31c7ce85c69672", + "references/objective-design-patterns.md": "43d51421d9e6397f8fe2d2896f0f4ff5f273d8f33a666e669746cf38c8022553", + "references/okr-anti-patterns.md": "3b2f7d2e6fc07f39b175c947599cc11919743452ebd28f163b4c0fe1828f3073", + "references/okrs-vs-roadmap-vs-metrics.md": "7d7947e628174b06b70727cb7f6d8ec1f8d743a274404c20e018a9d416f67ee4", + "references/review-cadence-templates.md": "4fdf95ef0ab4d90e6a3cb1bbfb1a470354798a66a4383b60a9d61fa509d63910", + "references/scoring-discipline.md": "887182a483d8bb8deac61f4cbdbea660550c70279ab6d938b7f74813666778b4" + }, + "onboarding-wizard-design": { + "SKILL.md": "381fcce8e470a997f484c2be54f343d7aa41198cc59e5714904362d92b0e8cb3", + "references/ah-ha-moment-engineering.md": "b2f1a28b064627f1f4aea1d676f054683b0bc37ddb82531fc95fecaf42fa05e6", + "references/common-onboarding-failures.md": "4f2dd5ab5188dc2edd5f7b38351803f05a4bd3397046ca558c02bc244010678f", + "references/drop-off-measurement-templates.md": "423885a14780235112d12f9756f7023538d77122ef018695ab36fe74b296660e", + "references/progressive-disclosure-patterns.md": "87437dc481f787cad8cd3da59bea84a3f9747cf2a1ddb6039177d47a821263f7", + "references/skip-and-resume-mechanics.md": "5ac7f072095c922bcb264de259a0b066f1842278f1b19008e5e17630ab2dc7e6", + "references/step-architecture-patterns.md": "4e60cf7e001f6a25ca611eb1394005afd0253d6c58983b689cff470e2c2a6b82", + "references/user-type-variation-patterns.md": "4a84476fbaed635e3fa51d2e16b8625b234b25a450823b4cf56439db6ea4ba80", + "references/wizard-anti-patterns.md": "7464f2124504187fde7c8655db0ba303878ddf9e91cefaba6200a5c967e4355f", + "references/wizard-decision-criteria.md": "4e976611c41b6b2c3281bd053f458bee5f5e69daaf706df04f808bc4daa8895a" + }, + "paid-media-strategy": { + "SKILL.md": "afb2aae08a0d45a30c09c44de958ea56cd13eafea7589bdce1306dc23ead2f20", + "references/ads-platform-comparison.md": "133636975a25f212a9e913975b3ba3696b34a8c42b894eb8b8ace1424e7a1af3", + "references/audience-segmentation-patterns.md": "ede2b4d02b6c2316a310cf5cbbb52f56aaab1d55b76bfb28cf7a9cea14b675a3", + "references/bid-strategy-reference.md": "4797fb17d4b30a96a59a5ba039a115266faf55f5e4012bcb46ab29f392030d60", + "references/budget-allocation-templates.md": "53aaaa53dab15cfc86874c0986ed3544e6de1fce7c051ce8371e2722832e0e0c", + "references/campaign-type-reference.md": "8a2f977a925fa6372b02f81ed652819d4a9b943755435a3977150598537a1cc1", + "references/channel-decision-matrix.md": "e5e74225e2a09fe39ec5d79d0cb1ee26e8b3ae87cd7a744149845ad48b62edc6", + "references/common-failures.md": "55c73def01e20f38568f193f0c0345b2a9f9e784875044eaa4b7e657fea2e871" + }, + "performance-optimization": { + "SKILL.md": "197dff3e07f0a2ec39f8e043232c4a8a8957c16491a7126997ac43b1537c8ad0", + "references/audit-template.md": "d260fcce01ba0b8ba6bd858498cb774744a17ec4411cffb2f69b68e6ea2e9d0f", + "references/optimization-checklist.md": "ed962ef8d94a9d86d8ae42020c573890fe9572504da5504915204afb0785a267", + "references/optimization-playbook.md": "83ec500dea69fde32516886089ad1f90a267a1944c0e0f1985d51976bf6082ec" + }, + "pillar-content-architecture": { + "SKILL.md": "f64af5943682f8da197fb2b8d920c1ef91133aef2685289c99e91ff0f10b4855", + "references/cluster-piece-anatomy.md": "aed7fa2644890fc1946eccf95fee0c2a0bdf71f775801b70982b99f291569219", + "references/cluster-planning-patterns.md": "68750375b26afebe62e49f8e86a4001d8da899ace946b8afbc4f37d67cdaa1d0", + "references/common-pillar-failures.md": "751c4ee9e88f6d84378c03921c3c9fabf5989de09aa6e4e9cb83c0180ca1c4f3", + "references/content-refresh-patterns.md": "9968c4b0bfadcdf49016e4003e5fa1cd966f44df9658baa1ca2359e14509ec36", + "references/internal-linking-architecture.md": "3fab78ff4dfacc00f81ccd701454d5ec1bffb1d12c9dd37f79429fdd98da3ee5", + "references/pillar-cluster-decision.md": "03d57c506c7b88d8020a90989f4939463188a91393d6ae1cc89f45a6ad6a4c6b", + "references/pillar-page-anatomy.md": "c0b38f0b943be933095d9d08cc035fd3ad3f4a87675fd30950e87ad6f9bdece8", + "references/topic-selection-criteria.md": "41f4db72d83096095f97468aba5c060f1c1be4e2223177db4be9490bda674606", + "references/topical-authority-signals.md": "c4b1da3952b4f64c906bbf8663a1fbd716fda4432708546b99d7009456441b33", + "references/url-structure-patterns.md": "2949bbd359b36fba00e71bb6ae63eafa5c4da036ca6b54275db7b0891218a68d" + }, + "pm-spec-writing": { + "SKILL.md": "a0863ad6146f264d311d75e2678e400930b40bf377b34403dafdf3b18246f957", + "references/dev-brief-template.md": "4c253a2a71243d65407de0098323fbc542ba72f03c572ed41df8c5189d2e9f31", + "references/feature-spec-template.md": "f9b19f192d9e65b6882e97aaf23f4b1862a46a39d2e9f8b86eb6562aec55fe13", + "references/prioritization-frameworks.md": "b8b7696ecc60f95d56ce2c91cf67d32b4aed6e9432db90eba319935431cd7e8a" + }, + "product-analytics-setup": { + "SKILL.md": "dd468374cde1a89d29f344604c8657ba67b9304398343dd410e91d15c3fe917e", + "references/cohort-definition-patterns.md": "efac882d9b59a04e2f7be066d502a4e633797ce4b8a9e374597d794f9673498a", + "references/common-failures.md": "97a65cea3da7d9739c9698581f8f027886980c7403fc9bc3e3f5beea1931f1f9", + "references/event-taxonomy-template.md": "41c337b25785fd484cdd5a26207229171b2a6341fe12612a5b516e23be754212", + "references/funnel-design-templates.md": "9bc3b1e81b75f06ebd91ff5bb9f6ba9ab8a413ce8e1f5e762dabadf0d00cd377", + "references/instrumentation-audit-checklist.md": "2bfb6ee57316174d2e3de9ea240c4957401f98844f6cb50c410ce93d2f88b337", + "references/naming-convention-reference.md": "ec10f6ea1567a79ead0e2d81d860c8bc01a2e821961071023a73b71dc617f674", + "references/north-star-metric-selection.md": "45959db9ed267c0ed9f26873e1ca1c816b15d3f24cdb6d6cefac8ce88ee71dff", + "references/property-design-patterns.md": "5b496ca6447f06f72dccc48a1fb36b1f0c533d3339f207baf97160c8bba90907", + "references/schema-versioning-patterns.md": "f69f7fa458621a6104f842f62b013175dcfa5bb01ee1ec6653ce49c3cd48adb6" + }, + "product-configurator-design": { + "SKILL.md": "cd0b2ae4d2e3e605545fd198fd627fa5e3378842344c20e434ef478412d1f854", + "references/common-configurator-failures.md": "36237cc604675bab8299b7c7cc9223badc3090e7bfbf6cacf69a3fcb65a168ab", + "references/configurator-anti-patterns.md": "2270f06cabfeaa4fa3dba69c282ae511bb08e124e98c0d9c95025054e801da8b", + "references/configurator-decision-criteria.md": "f1587bd82d9aca953ca2b9473d5decc3dc9d75e217f00473a62ccc79e8fbbe72", + "references/configurator-to-cart-handoff.md": "dded80a2806dc007deed369981f5cdb1002a943817b18b4b77716f22f4635a4c", + "references/constraint-logic-patterns.md": "043ddef7a83686cf93f481674e0ddd390da1b1cbc74a50dd7adc41a5239ab68c", + "references/default-configuration-design.md": "2d5961060b72d0074de0514dee763bf01e2524a321dc147a30c9604ae638b313", + "references/real-time-pricing-patterns.md": "ab5c60b500215b2a0f94b0288dde93dc74e6322c4c3edf1eb6e311005882abd8", + "references/save-and-share-mechanics.md": "241966cddc019c782b1d96959a7c5c0d90f2c15eb349c5af82ada464b1a1e672", + "references/validation-and-error-patterns.md": "5bc422c04ce9a2458c786787d5c190cae83111c471cae14aec83ae86b5726b94" + }, + "programmatic-seo": { + "SKILL.md": "7e2ff674899054540a189c9c7e2abea60f6391900ce3a9c2de0f97b5e3735bce", + "references/aeo-geo-for-programmatic-pages.md": "f04d05294b10277eb867c46f6eabd2266edce2712f2bac9602af10be829f87f6", + "references/common-pseo-failures.md": "b0a2e494867adabfc5fb189ee75d232a366e4888a84cc407819570364e4bcfb2", + "references/crawl-budget-management.md": "5f6b2aa8c412dd3676ce33ba222818aed199a77f81b191f4477b8cd3578329ef", + "references/data-source-identification-patterns.md": "2f5b6722b920a9c656ff00a4cc1131df47f5cf72b0175485e777d0201d390663", + "references/internal-linking-at-scale.md": "89f218ad8f63b6289f6cd3dac10ba1c7fda60177c42400b29efccc3363c4755b", + "references/quality-control-at-scale.md": "ff90f0add9dc35e969b8d9362150ee8b48a834378bd262c48d25272c0717df53", + "references/refresh-at-scale.md": "b8535c4698d65b4ed8b5d0a98922b63b5cc8ef1837deb4fac04b687247c0a955", + "references/schema-design-patterns.md": "fe7a97b09dcd4d1e9d477b8cb9c8ac433d86ce389a070b634029e2c21578d8f9", + "references/template-design-patterns.md": "74077b84135df3f90a9b03e41cb053481e33443eee18892698a98a2f5d2dcc90", + "references/when-pseo-works-decision.md": "3033a8f6687e9533fb0ff996267b80ef48a1e964b23694c8706b1ec1213bedc4" + }, + "qa-testing": { + "SKILL.md": "605f8489de7d3860b01056be0d4380ca5753ec3cca4baab4e8b957a9c28ad85b", + "references/qa-report-template.md": "241fbc871bfee946964decd1496e0ec4ad87861e8a77a8ca0565e3559c358358" + }, + "quiz-and-assessment-design": { + "SKILL.md": "9e2a56cb5c4439eca01b7f81bcc590303b1fa1d04948be89c6d5a504030d4b9a", + "references/clickbait-vs-actionable-distinctions.md": "dbeecb34f43b62a8b3459043ef31b938496bb16acc0eff5bd922b48ec7e799f1", + "references/common-quiz-failures.md": "0f2f6cc2d417e825ca1d288b0fe2695687fda9cdb715b8e415f9bab799b1ffde", + "references/lead-capture-integration-patterns.md": "36a6e98fb92143fd12af8a98d200adf23f5fcf07644673dac03ff9fe762e9a79", + "references/question-architecture-patterns.md": "0f064dcf6c5cb28d137a6cf7cc2173e665df2e718d294e8457c927650dddb069", + "references/quiz-anti-patterns.md": "aa0bd4d86434a31675b119d16a699522dd044d8bc646c4a42872c9a882926ffd", + "references/quiz-investment-criteria.md": "6d6ddc708c9af2142e7f70e7223012bbba1b588c68844923f9a8b2d7a64a65cc", + "references/result-categorization-patterns.md": "c1b790239dc0a25610deed73950a24021c264815fd2a0bd5833e70c912071f66", + "references/result-to-recommendation-mapping.md": "b2ed7f77d79f163d5e7a6b4005c9679c5a0033bda9d8b58eb80fc5b27fba1917", + "references/scoring-algorithm-patterns.md": "20a0e5f83b1612e4a77e5d5037b1cf3d6e27f89d9dd9dc3d6ac279c8eb031cd5" + }, + "roadmap-planning": { + "SKILL.md": "136b637fe06e0c1082989bccb2ff7a22fc00f98ce31ca676f4eb76a8e9285273", + "references/prioritization-frameworks.md": "6c8870e8f09e2d7100ce49dead148cb32fb58183690a8123854a8e93ffca656c" + }, + "scheduler-and-booking-design": { + "SKILL.md": "ece48cc9d88aae68c738dc2aa336feceb90cc37cabf39578a2f449f4359d9d02", + "references/availability-logic-patterns.md": "b26ff752f4ff3d4f5ef0ccd66fcb300c17edf6319f6bfddbe88327a576b477ab", + "references/common-scheduler-failures.md": "26635ae57c012ccad9d278bcf9842d772c3b58607104bc60449ebe9257c9b992", + "references/prep-automation-patterns.md": "e9c9bbd477faae2bc1e0e86c89f66733fa83be43154d8e1505a36d12467981df", + "references/qualification-field-design.md": "389ebd480124b9e1197790aa7cfba71923a041bd20b1d967b28ce19d5519fcd7", + "references/reminder-sequence-patterns.md": "f7a089bfdc72b9edf2215ed5e5c79226a6b28a4ad7e4ddde803f7c7b879ca5cf", + "references/reschedule-and-no-show-handling.md": "9c27075150ad137f013ec4e882ac75c9d5f7534d2b637fa7678b61eb75d80709", + "references/routing-patterns.md": "18ddac97df1f5911495d82a91208e96ccb597906138907b235493f49f62f3896", + "references/scheduler-anti-patterns.md": "c96273744dd333e96233fc24c67e9c9ebebba62db86f837e79d086e3e1633ed7", + "references/scheduler-decision-criteria.md": "02a4237ac2d3101ab0d84c273f9b5f22d501d530fd76d250775e311d2f403196" + }, + "security-baseline": { + "SKILL.md": "8af28729093ff8a97796cba7b37db6d621e50d5d31e684baf1ba8bc98383daaf", + "references/headers-checklist.md": "5e24408454905148cccf616dcf3f707204e971b3e28a5ea017a13e88a76cad95" + }, + "seo-aeo-geo": { + "SKILL.md": "573caeaa6d9e988fb7539bb79c397756ca7fb4645ab4f79a69d3a14017988529", + "references/extraction-friendly-patterns.md": "85b0653394d246a848e1bec3c6595d4d19f6156e209de66871aea07e0883490f", + "references/llms-txt-guide.md": "008c48e172172ae440564956e7486014b91fdd93831bdcdc52e2dfbae3a00063" + }, + "seo-audit-orchestration": { + "SKILL.md": "5763168e22bf43e990a875222d757352eea86fbff92339280b28ad95b19cb68e", + "references/audit-rollup-template.md": "70563185132deda3957df63a228a0f0cd59c302d72351dc8b73427433f81f456" + }, + "seo-backlink-audit": { + "SKILL.md": "37551a8024bdc7491038fc73c19953b363659f7b2e76a0b65a8c327e6f8a8808", + "references/toxic-link-criteria.md": "aa73226858f36bbf1ca830045045565ea28ed4fe5e5b27c13d6a29cf60ab97d0" + }, + "seo-competitor": { + "SKILL.md": "4296f3a7d88431b3912c41486bec657f73d8e4a9a786f820e409ab148e3eec23", + "references/competitive-audit-template.md": "0fe2971545f422c63edcb9aab9c6dbd87c80397617b65cb6da7eb63e9ffb133b", + "references/content-gap-method.md": "c330977140a343b11f7fab31972c4cc1b77d35f8c9dc5dd0807f964da9773994" + }, + "seo-content-audit": { + "SKILL.md": "f0588f9f0437140d6527a881e9ad7f8c24aaec519da4b9022b2bcf889e1f3ffe", + "references/audit-template.md": "fd85c836d4bf3baf72565cce07018a510e0f905b68690a199bc2acfa52465028", + "references/cannibalization-resolution.md": "1644a14351a85bf12fedb57b495ea95eb4b0f3f9a503777913023ce721740637" + }, + "seo-content-gap-audit": { + "SKILL.md": "3baa95158c522c8ee66f1716baaa281dd3910b9cd0a4c1be63c52c6c1a4cd324", + "references/content-decision-matrix.md": "c5d333754ba3e269d8a274e05195537b465b27bc0d989bb89c185bcffc8c7b7d" + }, + "seo-keyword": { + "SKILL.md": "376462a53fb1bbbbb08fe89f745c7d8c647863c9bb64e8b4d7751738e141169e", + "references/intent-classification-guide.md": "8570e2862107ee41e856f47d8410a07182329751f21861b0c32bb0ea692e6c01", + "references/keyword-research-template.md": "68d252b32e2c977a8ecf5bf2b5c9583316e6aaff3cdb257a7cd362ba3d1c57c5" + }, + "seo-keyword-gap-audit": { + "SKILL.md": "094cc3f266928d838a71834e1884354179d77287cf894bc39b99880ef0013cd2", + "references/opportunity-scoring-rubric.md": "0fdc3312bad1f6b1b0dc25d594700c09dbb3ab5da65b46a50999b6b9bea330a3" + }, + "seo-offpage": { + "SKILL.md": "34f047ae8e48c8e7bc911345029bec572b8729a87665f9c517aa23a87c7a7748", + "references/linkable-assets-guide.md": "03c09bb5272ba30455df405f6b97f0fbc0e92023753bd85e1009297c8f24f6ee", + "references/outreach-templates.md": "ac5b76f5825a16f9476f09c6c946a6e7ffcda8496090b68d3fa9a7a2b9bfc5a0" + }, + "seo-onpage": { + "SKILL.md": "06e7759b22585cb673b44a492b7343ebb9f345669fca60fe509706602587077b", + "references/audit-template.md": "e533f58b133340d11467232c5303a42e0467b723975a82de10965f34dcb41071", + "references/onpage-checklist.md": "4d2938783d3ac9a6a4f942b732bf752d031f13f83275baaa01e71df11245d21d", + "references/title-and-meta-patterns.md": "174d10417509e11d5c3654d0e4e018343f79e5bec317fa55d8003f7988c67ae6" + }, + "seo-rank-tracking": { + "SKILL.md": "d3c729f8de84247999ec04d6a525e804c6b75e96fa016add9c4901fd23262454", + "references/dashboard-template.md": "efb302269ec3f0e9122a99034e1e95e0a65976b4833c9a6bd91353efde924feb" + }, + "seo-site-health-audit": { + "SKILL.md": "78684edafdac6e2f73ce48c23d261ae81386fbd04a26b56ea0003334a8d1bb1e", + "references/issue-impact-table.md": "e59a5c298f0130d60ba9ad1c6855217e95168161a743e67c0988f766bb9efd24" + }, + "seo-technical": { + "SKILL.md": "8b874b2a102ac52c059f8860aae1119d36c14ecd8a63b5e7bcda7c04830d79f4", + "references/audit-template.md": "71d840bec52223e82eaebf518ad20636dcff163a316edc79923a5703f82ce92b", + "references/migration-checklist.md": "7f9a4dbdd9653d4a2d8a9c8795376562ac26545568db6f493a21c3f5bc485bb9" + }, + "seo-traffic-diagnosis": { + "SKILL.md": "c692568650d16f9f17cd4a9474c3126b9d78852d742e219872f98e464262c6e1", + "references/diagnosis-checklist.md": "f1d2a4bff1a9b764e6523b3f17fc78a4e6f9515ff939ff05346326106e933848" + }, + "skill-creation-walkthrough": { + "SKILL.md": "d9562ff1d9ee3620cf728d0b7a062f2cc1a58508fcf9043b344bf23805e5608e", + "references/description-cookbook.md": "b174690a9064f7b0cddb6aa289951321ecf96c34a7e18eed3307741fc0c76688", + "references/methodology-vs-implementation.md": "f4fc2991e1ee8cafc3ed976dc3bbab10ceaee3a362df7e9b9461f9f491f64557", + "references/skill-template.md": "f0e0e61d8183b9ad71179a060d99bea7f997f70f2e58e0d191491200f3213a93" + }, + "stakeholder-communication": { + "SKILL.md": "a3686760ebe73d64c55f37df38b9948a36fe3b291e3fc7e5c2b10212dbb78580", + "references/update-templates.md": "fed66af683d5e0b6b88cc54734d5218584064749743df545f085d63a90823fb3" + }, + "team-onboarding-playbook": { + "SKILL.md": "185dade0ab8c88c197d664d8d7acca5bf1b106dfd1d314afb7f95792488960aa", + "references/onboarding-checklist.md": "5309269c3f1336c51277de30f5cd8bde41aaa0b56c4c60c91cb4aae078748eb7" + }, + "upgrade-flow-design": { + "SKILL.md": "60041e7b729da406d0b674863487f187604e899ac6f26a71c496f16a1b5cb4c2", + "references/churn-prevention-upstream.md": "d0f407c73f90ca41f896deca4b1889c21b1b168ccfcf09662222bf48724805e8", + "references/common-upgrade-failures.md": "cf13f043259d72b02cad638b528f31f74db3face233aa3a6301a369bbd829366", + "references/free-tier-decision-criteria.md": "7652fedbf15a951aa7bcb40d6d694c8bc54c806d8b1744162e018cd2ac6918ae", + "references/paywall-presentation-patterns.md": "926a9d7cafe9f291cc6cab949fdc4181ad0bc512bdd2ef37976080cd70c30528", + "references/plan-structure-patterns.md": "0384fffe5c71649e32028fc1c437daa4d700f3900d7aacaab773c6c4c6595897", + "references/trigger-moment-design.md": "ff44f0fd8f278f4e8f5af5330cd4c0fb90d2d56e85fcd2f14579c08a296c1e88", + "references/upgrade-flow-anti-patterns.md": "16d74c0b43a304b4af82d5e116cde8ed72144530e9d0c863553a2b764c48e66f", + "references/upsell-vs-downsell-logic.md": "6fc45503c6228af8138b2cfc351bebb53580f032afcf3f64da1f0e8d3dd2207d", + "references/win-back-flow-patterns.md": "91489d5e1b49254334eb75e09e2fcf7d93fe4d20dcf80d5c203d1dd83862045e" + }, + "usability-testing": { + "SKILL.md": "20a5eeeab1e6330f3c0934858b7e5624181255a6278b6d86e096b7f45c3e2efa", + "references/task-script-patterns.md": "ef6f52b28935f89c671077692dc71c739e6bbff86f572fbd9e49746a3ed60ffc" + }, + "user-feedback-aggregation": { + "SKILL.md": "0e15fc40121b21d733b9a0738d7180efd931c508bcd40aa2beeec61b4ef409cc", + "references/categorization-and-tagging-at-scale.md": "b32f86ca6c1408c0a4ae0c9782add748956b2139cb1b46fb13cb2e9211ad13c9", + "references/channel-source-weighting.md": "57bdeb70e53273164c6471f6b4e662fe58baf76eafb6a16ac27c497849f4b876", + "references/channel-types-and-what-each-surfaces.md": "19d44154994213c597e9150e66325e6e223f24a9349e2a1110892d124966f1a0", + "references/closing-the-loop-with-users.md": "7795ce98dec28b859acbdaf2ddc0ce98da305bdcfa51a9c2408ef015ba573e9d", + "references/common-feedback-aggregation-failures.md": "55b6b83283de8ab1733e3c6b35fa59757cb9148619ac208bb9a144fe0031ec16", + "references/detecting-drift-in-feedback.md": "e7ef824cb41fcfcc8207f7c3f02d333af292432a386bc98518534a03ce9a4422", + "references/frequency-vs-intensity.md": "1d6b37e905ee936a14fc30c3c22f78019eb20216514470f23c76e9f61bc1e395", + "references/from-feedback-to-product-decision.md": "21d4e9a3d1c693c74bc1bbaf5fa6519c5c43f2fb309bf1c112c24fc686cc2d94", + "references/tooling-considerations.md": "ae97ffe4bbbcbb3036bb8c2c3ced470f97a311f996c209f089f5853591adea7f" + }, + "ux-research": { + "SKILL.md": "0febd308046598e5f3004b7dac784a96b695e8e2a7c9be257a350424439f3ef1", + "references/interview-guide-template.md": "1e5200c96ad7b02b75b7d38f2f343f24fd62cf8fa71c56462f9373b81820a207" + }, + "vendor-evaluation": { + "SKILL.md": "99a61bca3d0d2185ac225426e506e00b7cb882a9891c59d6ba6273e16b16ac4d", + "references/evaluation-rubric.md": "955546c1813905f7362ac8579aa0e33ec844dd91c18c6279a6f3e0e09ee2e553" + }, + "vertical-site-conventions": { + "SKILL.md": "f7477db56b1ad8ae4ba7539cca137d4dc0d2577aa51b4709b92cbacef6a4b302", + "references/shape-b2b-manufacturer.md": "d4bfeed8109ab099d44a494b8a9ea1d509c33dcbf4b91537647593f2454b61eb", + "references/shape-conventions-checklist.md": "7a05af5427e74dbe85df1ad522b9bf5fd507dfcbddbedabef7b9ed2ac752d7c7", + "references/shape-directory-marketplace.md": "07a763dadfb06db0c5aea036dfc2b911bff113e70a34483f3a86375fea4595a7", + "references/shape-ecommerce-catalog.md": "dd6e1035986ef13af56795e24a7345905cfa0fb0e4899f7158430866cf9d05e6", + "references/shape-ecommerce-standout.md": "95a36fa81428a16cacc34d0e8f05c2001fa4c65622166a7489e34b7e58879e6e", + "references/shape-hospitality-experience.md": "8d3f0b8296227b7dfc65d50cccb7a097a000034d6119588046523a537d2acc36", + "references/shape-hospitality-food.md": "18807c5d7cb1a2f28b2ee03ad8d67ca0399641e5c15a08bf1964a5d309978a68", + "references/shape-institution-mission.md": "9e387053434d21931e083e4eb092fea2958a6954a57a9d9722619c4b2095fb7c", + "references/shape-inventory-listing.md": "3301fa4c10d02d22fc4827bfb62702237fcc9fea424c2ee3b5bbb95714bf5b54", + "references/shape-local-service-booking.md": "3f27d354c81fbb9f21f786df46ec722d1eac02735c28f458c1ff2a03cb6a75fe", + "references/shape-subscription-app.md": "66550ed130fd9878666ebb16d03aff4f9aeb29232915f330c910b7aba4188807" + } +} diff --git a/SKILL_AUTHORING.md b/SKILL_AUTHORING.md new file mode 100644 index 0000000..7abe992 --- /dev/null +++ b/SKILL_AUTHORING.md @@ -0,0 +1,239 @@ +# Skill Authoring Guide + +This doc locks in the structure every skill in this repo follows. If you contribute a skill, it follows this pattern. If you fork the repo, this is the pattern to replicate. + +Uniformity is the point. A reader should be able to pick up any skill and know where to look for the trigger description, the framework, the workflow, and the references. No surprises. + +--- + +## File structure + +``` +skills/ + skill-name/ + SKILL.md (required) + references/ (recommended) + template.md (a fillable template the user can copy) + checklist.md (a runbook or checklist for the work) + example.md (one or two worked examples) + [domain-deep-dive.md] (optional: deeper reference content) +``` + +Skill folder names are lowercase, hyphenated, verb-noun or category-noun. `seo-onpage`, `brand-voice`, `code-review-web`. No org branding in skill names. + +--- + +## SKILL.md structure + +Every SKILL.md follows this exact section order. If a section does not apply, omit it cleanly. Do not invent new top-level sections. + +The eight required headers are: `## When to use`, `## When NOT to use`, `## Required inputs`, `## The framework`, `## Workflow`, `## Failure patterns`, `## Output format`, `## Reference files`. Each header MUST start with the canonical text and MAY append a colon-suffix descriptive label (e.g., `## The framework: 5 phases`, `## The framework: brief structure`, `## Workflow for an active incident`). Do not rename the canonical word itself (no `## The brief structure` in place of `## The framework`). + +**Optional `## Deep dive: [topic]` sections.** Teaching skills (skills whose primary job is to instruct the reader on a craft, not to produce a deliverable) MAY add `## Deep dive: [topic]` sections after `## Workflow` and before `## Failure patterns` for pedagogical depth that does not fit inside the canonical sections. The `Deep dive:` prefix is the only sanctioned non-canonical section pattern. Use it sparingly: most skills should not need any deep dives, and a skill with more than two is a signal the content should split into reference files. This is not a license for arbitrary section drift; the canonical eight still carry the load. + +```markdown +--- +name: skill-name +description: "A pushy, trigger-rich description. Two to four sentences. See description rules below." +category: category-id +catalog_summary: "One-line description for the README catalog table" +display_order: 1 +--- + +# Skill Name + +[One sentence purpose statement. What this skill does in plain language.] + +--- + +## When to use + +- [Bullet 1] +- [Bullet 2] +- [Bullet 3] + +## When NOT to use + +- [Bullet 1, with redirect to the right skill] +- [Bullet 2] + +--- + +## Required inputs + +[List of things the skill needs before producing output. If it can elicit them, say so.] + +--- + +## The framework + +[The core methodology. Could be sections, dimensions, layers, or steps. This is the durable IP of the skill.] + +--- + +## Workflow + +1. [Step 1] +2. [Step 2] +3. [Step 3] +... + +--- + +## Failure patterns + +[Patterns that signal the work is going wrong. What to push back on.] + +--- + +## Output format + +[What the deliverable looks like, where it goes, naming conventions.] + +--- + +## Reference files + +- `references/file.md` - [What it is and when to read it] +- `references/file.md` - [What it is and when to read it] +``` + +--- + +## Frontmatter fields + +Every SKILL.md frontmatter has five required fields. The first two are the trigger surface; the last three drive the README catalog generator. + +| Field | Type | Notes | +|---|---|---| +| `name` | string | Must match the folder name. Used by Claude when loading the skill. | +| `description` | string | 2 to 4 sentences. See description rules below. | +| `category` | string | One of: `strategy-and-discovery`, `brand`, `design`, `content`, `seo-foundation`, `seo-audit-suite`, `product`, `development`, `qa`, `operations`, `growth`, `research`, `cross-cutting`, `process-and-team`. Determines the catalog section the skill renders into. | +| `catalog_summary` | string | One-line description used as the third column of the catalog table. Aim for under 140 characters. No trailing punctuation. | +| `display_order` | integer | Position within the category. Smallest first. Skills with no `display_order` render after the ordered ones, alphabetically by slug. | + +After editing any of these fields, run `python scripts/generate_readme_catalog.py --write` to regenerate the README catalog content. CI runs `--check` and fails the build if the README is out of sync. + +--- + +## Description rules + +The description is the most important part of the skill. It is the only thing Claude reads on every turn. Good descriptions trigger reliably. Bad descriptions either over-trigger (annoying) or under-trigger (useless). + +**Format:** 2 to 4 sentences, in quotes in the YAML frontmatter. + +**Sentence 1:** What the skill does and the artifact it produces. + +**Sentence 2:** Explicit "use this skill whenever the user..." with verbs and contexts. + +**Sentence 3 (optional):** A list of trigger phrases ("Triggers on X, Y, Z"). Be generous. Cover synonyms, common typos, and casual phrasings. + +**Sentence 4 (optional):** Edge case triggers. "Also triggers when the user [implicit case], even if they do not say [explicit term]." + +**Be pushy.** Claude tends to under-trigger skills. The description should err toward triggering when relevant rather than waiting for a perfect match. + +**Bad description:** +> "A skill for SEO audits." + +**Good description:** +> "Run a comprehensive on-page SEO audit covering title tags, meta descriptions, header structure, content quality, internal links, image optimization, and URL hygiene. Use this skill whenever the user asks to optimize a page, audit on-page SEO, fix titles or meta tags, review headers, check internal linking, or improve a single URL's search performance. Triggers on on-page SEO, page audit, title tag, meta description, H1, header structure, internal links, image alt, URL slug, page optimization. Also triggers for any single-page review where ranking or click-through is the goal." + +--- + +## Length rules + +- **SKILL.md**: aim for under 250 lines. Hard cap at 500. +- **Reference files**: aim for under 400 lines. If longer, add a table of contents at the top. +- **Whole skill folder**: a reader should be able to scan everything in 15 minutes. + +If a skill is bursting past these limits, that is a signal it should split into two skills. + +--- + +## Voice and style rules + +- **Punchy short sentences.** Default to declarative. Earn every long sentence. +- **No em dashes.** Use commas, parens, periods, or colons. (See `creative-brief/references/voice-and-tone-guide.md` for the full voice argument; we picked a side for this repo.) +- **Direct address.** Talk to the reader as "you." Talk about the user as "the user." +- **No hype words.** Skip "leverage," "synergy," "best-in-class," "cutting-edge," "revolutionary." If a sentence works without them, they were padding. +- **Concrete examples beat abstract advice.** If you write a principle, follow it with one specific example. + +--- + +## Future-proofing rules + +These skills are meant to age well. Five years from now, "your favorite framework" will be different. The principles will be the same. + +**Do reference:** +- W3C and WHATWG specs (HTML, CSS, ARIA, HTTP) +- Schema.org vocabulary +- WCAG accessibility levels +- MDN Web Docs (for browser APIs) +- Nielsen Norman Group (for UX principles) +- Stable concepts: semantic HTML, progressive enhancement, REST, content security, signal-to-noise + +**Do NOT reference:** +- Specific framework versions ("React 18", "Next.js 14") - say "your component framework" or give the principle +- Specific algorithm updates by name (they get superseded) +- Specific tool versions or pricing tiers (they change) +- This year's trending technique (it might not trend next year) +- Vendor-specific marketing terms + +When you must name a tool, name 2 to 3 alternatives or write "your X tool of choice." This protects the reader who uses something you didn't think of. + +--- + +## Stack-agnostic rules + +Every skill must work for someone on Next.js, WordPress, Shopify, Webflow, plain HTML, or whatever comes next. + +- **Default to principle.** "Set the canonical tag to the production URL" works everywhere. "Use the `metadata` export in app/layout.tsx" only works in Next.js App Router. +- **Stack-specific patterns go in reference files**, not SKILL.md. Name them clearly: `references/nextjs-patterns.md`, `references/wordpress-patterns.md`. +- **In SKILL.md, point at the reference**: "If using Next.js, see `references/nextjs-patterns.md` for the App Router and Pages Router equivalents." + +--- + +## Reference files + +Every skill should ship with at least one reference file. The strongest skills have three: a template, a checklist, and an example. + +**Templates** are fillable. Copy and use. Markdown structure with bracketed fields the user replaces. + +**Checklists** are runnable. Items the user (or Claude) verifies one by one before declaring the work done. + +**Examples** are filled-in versions of the template, applied to a fictional but realistic case. Show what "good" looks like. + +Reference files use the same voice and length rules as SKILL.md. + +--- + +## Naming conventions + +| Type | Pattern | Example | +|---|---|---| +| Skill folder | lowercase-hyphenated | `seo-onpage` | +| SKILL.md | exactly `SKILL.md` | `SKILL.md` | +| Template | `[noun]-template.md` | `audit-template.md` | +| Checklist | `[noun]-checklist.md` | `prelaunch-checklist.md` | +| Example | `example-[scenario].md` | `example-saas-brief.md` | +| Stack guide | `[stack]-patterns.md` | `nextjs-patterns.md` | +| Domain reference | `[topic]-guide.md` or `[topic]-reference.md` | `voice-and-tone-guide.md` | + +--- + +## Triggering checklist + +Before publishing a skill, run this check: + +- [ ] Does the description name the artifact produced? +- [ ] Does the description list at least 5 trigger phrases? +- [ ] Does it cover at least one implicit trigger ("even if they do not say...")? +- [ ] Does the SKILL.md have a "When NOT to use" section that points at sibling skills? +- [ ] Is the framework section the durable IP, or is it filler? +- [ ] Does the workflow have numbered steps a reader can follow? +- [ ] Does the failure-patterns section call out specific bad inputs to push back on? +- [ ] Are reference files actually referenced from SKILL.md with guidance on when to read them? +- [ ] Does it work without any specific tool or framework named? +- [ ] Has someone (you) used it on a real project at least once before publishing? + +If all 10 boxes check, ship it. If they don't, rewrite. diff --git a/WORKFLOWS.lock b/WORKFLOWS.lock new file mode 100644 index 0000000..a778f85 --- /dev/null +++ b/WORKFLOWS.lock @@ -0,0 +1,77 @@ +{ + "autonomy-review": { + "file": "autonomy-review.md", + "sha256": "14bf6e2a8188c92c816529b95ebbb3e3e6f4b1a43df67ebbf68024e1ab72ecc3", + "status": "template" + }, + "ci-prove-gate-wiring": { + "file": "ci-prove-gate-wiring.md", + "sha256": "137d850bef7d84b4c0351e8b85a37c77aea8674dd93c9d2b7d5de9be8e75ac17", + "status": "template" + }, + "content-pipeline-prove-gates": { + "file": "content-pipeline-prove-gates.md", + "sha256": "31948660c4d2c97098edb79c3ca88b123dd0e9f54fd6643c65ddf49ed39c4431", + "status": "validated" + }, + "conversion-by-source-diagnosis": { + "file": "conversion-by-source-diagnosis.md", + "sha256": "56c2965d1612f152365fac22fae68b41d0e8f9a7c2016fbaaaf95d2e1c8e9908", + "status": "template" + }, + "corpus-integrity-and-correction": { + "file": "corpus-integrity-and-correction.md", + "sha256": "f700641957273b279a9656b5bb5b4675bfddc1a6db2759abea8fff4607e15832", + "status": "template" + }, + "data-surface-integrity": { + "file": "data-surface-integrity.md", + "sha256": "786f573deff77b6182064d98a2ded989e8ab30dad7d5a75269bc29e3bfb27241", + "status": "template" + }, + "experiment-loop-with-pre-registered-gates": { + "file": "experiment-loop-with-pre-registered-gates.md", + "sha256": "cb64aac8a19f31f87d0631a1b9f6e1b054458949ea2c40a6349611ce79a5784b", + "status": "template" + }, + "incident-response-and-lane-demotion": { + "file": "incident-response-and-lane-demotion.md", + "sha256": "e547a5cff6fcdf990bf630faf4f4846aa3d5bae69d9eb30752bf4861eae2e0bb", + "status": "template" + }, + "link-graph-and-metadata-parity-audit": { + "file": "link-graph-and-metadata-parity-audit.md", + "sha256": "b541c4f63c63a29191c913bc8f3620d365c2a4776694a4df1011c8f200ea5fe3", + "status": "template" + }, + "migration-with-verification": { + "file": "migration-with-verification.md", + "sha256": "20524d52acc1739745560d09ebb7b8b0500204c4bbf4e1a7d9dbef99e55565b6", + "status": "template" + }, + "post-deploy-live-verification": { + "file": "post-deploy-live-verification.md", + "sha256": "944d20aa8740eb54f12fba5457b3f897b4f66cbed7a20e09dc89341e11bea90c", + "status": "template" + }, + "regulated-content-compliance-gate": { + "file": "regulated-content-compliance-gate.md", + "sha256": "b518f64433a1ff410f003a3d2ec81d8ea957c962f3aa4aaf6057b7cb74210254", + "status": "template" + }, + "revenue-tracking-integrity": { + "file": "revenue-tracking-integrity.md", + "sha256": "9a94e01de89e4a5e79c276ecee1618ce3a958ef2f40fa3bf6089e37d707f1ddd", + "status": "template" + }, + "traffic-drop-triage": { + "file": "traffic-drop-triage.md", + "sha256": "2f00f2c4f2d08e0df0699d057b5061300254a2adb0b9f7344eee2d9cf5cf8569", + "status": "template" + }, + "warehouse-data-plane-standup": { + "file": "warehouse-data-plane-standup.md", + "sha256": "0d1b753d34023c8344b5f4bb5ecc9a74a644a7a1a8fff1ba80bb11eec413d303", + "status": "template" + } +} diff --git a/assets/showcase/archetype-bloom-soda.png b/assets/showcase/archetype-bloom-soda.png new file mode 100644 index 0000000..5b8bd8f Binary files /dev/null and b/assets/showcase/archetype-bloom-soda.png differ diff --git a/assets/showcase/archetype-forge-fitness.png b/assets/showcase/archetype-forge-fitness.png new file mode 100644 index 0000000..9330f7a Binary files /dev/null and b/assets/showcase/archetype-forge-fitness.png differ diff --git a/assets/showcase/archetype-observatory-editorial.png b/assets/showcase/archetype-observatory-editorial.png new file mode 100644 index 0000000..3371e6b Binary files /dev/null and b/assets/showcase/archetype-observatory-editorial.png differ diff --git a/assets/showcase/archetype-pulse.png b/assets/showcase/archetype-pulse.png new file mode 100644 index 0000000..960c1eb Binary files /dev/null and b/assets/showcase/archetype-pulse.png differ diff --git a/assets/showcase/creative-direction-highlight-desktop.jpg b/assets/showcase/creative-direction-highlight-desktop.jpg new file mode 100644 index 0000000..769bf3b Binary files /dev/null and b/assets/showcase/creative-direction-highlight-desktop.jpg differ diff --git a/assets/showcase/creative-direction-highlight-mobile.jpg b/assets/showcase/creative-direction-highlight-mobile.jpg new file mode 100644 index 0000000..0c9480d Binary files /dev/null and b/assets/showcase/creative-direction-highlight-mobile.jpg differ diff --git a/assets/showcase/logo-design-highlight-desktop.jpg b/assets/showcase/logo-design-highlight-desktop.jpg new file mode 100644 index 0000000..816a7e7 Binary files /dev/null and b/assets/showcase/logo-design-highlight-desktop.jpg differ diff --git a/assets/showcase/logo-design-highlight-mobile.jpg b/assets/showcase/logo-design-highlight-mobile.jpg new file mode 100644 index 0000000..a013014 Binary files /dev/null and b/assets/showcase/logo-design-highlight-mobile.jpg differ diff --git a/assets/showcase/logo-design-showcase-desktop.png b/assets/showcase/logo-design-showcase-desktop.png new file mode 100644 index 0000000..4762855 Binary files /dev/null and b/assets/showcase/logo-design-showcase-desktop.png differ diff --git a/assets/showcase/logo-design-showcase-mobile.png b/assets/showcase/logo-design-showcase-mobile.png new file mode 100644 index 0000000..a5cea27 Binary files /dev/null and b/assets/showcase/logo-design-showcase-mobile.png differ diff --git a/assets/showcase/marks-showcase-desktop.png b/assets/showcase/marks-showcase-desktop.png new file mode 100644 index 0000000..ac5674e Binary files /dev/null and b/assets/showcase/marks-showcase-desktop.png differ diff --git a/assets/showcase/marks-showcase-mobile.png b/assets/showcase/marks-showcase-mobile.png new file mode 100644 index 0000000..2ca325e Binary files /dev/null and b/assets/showcase/marks-showcase-mobile.png differ diff --git a/assets/showcase/reference-build-highlight-desktop.png b/assets/showcase/reference-build-highlight-desktop.png new file mode 100644 index 0000000..b6839fc Binary files /dev/null and b/assets/showcase/reference-build-highlight-desktop.png differ diff --git a/assets/showcase/reference-build-highlight-mobile.png b/assets/showcase/reference-build-highlight-mobile.png new file mode 100644 index 0000000..b6839fc Binary files /dev/null and b/assets/showcase/reference-build-highlight-mobile.png differ diff --git a/assets/showcase/showcase-empty-state.png b/assets/showcase/showcase-empty-state.png new file mode 100644 index 0000000..1b6a20f Binary files /dev/null and b/assets/showcase/showcase-empty-state.png differ diff --git a/assets/showcase/showcase-filter-active.png b/assets/showcase/showcase-filter-active.png new file mode 100644 index 0000000..adf138c Binary files /dev/null and b/assets/showcase/showcase-filter-active.png differ diff --git a/assets/showcase/showcase-grid-hero.png b/assets/showcase/showcase-grid-hero.png new file mode 100644 index 0000000..292a4b1 Binary files /dev/null and b/assets/showcase/showcase-grid-hero.png differ diff --git a/assets/showcase/threshold-demo-screenshot-desktop.png b/assets/showcase/threshold-demo-screenshot-desktop.png new file mode 100644 index 0000000..0a6c315 Binary files /dev/null and b/assets/showcase/threshold-demo-screenshot-desktop.png differ diff --git a/assets/showcase/threshold-demo-screenshot-mobile.png b/assets/showcase/threshold-demo-screenshot-mobile.png new file mode 100644 index 0000000..3fab20c Binary files /dev/null and b/assets/showcase/threshold-demo-screenshot-mobile.png differ diff --git a/dist/pi/.agents/skills/accessibility-audit/SKILL.md b/dist/pi/.agents/skills/accessibility-audit/SKILL.md new file mode 100644 index 0000000..9a93d44 --- /dev/null +++ b/dist/pi/.agents/skills/accessibility-audit/SKILL.md @@ -0,0 +1,239 @@ +--- +name: accessibility-audit +description: "Run a comprehensive WCAG accessibility audit covering perceivable, operable, understandable, and robust principles. Use this skill whenever the user wants to audit accessibility, review WCAG compliance, fix accessibility issues, prepare for accessibility certification, address an accessibility lawsuit risk, or systematically improve a site's accessibility. Triggers on accessibility audit, WCAG audit, a11y audit, accessibility compliance, ADA compliance, screen reader test, keyboard navigation, accessibility report, fix accessibility, axe scan. Also triggers when accessibility issues have been reported and need systematic remediation." +category: development +catalog_summary: "WCAG compliance audit with remediation plan" +display_order: 3 +--- + +# Accessibility Audit + +Run a thorough accessibility audit and produce a remediation plan. Stack-agnostic. Anchored to WCAG 2.1 AA, with notes on AAA where relevant. + +This skill goes deeper than the accessibility checks in `qa-testing` and `design-standards`. Use this when accessibility itself is the goal. + +--- + +## When to use + +- Pre-launch accessibility verification +- Compliance preparation (ADA, EN 301 549, AODA, Section 508) +- Remediation after an audit finding or complaint +- Annual or quarterly accessibility health check +- Onboarding accessibility into a team that hasn't prioritized it before + +## When NOT to use + +- General QA after deploys (use `qa-testing`) +- Component-level accessibility implementation (use `frontend-component-build`) +- Color contrast for design tokens (use `design-standards` or `brand-identity`) + +--- + +## Required inputs + +- The site or product under audit +- The scope (full site, specific section, specific user flow) +- The target standard (WCAG 2.1 AA is most common) +- Any specific concerns or known issues +- Tools available (automated scanners, screen readers, manual testing) + +--- + +## The framework: WCAG's 4 principles + +WCAG organizes accessibility around four principles. The audit covers each in depth. + +### 1. Perceivable + +Information and UI must be presentable in ways users can perceive. + +**Audit checks:** + +- **Text alternatives.** All non-decorative images have descriptive `alt` text. Decorative images use `alt=""`. Complex images (charts, infographics) have long descriptions. +- **Time-based media.** Videos have captions. Pre-recorded audio has transcripts. Live audio has live captions where required. +- **Adaptable.** Content structure is conveyed through markup (semantic HTML), not just visual styling. Reading order makes sense when CSS is disabled. +- **Distinguishable.** Color is not the sole means of conveying information. Text contrast meets AA (4.5:1 normal, 3:1 large). UI element contrast meets 3:1. Audio can be paused, stopped, or muted. + +### 2. Operable + +UI components and navigation must be operable. + +**Audit checks:** + +- **Keyboard accessible.** All functionality available via keyboard alone. No keyboard traps. Focus visible. +- **Enough time.** Time limits can be adjusted, paused, or extended. Auto-updating content can be paused. +- **Seizures and physical reactions.** No content that flashes more than 3 times per second. +- **Navigable.** Skip links present. Pages have descriptive titles. Focus order is logical. Link purpose clear from text or context. Multiple ways to find pages (sitemap, search, navigation). Headings and labels are descriptive. +- **Input modalities.** Pointer gestures have keyboard alternatives. Pointer cancellation supported (mouse-up, not mouse-down for activation). Labels match accessible names. Motion-triggered functionality has alternatives. + +### 3. Understandable + +Information and operation must be understandable. + +**Audit checks:** + +- **Readable.** Page language declared (``). Unusual words and abbreviations have definitions or expansions. Reading level appropriate to audience. +- **Predictable.** Focus does not change context unexpectedly. Input does not change context unexpectedly. Navigation is consistent across pages. Components that look similar behave similarly. +- **Input assistance.** Errors are identified clearly. Labels and instructions are provided for input. Error suggestions are given where possible. For pages handling legal commitments or financial transactions, errors can be reviewed and corrected before submission. + +### 4. Robust + +Content must be robust enough to work with current and future user agents. + +**Audit checks:** + +- **Compatible.** Markup is valid. Name, role, and value of UI components are programmatically determinable. Status messages can be programmatically determined and announced. + +--- + +## Audit methodology + +### Stage 1: Automated scan + +Run automated scanners across the priority pages. These catch 30 to 50 percent of issues but miss the rest. + +**Tools:** +- axe DevTools (browser extension) +- Lighthouse (Chrome DevTools accessibility audit) +- WAVE (browser extension) +- Pa11y (CLI for batch scanning) + +**Output:** A list of automated findings, by page. + +### Stage 2: Manual keyboard testing + +Unplug the mouse. Navigate the priority user flows using only keyboard. + +**Test:** +- Tab and Shift+Tab move through interactive elements in logical order +- Enter activates buttons and links +- Space activates buttons (and toggles checkboxes) +- Arrow keys navigate within composite widgets (tabs, menus, listboxes) +- Escape dismisses modals, popovers, menus +- Focus is always visible +- Focus returns to a sensible place after modals or popovers close +- No keyboard trap (focus can always leave) + +**Document:** Any flow where keyboard navigation breaks down. + +### Stage 3: Screen reader testing + +Test with at least one real screen reader. Each combination has quirks. + +**Common combinations:** +- VoiceOver + Safari (macOS / iOS) +- NVDA + Firefox or Chrome (Windows) +- JAWS + Chrome (Windows; commercial but common in enterprise) +- TalkBack + Chrome (Android) + +**Test:** +- Page structure announced correctly (headings, landmarks) +- Form labels read with their inputs +- Errors announced when they appear +- Status changes announced (loading, success, error) +- Modal context announced when opened +- Images have meaningful alt text (or are correctly identified as decorative) + +### Stage 4: Visual testing + +Verify the visual aspects of accessibility. + +**Test:** +- Color contrast for all text/background pairs (use a contrast checker) +- UI element contrast (3:1 for icons, borders, focus rings) +- Color-blindness simulation (deuteranopia at minimum) +- Zoom to 200% - content remains usable, no horizontal scroll +- Reflow at 320px viewport +- Text spacing applied (line height, letter spacing) - no content cut off +- Motion can be reduced (`prefers-reduced-motion` honored) + +### Stage 5: Cognitive accessibility + +Often overlooked. Critical for inclusive products. + +**Test:** +- Reading level appropriate +- Instructions clear +- Error messages explain how to fix the error, not just that one occurred +- Forms allow correction before submission +- Time limits avoidable or extendable +- Important content not dependent on memory of prior pages + +--- + +## Workflow + +1. **Define scope.** Full site? Specific flows? Specific page templates? +2. **Run automated scans.** Document findings per page. +3. **Manual keyboard pass.** Test all priority flows. +4. **Screen reader pass.** Test with at least one combination. +5. **Visual checks.** Contrast, zoom, color blindness, motion. +6. **Cognitive checks.** Reading level, error handling, time limits. +7. **Score against WCAG.** Per success criterion (level A, AA, AAA). +8. **Prioritize findings.** Critical (blocks users), Important (degrades experience), Minor (polish). +9. **Write the report.** Use the template in [`references/audit-report-template.md`](references/audit-report-template.md). +10. **Build a remediation plan.** Sequenced fixes with effort and impact estimates. + +--- + +## Severity classification + +For prioritization: + +**Critical (P0):** +- Blocks an entire user flow for an assistive-tech user +- Renders a key page completely inaccessible +- Examples: form with no labels, modal without focus management, primary CTA not keyboard-accessible + +**Important (P1):** +- Significantly degrades the experience for assistive-tech users +- Examples: missing alt text on key images, low-contrast body text, error messages that don't announce + +**Minor (P2):** +- Affects edge cases or specific assistive technology combinations +- Examples: minor focus order issues, missing decorative alt attributes, edge case keyboard handling + +**Polish (P3):** +- Above-AA improvements that benefit accessibility but aren't compliance-blocking +- Examples: AAA contrast targets, additional reduced-motion variants, language attributes on inline foreign words + +--- + +## Failure patterns + +- **Automated scan only.** Catches 30 to 50 percent of issues. The remaining 50 to 70 percent are in keyboard, screen reader, and cognitive testing. +- **Testing only on the home page.** The home page is usually the most accessible. Bugs hide in deeper flows. +- **Treating accessibility as a one-time project.** Accessibility erodes with every deploy. Bake it into the development cycle. +- **Fixing without root cause.** Patching individual issues without understanding why they happened means new ones keep appearing. +- **Ignoring screen reader testing.** Hard to do well, easy to skip. Single biggest source of "we thought we were accessible" surprises. +- **Confusing AA and AAA.** AAA is rarely the right target. AA is the practical baseline for most products. +- **Treating accessibility as a designer or developer responsibility alone.** Content, product, QA, and leadership all need to participate. +- **Assuming compliance equals accessibility.** WCAG conformance is a floor, not a ceiling. Real users may still struggle. + +--- + +## Output format + +Default output is a comprehensive audit report at `accessibility-audit.md`. + +Structure: +1. Executive summary +2. Methodology (tools used, pages tested, screen readers used) +3. Findings by WCAG principle +4. Critical findings (P0) with specific URLs and fixes +5. Important findings (P1) +6. Minor findings (P2) +7. Polish (P3) +8. Remediation roadmap (sequenced and prioritized) +9. Appendices (full automated scan results, keyboard navigation notes, screen reader notes) + +Plus a remediation tracking spreadsheet with one row per finding. + +--- + +## Reference files + +- [`references/audit-report-template.md`](references/audit-report-template.md) - Full audit report template. +- [`references/wcag-quick-reference.md`](references/wcag-quick-reference.md) - Condensed WCAG 2.1 AA criteria with audit checks. +- [`references/aria-patterns.md`](references/aria-patterns.md) - Decision-grade ARIA patterns. Semantic-HTML-first principle, common interactive widgets (accordion, tabs, modal, toggle, disclosure, navigation), live regions, hiding patterns, labeling, state indicators, anti-patterns. diff --git a/dist/pi/.agents/skills/accessibility-audit/references/aria-patterns.md b/dist/pi/.agents/skills/accessibility-audit/references/aria-patterns.md new file mode 100644 index 0000000..b74fc67 --- /dev/null +++ b/dist/pi/.agents/skills/accessibility-audit/references/aria-patterns.md @@ -0,0 +1,471 @@ +# ARIA patterns reference + +Decision-grade ARIA patterns for the audit. Covers when to use ARIA, when to skip it, and the common patterns that recur across web products. + +ARIA is powerful and easy to misuse. The most common mistake is reaching for ARIA when semantic HTML would have done the job already. The second most common mistake is applying ARIA without the supporting JavaScript that makes the attribute true (e.g., `aria-expanded="false"` on a button that does not actually toggle anything). + +This file expands the audit checks in [SKILL.md](../SKILL.md) with the specific patterns auditors should verify and the anti-patterns to flag. + +--- + +## The semantic-HTML-first principle + +Before reaching for ARIA, check whether semantic HTML already does what is needed. + +**The principle.** ARIA exists to fill gaps in HTML. When semantic HTML provides the same semantics natively, the semantic element is the right answer. Adding ARIA on top of semantic HTML is usually redundant and sometimes broken. + +**Examples of redundant ARIA.** + +- `