skills/aem/edge-delivery-services/skills/content-driven-development/SKILL.md
Apply a Content Driven Development process to AEM Edge Delivery Services development. Use for ALL code changes - new blocks, block modifications, CSS styling, bug fixes, core functionality (scripts.js, styles, etc.), or any JavaScript/CSS work that needs validation.
npx skillsauth add adobe/skills content-driven-developmentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are an orchestrator of the Content Driven Development workflow for AEM Edge Delivery Services. This workflow ensures code is built against real content with author-friendly content models.
CRITICAL: Never start writing or modifying code without first identifying or creating the content you will use to test your changes.
Use CDD for ALL AEM development tasks:
Do NOT use for:
Content Driven Development prioritizes creating or identifying test content before writing code. This ensures:
Optional: Understanding CDD Principles
Read resources/cdd-philosophy.md if:
Otherwise: Follow the workflow steps below
FIRST STEP: Use the TodoWrite tool to create a todo list with the following 8 tasks:
Start dev server (if not running)
Analyze & plan
Design content model
Identify/create test content
Implement
Lint & test
Final validation
Ship it
Mark todo complete when: Todo list created with all 8 tasks
Check if dev server is running:
curl -s -o /dev/null -w "%{http_code}" http://localhost:3000
Expected: 200 (server running) or connection error (server not running)
If not running, start it:
aem up --no-open --forward-browser-logs
Notes:
npm install -g @adobe/aem-clinpx -y @adobe/aem-cli up --no-open --forward-browser-logsIMPORTANT: Check the command output for errors. Common issues:
After starting, verify it's running:
curl -s -o /dev/null -w "%{http_code}" http://localhost:3000
Expected: 200
Success criteria:
Mark todo complete when: Dev server confirmed running and accessible
Invoke: analyze-and-plan skill
Provide:
The analyze-and-plan skill will:
Success criteria:
Mark todo complete when: Analysis documented and acceptance criteria defined
Skip if: CSS-only changes that don't affect content structure
Invoke: content-modeling skill
Provide:
The content-modeling skill will:
Success criteria:
Mark todo complete when: Content model designed and documented
Goal: End this step with accessible test content URL(s) covering all test scenarios
Choose the best ath based on your situation:
When to use: User already has content and provided URL(s)
What to do:
curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/path200 statusWhen to use: Building a brand new block that doesn't exist yet
What to do:
Approach 1: CMS Content (Recommended)
curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/path200 statusApproach 2: Local HTML (Temporary)
drafts/tmp/{block-name}.plain.htmlresources/html-structure.md for local HTML file format guidanceaem up --html-folder drafts --no-open --forward-browser-logscurl -s -o /dev/null -w "%{http_code}" http://localhost:3000/drafts/tmp/{block-name}200 statusWhen to use: Modifying, fixing, or styling an existing block
What to do:
First: Search for existing content
What find-test-content will do:
Then: Assess search results
If sufficient content found:
curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/path200 statusIf no content found OR insufficient coverage:
Success criteria:
Mark todo complete when: Test content identified/created and validated
Invoke: building-blocks skill
Provide:
The building-blocks skill will:
Success criteria:
Mark todo complete when: building-blocks skill reports implementation complete and working across viewports
What to do:
npm run lint
If lint errors:
npm run lint:fix for auto-fixable problems)Run existing tests:
npm test
Note: Unit tests are optional and only needed for logic-heavy utilities. The testing-blocks skill (invoked by building-blocks in Step 5) handles browser testing. This step catches any remaining lint issues and runs the project's test suite.
Success criteria:
npm run lint passes with no errorsnpm test passes (if tests exist)Mark todo complete when: All lint and test checks pass
What to do:
Review acceptance criteria from Step 2
Final browser sanity check
Verify no regressions
Success criteria:
Mark todo complete when: All acceptance criteria verified and no regressions found
What to do:
Create feature branch (if not already on one):
git checkout -b block-name
Stage specific files only:
git add blocks/{block-name}/{block-name}.js blocks/{block-name}/{block-name}.css
# Add only files you worked on - NEVER use `git add .`
Commit with conventional commit format:
git commit -m "feat(block-name): add new block"
Include revelevant details in commit message and agent attribution in footer (agent adds Co-authored-by: cursor <[email protected]>)
Push to feature branch:
git push origin HEAD
Create PR with preview link:
https://{branch}--{repo}--{owner}.aem.page/{path}https://carousel--aem-skills-demo--shsteimer.aem.page/Determining if you need a draft PR:
Create a draft PR when:
Create a regular PR when:
Workflow for draft PRs:
gh pr create --drafthttp://localhost:3000/drafts/tmp/[test-file]PR Description Template:
Use this template for all PRs, including all relevant preview links and adapting as needed:
## Description
Brief description of changes
[If an issue exists]
Fix #<gh-issue-id>
Test URLs:
[Repeat for all relevant test urls]
- Before: https://main--{repo}--{owner}.aem.page/{path}
- After: https://{branch}--{repo}--{owner}.aem.page/{path}
[If only local test content (draft PR):]
This PR is currently a **draft** pending creation of CMS test content.
### Next Steps to Complete PR:
[add relevant steps here]
Success criteria:
Mark todo complete when: PR created and ready for review
Common mistakes that violate CDD principles:
resources/cdd-philosophy.md - Why content-first mattersresources/html-structure.md - Guide for creating local HTML test filestools
Identifies which items (pages, campaigns, products, channels, regions) had the biggest increases or decreases for a key metric between two time periods. Use this skill when someone asks "what's up and what's down," "which campaigns moved the most," "top gainers and losers," "what pages are trending," "show me what changed by channel," or any variation of identifying the biggest movers and decliners for a metric.
tools
Compares the performance of two or more audience segments across key metrics side by side. Use this skill when someone wants to compare audiences, cohorts, or groups — for example, "how do mobile users compare to desktop users on conversion," "compare new vs. returning visitors," "show me the difference between these two segments," "compare these audiences on our KPIs," or "which segment performs better." Also trigger for "segment comparison," "audience comparison," or "cohort comparison."
business
Produces a compact KPI digest showing how key metrics changed over a period and what's driving the movement. Use this skill when someone asks for a performance summary, a weekly recap, a morning briefing, a KPI update, or any variation of "how did we do this week/month." Also trigger for requests like "give me a performance overview," "what moved in the last 7 days," "pull our KPI report," or "summarize our metrics."
testing
Analyzes a multi-step conversion funnel to find where users drop off and which steps have the worst leakage. Use this skill when someone describes a journey or funnel and asks about conversion rates, drop-off, fallout, or step completion. Trigger for phrases like "analyze our onboarding funnel," "where are users dropping off," "what's our checkout conversion rate," "funnel analysis," "show me fallout between these steps," or "which step loses the most users."