<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Sarasota Web Pros — Writing</title><description>WordPress, React, and the modern web. Practical deep dives by Earle, a senior WordPress developer in Sarasota.</description><link>https://sarasotawebpros.com/</link><author>hello@sarasotawebpros.com (Earle)</author><item><title>Deploy a completely static Astro site to DigitalOcean App Platform</title><link>https://sarasotawebpros.com/blog/deploy-static-astro-digitalocean-app-platform/</link><guid isPermaLink="true">https://sarasotawebpros.com/blog/deploy-static-astro-digitalocean-app-platform/</guid><description>Astro&apos;s docs skip DigitalOcean, and DigitalOcean&apos;s autodetection assumes you want a Node server. Here is the path to a fully static deploy for about five dollars a month.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate></item><item><title>WordPress AI Connectors Solve the Wrong Problem</title><link>https://sarasotawebpros.com/blog/wordpress-ai-connectors-wrong-problem/</link><guid isPermaLink="true">https://sarasotawebpros.com/blog/wordpress-ai-connectors-wrong-problem/</guid><description>WordPress 7.0 wires AI providers into wp-admin. Novices get API-key confusion; developers already get more power from AI in the repo. Why the Connectors API solves the wrong problem.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate></item><item><title>WordPress for Blogs Is Dead, and WordPress Did It to Itself</title><link>https://sarasotawebpros.com/blog/wordpress-for-blogs-is-dead/</link><guid isPermaLink="true">https://sarasotawebpros.com/blog/wordpress-for-blogs-is-dead/</guid><description>WordPress still powers the web, but the default answer for &quot;I need a blog&quot; changed. Why I moved my own site to Astro, when WordPress still earns its keep, and what core is building instead of fixing the basics.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate></item><item><title>WordPress Forgot Why WordPress Won</title><link>https://sarasotawebpros.com/blog/wordpress-forgot-why-it-won/</link><guid isPermaLink="true">https://sarasotawebpros.com/blog/wordpress-forgot-why-it-won/</guid><description>WordPress won by staying lean and letting the community handle the long tail. Core is chasing WP VIP features while basic metadata still needs a plugin. What the 80/20 rule was supposed to mean.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate></item><item><title>Rendering React inside the WordPress block editor without losing your mind</title><link>https://sarasotawebpros.com/blog/react-in-the-block-editor/</link><guid isPermaLink="true">https://sarasotawebpros.com/blog/react-in-the-block-editor/</guid><description>Gutenberg ships its own pinned React. Here&apos;s the mental model Earle uses to mount React islands in the block editor without the two worlds fighting over the DOM.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Web Components as the integration layer for legacy themes</title><link>https://sarasotawebpros.com/blog/web-components-integration-layer/</link><guid isPermaLink="true">https://sarasotawebpros.com/blog/web-components-integration-layer/</guid><description>Custom elements give you a framework-agnostic seam for dropping modern UI into a theme you would rather not rewrite. Shadow DOM, slots, and the gotchas that bite in production.</description><pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Building admin pages with React and @wordpress/data</title><link>https://sarasotawebpros.com/blog/react-admin-wordpress-data/</link><guid isPermaLink="true">https://sarasotawebpros.com/blog/react-admin-wordpress-data/</guid><description>The settings-page-as-SPA approach: routing, the data store, REST endpoints, and nonce handling without dragging in a second state library.</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Shipping a custom Gutenberg block with TypeScript and esbuild</title><link>https://sarasotawebpros.com/blog/gutenberg-block-typescript-esbuild/</link><guid isPermaLink="true">https://sarasotawebpros.com/blog/gutenberg-block-typescript-esbuild/</guid><description>A lean build setup that respects WordPress bundled dependencies and keeps your sanity intact. Config, externals, aliases, and the dev loop.</description><pubDate>Thu, 05 Feb 2026 00:00:00 GMT</pubDate></item><item><title>When to reach for Web Components vs React in a WordPress build</title><link>https://sarasotawebpros.com/blog/web-components-vs-react-decision-tree/</link><guid isPermaLink="true">https://sarasotawebpros.com/blog/web-components-vs-react-decision-tree/</guid><description>They solve overlapping problems. Here is the decision tree I use on client work, and where each one quietly falls down.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Sharing state between React islands without a global store</title><link>https://sarasotawebpros.com/blog/sharing-state-react-islands/</link><guid isPermaLink="true">https://sarasotawebpros.com/blog/sharing-state-react-islands/</guid><description>Two islands, one page, no Redux. How to keep independent React roots in sync using @wordpress/data, custom events, and the occasional shared context.</description><pubDate>Thu, 08 Jan 2026 00:00:00 GMT</pubDate></item></channel></rss>