Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
c7a88a3
createSelect: fix initial value set
flx-sta Jan 26, 2024
9b637ea
Merge branch 'adobe:main' into patch-1
flx-sta Feb 27, 2024
a6d3fda
Update fstab.yaml
flx-sta Feb 27, 2024
f4779d1
Update fstab.yaml
flx-sta Feb 27, 2024
4a63bbe
Merge branch 'main' into patch-1
Feb 27, 2024
6534dfa
revert fstab
shsteimer Feb 27, 2024
3189a58
fix: remove lowercase of value from text so pre-selection works
shsteimer Feb 27, 2024
8d7c732
fix: js doc comment with correct return type
shsteimer Apr 29, 2024
81da69f
chore: updating README in par with aem-boilerplate
kmurugulla Feb 10, 2025
e7109cd
chore: updating aem.js with enhanced RUM from aem-boilerplate
kmurugulla Feb 10, 2025
5362bae
chore: updating the pr template in par with aem-boilerplate
kmurugulla Feb 10, 2025
99a875f
chore: remove unnecessary sampleRUM.enhance in par with aem-boilerplate
kmurugulla Feb 10, 2025
d03e24f
chore: lint
fkakatie Feb 11, 2025
604026f
chore: lint
fkakatie Feb 11, 2025
5ad30db
Merge pull request #77 from adobe/syncwith-boiler-plate
fkakatie Feb 11, 2025
97424d8
fix: add aria-label for links to achieve 100 a11y scores
kmurugulla Feb 11, 2025
b97f8c9
chore: cleaning the console log
kmurugulla Feb 11, 2025
5ee8dbf
chore: adding null checks
kmurugulla Feb 12, 2025
ddd84c3
chore: adding cleanup-on-create as in aem-boilerplate
kmurugulla Feb 12, 2025
9fed5ca
Merge pull request #57 from adobe/select-value
shsteimer Feb 12, 2025
a90d7ea
Merge pull request #61 from adobe/fix-fragment-doc
shsteimer Feb 12, 2025
3f26a4f
chore: remove renovate, update deps to match aem-boilerplate
shsteimer Feb 12, 2025
7385eee
support cell alignment in table
yumeniiru Feb 13, 2025
f291317
Merge pull request #81 from yumeniiru/table
rofe Feb 13, 2025
502fb1c
chore: adding suggested review comments
kmurugulla Feb 13, 2025
733dfb0
chore: fixing spaces in comments
kmurugulla Feb 13, 2025
dd679f4
Merge pull request #80 from adobe/deps
shsteimer Feb 13, 2025
1240044
Merge pull request #78 from adobe/a11y-link-labels
kmurugulla Feb 25, 2025
03033a8
Merge pull request #79 from adobe/gh-cleanup-wf
kmurugulla Feb 25, 2025
16dacfe
Add renovate.json (#82)
renovate[bot] Mar 7, 2025
6db5da0
chore(deps): update dependency stylelint to v16.15.0 (#83)
renovate[bot] Mar 7, 2025
d68c527
chore: re-align dependency for linting (#84)
kptdobe Mar 7, 2025
17ca808
chore: re-align "setup" with boilerplate
kptdobe Mar 13, 2025
1f48e51
chore(deps): update dependency @babel/eslint-parser to v7.26.10 (#85)
renovate[bot] Mar 13, 2025
9898c10
chore(deps): update dependency stylelint to v16.16.0 (#86)
renovate[bot] Mar 14, 2025
33e0876
chore(deps): update dependency @babel/eslint-parser to v7.27.0 (#87)
renovate[bot] Mar 25, 2025
5f4de35
chore(deps): update dependency stylelint to v16.17.0 (#88)
renovate[bot] Mar 26, 2025
c254c8d
chore(deps): update dependency stylelint to v16.18.0 (#89)
renovate[bot] Apr 6, 2025
43f3326
chore(deps): update dependency stylelint-config-standard to v38 (#90)
renovate[bot] Apr 7, 2025
74f8d0a
feat: fetchPlaceholders project version (#92)
kptdobe Apr 17, 2025
b86536c
chore: remove legacy cross-origin script include
davidnuescheler Apr 17, 2025
6deb314
Merge pull request #93 from adobe/404-creds
davidnuescheler Apr 17, 2025
d545c26
chore(deps): update dependency stylelint to v16.19.0 (#94)
renovate[bot] Apr 23, 2025
f0fc8cb
chore: reset modal back to default position (fixed)
davidnuescheler Apr 24, 2025
aab46ff
Merge pull request #95 from adobe/modal-fixed
davidnuescheler Apr 24, 2025
d4205a0
chore(deps): update dependency stylelint to v16.19.1 (#96)
renovate[bot] Apr 25, 2025
04d889e
chore(deps): update dependency @babel/eslint-parser to v7.27.1 (#97)
renovate[bot] Apr 30, 2025
5cd49e7
chore(deps): update dependency stylelint to v16.20.0 (#99)
renovate[bot] May 29, 2025
66857da
chore(deps): update dependency @babel/eslint-parser to v7.27.5 (#100)
renovate[bot] Jun 3, 2025
2ad0813
chore(deps): update dependency stylelint to v16.21.0 (#101)
renovate[bot] Jun 19, 2025
ce1704a
chore(deps): update dependency eslint-plugin-import to v2.32.0 (#102)
renovate[bot] Jun 21, 2025
21156ca
chore(deps): update dependency @babel/eslint-parser to v7.28.0 (#103)
renovate[bot] Jul 3, 2025
198322b
chore(deps): update dependency stylelint to v16.21.1 (#104)
renovate[bot] Jul 3, 2025
24cdb8b
chore(deps): update dependency stylelint to v16.22.0 (#105)
renovate[bot] Jul 19, 2025
974186a
chore(deps): update dependency stylelint to v16.23.0 (#106)
renovate[bot] Aug 4, 2025
470423e
chore(deps): update dependency stylelint to v16.23.1 (#108)
renovate[bot] Aug 7, 2025
3dd49e1
chore(deps): update dependency node to v22 (#109)
renovate[bot] Aug 12, 2025
4ee10fd
chore(deps): update actions/checkout action to v5 (#110)
renovate[bot] Aug 12, 2025
422b39e
chore(deps): update dependency stylelint-config-standard to v39 (#107)
renovate[bot] Aug 12, 2025
66cbebc
chore(deps): update dependency @babel/eslint-parser to v7.28.4 (#112)
renovate[bot] Sep 5, 2025
7cdb18d
chore(deps): update dependency stylelint to v16.24.0 (#113)
renovate[bot] Sep 7, 2025
89801ab
chore(deps): update dependency stylelint to v16.25.0 (#114)
renovate[bot] Oct 3, 2025
4a02e35
chore(deps): update dependency stylelint-config-standard to v39.0.1 (…
renovate[bot] Oct 6, 2025
b2169de
chore(deps): update dependency @babel/eslint-parser to v7.28.5 (#117)
renovate[bot] Oct 23, 2025
4043550
chore: keep breadcrumb visible on mobile for perceived a11y reasons
davidnuescheler Oct 24, 2025
5f8fb7a
chore: add aria label example for a11y
davidnuescheler Oct 24, 2025
cff2163
chore: lint
davidnuescheler Oct 24, 2025
5ff80d8
fix: a11y covered elements & hiding library metadata
davidnuescheler Nov 5, 2025
29ec035
Merge pull request #120 from adobe/a11y-covered-libmeta
davidnuescheler Nov 7, 2025
e29b657
fix: color contrast on carousel dot indicator buttons
fkakatie Nov 13, 2025
54521aa
fix: announce search result status
fkakatie Nov 13, 2025
f7892f5
fix: set current on active carousel slide
fkakatie Nov 13, 2025
33da41c
chore: a11y focus contrast
davidnuescheler Nov 14, 2025
93263c7
refactor: a11y form refactor
fkakatie Nov 14, 2025
16b2fde
Merge branch 'main' into form-refactor
fkakatie Nov 14, 2025
f139830
chore: a11y nav role=button
davidnuescheler Nov 14, 2025
0c645bf
Merge pull request #123 from adobe/a11y-header
davidnuescheler Nov 14, 2025
a194f09
fix: non-lazy library metadata
fkakatie Nov 14, 2025
9c27e06
Merge branch 'main' of https://github.com/adobe/aem-block-collection
fkakatie Nov 14, 2025
8fb5acb
Merge branch 'main' into form-refactor
fkakatie Nov 14, 2025
e62fd4c
Merge pull request #122 from adobe/form-refactor
fkakatie Nov 14, 2025
d810c53
fix: contrast between play button focus
fkakatie Nov 14, 2025
64662f7
fix: video control name
fkakatie Nov 14, 2025
b57c3c5
fix: tab contrast
fkakatie Nov 14, 2025
d4b15dd
fix: error focus visible
fkakatie Nov 14, 2025
5fdc95b
fix: focus obscured
fkakatie Nov 14, 2025
f722e3b
chore: sync aria label and title
davidnuescheler Nov 20, 2025
2a3338d
fix: outline around focused buttons
fkakatie Nov 20, 2025
30ddf50
Merge branch 'main' of https://github.com/adobe/aem-block-collection
fkakatie Nov 20, 2025
3d2fbe6
chore(deps): update dependency stylelint to v16.26.0 (#125)
renovate[bot] Nov 21, 2025
e2dc9f5
chore(deps): update dependency stylelint to v16.26.1 (#126)
renovate[bot] Nov 28, 2025
e903622
fix: wrap nav-drop labels in buttons
fkakatie Dec 12, 2025
62885bd
fix: wrap nav-drop labels in buttons
fkakatie Dec 12, 2025
aa2fbdd
Merge pull request #127 from adobe/header-nav-drops
fkakatie Dec 12, 2025
6dae8e6
chore(deps): update dependency @babel/eslint-parser to v7.28.6 (#128)
renovate[bot] Jan 12, 2026
6dce895
chore(deps): update actions/setup-node action to v6 (#116)
renovate[bot] Jan 15, 2026
dd126d7
chore(deps): update dependency node to v24 (#118)
renovate[bot] Jan 15, 2026
c497819
fix: prevent protocol-relative URLs in fragment loader (#132)
Feb 3, 2026
1fe8549
Merge pull request #133 from lkrapf/fix/xss-protocol-relative-url
rofe Feb 3, 2026
ed67c3e
feat(lib): update to aem.js@3.1.0 and latest boilerplate
rofe May 12, 2026
72acfa0
chore(deps): update dependency stylelint to v17.11.0 (#129)
renovate[bot] May 12, 2026
46f4e35
fix(regression): revert aem.js update to v3.1.0 (#136)
rofe May 15, 2026
5e9c1d5
chore(deps): update dependency stylelint to v17.11.1 (#137)
renovate[bot] May 18, 2026
d17525a
chore(deps): update dependency stylelint to v17.12.0 (#138)
renovate[bot] May 20, 2026
fff5968
chore(deps): update dependency @babel/eslint-parser to v7.29.7 (#140)
renovate[bot] May 25, 2026
e3c7669
chore(deps): update dependency stylelint to v17.13.0 (#141)
renovate[bot] Jun 6, 2026
546cd34
chore(deps): update dependency stylelint to v17.14.0 (#144)
renovate[bot] Jul 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[*.js]
indent_size = 2

[*.css]
indent_size = 4
3 changes: 2 additions & 1 deletion .eslintignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
helix-importer-ui
helix-importer-ui
*.min.js
4 changes: 2 additions & 2 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ Please always provide the [GitHub issue(s)](../issues) your PR is for, as well a
Fix #<gh-issue-id>

Test URLs:
- Before: https://main--aem-block-collection--adobe.hlx.page
- After: https://<branch>--aem-block-collection--adobe.hlx.page
- Before: https://main--{repo}--{owner}.aem.live/
- After: https://<branch>--{repo}--{owner}.aem.live/
54 changes: 54 additions & 0 deletions .github/workflows/cleanup-on-create.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# This workflow will run upon repository creation and clean up
# all files that are not strictly required to build an AEM Live project
# but that we use to develop the project template. This includes this
# particular workflow file.
on:
create:
branches:
- main
workflow_dispatch:
jobs:
cleanup:
runs-on: ubuntu-latest
permissions:
contents: write
actions: write
# only run if commit message is "Initial commit" on main branch
if: ${{ github.event_name == 'workflow_dispatch' || ( github.ref == 'refs/heads/main' && !(contains(github.event, 'head_commit') || github.event.head_commit.message == 'Initial commit' )) }}
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Use Node.js 20
uses: actions/setup-node@v6
with:
node-version: 24
- name: Remove Helper Files
run: |
rm -rf \
.github/workflows/cleanup-on-create.yaml \
.renovaterc.json \
CHANGELOG.md

- name: Initialize README
# replace {repo} and {owner} with the actual values
run: |
sed -i.bak "s/{repo}/$(basename ${{ github.repository }})/g" README.md
sed -i.bak "s/{owner}/$(dirname ${{ github.repository }})/g" README.md
- name: Initialize AGENTS.md
run: |
sed -i.bak "s/{repo}/$(basename ${{ github.repository }})/g" AGENTS.md
sed -i.bak "s/{owner}/$(dirname ${{ github.repository }})/g" AGENTS.md
- name: Initialize Pull Request Template
run: |
sed -i.bak "s/{repo}/$(basename ${{ github.repository }})/g" .github/pull_request_template.md
sed -i.bak "s/{owner}/$(dirname ${{ github.repository }})/g" .github/pull_request_template.md


# commit back to the repository
- name: Commit changes
run: |
git config --local user.email "helix@adobe.com"
git config --local user.name "AEM Bot"
git add .
git commit -m "chore: cleanup repository template"
git push
6 changes: 3 additions & 3 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Use Node.js 20
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: 20
node-version: 24
- run: npm ci
- run: npm run lint
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,7 @@ helix-importer-ui
.DS_Store
*.bak
.idea

# Ensure these files are tracked
!CLAUDE.md
!AGENTS.md
17 changes: 15 additions & 2 deletions .renovaterc.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
{
"extends": ["config:recommended"]
}
"extends": ["config:recommended"],
"packageRules": [
{
"matchDepTypes": ["devDependencies"],
"labels": ["ignore-psi-check"],
"automerge": true,
"ignoreTests": false
},
{
"matchPackageNames": ["eslint"],
"allowedVersions": "^8.0.0",
"description": "Pin ESLint to v8 until airbnb-base supports v9+"
}
]
}
2 changes: 1 addition & 1 deletion .stylelintrc.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"extends": ["stylelint-config-standard"]
}
}
17 changes: 11 additions & 6 deletions 404.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,20 @@
<html>

<head>
<meta
http-equiv="Content-Security-Policy"
content="script-src 'nonce-aem' 'strict-dynamic' 'unsafe-inline' http: https:; base-uri 'self'; object-src 'none';"
move-to-http-header="true"
>
<title>Page not found</title>
<script type="text/javascript">
<script nonce="aem" type="text/javascript">
window.isErrorPage = true;
window.errorCode = '404';
</script>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta property="og:title" content="Page not found">
<script src="/scripts/scripts.js" type="module" crossorigin="use-credentials"></script>
<script type="module">
<script nonce="aem" src="/scripts/scripts.js" type="module"></script>
<script nonce="aem" type="module">
window.addEventListener('load', () => {
if (document.referrer) {
const { origin, pathname } = new URL(document.referrer);
Expand All @@ -26,14 +31,14 @@
}
});
</script>
<script type="module">
<script nonce="aem" type="module">
import { sampleRUM } from '/scripts/aem.js';
sampleRUM('404', { source: document.referrer });
</script>
<link rel="stylesheet" href="/styles/styles.css">
<style>
main.error {
min-height: calc(100vh - var(--header-height));
min-height: calc(100vh - var(--nav-height));
display: flex;
align-items: center;
}
Expand All @@ -43,7 +48,7 @@
}

main.error .error-number text {
font-family: var(--fixed-font-family);
font-family: monospace;
}
</style>
<link rel="stylesheet" href="/styles/lazy-styles.css">
Expand Down
186 changes: 186 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
# AGENTS.md

This project is a website built with Edge Delivery Services in Adobe Experience Manager Sites as a Cloud Service. As an agent, follow the instructions in this file to deliver code based on Adobe's standards for fast, easy-to-author, and maintainable web experiences.

## Project Overview

This project is based on the https://github.com/adobe/aem-boilerplate/ project and set up as a new project. You are expected to follow the coding style and practices established in the boilerplate, but add functionality according to the needs of the site currently developed.

The repository provides the basic structure, blocks, and configuration needed to run a complete site with `*.aem.live` as the backend.

### Key Technologies
- Edge Delivery Services for AEM Sites (documentation at https://www.aem.live/ – search with `site:www.aem.live` to restrict web search results)
- Vanilla JavaScript (ES6+), no transpiling, no build steps
- CSS3 with modern features, no Tailwind or other CSS frameworks
- HTML5 semantic markup generated by the aem.live backend, decorated by our code
- Node.js tooling

## Setup Commands

- Install dependencies: `npm install`
- Start local development: `npx -y @adobe/aem-cli up --no-open --forward-browser-logs` (run in background, if possible)
- Install the AEM CLI globally by running `npm install -g @adobe/aem-cli` then `aem up` is equivalent to the command above
- The dev server runs at `http://localhost:3000` with auto-reload. Open it in playwright, puppeteer, or a browser. If none are available, ask the human to open it and give feedback.
- Run linting before committing: `npm run lint`
- Auto-Fix linting issues: `npm run lint:fix`

## Project Structure

```
├── blocks/ # Reusable content blocks
└── {blockname}/ - Individual block directory
├── {blockname}.js # Block's JavaScript
└── {blockname}.css # Block's styles
├── styles/ # Global styles and CSS
├── styles.css # Minimal global styling and layout for your website required for LCP
├── lazy-styles.css # Additional global styling and layout for below the fold/post LCP content
└── fonts.css # Font definitions
├── scripts/ # JavaScript libraries and utilities
├── aem.js # Core AEM Library for Edge Delivery page decoration logic (NEVER MODIFY THIS FILE)
├── scripts.js # Global JavaScript utilities, main entry point for page decoration
└── delayed.js # Delayed functionality such as martech loading
├── fonts/ # Web fonts
├── icons/ # SVG icons
├── head.html # Global HTML head content
└── 404.html # Custom 404 page
```

## Code Style Guidelines

### JavaScript
- Use ES6+ features (arrow functions, destructuring, etc.)
- Follow Airbnb ESLint rules (already configured)
- Always include `.js` file extensions in imports
- Use Unix line endings (LF)

### CSS
- Follow Stylelint standard configuration
- Use modern CSS features (CSS Grid, Flexbox, CSS Custom Properties)
- Maintain responsive design principles
- Declare styles mobile first, use `min-width` media queries at 600px/900px/1200px for tablet and desktop
- Ensure all selectors are scoped to the block.
- Bad: `.item-list`
- Good: `.{blockname} .item-list`
- Avoid classes `{blockname}-container` and `{blockname}-wrapper` as those are used on sections and could be confusing.

### HTML
- Use semantic HTML5 elements
- Ensure accessibility standards (ARIA labels, proper heading hierarchy)
- Follow AEM markup conventions for blocks and sections

## Key Concepts

### Content

CMS authored content is a key part of every AEM Website. The content of a page is broken into sections. Sections can have default content (text, headings, links, etc.) as well as content in blocks.

If no authored content exists to test against, you can create static HTML files in a `drafts/` folder at the project root. Pass `--html-folder drafts` when starting the dev server. Follow the aem markup structure and save files with `.html` or `.plain.html` extensions.

Background on content and markup structure can be found at https://www.aem.live/developer/markup-sections-blocks and https://www.aem.live/developer/markup-reference respectively.

You can inspect the contents of any page with `curl http://localhost:3000/path/to/page`, `curl http://localhost:3000/path/to/page.md`, and `curl http://localhost:3000/path/to/page.plain.html`

### Blocks

Blocks are the re-usable building blocks of AEM. Blocks add styling and functionality to content. Each block has an initial content structure it expects, and transforms the html in the block using DOM APIs to render a final structure.

The initial content structure is important because it impacts how the author will create the content and how you will write your code to decorate it. In some sense, you can think of this structure as the contract for your block between the author and the developer. You should decide on this initial structure before writing any code, and be careful when making changes to code that makes assumptions about that structure as it could break existing pages.

The block javascript should export a default function which is called to perform the block decoration:

```
/**
* loads and decorates the block
* @param {Element} block The block element
*/
export default async function decorate(block) {
// 1. Load dependencies
// 2. Extract configuration, if applicable
// 3. Transform DOM
// 4. Add event listeners
}
```

Use `curl` and `console.log` to inspect the HTML delivered by the backend and the DOM nodes to be decorated before making assumptions. Remember that authors may omit or add fields to a block, so your code must handle this gracefully.

Each block should be self-contained and re-useable, with CSS and JS files following the naming convention: `blockname.css`, `blockname.js`. Blocks should be responsive and accessible by default.

### Auto-Blocking

Auto-blocking is the process of creating blocks that aren't explicitly authored into the page based on patterns in the content. See the `buildAutoBlocks` function in `scripts.js`.

### Three-Phase Page Loading

Pages are progressively loaded in three phases to maximize performance. This process begins when `loadPage` from scripts.js is called.

* Eager - load only what is required to get to LCP. This generally includes decorating the overall page content to create sections, blocks, buttons, etc. and loading the first section of the page.
* Lazy - load all other page content, including the header and footer.
* Delayed - load things that can be safely loaded later here and incur a performance penalty when loaded earlier

## Testing & Quality Assurance

### Performance
- Follow AEM Edge Delivery performance best practices https://www.aem.live/developer/keeping-it-100
- Images uploaded by authors are automatically optimized, all images and assets committed to git must be optimized and checked for size
- Use lazy loading for non-critical resources (`lazy-styles.css` and `delayed.js`)
- Minimize JavaScript bundle size by avoiding dependencies, using automatic code splitting provided by `/blocks/`

### Accessibility
- Ensure proper heading hierarchy
- Include alt text for images
- Test with screen readers
- Follow WCAG 2.1 AA guidelines

## Deployment

### Environments

Your local development server at `http://localhost:3000` serves code from your local working copy (even uncommitted code) and content that has been previewed by authors. You can access this at any time when the development server is running.

For all other environments, you need to know the GitHub owner and repository name (`gh repo view --json nameWithOwner` or `git remote -v`) and the current branch name (`git branch`)

With this information, you can construct URLs for the preview environment (same content as `localhost:3000`) and the production environment (same content as the live website, approved by authors)

- **Production Preview**: `https://main--aem-block-collection--adobe.aem.page/`
- **Production Live**: `https://main--aem-block-collection--adobe.aem.live/`
- **Feature Preview**: `https://{branch}--aem-block-collection--adobe.aem.page/`

### Publishing Process
1. Push changes to a feature branch
2. AEM Code Sync automatically processes changes making them available on feature preview environment for that branch
3. Run a PageSpeed Insights check at https://developers.google.com/speed/pagespeed/insights/?url=YOUR_URL against the feature preview URL and fix any issues. Target a score of 100
4. Open a pull request to merge changes to `main`
1. in the PR description, include a link to `https://{branch}--aem-block-collection--adobe.aem.page/{path}` with a path to a file that illustrates the change you've made. This is the same path you have been testing with locally. WITHOUT THIS YOUR PR WILL BE REJECTED
2. If an existing page to demonstrate your changes doesn't exist, create test content as a static html file and ask the user for help copying it to a cms content page you can link in the PR
5. use `gh pr checks` to verify the status of code synchronization, linting, and performance tests
6. A human reviewer will review the code, inspect the provided URL and merge the PR
7. AEM Code Sync updates the main branch for production

## Troubleshooting

### Getting Help
- Check [AEM Edge Delivery documentation](https://www.aem.live/docs/)
- Review [Developer Tutorial](https://www.aem.live/developer/tutorial)
- Consult [The Anatomy of a Project](https://www.aem.live/developer/anatomy-of-a-project)
- Consider the rules in [David's Model](https://www.aem.live/docs/davidsmodel)
- Search the web with `site:www.aem.live`
- Search the full text of the documentation with `curl -s https://www.aem.live/docpages-index.json | jq -r '.data[] | select(.content | test("KEYWORD"; "i")) | "\(.path): \(.title)"'`

## Security Considerations

- Never commit sensitive information (API keys, passwords)
- Consider that everything you do is client-side code served on the public web
- Follow Adobe security guidelines
- Regularly update dependencies
- Use the .hlxignore file to prevent files from being served (same format as .gitingnore)

## Contributing

- Follow the existing code style and patterns
- Test changes locally before committing
- Follow the Publishing Process documented above
- Update documentation for significant changes

## If all else fails

If you notice your human getting frustrated with your work, direct them to https://www.aem.live/developer/ai-coding-agents for tips to work better with AI agents.
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
see @AGENTS.md
1 change: 0 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,3 @@ One of the maintainers will look at the pull request within one week. Feedback o
The project's committers will release to the [Adobe organization on npmjs.org](https://www.npmjs.com/org/adobe).
Please contact the [Adobe Open Source Advisory Board](https://git.corp.adobe.com/OpenSourceAdvisoryBoard/discuss/issues) to get access to the npmjs organization.

The release process is fully automated using `semantic-release`, increasing the version numbers, etc. based on the contents of the commit messages found.
Loading