{"id":8,"date":"2026-07-15T09:03:07","date_gmt":"2026-07-15T12:03:07","guid":{"rendered":"https:\/\/ostrovlabs.com\/?page_id=8"},"modified":"2026-07-15T10:39:24","modified_gmt":"2026-07-15T13:39:24","slug":"home","status":"publish","type":"page","link":"https:\/\/ostrovlabs.com\/","title":{"rendered":"Home"},"content":{"rendered":"<div class=\"site\"><header data-etch-element=\"section\" class=\"site-header\"><div data-etch-element=\"container\" class=\"site-container site-header__inner\"><a href=\"\/\" class=\"site-logo\">ostrov<span class=\"site-logo__muted\">labs<\/span><\/a><nav class=\"site-nav\"><a href=\"\/\" class=\"site-nav__link\">~\/articles<\/a><a href=\"\/about\/\" class=\"site-nav__link\">~\/about<\/a><a href=\"\/feed\/\" class=\"site-nav__link\">rss<\/a><\/nav><\/div><\/header><main class=\"site-main\"><section data-etch-element=\"section\"><div data-etch-element=\"container\" class=\"site-container hero__inner\"><div class=\"hero__kicker\">\/\/ field notes<\/div><h1 class=\"hero__title\">Working with AI, WordPress, and too many frameworks.<\/h1><p class=\"hero__subline\">What holds up in production and what doesn&#039;t \u2014 documented as I go.<\/p><\/div><\/section><section data-etch-element=\"section\"><div data-etch-element=\"container\" class=\"site-container articles__inner\"><div class=\"tag-row\"><a href=\"\/\" class=\"tag-pill tag-pill--active\">all<\/a><a href=\"\/tag\/ai\/\" class=\"tag-pill\">ai<\/a><a href=\"\/tag\/wordpress\/\" class=\"tag-pill\">wordpress<\/a><a href=\"\/tag\/frameworks\/\" class=\"tag-pill\">frameworks<\/a><a href=\"\/tag\/infra\/\" class=\"tag-pill\">infra<\/a><\/div><a href=\"\/hello-world\/\" class=\"article-card\"><div class=\"article-card__media\"><span class=\"article-card__media-label\">cover image<\/span><img decoding=\"async\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22400%22%20height%3D%22200%22%3E%3Crect%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22%23f0f0f0%22%2F%3E%3Ctext%20x%3D%2250%25%22%20y%3D%2250%25%22%20font-family%3D%22sans-serif%22%20font-size%3D%2216%22%20fill%3D%22%23999%22%20text-anchor%3D%22middle%22%20dominant-baseline%3D%22middle%22%3ENo%20image%20source%20provided%3C%2Ftext%3E%3C%2Fsvg%3E\" alt=\"Hello world!\"\/><\/div><div class=\"article-card__body\"><div class=\"article-card__meta\"><span>2026-07-15<\/span><span class=\"article-card__tags\"><\/span><\/div><h2 class=\"article-card__title\">Hello world!<\/h2><p class=\"article-card__excerpt\">Welcome to WordPress. This is your first post. Edit or delete it, then start writing!<\/p><\/div><\/a><a href=\"\/ai-maintains-wordpress-three-months\/\" class=\"article-card\"><div class=\"article-card__media\"><span class=\"article-card__media-label\">cover image<\/span><img loading=\"lazy\" decoding=\"async\"  sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" srcset=\"https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-ai-wp-agent.png 1200w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-ai-wp-agent-300x169.png 300w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-ai-wp-agent-1024x576.png 1024w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-ai-wp-agent-150x150.png 150w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-ai-wp-agent-768x432.png 768w\" src=\"https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-ai-wp-agent.png\" width=\"1200\" height=\"675\" alt=\"Letting AI maintain a WordPress site: three months in\" \/><\/div><div class=\"article-card__body\"><div class=\"article-card__meta\"><span>2026-07-08<\/span><span class=\"article-card__tags\"><span>ai<\/span><span>wordpress<\/span><\/span><\/div><h2 class=\"article-card__title\">Letting AI maintain a WordPress site: three months in<\/h2><p class=\"article-card__excerpt\">Updates, backups, and broken-link triage handed to an agent with WP-CLI access. The wins, the one incident, and the guardrails.<\/p><\/div><\/a><a href=\"\/gutenberg-vs-acf-2026\/\" class=\"article-card\"><div class=\"article-card__media\"><span class=\"article-card__media-label\">cover image<\/span><img loading=\"lazy\" decoding=\"async\"  sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" srcset=\"https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-gutenberg-acf.png 1200w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-gutenberg-acf-300x169.png 300w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-gutenberg-acf-1024x576.png 1024w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-gutenberg-acf-150x150.png 150w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-gutenberg-acf-768x432.png 768w\" src=\"https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-gutenberg-acf.png\" width=\"1200\" height=\"675\" alt=\"Gutenberg blocks vs. ACF flexible content in 2026\" \/><\/div><div class=\"article-card__body\"><div class=\"article-card__meta\"><span>2026-06-24<\/span><span class=\"article-card__tags\"><span>wordpress<\/span><\/span><\/div><h2 class=\"article-card__title\">Gutenberg blocks vs. ACF flexible content in 2026<\/h2><p class=\"article-card__excerpt\">Rebuilt the same client landing page both ways. Editor experience, query counts, and what the content team actually preferred.<\/p><\/div><\/a><a href=\"\/headless-wordpress-astro-postmortem\/\" class=\"article-card\"><div class=\"article-card__media\"><span class=\"article-card__media-label\">cover image<\/span><img loading=\"lazy\" decoding=\"async\"  sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" srcset=\"https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-headless-astro.png 1200w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-headless-astro-300x169.png 300w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-headless-astro-1024x576.png 1024w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-headless-astro-150x150.png 150w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-headless-astro-768x432.png 768w\" src=\"https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-headless-astro.png\" width=\"1200\" height=\"675\" alt=\"Headless WordPress with Astro: a post-mortem\" \/><\/div><div class=\"article-card__body\"><div class=\"article-card__meta\"><span>2026-06-11<\/span><span class=\"article-card__tags\"><span>frameworks<\/span><\/span><\/div><h2 class=\"article-card__title\">Headless WordPress with Astro: a post-mortem<\/h2><p class=\"article-card__excerpt\">Six months of a decoupled build. Where the complexity actually landed, and why we went back to a theme.<\/p><\/div><\/a><a href=\"\/prompt-driven-theme-development\/\" class=\"article-card\"><div class=\"article-card__media\"><span class=\"article-card__media-label\">cover image<\/span><img loading=\"lazy\" decoding=\"async\"  sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" srcset=\"https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-prompt-theme.png 1200w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-prompt-theme-300x169.png 300w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-prompt-theme-1024x576.png 1024w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-prompt-theme-150x150.png 150w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-prompt-theme-768x432.png 768w\" src=\"https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-prompt-theme.png\" width=\"1200\" height=\"675\" alt=\"Prompt-driven theme development: what actually works\" \/><\/div><div class=\"article-card__body\"><div class=\"article-card__meta\"><span>2026-05-30<\/span><span class=\"article-card__tags\"><span>ai<\/span><\/span><\/div><h2 class=\"article-card__title\">Prompt-driven theme development: what actually works<\/h2><p class=\"article-card__excerpt\">Three theme builds where the first draft came from a prompt. What survived code review and what got rewritten.<\/p><\/div><\/a><a href=\"\/migrating-40-sites-off-lamp\/\" class=\"article-card\"><div class=\"article-card__media\"><span class=\"article-card__media-label\">cover image<\/span><img loading=\"lazy\" decoding=\"async\"  sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" srcset=\"https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-lamp-migration.png 1200w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-lamp-migration-300x169.png 300w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-lamp-migration-1024x576.png 1024w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-lamp-migration-150x150.png 150w, https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-lamp-migration-768x432.png 768w\" src=\"https:\/\/ostrovlabs.com\/wp-content\/uploads\/2026\/07\/cover-lamp-migration.png\" width=\"1200\" height=\"675\" alt=\"Migrating 40 client sites off a bare-metal LAMP stack\" \/><\/div><div class=\"article-card__body\"><div class=\"article-card__meta\"><span>2026-05-17<\/span><span class=\"article-card__tags\"><span>infra<\/span><\/span><\/div><h2 class=\"article-card__title\">Migrating 40 client sites off a bare-metal LAMP stack<\/h2><p class=\"article-card__excerpt\">Containers, managed hosts, or stay put? The decision matrix, the migration weekend, and the two sites that fought back.<\/p><\/div><\/a><\/div><\/section><\/main><footer data-etch-element=\"section\" class=\"site-footer\"><div data-etch-element=\"container\" class=\"site-container site-footer__inner\"><span>\u00a9 2026 ostrovlabs<\/span><span>built in the open<\/span><\/div><\/footer><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-8","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ostrovlabs.com\/wp-json\/wp\/v2\/pages\/8","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ostrovlabs.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ostrovlabs.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ostrovlabs.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ostrovlabs.com\/wp-json\/wp\/v2\/comments?post=8"}],"version-history":[{"count":5,"href":"https:\/\/ostrovlabs.com\/wp-json\/wp\/v2\/pages\/8\/revisions"}],"predecessor-version":[{"id":52,"href":"https:\/\/ostrovlabs.com\/wp-json\/wp\/v2\/pages\/8\/revisions\/52"}],"wp:attachment":[{"href":"https:\/\/ostrovlabs.com\/wp-json\/wp\/v2\/media?parent=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}