007
無料Security audit, hardening, threat modeling (STRIDE/PASTA), Red/Blue Team, OWASP checks, code review, incident response, and infrastructure security for any project.
日本語の概要は準備中です。原文の説明を表示しています。
Design author-friendly content structures that work for non-technical content creators. Use when designing content structures for blocks in AEM Edge Delivery Services.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Your job is to design content structures that are author-friendly, not developer-friendly.
Authors create content using various authoring surfaces: Word/Google Docs, Document Authoring (DA), Universal Editor (UE), or custom BYOM (Bring Your Own Markup) sources. Regardless of the authoring surface, they're not developers. Structure should be intuitive for non-technical users.
Key principle: If authors struggle with the structure, you designed it wrong.
Design structures that authors can use successfully without training.
If authors need documentation to understand your structure, it's too complex.
In AEM Edge Delivery Services, block tables have a specific header structure:
The first row is always a merged cell with the block name (and optional variants):
| Carousel (Auto-Play) |
|----------------------|
| image1.jpg |
| image2.jpg |
| image3.jpg |
NOT like a traditional spreadsheet:
❌ WRONG:
| Image | Caption | Link |
|-------|---------|------|
| img1 | Text | URL |
The block name in the header is how AEM knows which JavaScript/CSS to load. Variants in parentheses provide configuration options.
IMPORTANT - Never add a second header row:
❌ WRONG - Do NOT do this:
| Team Members |
|--------------|
| Image | Name | Title | ← NEVER add this second header row!
| john.jpg | John Doe | CEO |
✅ CORRECT:
| Team Members |
|--------------|
| john.jpg | John Doe | CEO | ← Data starts immediately after block name
| jane.jpg | Jane Doe | CTO |
Block code determines column meaning by position. Authors should never add header rows with column labels - that's an anti-pattern that breaks how AEM parses blocks.
It's an art, not a science. You have two dimensions to work with:
Columns - Good for:
Rows - Good for:
Example: Rows for logical separation
| Hero |
|------|
| Large headline text |
| Supporting description |
| call-to-action-button.jpg |
Each row represents a different piece of the hero block, not different instances.
Example: Columns for attributes
| Team Members |
|--------------|
| john.jpg | John Doe | CEO |
| jane.jpg | Jane Doe | CTO |
The block code parses the table structure - first column is image, second is name, third is title. Authors just fill in the data.
Think about: "Does it make more sense to separate this content with a new row or a new column?" There's often more than one valid answer.
When structures get complex, there are techniques to simplify authoring while maintaining functionality:
When to use: Complex blocks that contain other blocks, or reusable components.
How it works: Nested structures are authored separately as fragments and referenced in the parent block.
Example:
| Tabs |
|------|
| Overview | /fragments/overview |
| Features | /fragments/features |
| Pricing | /fragments/pricing |
Each fragment contains its own blocks and structure. Authors create them separately, making complex content manageable.
Benefits:
When NOT to use:
When to use: Patterns that can be inferred from semantic markup instead of explicit block tables.
How it works: Content is authored using natural document structure (headers, lists, etc.) and block code automatically wraps it based on patterns or section metadata.
Important note about sections: In AEM EDS, sections are top-level structural divs inside <main>. Each --- in markdown creates a new section boundary. Sections can have metadata to control styling and behavior.
Example with section metadata:
---
style: feature-card
---
## Fast Performance
Lightning-fast load times for better user experience.
## Easy to Use
Intuitive interface that anyone can master.
## Secure
Enterprise-grade security built in.
Block code detects the section metadata and converts each ## heading + paragraph into a feature card within that section.
Example with pattern detection:
> "Customer testimonials are invaluable"
> — Jane Doe, CEO
> "This product changed everything"
> — John Smith, CTO
Block code recognizes the blockquote pattern and converts to testimonial cards automatically.
Benefits:
When NOT to use:
Use explicit block tables when:
Use fragments when:
Use auto-blocking when:
Combine techniques:
| Accordion |
|-----------|
| Section 1 | /fragments/section-1 |
| Section 2 | /fragments/section-2 |
Each fragment might use auto-blocking internally for its content.
There are two fundamental types of blocks:
Content is directly authored by users. The block code decorates and enhances what's already there.
Example:
| Team Members |
|--------------|
| john.jpg | John Doe | CEO |
| jane.jpg | Jane Smith | CTO |
Block code reads the table structure (3 columns = image, name, title) and decorates it with styling, responsive behavior, etc.
Authored as key-value pairs. Used to load/display dynamic experiences, often via APIs.
Example:
| Product Feed |
|--------------|
| API Endpoint | https://... |
| Max Items | 10 |
Block code uses these configs to fetch and render dynamic content.
Use Content Blocks for: Team members, features, testimonials, image galleries, article content, etc.
Use Config Blocks ONLY for: Actual configuration (API endpoints, feature flags, integration settings)
Rule 14 from David's Model: "Config blocks should only be used for config." Most blocks should be content blocks where authors create the actual content, not configuration that drives code.
Creating intuitive, semantic content structures is more art than science, but it's critically important. Good structures benefit everyone:
Non-technical users can create and maintain content without training or developer help.
Semantic content is easier for AI agents to read, understand, and work with. As AI becomes more prevalent, well-structured content becomes increasingly valuable.
Semantic structures work across multiple authoring surfaces (Word, Google Docs, DA, UE, BYOM). The same codebase can support different authoring platforms.
Logical content structures produce predictable DOM structures, reducing decoration logic complexity and making debugging easier.
Well-structured content serves as a clear contract between systems, making it easy to consume by mobile apps, external platforms, and APIs.
Reference: Content Document Semantics
David's Model (https://www.aem.live/docs/davidsmodel)
AEM Block Collection
Your project's existing blocks
Content Document Semantics Blog
These references provide proven patterns and examples - use them to inform your design decisions.
Ask yourself:
Why this matters:
Consider multiple approaches:
Option A: Table
Option B: List
Option C: Sections
<div> elements inside <main>. Each page can have many sections. Blocks and content live inside sections. Use --- in markdown to create section boundaries.Option D: Combination
Option E: Fragments
Option F: Auto-Blocking
CRITICAL: You MUST get human approval before proceeding to implementation.
After designing the content structure, present your proposal to the human:
"I've designed the content structure for [block name].
Here's my proposed approach:
**Structure:** [Table/List/Sections/etc.]
**Columns/Format:** [describe the structure]
**Example:**
[Show concrete example of how authors would create this]
**Reasoning:** [Why this structure is author-friendly]
Does this structure work for you? Any changes needed before I implement?
Why this step is MANDATORY:
DO NOT SKIP THIS STEP. Implement only after human approval.
Create documentation showing:
For Authors:
## Team Members Block - Author Guide
**How to create content:**
1. Create a table with these columns:
- Image: Photo file name or URL
- Name: Team member's full name
- Title: Their job title
- Bio: 2-3 sentences about them
- LinkedIn: Full LinkedIn URL
- Twitter: Full Twitter URL
2. Each row = one team member
**Example:**
| Image | Name | Title | Bio | LinkedIn | Twitter |
|-------|------|-------|-----|----------|---------|
| john.jpg | John Doe | CEO | John leads our... | https://linkedin.com/... | https://twitter.com/... |
For Developers:
## Content Structure
- Format: Table
- Columns: 6 (Image, Name, Title, Bio, LinkedIn, Twitter)
- Parsing: Each row = one team member object
- Optional fields: Social links (gracefully handle empty)
After completing steps 1-4:
Rationalization: "The requirements clearly define the data, I know what structure to use"
Reality:
Counter: Requirements ≠ content model. Design the authoring experience.
Rationalization: "I can design the structure as I build the block"
Reality:
Counter: Content structure drives implementation. Not the other way around.
Rationalization: "This table structure makes sense, authors will get it"
Reality:
Counter: Don't assume. Ask the actual authors.
Rationalization: "I can design this structure from scratch, no need to check references"
Reality:
Counter: Learning from references saves time and prevents known mistakes.
Rationalization: "When in doubt, use a table"
Reality:
Counter: Choose the structure that fits the content and authors.
Rationalization: "Key-value pairs give authors more flexibility and make the code easier"
Reality:
Counter: Use content blocks unless you're actually configuring something (API endpoints, feature flags, etc.).
Bad (developer-friendly):
| Team Members |
|--------------|
| 001 | employee | {"role":"ceo"} |
Good (author-friendly):
| Team Members |
|--------------|
| john.jpg | John Doe | CEO |
Authors provide actual content (images, names, titles), not technical IDs or JSON configs.
Use Word/Google Docs features naturally:
Example: Using formatting to group related content Instead of separate columns for each link type:
| Team Members |
|--------------|
| John | CEO | **LinkedIn:** https://...<br>**Twitter:** https://... |
Or using lists within a cell:
| Features |
|----------|
| Security | • Two-factor authentication<br>• Encrypted data<br>• Daily backups |
| Performance | • Fast load times<br>• Optimized delivery |
Benefits:
Don't force authors to learn special syntax.
Prefer:
Simpler = more likely to be used correctly.
Don't:
Do:
Structure should handle:
Don't assume perfect compliance. Authors will vary the structure - design for it.
The Problem: Blocks often need strings like button labels, error messages, search placeholders, or other UI text. Hardcoding these in JavaScript prevents:
The Solution: Placeholders
AEM EDS provides a placeholders pattern for centrally managing site-wide strings.
Important: Do not introduce "config" rows or columns in block tables just to house UI strings. Those labels belong in placeholders so authors keep a clean, predictable content structure.
How it works:
Authors create a placeholders sheet with two columns:
faq-search-placeholder)Search frequently asked questions...)System converts to JSON at /placeholders.json (or /en/placeholders.json for language-specific)
Blocks fetch placeholders using fetchPlaceholders() from scripts/placeholders.js
Example - FAQ Block:
Instead of hardcoding:
// ❌ BAD - Hardcoded strings
searchInput.placeholder = 'Search FAQs...';
noResults.textContent = 'No results found';
Use placeholders:
// ✅ GOOD - Author-controllable strings
import { fetchPlaceholders } from '../../scripts/placeholders.js';
const placeholders = await fetchPlaceholders();
searchInput.placeholder = placeholders.faqSearchPlaceholder || 'Search FAQs...';
noResults.textContent = placeholders.faqNoResults || 'No results found';
Placeholder Keys:
faq-search-placeholder → faqSearchPlaceholderblockname-purpose (e.g., faq-no-results, cart-add-button)When to use placeholders:
Setup:
scripts/placeholders.js (from AEM Block Collection)/placeholders.json in the CMSBenefits:
Fallbacks: Always provide default values in code for graceful degradation if placeholders don't load:
const config = placeholders.faqSearchLabel || 'Search FAQs';
| Step | Action | Time | Skip? |
|---|---|---|---|
| Understand authors | Who are they, what tools do they use | 2 min | NO |
| Design structure | Consider alternatives | 10-15 min | NO |
| Get human approval | Present structure and wait for approval | 2-5 min | NO |
| Document model | Author guide + dev notes | 5 min | NO |
Total: 20-25 minutes of content design
CRITICAL: Step 3 (Get human approval) is MANDATORY before implementation.
Your job is to design structures that are author-friendly, not developer-friendly.
Authors create content using various authoring surfaces (Word, Google Docs, DA, UE, BYOM). They're not developers. Structure should be intuitive for non-technical users.
Key principles:
Why this matters:
If authors struggle with your structure, you designed it wrong.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Security audit, hardening, threat modeling (STRIDE/PASTA), Red/Blue Team, OWASP checks, code review, incident response, and infrastructure security for any project.
日本語の概要は準備中です。原文の説明を表示しています。
Guides the creation of agile user stories and Gherkin feature files. Use when the user wants to create a user story, write acceptance criteria, define Gherkin scenarios, or author BDD feature files. This should trigger for requests such as Create a user story; Write a user story; I need to write a user story. Part of cursor-rules-java project
日本語の概要は準備中です。原文の説明を表示しています。
Facilitates conversational discovery to create Architectural Decision Records (ADRs) for non-functional requirements using the ISO/IEC 25010:2023 quality model. Use when the user wants to document quality attributes, NFR decisions, security/performance/scalability architecture, or design systems with measurable quality criteria. This should trigger for requests such as Create ADR for Non-functional requirements; Document Non-functional requirements; Capture Non-functional requirements; Generate Non-functional requirements in an ADR. Part of cursor-rules-java project
日本語の概要は準備中です。原文の説明を表示しています。
Run a health check on an existing project: dependency audit, security scan, test runner detection, CI/CD evaluation, and missing configuration analysis. Maps the three execution gates (pre/in/post) from /10x-bootstrapper to an assessment framework for existing codebases. Reads optional context/foundation/stack-assessment.md from /10x-stack-assess to focus checks on identified gaps. Writes context/foundation/health-check.md with findings, prioritized fixes, and an agent-readiness verdict. Use when the user has an existing project and wants to verify its health before working with an agent. Trigger phrases: "health check", "check my project", "audit my project", "is my project healthy", "sprawdź projekt", "audyt projektu", "health-check", "project health". Use AFTER /10x-stack-assess (brownfield chain), BEFORE agent onboarding (m1-l4).
日本語の概要は準備中です。原文の説明を表示しています。
You MUST use this when building projects end-to-end. Orchestrates all 12 team roles — automatically switches between CTO, architect, PM, engineers, SRE, security, DBA, QA, and EM based on the current phase of work. Starts with brainstorming before any implementation.
日本語の概要は準備中です。原文の説明を表示しています。
Use when you need to add or configure Maven plugins in your pom.xml — including quality tools (enforcer, surefire, failsafe, jacoco, pitest, spotbugs, pmd), security scanning (OWASP), code formatting (Spotless), version management, container image build (Jib), build information tracking, and benchmarking (JMH) — through a consultative, modular step-by-step approach that only adds what you actually need. This should trigger for requests such as Add Maven plugins in pom.xml; Improve Maven plugins in pom.xml. Part of cursor-rules-java project
日本語の概要は準備中です。原文の説明を表示しています。