{"columns":["path","title","headingId","date","summary","description","image","socialImage","topics","readTime","videoTime","talkUrl","talkLabel","talkNote","watchUrl","watchLabel","keywords","nowrap","template","robots","pages"],"data":[{"path":"/writing/2026-10-25-eds-migration-two-goal-prompts/","title":"Migrating My Site to AEM Edge Delivery Services in Two Prompts","headingId":"migrating-my-site-to-aem-edge-delivery-services-in-two-prompts","date":"2026-10-25","summary":"I migrated my site from GitHub Pages to AEM Edge Delivery Services with two goal prompts: 34 pages, my design system and every image, checked page by page.","description":"I migrated my site from GitHub Pages to AEM Edge Delivery Services with two goal prompts: 34 pages, my design system and every image, checked page by page.","image":"https://www.jackzhaojin.com/writing/media_1e000820ead98c45743efd54308dde78c72be6045.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-10-25-eds-migration-two-goal-prompts/media_1e000820ead98c45743efd54308dde78c72be6045.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS|AI Engineering","readTime":"12 min read","videoTime":"12:23 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/8KI3oWsmDBg","watchLabel":"Watch on YouTube","keywords":"eds migration edge delivery services experience workspace da.live claude code goal prompt subagents agents parallel worktrees stardust github pages lighthouse design system cloudflare","nowrap":"","template":"article","robots":"","pages":["/talks/adaptto-2026/","/portfolio/","/talks/"]},{"path":"/writing/2026-10-10-adaptto-2026-25-talks/","title":"adaptTo() 2026 Recap: 25 AEM Conference Talks in 15 Minutes","headingId":"adaptto-2026-recap-25-aem-conference-talks-in-15-minutes","date":"2026-10-10","summary":"All 25 full talks from adaptTo() 2026, the AEM developer conference in Berlin, in conference order: what each one is, why to watch it, and my take.","description":"All 25 full talks from adaptTo() 2026, the AEM developer conference in Berlin, in conference order: what each one is, why to watch it, and my take.","image":"https://www.jackzhaojin.com/writing/media_1f73c391a7589d5fffdbc1b60356286cc33a76e8e.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-10-10-adaptto-2026-25-talks/media_1f73c391a7589d5fffdbc1b60356286cc33a76e8e.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS","readTime":"16 min read","videoTime":"14:43 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/d1S1yVgFep8","watchLabel":"Watch on YouTube","keywords":"adaptto berlin conference recap talks speakers mcp agents edge delivery services experience workspace da.live cache invalidation aem forms asset hub content migration","nowrap":"","template":"article","robots":"","pages":["/talks/adaptto-2026/","/talks/adaptto-2026-lightning/","/portfolio/","/talks/"]},{"path":"/writing/2026-09-20-aem-edge-functions-google-sign-in/","title":"AEM Edge Functions on a Laptop: Google Sign-in, Members-Only Pages and API Data at the Edge","headingId":"aem-edge-functions-on-a-laptop-google-sign-in-members-only-pages-and-api-data-at-the-edge","date":"2026-10-02","summary":"Google sign-in, a members-only section and a greeting bar with the user's own data from an API, added to an Edge Delivery site without touching the site code. The six parts of my video, written up with the code at a pinned commit and a token lab that runs the real signature checks in your browser.","description":"Google sign-in, members-only pages and API data on an Edge Delivery site with AEM Edge Functions, built on my laptop. The six parts of my video, with the code.","image":"https://www.jackzhaojin.com/writing/media_18c39b4e5778a8af7897fa5c3592bec74f2495aa4.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-09-20-aem-edge-functions-google-sign-in/media_18c39b4e5778a8af7897fa5c3592bec74f2495aa4.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS","readTime":"8 min read","videoTime":"12:31 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/J5DpmRjqNQQ","watchLabel":"Watch on YouTube","keywords":"edge functions fastly viceroy caddy google identity services jwt jwks cdn personalization","nowrap":"Sign-in, Members-Only","template":"article","robots":"","pages":["/portfolio/ciam-demo/","/portfolio/conversion-factory/","/talks/adaptto-2026/","/portfolio/","/talks/"]},{"path":"/writing/2026-08-15-anima-mesh-company-of-zero/","title":"Company of Zero: How AnimaMesh Runs a Company's Back Office on Cloudflare Workers","headingId":"company-of-zero-how-animamesh-runs-a-companys-back-office-on-cloudflare-workers","date":"2026-08-15","summary":"AnimaMesh, an open source engine on Cloudflare Workers: one public engine, a private markdown brain per company, agents that take sick days, a brain that files its own GitHub issues past a leak guard, and AI that reaches out to the owner instead of waiting for a prompt.","description":"AnimaMesh, an open source engine where AI agents run a company's back office on Cloudflare Workers: one public engine, a private markdown brain per company.","image":"https://www.jackzhaojin.com/writing/media_1365070f3bfc3eceef1a6d8c2ad6d7488bbbcecb3.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-08-15-anima-mesh-company-of-zero/media_1365070f3bfc3eceef1a6d8c2ad6d7488bbbcecb3.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"14 min read","videoTime":"11:09 video","talkUrl":"https://www.jackzhaojin.com/talks/#ai-tinkerers-2026-animamesh","talkLabel":"Given as a talk at AI Tinkerers Columbus, August 3, 2026","talkNote":"2nd place, AI Tinkerers global Top AI Demos","watchUrl":"https://youtu.be/zYytfy1PAkc","watchLabel":"Watch on YouTube","keywords":"talk ai tinkerers columbus 2nd place, ai tinkerers global top ai demos animamesh company of zero ai agents multi-agent cloudflare workers durable objects open knowledge format okf second brain microsoft graph sharepoint discord github issues ai tinkerers columbus agent orchestration","nowrap":"","template":"article","robots":"","pages":["/talks/ai-tinkerers-2026-animamesh/","/portfolio/anima-mesh/","/portfolio/","/talks/"]},{"path":"/writing/2026-08-09-adobe-stardust-explained/","title":"Adobe Stardust Explained: A Design Skill Built on impeccable, Tested on Real EDS Blocks","headingId":"adobe-stardust-explained-a-design-skill-built-on-impeccable-tested-on-real-eds-blocks","date":"2026-08-09","summary":"What Adobe Stardust is: a skill in adobe/skills built on impeccable, not a product. Its four steps, the human gate before EDS code, the one-shot EDS build, and three real blocks redesigned against a Google Stitch baseline.","description":"What Adobe Stardust is: a design skill in adobe/skills built on impeccable. Its four steps, the human gate before EDS code, and three real blocks compared.","image":"https://www.jackzhaojin.com/writing/media_19e348c5d544a782aa7bc8b3105df46551bd53f61.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-08-09-adobe-stardust-explained/media_19e348c5d544a782aa7bc8b3105df46551bd53f61.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS|AI Engineering","readTime":"9 min read","videoTime":"14:51 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/THAk36FGZps","watchLabel":"Watch on YouTube","keywords":"adobe stardust adobe/skills impeccable edge delivery services da.live experience workspace google stitch stardust:deploy state.json human in the loop claude fable 5 eds block library code-only reskin","nowrap":"","template":"article","robots":"","pages":["/talks/adaptto-2026/","/portfolio/","/talks/"]},{"path":"/writing/2026-07-21-four-frontier-models-one-prompt/","title":"Four Frontier Models, One 1,032-Line Prompt: What Each Built, and the Merge I Kept","headingId":"four-frontier-models-one-1032-line-prompt-what-each-built-and-the-merge-i-kept","date":"2026-07-21","summary":"GPT 5.6, Kimi K3, Gemini 3.5 Flash and Claude Fable 5 each built my portfolio from the same 1,032-line prompt. What each got right and wrong in my notebook, my ranking, and what the merge really kept, line by line.","description":"GPT 5.6, Kimi K3, Gemini 3.5 Flash and Claude Fable 5 built my portfolio from one 1,032-line prompt. What each got right and wrong, and the merge I kept.","image":"https://www.jackzhaojin.com/writing/media_15c0f67eec9dddb80869840bfe75f0b3cedeab711.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-07-21-four-frontier-models-one-prompt/media_15c0f67eec9dddb80869840bfe75f0b3cedeab711.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"9 min read","videoTime":"14:15 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/twYqEHXh91U","watchLabel":"Watch on YouTube","keywords":"gpt 5.6 codex kimi k3 moonshot gemini 3.5 flash claude fable 5 google stitch model comparison frontier models prompt engineering slicc","nowrap":"","template":"article","robots":"","pages":["/portfolio/","/portfolio/","/talks/"]},{"path":"/writing/2026-06-28-patterns-of-work/","title":"Patterns of Work: Five Layers of Working with AI","headingId":"patterns-of-work-five-layers-of-working-with-ai","date":"2026-06-28","summary":"Five layers of working with AI, from one person running loops around the clock to humans and agents managing work together, plus the spine and foundation that decide whether any of it holds. Each layer covers what changes and where it gets hard, with an explorer to walk the model.","description":"Five layers of working with AI, from one person to a whole organization, the spine and foundation that hold them up, and where each layer gets hard.","image":"https://www.jackzhaojin.com/writing/media_1a1c5441cba5b6a812b8b9ae9860ab0d6474c5095.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-06-28-patterns-of-work/media_1a1c5441cba5b6a812b8b9ae9860ab0d6474c5095.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"27 min read","videoTime":"14:40 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/YA7rvs6K1bw","watchLabel":"Watch on YouTube","keywords":"patterns of work future of work knowledge work ai as an individual contributor agent memory agent mesh a2a acp loop engineering harness evals agent governance observability shared context continuous-agent adaptto() 2026","nowrap":"","template":"article","robots":"","pages":["/talks/ai-tinkerers-2026/","/portfolio/content-factory/","/portfolio/content-factory/","/portfolio/continuous-executive-agent/","/portfolio/","/talks/"]},{"path":"/writing/2026-05-31-continuous-agent-second-brain/","title":"Agent Memory for a 24/7 Coding Agent: Five Memory Types, Five Hooks and Retrieval in Plain English","headingId":"agent-memory-for-a-247-coding-agent-five-memory-types-five-hooks-and-retrieval-in-plain-english","date":"2026-05-31","summary":"How a 24/7 coding agent gets a memory: mem0 behind the executive only, git as the source of truth, five memory types, five hooks in the loop, retrieval in plain English, and the bug that failed every write while logging ok.","description":"Agent memory for a 24/7 coding agent with mem0: five memory types, five lifecycle hooks, plain-English retrieval and git as the source of truth.","image":"https://www.jackzhaojin.com/writing/media_163a1b6295480ee5c8de385f2458a82c2e5625751.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-05-31-continuous-agent-second-brain/media_163a1b6295480ee5c8de385f2458a82c2e5625751.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"8 min read","videoTime":"","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"","watchLabel":"","keywords":"agent memory mem0 second brain memory taxonomy episodic memory semantic memory procedural memory retrieval natural-language search lifecycle hooks claude agent sdk continuous agent dotenv pm2","nowrap":"","template":"article","robots":"","pages":["/portfolio/continuous-executive-agent/","/portfolio/","/talks/"]},{"path":"/writing/2026-05-24-theming-eds-with-google-stitch/","title":"Theming a Brand-New EDS Site with Google Stitch and MCP: One Prompt, Three Steps, Two Lessons","headingId":"theming-a-brand-new-eds-site-with-google-stitch-and-mcp-one-prompt-three-steps-two-lessons","date":"2026-05-24","summary":"Theme a brand-new Edge Delivery site in three steps: define the theme, design it in Google Stitch, and wire it back through the Stitch MCP server, all in one long prompt. The real tokens that changed, the call-to-action miss, the fix, and why theming and blocks belong in separate passes.","description":"Theme a new Edge Delivery site in three steps: define the theme, design it in Google Stitch, wire it back through MCP. The real tokens, the miss and the fix.","image":"https://www.jackzhaojin.com/writing/media_1444244aa1673941c64ebb086738c6d536d91b2f9.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-05-24-theming-eds-with-google-stitch/media_1444244aa1673941c64ebb086738c6d536d91b2f9.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS|AI Engineering","readTime":"8 min read","videoTime":"14:23 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/2BZ8QHUxc-E","watchLabel":"Watch on YouTube","keywords":"google stitch stitch mcp model context protocol edge delivery services eds theming styles.css css custom properties aem-boilerplate claude opus 4.7 mlflow playwright cli teaser block inter source sans 3","nowrap":"","template":"article","robots":"","pages":["/portfolio/conversion-factory/","/portfolio/","/talks/"]},{"path":"/writing/2026-05-17-adobe-eds-skills-hands-on/","title":"Adobe's EDS Skills on a Real Build: create-site and Content-Driven Development, Traced in MLflow","headingId":"adobes-eds-skills-on-a-real-build-create-site-and-content-driven-development-traced-in-mlflow","date":"2026-05-17","summary":"Adobe's create-site and content-driven-development skills, run end to end on a brand-new Edge Delivery site with MLflow tracing every session. What each skill does, what it built, a hook that shows which skill fired, and the theme skill that's still missing.","description":"What Adobe's create-site and content-driven-development skills do on a real Edge Delivery build, how to see in MLflow which skill fired, and the gap left.","image":"https://www.jackzhaojin.com/writing/media_1554b50320518a2a297062a04957a66eaaa53e64a.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-05-17-adobe-eds-skills-hands-on/media_1554b50320518a2a297062a04957a66eaaa53e64a.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS|AI Engineering","readTime":"10 min read","videoTime":"14:10 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/uTFBqT1ULhk","watchLabel":"Watch on YouTube","keywords":"adobe agent skills adobe/skills create-site content-driven-development cdd edge delivery services da aem code sync claude code claude opus 4.7 mlflow stop hook teaser block universal editor","nowrap":"","template":"article","robots":"","pages":["/portfolio/ai-builder-kit/","/portfolio/","/talks/"]},{"path":"/writing/2026-04-12-two-ai-skills-team-enablement/","title":"Two AI Skills for Team Enablement: Log the Prompts You Typed, File the AI Docs Behind Them","headingId":"two-ai-skills-for-team-enablement-log-the-prompts-you-typed-file-the-ai-docs-behind-them","date":"2026-04-12","summary":"Keep the prompts people actually typed, turn one-off builds into skills, and file the AI docs behind them under one taxonomy. Two open source skills, a Conversation Logger and an AI Knowledge Harvester, and a sorter to try the filing rules.","description":"Make a team's AI work repeatable: log the prompts people typed, turn one-off builds into skills, and file AI docs under one taxonomy. Two open source skills.","image":"https://www.jackzhaojin.com/writing/media_14b0c0445297528fa704ee7e6dfcfcc80c07480bf.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-04-12-two-ai-skills-team-enablement/media_14b0c0445297528fa704ee7e6dfcfcc80c07480bf.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"8 min read","videoTime":"9:49 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/5U_fOYZxMD4","watchLabel":"Watch on YouTube","keywords":"agent skills claude code github copilot codex conversation logger ai knowledge harvester prompt packet skill creator ai-builder-kit npx skills ciam keycloak phase two","nowrap":"","template":"article","robots":"","pages":["/portfolio/ai-builder-kit/","/portfolio/ciam-demo/","/portfolio/","/talks/"]},{"path":"/writing/2026-04-05-continuous-executive-agent-v2-1/","title":"A 24/7 Coding Agent at v2.1: An Executive Loop, Swappable Workers and When to Ask a Human","headingId":"a-247-coding-agent-at-v21-an-executive-loop-swappable-workers-and-when-to-ask-a-human","date":"2026-04-05","summary":"What it takes to keep a harness going around the clock: an executive loop on PM2, swappable workers on Claude, Codex and Kimi K2.5, and a failure path that retries, diagnoses, then asks a human. Release by release, with the code, the walkthrough and the live Q&A.","description":"How a 24/7 coding agent works: an executive loop on PM2, workers on Claude, Codex or Kimi K2.5, and a failure path that retries, diagnoses, then asks a human.","image":"https://www.jackzhaojin.com/writing/media_1df225dcdcf372149a58c4e9508fa0e6d0d5187c7.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-04-05-continuous-executive-agent-v2-1/media_1df225dcdcf372149a58c4e9508fa0e6d0d5187c7.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"15 min read","videoTime":"19:46 video","talkUrl":"https://www.jackzhaojin.com/talks/#ai-tinkerers-2026","talkLabel":"Given as a talk at AI Tinkerers Columbus, April 6, 2026","talkNote":"Featured in AI Tinkerers' global Community Spotlights","watchUrl":"https://youtu.be/hxJpum9fNaU","watchLabel":"Watch on YouTube","keywords":"talk ai tinkerers columbus featured in ai tinkerers' global community spotlights continuous agent 24/7 coding agent autonomous coding agent claude agent sdk openai codex kimi k2.5 pm2 harness openclaw ai tinkerers columbus notion discord supabase playwright spec-driven development needs-you.md","nowrap":"","template":"article","robots":"","pages":["/talks/ai-tinkerers-2026/","/portfolio/continuous-executive-agent/","/talks/ai-tinkerers-2026/","/portfolio/","/talks/"]},{"path":"/writing/2026-03-23-eds-hlx-admin-agentic-config/","title":"Agentic Admin API Configuration for Edge Delivery Services: GET Before POST, With a Hard Stop","headingId":"agentic-admin-api-configuration-for-edge-delivery-services-get-before-post-with-a-hard-stop","date":"2026-03-23","summary":"Move Edge Delivery Admin API config out of Postman and into an agent skill that plans, GETs before it POSTs, and hits a Claude Code hook that stops its writes for approval. The demo, the hook's code, and a lab that shows exactly what it catches and what it misses.","description":"An agent skill for the Edge Delivery Admin API: it plans, GETs before it POSTs, and a hook stops its writes for approval, even in bypass mode.","image":"https://www.jackzhaojin.com/writing/media_12a7353ad37df185964025c0763053a6d0f385a2c.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-03-23-eds-hlx-admin-agentic-config/media_12a7353ad37df185964025c0763053a6d0f385a2c.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS|AI Engineering","readTime":"10 min read","videoTime":"9:06 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/ojlh7o_3U9w","watchLabel":"Watch on YouTube","keywords":"aem admin api admin.hlx.page helix 5 edge delivery services robots.txt claude code pretooluse hook bypass permissions agent skills plugin marketplace get/set/get execution.md tools.aem.live postman","nowrap":"","template":"article","robots":"","pages":["/portfolio/ai-builder-kit/","/portfolio/ai-builder-kit/","/portfolio/","/talks/"]},{"path":"/writing/2026-02-05-reusable-ai-development-modules/","title":"Making AI-Driven Development Modules Reusable: Four Patterns, One Stack","headingId":"making-ai-driven-development-modules-reusable-four-patterns-one-stack","date":"2026-02-05","summary":"Ad hoc prompting, specs, harnesses and a 24/7 agent stack on each other, and each layer should be reused by the one above, not rebuilt. The board, a counter you can click for what rebuilding costs, and the refactor I did in April.","description":"Ad hoc prompting, spec-driven development, harnesses and a 24/7 agent stack on each other. Build each layer to work alone and be reused by the one above.","image":"https://www.jackzhaojin.com/writing/media_10b278242ca261ccf8a9b8f7967b0ab04661d101e.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-02-05-reusable-ai-development-modules/media_10b278242ca261ccf8a9b8f7967b0ab04661d101e.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"6 min read","videoTime":"9:44 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/3l_MtNA3kDY","watchLabel":"Watch on YouTube","keywords":"spec-driven development ai harness continuous agent prompt packet prompt logging notion claude code software reuse agentic development patterns","nowrap":"","template":"article","robots":"","pages":["/portfolio/continuous-executive-agent/","/portfolio/","/talks/"]},{"path":"/writing/2026-01-29-playwright-stakeholder-demos/","title":"Playwright Stakeholder Demos: Captions Timed to Each Click and a Voice the Video Waits For","headingId":"playwright-stakeholder-demos-captions-timed-to-each-click-and-a-voice-the-video-waits-for","date":"2026-01-29","summary":"Have AI demo its own work back to you: Playwright scripts that click through the real app, a caption overlay injected right before each action, and a merge step that holds the video until each voice clip finishes. The code, and a lab for the freeze-frame rule.","description":"Turn Playwright scripts into a stakeholder demo: a caption overlay timed to each click, video at the viewport size, and voice clips the video waits for.","image":"https://www.jackzhaojin.com/writing/media_1fd2fbfc5c24a1d860b84a9a7aaa928a01e364bfc.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-01-29-playwright-stakeholder-demos/media_1fd2fbfc5c24a1d860b84a9a7aaa928a01e364bfc.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"8 min read","videoTime":"1:33 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/W1wD5tKoF3M","watchLabel":"Watch on YouTube","keywords":"playwright playwright video recording demo automation ai harness elevenlabs ffmpeg freeze frame stakeholder demo claude code react vite","nowrap":"","template":"article","robots":"","pages":["/portfolio/ai-builder-kit/#p-kit-video","/portfolio/ai-builder-kit/#p-kit-video","/portfolio/","/talks/"]},{"path":"/writing/2026-01-05-from-prompts-to-harness/","title":"From Prompts to Harness: How Deterministic Code and Agents Work Together","headingId":"from-prompts-to-harness-how-deterministic-code-and-agents-work-together","date":"2026-01-05","summary":"Let deterministic code set the order and hold the numbers, and let agents make the judgment calls. A Next.js evaluator that blends a scan with an agent's score 70/30, and a harness loop where a defect becomes a subtask, with the real scoring code and a model of the loop to play with.","description":"How to mix deterministic code and agents: an evaluator that blends a scan with an agent's score 70/30, and a harness loop of planning, build and validate agents.","image":"https://www.jackzhaojin.com/writing/media_1ed1a50bdf6ad96ebbb6ceeb9b2918a3f93850dc3.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2026-01-05-from-prompts-to-harness/media_1ed1a50bdf6ad96ebbb6ceeb9b2918a3f93850dc3.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"11 min read","videoTime":"9:42 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/2CT4u0ToEzA","watchLabel":"Watch on YouTube","keywords":"agent harness claude agent sdk claude code sub-agents playwright mcp mcp next.js shadcn server-sent events axe-core cheerio unpdf pixelmatch lighthouse docker oracle cloud vm git branches git worktree spec-driven development bmad spec kit ralph loop da live deterministic and agentic","nowrap":"","template":"article","robots":"","pages":["/portfolio/content-factory/","/portfolio/","/talks/"]},{"path":"/writing/2025-10-12-da-live-mcp-across-ai-platforms/","title":"One da.live MCP Server Across Claude, Gemini, Azure OpenAI and n8n","headingId":"one-dalive-mcp-server-across-claude-gemini-azure-openai-and-n8n","date":"2025-10-12","summary":"Part two: the same da.live MCP server on Claude, Gemini 2.5 Pro and Azure OpenAI, deployed to Azure Functions with OIDC and driven from n8n. Why each model client needs its own tool format, why serverless wants Streamable HTTP, and the two integration patterns to choose between.","description":"One da.live MCP server on Claude, Gemini 2.5 Pro and Azure OpenAI: the tool format each client needs, an OIDC deploy to Azure Functions, and n8n.","image":"https://www.jackzhaojin.com/writing/media_167e850c8e599164dda113af273e700e0a4d702fb.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-10-12-da-live-mcp-across-ai-platforms/media_167e850c8e599164dda113af273e700e0a4d702fb.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering|Adobe AEM & EDS","readTime":"10 min read","videoTime":"7:14 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/6O2x97lVitM","watchLabel":"Watch on YouTube","keywords":"model context protocol streamable http sse da.live edge delivery services azure functions github actions oidc azure ai foundry azure openai gpt-5 mini grok gemini 2.5 pro claude n8n mcp inspector host.docker.internal","nowrap":"","template":"article","robots":"","pages":["/portfolio/content-factory/","/talks/adaptto-2026/","/portfolio/content-factory/","/portfolio/content-factory/","/talks/adaptto-2026/","/portfolio/","/talks/"]},{"path":"/writing/2025-10-05-mcp-server-for-eds-da-live/","title":"Building an MCP Server for EDS da.live: Scripted AI Flow vs Agent Tools","headingId":"building-an-mcp-server-for-eds-dalive-scripted-ai-flow-vs-agent-tools","date":"2025-10-05","summary":"Two ways to let a model edit a da.live page: a scripted AI flow, and an MCP server with get and save tools the model calls itself. Same quality, twice the time and tokens, far more flexible. The code for both, and a side-by-side run of both versions.","description":"How to expose da.live get and save as MCP tools, and what moving from a scripted AI flow to a tool loop costs: same quality, twice the time and tokens.","image":"https://www.jackzhaojin.com/writing/media_16ce5e730c0d17f1dcd226ecee3c78f21b8ccc0f2.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-10-05-mcp-server-for-eds-da-live/media_16ce5e730c0d17f1dcd226ecee3c78f21b8ccc0f2.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS|AI Engineering","readTime":"10 min read","videoTime":"9:57 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/r_L1tHBKeZQ","watchLabel":"Watch on YouTube","keywords":"model context protocol mcp server da.live document authoring edge delivery services admin.da.live source api azure functions claude desktop claude sonnet tool use agent loop","nowrap":"","template":"article","robots":"","pages":["/portfolio/content-factory/","/talks/adaptto-2026/","/portfolio/content-factory/","/talks/adaptto-2026/","/portfolio/","/talks/"]},{"path":"/writing/2025-09-01-aem-caching-production-architectures/","title":"AEM Caching in Production: How Cache-Control Moves Through Every Layer","headingId":"aem-caching-in-production-how-cache-control-moves-through-every-layer","date":"2025-09-01","summary":"How Cache-Control moves from AEM publish through the dispatcher, Adobe's Fastly CDN and a client CDN to the browser, with a header relay you can switch layer by layer, a stale-while-revalidate timeline, and three tips for documenting and testing each layer.","description":"How Cache-Control and Surrogate-Control move from AEM publish through the dispatcher, Adobe's CDN and a client CDN, with three tips for getting caching right.","image":"https://www.jackzhaojin.com/writing/media_1ad47c0497f8dfb38c963483d29eb286187e651b3.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-09-01-aem-caching-production-architectures/media_1ad47c0497f8dfb38c963483d29eb286187e651b3.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS","readTime":"9 min read","videoTime":"9:56 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/E7jNBsUvXm0","watchLabel":"Watch on YouTube","keywords":"aem caching cache-control surrogate-control stale-while-revalidate stale-if-error rfc 5861 aem dispatcher .any files enablettl fastly adobe cdn bring your own cdn x-aem-edge-key akamai azure front door redis persisted queries aem edge functions","nowrap":"","template":"article","robots":"","pages":["/portfolio/","/talks/"]},{"path":"/writing/2025-07-13-three-eds-offerings/","title":"Three Ways to Author on AEM Edge Delivery Services: Documents, Universal Editor and da.live","headingId":"three-ways-to-author-on-aem-edge-delivery-services-documents-universal-editor-and-dalive","date":"2025-07-13","summary":"Documents, the Universal Editor and da.live on one diagram: the three Edge Delivery authoring options differ only in the editor and where content is stored. From preview and publish on, the path to the edge is shared.","description":"Edge Delivery Services authoring in July 2025: Google Docs or Word, AEM with the Universal Editor, and da.live. One diagram: how they differ, what they share.","image":"https://www.jackzhaojin.com/writing/media_139fbe8752c895686ed464176b668d08affea265e.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-07-13-three-eds-offerings/media_139fbe8752c895686ed464176b668d08affea265e.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS","readTime":"3 min read","videoTime":"","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"","watchLabel":"","keywords":"aem edge delivery services eds document authoring da.live universal editor google docs microsoft word sharepoint google drive aem.live document-based authoring","nowrap":"","template":"article","robots":"","pages":["/portfolio/","/talks/"]},{"path":"/writing/2025-07-12-aem-headless-omnichannel-architecture/","title":"AEM Headless and Omnichannel: Three Architecture Diagrams and Twelve Considerations","headingId":"aem-headless-and-omnichannel-three-architecture-diagrams-and-twelve-considerations","date":"2025-07-12","summary":"Three fictional but realistic ways to get AEM content into email, mobile apps and sites: event topics, compile-time builds with Target, and one shared publish tier. Six considerations compared across all three diagrams, six more that never got a box, and the boards redrawn so they read on a phone.","description":"Three fictional AEM headless patterns for email, mobile apps and sites: events, static site generators and one shared publish tier, plus twelve considerations.","image":"https://www.jackzhaojin.com/writing/media_1f55840a52b4285166a265c303f68434a993cf4aa.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-07-12-aem-headless-omnichannel-architecture/media_1f55840a52b4285166a265c303f68434a993cf4aa.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS","readTime":"7 min read","videoTime":"9:13 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/-pquHqafwFA","watchLabel":"Watch on YouTube","keywords":"aem headless omnichannel content fragments experience fragments graphql persisted queries adobe target static site generation event-driven push vs pull csr ssr ssg markdown aem as a cloud service","nowrap":"","template":"article","robots":"","pages":["/portfolio/","/talks/"]},{"path":"/writing/2025-07-11-scaling-ai-coding-delivery-methodology/","title":"A 100% AI-Coded Next.js Agent, Part 3: Scaling AI Coding into a Delivery Method","headingId":"a-100-ai-coded-nextjs-agent-part-3-scaling-ai-coding-into-a-delivery-method","date":"2025-07-11","summary":"How to make AI coding repeatable for a delivery team: the PRD, the technical blueprint and the MDC task file, the AGENTS.md rules that bind them, what stays the same as traditional delivery and what changes.","description":"How to make AI coding repeatable for a delivery team: a PRD, a technical blueprint and an MDC task file, the AGENTS.md rules that bind them, and what changes.","image":"https://www.jackzhaojin.com/writing/media_1b4d0f7f06effeccf0e850fb96176212324f2cb21.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-07-11-scaling-ai-coding-delivery-methodology/media_1b4d0f7f06effeccf0e850fb96176212324f2cb21.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"7 min read","videoTime":"","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"","watchLabel":"","keywords":"prd product requirements document technical design document mdc agents.md story slicing agile sprints consulting delivery technical leadership ai orchestrator worker agents","nowrap":"","template":"article","robots":"","pages":["/portfolio/shadow-pivot/","/portfolio/postal-portal/","/portfolio/","/talks/"]},{"path":"/writing/2025-07-07-ai-coded-nextjs-agent-cicd-infrastructure/","title":"A 100% AI-Coded Next.js Agent, Part 2: CI/CD, Cloud Identities and the Architecture","headingId":"a-100-ai-coded-nextjs-agent-part-2-cicd-cloud-identities-and-the-architecture","date":"2025-07-07","summary":"How an app written entirely by AI gets from a commit to the cloud: two GitHub Actions pipelines picked by branch name, five actors that each get into Azure their own way, a public copy on CloudFront and EC2, a layered Next.js architecture, and prompts kept as versioned JSON.","description":"How my AI-coded Next.js agent ships: two GitHub Actions pipelines, five ways into Azure, CloudFront and EC2, the code layers, and prompts as versioned JSON.","image":"https://www.jackzhaojin.com/writing/media_16c27a122ddc3c82e4780e7866946b68b29ff616f.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-07-07-ai-coded-nextjs-agent-cicd-infrastructure/media_16c27a122ddc3c82e4780e7866946b68b29ff616f.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"8 min read","videoTime":"","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"","watchLabel":"","keywords":"github actions github container registry docker azure app service openid connect defaultazurecredential @azure/identity service principal managed identity amazon cloudfront amazon ec2 aws systems manager parameter store next.js app router prompt templates handlebars","nowrap":"","template":"article","robots":"","pages":["/portfolio/shadow-pivot/","/portfolio/","/talks/"]},{"path":"/writing/2025-07-06-ai-coded-nextjs-agent-release-1/","title":"A 100% AI-Coded Next.js Agent, Part 1: The Four Practices Behind Release 1.0","headingId":"a-100-ai-coded-nextjs-agent-part-1-the-four-practices-behind-release-10","date":"2025-07-06","summary":"What it took to ship a Next.js AI agent written entirely by AI: what release 1.0 does, the four practices behind it (planning files the AI works from, early CI/CD with real cloud access, a person in the product manager seat, comparing models), where each fell short, and a lab that runs the real fix for a partial failure.","description":"What it took to ship a Next.js AI agent written entirely by AI: planning files the AI works from, early CI/CD, a fix for partial failures, and model trade-offs.","image":"https://www.jackzhaojin.com/writing/media_198292da3e9bbce5fdd7f065244a6117108b8df02.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-07-06-ai-coded-nextjs-agent-release-1/media_198292da3e9bbce5fdd7f065244a6117108b8df02.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"9 min read","videoTime":"9:30 video","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"https://youtu.be/5cdnilROxbs","watchLabel":"Watch on YouTube","keywords":"next.js vibe coding ai coding agents claude sonnet 4 openai codex github copilot gpt-4o mini azure ai foundry prd mdc cypress shadow-pivot-ai-agentv2","nowrap":"","template":"article","robots":"","pages":["/portfolio/shadow-pivot/","/portfolio/","/talks/"]},{"path":"/writing/2025-06-12-azure-rbac-cicd-for-ai-agents/","title":"Azure RBAC and CI/CD for AI Coding Agents: Five Actors, Four Auth Patterns, Almost No Passwords","headingId":"azure-rbac-and-cicd-for-ai-coding-agents-five-actors-four-auth-patterns-almost-no-passwords","date":"2025-06-12","summary":"How I gave Copilot, Codex, GitHub Actions and an Azure Web App access to Azure Storage and AI Foundry with az login, managed identity, OIDC and one timed secret. Includes a lab that shows which credential DefaultAzureCredential picks.","description":"How I gave Copilot, Codex, GitHub Actions and an Azure Web App access to Storage and AI Foundry with az login, managed identity, OIDC and one timed secret.","image":"https://www.jackzhaojin.com/writing/media_18941507385fa7c35acba3c24f5b002bd466f5361.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-06-12-azure-rbac-cicd-for-ai-agents/media_18941507385fa7c35acba3c24f5b002bd466f5361.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"11 min read","videoTime":"","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"","watchLabel":"","keywords":"azure rbac defaultazurecredential az login managed identity service principal openid connect oidc federated credential github actions openai codex github copilot azure ai foundry azure blob storage azure web app azure_token_credentials next.js","nowrap":"","template":"article","robots":"","pages":["/portfolio/shadow-pivot/","/portfolio/","/talks/"]},{"path":"/writing/2025-06-08-edge-cms-shift-adobe-eds/","title":"The Edge CMS Shift: How Adobe EDS Stacks Up Against the Modern Web","headingId":"the-edge-cms-shift-how-adobe-eds-stacks-up-against-the-modern-web","date":"2025-06-08","summary":"Edge Delivery Services next to Cloudflare Pages, Netlify, Next.js, Hugo and Jekyll on five things enterprises need, plus how Adobe's CMS thinking got from CQ5 to EDS and the gaps EDS still had in June 2025.","description":"Adobe Edge Delivery Services next to Cloudflare Pages, Netlify, Next.js, Hugo and Jekyll on five enterprise needs, and Adobe's CMS path from CQ5 to EDS.","image":"https://www.jackzhaojin.com/writing/media_166877728c4ebdca76b36bc487c059375b5030f28.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-06-08-edge-cms-shift-adobe-eds/media_166877728c4ebdca76b36bc487c059375b5030f28.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS","readTime":"6 min read","videoTime":"","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"","watchLabel":"","keywords":"edge delivery services aem cq5 day software aem as a cloud service static site generation cloudflare pages netlify sanity next.js hugo jekyll google docs word universal editor azure edge functions da.live experience workspace","nowrap":"","template":"article","robots":"","pages":["/portfolio/","/talks/"]},{"path":"/writing/2025-06-04-seven-aem-capabilities-tradeoffs/","title":"Making Sense of 7 AEM Capabilities: Tradeoffs and Where Each One Fits","headingId":"making-sense-of-7-aem-capabilities-tradeoffs-and-where-each-one-fits","date":"2025-06-04","summary":"Seven ways to build on AEM side by side, from Classic AEM 6.5 to docs-based Edge Delivery: a functional and technical matrix with a compare-any-two tool, when Universal Editor beats the Sites Editor, and where each option fits.","description":"AEM 6.5, AEM as a Cloud Service, SPA SDKs, headless with UE, UE with Sites, UE with EDS and docs-based EDS, compared side by side, plus my opinions.","image":"https://www.jackzhaojin.com/writing/media_188d61220f06925eddf5a693b7b2ac2cb6d22e2a0.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-06-04-seven-aem-capabilities-tradeoffs/media_188d61220f06925eddf5a693b7b2ac2cb6d22e2a0.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS","readTime":"9 min read","videoTime":"","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"","watchLabel":"","keywords":"aem 6.5 aem as a cloud service core components spa editor spa sdk content fragments universal editor sites editor content fragment editor edge delivery services document-based authoring sidekick model.json infinity.json graphql persisted queries experience fragments adobe target da.live experience workspace","nowrap":"","template":"article","robots":"","pages":["/portfolio/","/talks/"]},{"path":"/writing/2025-05-28-aem-headless-when-frontend-teams-lead/","title":"Why AEM Headless Makes Sense When Frontend Teams Lead","headingId":"why-aem-headless-makes-sense-when-frontend-teams-lead","date":"2025-05-28","summary":"When a client's Next.js or Vue frontend came first, I think AEM headless with Universal Editor on top beats forcing classic Sites authoring. How I'd start, why persisted queries matter for caching, and when I wouldn't recommend it.","description":"When a client's Next.js or Vue frontend comes first, AEM headless can be the right call. How I'd start, persisted queries, preview, and when I wouldn't.","image":"https://www.jackzhaojin.com/writing/media_1ac99f227a6bec1fb1d1af20374eabba92e36c21c.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-05-28-aem-headless-when-frontend-teams-lead/media_1ac99f227a6bec1fb1d1af20374eabba92e36c21c.jpg?width=1200&format=pjpg&optimize=medium","topics":"Adobe AEM & EDS","readTime":"5 min read","videoTime":"","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"","watchLabel":"","keywords":"aem headless content fragments graphql persisted queries universal editor next.js react server components vue adobe target adobe experience platform aem as a cloud service translation dispatcher cdn caching","nowrap":"","template":"article","robots":"","pages":["/portfolio/","/talks/"]},{"path":"/writing/2025-04-13-vibe-coding-star-story-generator/","title":"A STAR Story Generator on Azure: Prompting GPT-4o-mini for JSON and Parsing What Comes Back","headingId":"a-star-story-generator-on-azure-prompting-gpt-4o-mini-for-json-and-parsing-what-comes-back","date":"2025-04-13","summary":"How a STAR story generator on Azure Functions prompts GPT-4o-mini for JSON, the parser that copes when the reply isn't clean JSON (with a lab you can break), the one reply that slips past validation, and how the five AI tools I vibe coded it with ranked in April 2025.","description":"How my STAR story generator on Azure Functions prompts GPT-4o-mini for JSON, parses the reply with a fallback, and the one reply that slips past validation.","image":"https://www.jackzhaojin.com/writing/media_1e6794397d316407dd2b0ab4d178edd1f89d6d70d.jpg?width=750&format=jpg&optimize=medium","socialImage":"https://www.jackzhaojin.com/writing/2025-04-13-vibe-coding-star-story-generator/media_1e6794397d316407dd2b0ab4d178edd1f89d6d70d.jpg?width=1200&format=pjpg&optimize=medium","topics":"AI Engineering","readTime":"7 min read","videoTime":"","talkUrl":"","talkLabel":"","talkNote":"","watchUrl":"","watchLabel":"","keywords":"vibe coding star method azure functions azure openai azure ai foundry gpt-4o-mini claude code claude 3.7 github copilot chatgpt-4o perplexity defaultazurecredential json parsing","nowrap":"","template":"article","robots":"","pages":["/portfolio/azure-star-generator/","/portfolio/","/talks/"]}],"offset":0,"limit":29,"total":29,":type":"sheet"}