1. Home
  2. Technical Writing
  3. EDS migration in two prompts

Migrating My Site to AEM Edge Delivery Services in Two Prompts

By Jack Jin · October 25, 2026 · 12 min read · Includes my 12:23 video

I migrated my personal site, www.jackzhaojin.com, from GitHub Pages to AEM Edge Delivery Services with two goal prompts to Claude Code. All 34 pages, my design system and every image moved into Experience Workspace, and the agents checked each page against the live site at desktop and phone width. Below is the plan behind the prompts, how the second one ran nine agents at once, what they measured, and what's still left for me.

Migrating My Site to AEM Edge Delivery Services in Two Prompts

Recorded October 25, 2026, while the second prompt was still running. Each section below links to its part of the video, or watch it on YouTube.

Code: jackzhaojin/www-eds. Prompt 1: 6820e00 to 4575a93, 17 commits. Prompt 2: from 4595513, 112 more by the time all 34 pages passed at 16:05 ET. The plan: ai-docs/2026-10-24-eds-migration. What was done: ai-docs/2026-10-25-initial-buildout-2-goals. Compare the two sites: gh.jackzhaojin.com (GitHub Pages) and eds.jackzhaojin.com (Edge Delivery Services).

1. What two prompts moved

My site ran on GitHub Pages: hand-built HTML, my own design system (v3), and articles full of interactive explainers. I moved all of it to Adobe's Edge Delivery Services (EDS), like for like, pixel perfect. The pages, the assets, the animations and all the blocks, about 41 of them.

The content now lives in Experience Workspace, the document authoring side of EDS that started as da.live. Every page is a document I can open and edit there. The code is EDS blocks in a GitHub repo. Every URL stays the same.

GitHub Pages

The home page on GitHub Pages in light mode: Jack Jin in large serif type, the lines Adobe Experience Manager, AI agents, Work you can explore, and an Adobe recognition column with the AEM Champion badge

The live site on GitHub Pages, October 25.

Edge Delivery

The same home page on Edge Delivery Services in light mode, with the same type, layout and Adobe recognition column

The same page on Edge Delivery Services, main--www-eds--jackzhaojin.aem.live.

GitHub Pages, dark

The home page on GitHub Pages in dark mode

GitHub Pages, dark mode.

Edge Delivery, dark

The home page on Edge Delivery Services in dark mode, matching the GitHub Pages version

Edge Delivery Services, dark mode. The ring in the background is animated, so it sits at a different angle in each shot.

The whole thing took about five hours of agent time across the two prompts. With 30 to 40 pages and about as many blocks, it had to run in parallel, or it would run for days. I wanted hours.

The video goes through four things in order: the planning, prompt 1, prompt 2, and what's left, with the results in between. When I recorded it, the second prompt was still running, even though the site was done. Part 7 explains why.

Watch this part 0:00 What I migrated 0:26 Side by side, light and dark 0:42 The four parts

2. The planning is where the work is

If you only send two prompts, there isn't a ton in the prompts. Most of it is in the plan.

My favorite way to plan these days is a good conversation with AI. The night before, I asked Claude Code to look at Adobe's skills and at my current site, and I read and pushed back on everything it came back with. That's how you give feedback and build context with the AI, before any code exists.

It surveyed adobe/skills, Adobe's open repo of skills, meaning packaged instructions an AI agent loads for one kind of job. The most active part was stardust, the plugin that replicates a site onto EDS. It mapped my site and design system v3 onto EDS, and found that 26 of my articles carry their own explainer code, 3,335 lines of JavaScript and 1,850 of CSS. I added that the seven GitHub Pages project sites under my domain have to keep working, which turned into a Cloudflare Worker routing plan. Three research agents read the aem.live docs, Experience Workspace's source and the EDS boilerplate in parallel.

One call-out you'll hear in any AI video: have the AI ask you questions. Here it asked me 12. I had decided 8 things before that, so 20 decisions in total, all before a line of code.

A table from the planning session, What you decided, with decisions 9 to 20: GA4 and consent, trailing slashes stay, the design system pages double as the block library, names, single thread first with only blocks, templates and the library in parallel, every stream pushes to main, stardust pauses early then runs on its own, approvals per page type and per batch of articles, AI writing through the Experience Workspace MCP server, dark mode checked locally first, the old repo kept as rollback, and staying current by hand

Decisions 9 to 20, my answers to its 12 questions. From the planning session in the video.

The ones that shaped the build most:

The output is what I call a prompt packet. start-here.md is the entry point: the brief, where everything is, the rules for every run, and the goal prompts ready to paste. Next to it sit workstreams.md with each phase and what "done" means for it, best practices for EDS, the Cloudflare routing, and how design system v3 maps onto blocks. All 20 decisions are in the plan's README.md. Then I asked for the starter prompt.

Counting the planning, this wasn't really two prompts. The build was. Maybe 20 questions isn't enough, and next time I'll ask for 40. This is my personal site, not chargeable hours, so I went with it.

Watch this part 1:38 Planning with AI 2:20 It asks me 12 questions 2:49 The prompt packet

3. Prompt 1: one agent, review before you scale

/goal is a Claude Code command that keeps a session working until a condition is met. An evaluator reads the conversation, not the files, so every condition names a check Claude has to print. Each of my goals also ends cleanly at a stop point, where it asks me for what it needs.

Prompt 1 was the foundation. One agent, one thread. You want to review before you scale. At 09:34 I pasted what the planning session gave me:

Prompt 1, 09:34 ET, pasted as written
/goal Read /Users/jackjin/dev/jackzhaojin/jackzhaojin.github.io/ai-docs/2026-10-24-eds-migration/start-here.md and the files it lists, then complete Phase 1 (Prep, Foundation and first page, Article archetype) of workstreams.md in this repo, following its rules. Done when this conversation shows all of: (1) curl -s -o /dev/null -w "%{http_code}" https://main--www-eds--jackzhaojin.aem.live/ printing 200, with the v3 home page there; (2) stardust gate output for the home page and one explainer-heavy article at 1440 and 360 with 0 looks-same red and 0 nothing-lost yellow findings; (3) a mobile Lighthouse performance score of 100 for the home page; (4) the editability gate passing for every block built so far; (5) every best-practices.md section 9 item checked and the note updated; (6) start-here.md Done, Left and Run log updated. Also counts as met: Claude has stopped at a stop point listed in start-here.md and asked Jack for what it needs.

It built the v3 foundation, the header and footer, the home page, and the article template with the first family of explainer blocks, and gated each against the live site. The home page looked exactly like the one on GitHub Pages. I was surprised. I thought I'd need more incremental work between prompt 1 and prompt 2, more guidance, more coaching. AI is just that good now. No coaching needed.

Page
Pixel difference, desktop / phone
Height difference
Lighthouse mobile, old site / EDS
Editable text
Home
0.24% / 1.11%
0 px
98 / 100
28 of 28
Article (my Edge Functions write-up)
0.05% / 0.84%
0 px
93 / 100
110 of 110
The two pages prompt 1 built and gated

Desktop is 1440 px wide and phone is 360. The article's 14 interactions also behave the same as on the old site. It finished at 11:15, 17 commits after the setup, and stopped where the plan said to stop: a config change in Experience Workspace, and my review of the inconsistency register, where the agents log every place the new site differs from the old one on purpose. The commits that mark the path:

Watch this part 3:18 Prompt 1 3:38 The home page, side by side

4. Prompt 2: blocks first, then go wide

Between prompt 1 and prompt 2, I didn't need to give any feedback. So prompt 2, at 12:32, was me saying: this looks really good, now just get it done. I dictated it:

Prompt 2, 12:32 ET, dictated
/goal Right, this looks really, really good. Let's just migrate everything over, and then using the same testing, make sure you validate, and yeah, and then just use a lot of sub agents, right? With agent AI migration, we can do things in parallel. Yeah, as long as the design system is moved over, we should be moving over the design system maybe first. But yeah, let's make sure we really go and yeah, get everything moved over. Maybe figure out what blocks you need to build, make sure you have all the blocks you need first, and then after that, go super wide and parallel and get everything migrated.

Without parallel processing, this would easily take over 24 hours. By the end there were 166 subtasks, subagents fired off from that one session.

A content management site is highly parallelizable. You wouldn't hire a single developer and have them work for five years. You'd hire a team. Same with agents: set a goal for parallelization, and you and your agents get a lot more productive. This is how the session went wide without the agents stepping on each other:

  1. Blocks first. The coordinating session built the shared pieces before anything else: one explainer block with plug-in engines, the importer plugins, and a written brief for every stream.
  2. Then seven agents at once, one per stream: listings and static pages, the portfolio, the design system site, and four batches of articles. Two forks joined later, so nine ran at the peak.
  3. Each agent worked in its own git worktree and wrote only its own files, then pulled with rebase and pushed to main.
  4. When a stream needed a shared file changed, it sent the coordinator a measured request, like "the source's table sits 16px below the paragraph, ours 24px", and the coordinator fixed it once for everyone.
Seven streams

The Claude Code session with its background tasks panel: migrate listings and static pages, article batches A1 to A4, the portfolio page and the design system site, all running at once

The coordinating session with seven streams running as background tasks.

One branch per agent

The source control view of the www-eds repo with several worktree branches, one per agent, each with its own changes

One worktree branch per agent. The other project in that workspace is blurred.

Hours in

The same session hours later, with the article batches and the portfolio stream still running and the finished task count growing

Hours in, with the article batches still running.

One agent got told no. The permission check blocked the design system agent's push to main as a production deploy. The coordinator didn't push for it. It asked me, and I approved it.

Then I went golfing with my son, and we went out for lunch. It kept running. I had Remote Control on, so I could check in, but mostly I was just hanging out.

Watch this part 4:12 Prompt 2 4:55 Why it has to be parallel 5:21 A bajillion agents 5:31 Golfing while it ran

5. How the agents proved it

I can only go golfing because I don't just have AI build. I also have AI test. It's really important to have AI check its own work.

Here it checked against my live site. Every page was captured twice, from GitHub Pages and from EDS, and compared with stardust's replica instruments at desktop (1440 px) and phone (360 px) width:

The final sweep's pass bar was at most 10% pixel difference, height within 5%, nothing clipped and all content present. On top of that ran Lighthouse, a dark-mode sweep, v3's own contrast check, Adobe's QA sweep and a check of every in-page anchor.

Final QA

The session during final QA, re-gating pages and fixing the accessibility findings that EDS introduced, with the remaining tasks listed on the right

Final QA, about three hours into prompt 2.

Validation results

The session's validation summary: all 34 sitemap pages live, pixel and height passing at 1440 and 360, dark mode, contrast, QA sweep and Lighthouse results

The validation summary the session printed at the end.

What it measured:

Design changes were allowed only through the inconsistency register: 24 entries for me to review. Everything else had to match. One entry is a bug in my old site: one article's explainers never ran there, because of a syntax error in its script. The new site ships them working, logged for my review.

Watch this part 5:45 AI that builds and tests

6. What two prompts built

Start with the assets. Experience Workspace has its own asset storage, and every image from my blog posts is in it now, on the pages that show my work and my writing. Moving assets by hand takes forever. With AI, you still need to process them in parallel, or they take a while.

The more complex pages came over too. The design system site is content in Experience Workspace now, built from the same blocks it documents, in light and dark. You can still open any page in da.live's classic editor if you want; there are many ways to edit a page. And the complex functionality made it: the tabs, the animations, the background graphics. All in two prompts, with a lot of parallelization.

Here is every commit on main through the day, at the time it was made. Drag across the day, or pick a moment.

bar
Commits on www-eds main, October 25, ET, by type
every commit on GitHub
image
Chart of every commit on main on October 25. From 09:00 to 11:20 the line climbs slowly during prompt 1, one agent. It stays flat until 12:32, then jumps steeply during prompt 2, up to nine agents, with 69 commits in the busiest hour, and reaches 132 commits at 16:05, when all 34 pages pass.
chart
Commits on main over the day, with one row of dots per type of commit
Every commit on main on October 25: a slow climb during prompt 1, a flat stretch, then a steep climb during prompt 2 until 16:05
controls
Jump to a moment
Play the day
jump
11:15
Prompt 1 done
11:15
jump
12:41
Prompt 2 starts
12:41
jump
14:05
Busiest hour
14:05
jump
16:05
All 34 pass
16:06
axis
09:00
16:30
135
band
PROMPT 1
09:34
11:20
band
PROMPT 2
12:32
16:06
slider
Time of day, in minutes after midnight, Eastern
16:06
lane
shared
Shared code
lane
art
Articles and explainers
lane
ds
Design system
lane
port
Portfolio
lane
list
Listings and pages
lane
qa
Gates and records
commit
09:05:58
0f1fe37
Initial commit
shared
commit
09:06:11
200b237
chore: cleanup repository template
qa
commit
09:22:09
d63e522
chore: declare plugins, pin Node 22 and point agents at the migration plan
qa
commit
09:55:08
6820e00
feat: v3 foundation, header, footer and home blocks
shared
commit
10:00:57
9bfb53e
fix(home): card links, note label, footer place, empty sections
shared
commit
10:04:07
cad677e
fix(footer): keep the word space before the place
shared
commit
10:09:42
d080dbf
fix(hero): action links keep their flex item boxes
list
commit
10:10:19
e7f73a3
fix(styles): section head link keeps its flex item box
shared
commit
10:14:49
d53a88b
feat(scripts): default-content links move into the cta-slot wrapper
shared
commit
10:19:19
0302f56
chore(stardust): home archetype gated, run state recorded
qa
commit
10:38:23
5b5a2ce
feat: article template and the first explainer family blocks
shared
commit
10:44:03
20462fc
fix(article): rhythm scope, title spans, rail entries, group labels
art
commit
10:48:20
8705571
fix(article): switch code box border, rail thumbnails load while closed
art
commit
10:54:54
2a1c4dd
perf(lab): make the demo keys when the lab is decorated
art
commit
10:58:04
9d0add2
fix(lab): reserve the verdict's result height, no layout shift
art
commit
11:03:39
6216b60
fix(blocks): hold the look in quick edit
shared
commit
11:06:21
93fc3d6
chore(blocks): keyframe names match the source kit
qa
commit
11:10:52
50e67b3
chore(stardust): article archetype gated, family pattern documented
qa
commit
11:12:28
ed1ab5e
chore(stardust): v3 contrast eval for EDS pages, all three themes
qa
commit
11:15:38
4575a93
chore(stardust): site scope, spec, audit and reconcile first page
qa
commit
12:41:03
4595513
feat: shared pieces for the wide rollout
shared
commit
12:41:37
94eb0c1
docs(rollout): clarify ownership in the brief
qa
commit
12:43:03
77addf9
feat(scripts): load any declared page template
shared
commit
12:44:45
fd8ec4c
chore(stardust): gate-all state for every captured page on aem.live
qa
commit
12:50:45
9229cf6
docs(rollout): source repo stays read only, scratch stays in the worktree
qa
commit
12:57:39
e28a556
feat(explainer): freezeframe engine, the held-frames lab
art
commit
13:05:39
525b07e
feat(explainer): reuse-stacks engine, rebuild or reuse
art
commit
13:05:49
d7208a4
feat(explainer): hook-switchboard and empty-cohort engines for the second brain article
art
commit
13:06:03
e055cfb
feat(explainer): stardust-lifecycle and stardust-versions engines
art
commit
13:06:21
34c7bf7
feat(explainer): beat-sim and defect-lab engines for the Company of Zero article
art
commit
13:06:49
c036e90
fix: code wrap and data-table nowrap variants, article first block margin
shared
commit
13:08:49
eb13527
content(writing): Company of Zero article for the article template
art
commit
13:09:38
dcbc16a
feat(figure): board narrow, a photo kept at 520px and centered
art
commit
13:09:55
81f8546
feat(explainer): work-patterns and model-merge engines
art
commit
13:09:55
ed02367
content(writing): patterns of work and four frontier models articles
art
commit
13:10:14
a5e216e
content(writing): Adobe Stardust explained, imported with its two explainers
art
commit
13:10:49
03f89d9
feat(figure): shot slim for the one article that keeps screenshots at 460px
art
commit
13:11:15
adcbb6c
chore(stardust): register R8 to R10, cross-article inconsistencies
qa
commit
13:15:09
89efee8
fix(explainer): name the chip groups of hook-switchboard and empty-cohort
art
commit
13:16:05
0c859f7
fix(article): title no-wrap words come from page metadata
art
commit
13:16:22
4e0e9d7
feat(hero): writing, talks, certifications and page variants
list
commit
13:16:22
df0d8e4
feat(row-list): talks variant
list
commit
13:16:34
0b19af9
feat: listing and static templates, 404 on the v3 foundation
shared
commit
13:16:34
2ddc93e
feat(credentials): certification rows
list
commit
13:16:34
39a2606
feat: writing-list block and writing-filter widget
shared
commit
13:17:06
5a793f1
feat(explainer): hook-guard engine, the admin API guard lab
art
commit
13:17:12
3e0a5c8
fix(explainer): model-merge radiogroup keeps the authored label
art
commit
13:19:41
15611d4
feat: compare touch, figure native, flush first block in articles
shared
commit
13:21:42
3676b33
content(writing): four frontier models compare carries touch
art
commit
13:21:43
9a4896e
fix(explainer): hook-switchboard flags and steps hold their size in quick edit
art
commit
13:22:36
a1bacaf
feat(explainer): retry-ladder engine, the failure ladder
art
commit
13:24:20
3ee8444
fix: listing gate round 1
shared
commit
13:24:43
baebfde
content(writing): agent memory second brain article, imported with its two explainers
art
commit
13:25:08
206c191
feat(explainer): harvest-sorter engine, where the harvester files a document
art
commit
13:25:12
c915408
feat(explainer): ten engines for article batch A1
art
commit
13:28:12
e283417
fix(credentials): keep the sr-only suffix inside the link
list
commit
13:28:27
8fc1a12
feat: figure board open and code prose
shared
commit
13:28:30
ebd1bff
feat(design-system): docs template and the v3 blocks no page used yet
ds
commit
13:29:05
9facdf8
feat(article): code-wrap section style for plain code that wraps
art
commit
13:29:39
5a44582
chore(stardust): register R11 and R12
qa
commit
13:29:53
d000786
content(writing): patterns of work boards open full size
art
commit
13:30:44
32d1594
fix(explainer): A1 lab items hold their box in quick edit
art
commit
13:30:46
2df3574
content(writing): Company of Zero re-imported, title kept together, boards open
art
commit
13:30:46
66d3fd1
content(writing): second brain article re-imported, part 5 plain code wraps
art
commit
13:34:02
2aab431
fix(design-system): story spacing and edit-mode prose in the docs template
ds
commit
13:34:12
edc9484
content: writing, talks, certifications and privacy pages
list
commit
13:34:43
9b24024
fix(rail): find targets when the current part is computed, keep it in view
art
commit
13:34:45
03caffd
content(design-systems): v3 docs page for the design-docs template
ds
commit
13:35:31
fb7a423
content: localize links to the articles now on the site
list
commit
13:37:24
3a9ec95
fix: importer loads only engine modules; rail lint; id'd figures get a section
shared
commit
13:38:34
6e9781f
chore(stardust): rollout stream results so far
qa
commit
13:38:54
8467439
chore: move the listing importer out of import-engines
qa
commit
13:39:27
54f5982
content(writing): re-import patterns of work and four frontier models
art
commit
13:40:00
802bd82
feat(talk-list): talk-by-talk conference recap block and its importer engine
art
commit
13:43:30
26a99e0
feat(explainer): eleven engines for article batch A2
art
commit
13:43:42
e2913de
feat(explainer): skill-tracker, step-checklist, line-map, content-contract and theme-swap engines
art
commit
13:44:12
73b9d23
feat(design-system): breadcrumb stories from the hero page variant
ds
commit
13:44:14
3755c21
feat(showcase, cards): portfolio story and card variants
ds
commit
13:44:17
8c06997
content(writing): import batch A2, eight articles with their explainers
art
commit
13:44:22
7470bc6
feat(portfolio): template, portfolio blocks and importer
port
commit
13:45:11
fc433b7
fix(figure): a native image reserves its own width before it loads
art
commit
13:45:38
02d5586
content(writing): adaptTo 2026 recap, 25 talks as talk-list rows
art
commit
13:46:13
abba809
fix(explainer): A1 quick-edit fallbacks and the spec-filter default choices
art
commit
13:48:37
ed3bfcf
content(writing): seven articles from January to May 2026 with their explainers
art
commit
13:49:17
de6d551
fix(explainer): credential-chain switch labels flow as one run
art
commit
13:50:50
b05a679
content(writing): local links to writing and talks in three A4 articles
art
commit
13:52:10
d0698a8
content(writing): six 2025 articles of batch A1, imported with their explainers
art
commit
13:54:01
176c6da
content(portfolio): the portfolio page for the portfolio template
port
commit
13:54:01
b8397c7
fix(portfolio): keep config rows editable in hidden wrappers
port
commit
13:56:50
25258c8
feat: series nav, code plain and stack, table cheat, rank and stack, board compact
shared
commit
14:00:30
124518a
content(writing): A1 articles re-imported with series, code plain and stack, rank and cheat tables, compact board, roomy h3 and wide code wrap
art
commit
14:00:58
e1fd82a
fix: dark inverse for a band forced dark, unique header nav id, shared theme control
shared
commit
14:03:15
08969fe
fix(explainer): A2 engines hold their look in quick edit
art
commit
14:03:27
fb6ec16
content(writing): MCP server article, loop counts as label and bold value
art
commit
14:04:28
9c5f39c
content(writing): re-import batch A2 with the series nav, code variants and local links
art
commit
14:06:19
c91ff7f
feat: table captions, row heads and merged cells, split and tall boards, h2 keep-together
shared
commit
14:06:35
00d20f7
refactor(code): plain only drops the syntax colors; prose carries the wrap
art
commit
14:08:59
21f416d
feat(explainer): trail engine for the dated commit trail; score-blend drops its json patch
art
commit
14:09:25
011819e
content(writing): A1 articles re-imported for spanned table cells and prose code
art
commit
14:09:46
b735d8a
fix(data-table): cheat keeps the 16px step too; register and stream results
art
commit
14:10:05
255fe96
content(writing): re-import batch A2 with trail, split and tall boards, table captions and ids
art
commit
14:10:51
c325855
chore(stardust): catalog records the rollout's blocks, variants and engines
qa
commit
14:11:28
4ad922d
feat: root files the site must keep serving (verification, llms.txt, favicon)
shared
commit
14:13:29
c85ab25
chore: impeccable ignores the play triangle in showcase.css (border trick)
qa
commit
14:16:11
cb59034
fix(explainer): lens table leaves layout while its summary is closed
art
commit
14:18:26
d1d7340
chore(stardust): A1 results and register R18
qa
commit
14:20:14
afa94ac
fix: code lines keep one newline; data-table fill-in for a template table
shared
commit
14:20:32
de1d6db
fix(explainer): score-blend keeps the phone formula size
art
commit
14:21:04
eb8000d
content(writing): caching and MCP-across-platforms re-imported for code lines and the matrix table
art
commit
14:28:06
ec426a7
feat(design-system): every remaining v3 story from the blocks on main
ds
commit
14:28:13
02f5a39
feat: data-table span-first and the code-nowrap page theme
shared
commit
14:31:09
4043467
content(writing): caching article re-imported for span-first and code-nowrap
art
commit
14:35:06
fc8724f
feat: data-table mono-head and compact, icon links as buttons; code-nowrap skips the summary
shared
commit
14:35:43
96f419b
fix(explainer): the json phone size follows its base rule; A2 results, register R19 to R23
art
commit
14:37:50
c8a5e1f
content: localize links across the whole tree
list
commit
14:40:29
b9040ca
feat(design-system): v3 tables on data-table mono-head, icons in buttons
ds
commit
14:48:32
7263c2f
fix(design-system): contrast results read in the v3 pass look
ds
commit
15:03:19
64aeb27
feat(design-system): story aria-labels, the v3 filter bar and caption looks
ds
commit
15:10:47
3a83608
fix(design-system): story labels keep the space after their commas
ds
commit
15:11:45
1bd821c
chore(stardust): final sweep and Lighthouse results for every page type
qa
commit
15:18:32
1337827
chore(stardust): design system page results and register R17 detail
qa
commit
15:22:10
8b1818f
fix(cards): each repo card is one link, as on the source
port
commit
15:26:55
eea0447
feat(figure): page theme board-mat, the dark-theme mat two articles give their boards
art
commit
15:28:45
c3b18b8
revert: repo cards back to the stretched dates link
qa
commit
15:32:53
3c0c834
chore(stardust): dark check, v3 eval over every page, register R24
qa
commit
15:40:05
9c9913e
fix: social image metadata, lab radios checked from the start, pillar list role
shared
commit
15:50:31
bbd1ee6
content(writing): the guard lab keeps its #guard-lab anchor
art
commit
15:51:13
34cfe9e
fix(author-box): the box is named by the author's name, so it and the rail are distinct landmarks
art
commit
15:56:04
71e59b8
chore(stardust): qa sweep results and triage; template map from the spec
qa
commit
15:56:18
2417f04
chore: deploy ledger and log for the localized, metadata and fix redeploys
qa
commit
15:58:35
ff55698
fix(cards): each repo card is one link without unwrapping authored text
port
commit
16:05:52
f02e0e7
chore(stardust): R24 resolved, the sweep is 34 of 34
qa
caption
Each dot is a commit, on a row for its type, read from the commit message's scope. The line is the running total. The same chart closes the results in the video, narrated with my ElevenLabs voice clone.
Hour (ET)
Commits
Mostly
09:00
4
Setup, then the shared foundation
10:00
11
Shared code, articles and explainers
11:00
5
Gates and records
12:00
6
Gates and records, shared code
13:00
64
Articles and explainers, shared code, listings and pages
14:00
27
Articles and explainers, shared code
15:00
14
Gates and records, articles, design system
16:00 to 16:05
1
"The sweep is 34 of 34"
Commits on main per hour, October 25, Eastern time

Prompt 1 was a single agent for about an hour and 45 minutes, and built the foundation, the home page and the article template. Prompt 2 went wide at 12:32, and the jump is the parallel streams landing: 69 commits in the busiest hour, 13:05 to 14:05. All 34 pages passed at 16:05. Along the way it built 41 blocks, 5 page templates, 40 interactive explainer engines and 42 importer plugins, in about 150 commits on main in one day.

Watch this part 6:26 The assets 7:16 The design system pages 7:41 Tabs and animations 8:02 The day in numbers

7. What's left

When I recorded the video, the AI was still running its goal. I felt kind of bad about it.

That's how /goal works, and it's why this could be done in two prompts. Claude Code has a stop hook, so the AI can't stop itself until the goal is really met. It's like the Ralph loop, if you were into that six months ago. So the AI was stuck in a build-and-test loop. It was still tuning the last page, the design system page. Its content and pixel checks passed; its height was within about 30 to 55 px of the old one.

To record, I stopped it with /goal clear. That tells the AI it's released from its goal, and gives it back the ability to stop its own work.

What's left is mine:

  1. Make sure Adobe is OK with me hosting my site on Edge Delivery Services.
  2. The Cloudflare work, which needs my logins. When I recorded, www still served GitHub Pages. The staging Worker is built and tested: it keeps my seven GitHub Pages project sites under www and sends everything else to EDS. It wasn't deployed yet.
  3. Config in Experience Workspace (enablement, redirects, the query index, the sitemap) and my review of the register.

AI will do most of the Cloudflare work too. Who touches things manually these days anyway?

Update, the evening of October 25: the Worker is now deployed on two hosts that stay out of search, so you can put the two sites side by side. gh.jackzhaojin.com serves the GitHub Pages site, and eds.jackzhaojin.com serves the Edge Delivery one, which is also at main--www-eds--jackzhaojin.aem.live. Every page has the same path on both. www stays on GitHub Pages until the cutover.

The session's summary of what is left: the staging edge built and tested locally, the route table tests passing, and the steps waiting on Jack: the staging DNS record, wrangler login, deploy, and the host check

What's left, from the session: the staging edge is built and tested locally, waiting on my Cloudflare sign-in.

Watch this part 8:43 Still running 8:59 The stop hook 9:18 /goal clear 9:36 Hosting and Cloudflare

8. What I learned: it compounds

Models are better and better. There was nothing between prompt 1 and prompt 2 that I gave feedback on. I thought I was doing the responsible thing by putting a break there, but this could have been one shot. AI can do a pixel-perfect migration on its own now, using stardust and a lot of other tools. Left side, right side, they look exactly like each other. Models are extremely capable now, and we're headed to a very different place from where we were.

Folks sometimes ask me how I build EDS sites with a couple of prompts. What I've learned on my own journey is that the AI growth curve doesn't plateau. When you lift weights, you see the early growth and then you plateau. This isn't even linear. It compounds.

Chart titled AI hours don't add up, they compound. Three paths of value over hours: a plateau curve that rises fast then flattens, a straight linear path, and a compounding curve that starts lowest, crosses both, then bends sharply up. Stages along the hours: prompting, context, workflows, and agents, marked I'm here.

How I think about it. An illustrative model, not measured data, from the video.

Today it was two prompts. Next time: can I plan with one prompt and build with one prompt? Can I get the CDN and the server infrastructure done in the same prompt as the build? The more you build with AI, the better, as long as you look for ways to multiply your results from last week and last month.

I've been on PTO and vacation, and I haven't been on projects; I've been in training. That gives me a lot more time to think. With no meetings on my calendar, I can go into builder mode.

The EDS site stood up in two prompts, with content, assets, code, blogs and templates. My stuff is open source: the site's repo, every commit and the plan are linked below. Next, I want to try one prompt to plan and one to build, with the CDN in it. If you've migrated a site with agents, how did you split the work, and what did you check before you trusted it?

Watch this part 9:48 What I learned 10:38 It compounds 11:39 PTO and builder mode 12:03 Final thoughts

References