deploy

Convert styled HTML prototypes into EDS blocks and deploy pages via the DA Source API.

1|Updated Jun 22, 2026
One-click install
npx skills add https://github.com/aemgdc/aemdev --skill deploy-aemgdc
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: deploy
Source: https://github.com/aemgdc/aemdev/tree/main/.agents/skills/deploy
Command: npx skills add https://github.com/aemgdc/aemdev --skill deploy-aemgdc

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes scripts (resource) components.

What problem does it solve? Converting per-page styled HTML prototypes (stardust, claude-design, Mobirise, Relume, Lovable, v0, Figma-derived, or React/JSX pre-rendered to HTML) into a working Edge Delivery Services (EDS/AEM) site is error-prone: sections must become authorable blocks, per-section CSS must be scoped correctly, fonts must be self-hosted without CLS, and content must be written to DA without corruption. This Skill codifies that entire conversion-and-deploy methodology. ## Core Features & Use Cases - Prototype-to-block conversion: Maps each prototype <section> to one EDS block, lifts per-section CSS into scoped block stylesheets, and handles inline-styled <x-dc> content and JSX prototypes pre-rendered to static HTML. - Foundation and font hardening: Updates styles/styles.css with lifted design tokens, a reset with img { height: auto }, header-height reservation to prevent CLS, and self-hosted metric-matched @font-face declarations with licensing alerts for proprietary faces. - Headless DA deploy: Sanitizes non-ASCII HTML to entities, writes body fragments via the DA Source API, forces AEM Code Sync, previews, and verifies ingestion on .plain.html. - Use Case: Given a folder of claude-design prototypes under samples/, convert each page into EDS blocks plus content pages, push the branch, and deploy each page to a branch preview on aem.page with zero broken images. ## Quick Start Convert the prototypes in my samples folder into EDS blocks and content pages, then deploy them to DA on a new branch.

Frequently Asked Questions about deploy

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I convert HTML prototypes into AEM Edge Delivery Services blocks?▼

Map each prototype `<section>` to one EDS block, lift the section's CSS into a stylesheet scoped under the block class, and author one content page per prototype page. React/JSX prototypes must be pre-rendered to static HTML first so a server-rendered `<main>` exists to decorate.

How do I deploy EDS content pages to DA from the command line?▼

Push the code branch to GitHub, force AEM Code Sync via `POST admin.hlx.page/code/<org>/<repo>/<branch>/*`, sanitise the HTML to ASCII entities, then `PUT` the body fragment to `admin.da.live/source/<org>/<repo>/<path>.html` with a multipart `data` field, and finally POST to the preview endpoint.

Why does my EDS page show layout shift (CLS) after the header loads?▼

The static header fragment is injected after first paint, so the first section renders at y=0 then jumps down by the header height. Reserve the header's rendered height with a responsive `min-height` on the bare `<header>` element in styles.css, matched per breakpoint to the fragment.

Why do images look stretched after the EDS media pipeline processes them?▼

The pipeline emits `<img>` tags with width and height attributes; without `height: auto` in the CSS reset, a width constraint stretches the image vertically. The document reset must include `img { display: block; max-width: 100%; height: auto; }`.

Can I use this with a vanilla aem-boilerplate project?▼

Yes, but you must first port the AuthorKit runtime (ak.js, postlcp.js, lazy.js, head.html, fragment and section-metadata blocks) and remove boilerplate pieces it replaces. Two runtime edits are mandatory: delete the footer util import in lazy.js and set the fragment element's class in postlcp.js.

Why does DA corrupt special characters in my uploaded HTML?▼

DA strips `<head>` and parses without a charset declaration, so multibyte UTF-8 becomes replacement characters. Run the bundled sanitise.js script before upload to encode all non-ASCII characters as named or numeric HTML entities, which survive the round-trip.