<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: jdku sjdu</title>
    <description>The latest articles on DEV Community by jdku sjdu (@jdku_sjdu_6171aee799d6341).</description>
    <link>https://dev.to/jdku_sjdu_6171aee799d6341</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3617905%2F99b99120-4089-4c0c-9f17-80487d3e3b9e.png</url>
      <title>DEV Community: jdku sjdu</title>
      <link>https://dev.to/jdku_sjdu_6171aee799d6341</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jdku_sjdu_6171aee799d6341"/>
    <language>en</language>
    <item>
      <title>Stop regenerating the whole page: patching HTML with an LLM using structured DOM operations</title>
      <dc:creator>jdku sjdu</dc:creator>
      <pubDate>Tue, 21 Jul 2026 10:39:14 +0000</pubDate>
      <link>https://dev.to/jdku_sjdu_6171aee799d6341/stop-regenerating-the-whole-page-patching-html-with-an-llm-using-structured-dom-operations-5h2c</link>
      <guid>https://dev.to/jdku_sjdu_6171aee799d6341/stop-regenerating-the-whole-page-patching-html-with-an-llm-using-structured-dom-operations-5h2c</guid>
      <description>&lt;p&gt;I build a WordPress plugin that generates landing pages from a prompt. The first version worked the obvious way: user types "make the hero background darker", I send the entire page HTML to the model, the model sends back the entire page HTML, I save it.&lt;/p&gt;

&lt;p&gt;It worked. It was also terrible.&lt;/p&gt;

&lt;p&gt;Slow. A 900-line page means ~12k output tokens for a one-property change.&lt;br&gt;
Expensive. Output tokens are the costly ones, and I was paying for a full rewrite on every tweak.&lt;br&gt;
Lossy. The model would "helpfully" restructure the footer while fixing the hero. Or drop an aria-label. Or rename a class and break the CSS.&lt;/p&gt;

&lt;p&gt;That last one is the real killer. Users don't complain about latency nearly as much as they complain about the thing they didn't ask to change.&lt;/p&gt;

&lt;p&gt;Here's what I replaced it with.&lt;/p&gt;

&lt;p&gt;The core idea&lt;/p&gt;

&lt;p&gt;Don't ask the model for HTML. Ask it for operations on a DOM, then apply them yourself with a real parser.&lt;/p&gt;

&lt;p&gt;json&lt;br&gt;
[&lt;br&gt;
  {&lt;br&gt;
    "op": "setAttribute",&lt;br&gt;
    "selector": "#hero",&lt;br&gt;
    "name": "class",&lt;br&gt;
    "value": "hero hero--dark"&lt;br&gt;
  },&lt;br&gt;
  {&lt;br&gt;
    "op": "replaceInner",&lt;br&gt;
    "selector": "#hero h1",&lt;br&gt;
    "html": "&lt;span&gt;Ship faster.&lt;/span&gt; Build slower."&lt;br&gt;
  },&lt;br&gt;
  {&lt;br&gt;
    "op": "remove",&lt;br&gt;
    "selector": "#hero .badge"&lt;br&gt;
  }&lt;br&gt;
]&lt;/p&gt;

&lt;p&gt;The model emits maybe 200 tokens instead of 12,000. And critically: anything it didn't mention is untouched by construction, not by good behaviour. The blast radius of a bad generation is bounded by the schema.&lt;/p&gt;

&lt;p&gt;Applying the operations&lt;/p&gt;

&lt;p&gt;I use Symfony's DomCrawler, which wraps DOMDocument with a sane API and CSS selector support.&lt;/p&gt;

&lt;p&gt;bash&lt;br&gt;
composer require symfony/dom-crawler symfony/css-selector&lt;br&gt;
php&lt;br&gt;
use Symfony\Component\DomCrawler\Crawler;&lt;/p&gt;

&lt;p&gt;final class DomPatcher&lt;br&gt;
{&lt;br&gt;
    private Crawler $crawler;&lt;br&gt;
    private \DOMDocument $doc;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function __construct(string $html)
{
    $this-&amp;gt;doc = new \DOMDocument('1.0', 'UTF-8');

    // libxml mangles UTF-8 without this, and injects
    // &amp;lt;html&amp;gt;&amp;lt;body&amp;gt; wrappers we have to strip later.
    $prev = libxml_use_internal_errors(true);
    $this-&amp;gt;doc-&amp;gt;loadHTML(
        '&amp;lt;?xml encoding="UTF-8"&amp;gt;' . $html,
        LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD
    );
    libxml_clear_errors();
    libxml_use_internal_errors($prev);

    $this-&amp;gt;crawler = new Crawler($this-&amp;gt;doc);
}

public function apply(array $ops): void
{
    foreach ($ops as $op) {
        match ($op['op']) {
            'setAttribute' =&amp;gt; $this-&amp;gt;setAttribute($op),
            'replaceInner' =&amp;gt; $this-&amp;gt;replaceInner($op),
            'remove'       =&amp;gt; $this-&amp;gt;remove($op),
            'insertAfter'  =&amp;gt; $this-&amp;gt;insertAfter($op),
            default        =&amp;gt; throw new \InvalidArgumentException(
                "Unknown op: {$op['op']}"
            ),
        };
    }
}

private function setAttribute(array $op): void
{
    foreach ($this-&amp;gt;crawler-&amp;gt;filter($op['selector']) as $node) {
        /** @var \DOMElement $node */
        $node-&amp;gt;setAttribute($op['name'], $op['value']);
    }
}

private function replaceInner(array $op): void
{
    $fragment = $this-&amp;gt;parseFragment($op['html']);

    foreach ($this-&amp;gt;crawler-&amp;gt;filter($op['selector']) as $node) {
        while ($node-&amp;gt;firstChild) {
            $node-&amp;gt;removeChild($node-&amp;gt;firstChild);
        }
        foreach ($fragment as $child) {
            $node-&amp;gt;appendChild($this-&amp;gt;doc-&amp;gt;importNode($child, true));
        }
    }
}

public function toHtml(): string
{
    return $this-&amp;gt;doc-&amp;gt;saveHTML();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;A few things that bit me:&lt;/p&gt;

&lt;p&gt;filter() results are live-ish. If your operation removes nodes, iterate over a materialised array first — iterator_to_array() on the DOMNodeList — or you'll skip elements as the collection shifts under you.&lt;/p&gt;

&lt;p&gt;loadHTML without LIBXML_HTML_NOIMPLIED wraps your fragment in . With it, you get the raw fragment but malformed input can produce surprising trees. I validate the output length against the input as a crude sanity check before persisting.&lt;/p&gt;

&lt;p&gt;HTML5 tags emit libxml warnings. &lt;/p&gt;, , custom elements — libxml's parser is HTML4. The warnings are harmless but you must suppress them or your error log fills up. If you need genuine HTML5 parsing, masterminds/html5 is the drop-in, at a real performance cost.

&lt;p&gt;The selector problem&lt;/p&gt;

&lt;p&gt;The whole scheme collapses if the model can't reliably address a node. .btn:nth-child(3) is a coin flip on a page it can only partially see.&lt;/p&gt;

&lt;p&gt;So I don't let it invent selectors. On generation, every addressable element gets a stable ID:&lt;/p&gt;

&lt;p&gt;php&lt;br&gt;
private function ensureIds(\DOMDocument $doc): void&lt;br&gt;
{&lt;br&gt;
    $xpath = new \DOMXPath($doc);&lt;br&gt;
    $addressable = $xpath-&amp;gt;query(&lt;br&gt;
        '//section | //header | //footer | //h1 | //h2 | //h3 '&lt;br&gt;
        . '| //p | //img | //a | //button | //ul | //form'&lt;br&gt;
    );&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;foreach ($addressable as $node) {
    if (!$node-&amp;gt;hasAttribute('data-pid')) {
        $node-&amp;gt;setAttribute('data-pid', $this-&amp;gt;nextId());
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;The model only ever emits [data-pid="a7f3"] selectors. If it emits something else, I reject the operation rather than guessing. Rejection is cheap — I retry once with the error appended to the conversation, and the second attempt is nearly always valid.&lt;/p&gt;

&lt;p&gt;Two-step retrieval&lt;/p&gt;

&lt;p&gt;Even with operations, I was still sending the full page HTML as context. On a long page that's most of the input budget and it dilutes attention badly.&lt;/p&gt;

&lt;p&gt;So: two calls.&lt;/p&gt;

&lt;p&gt;Step 1 — locate. Send a skeleton: tag names, IDs, class lists, and the first ~60 characters of text content. No inline styles, no full copy, no SVG paths. A 900-line page compresses to about 40 lines.&lt;/p&gt;


&lt;h1&gt;Ship faster. Build slower.…&lt;/h1&gt;
&lt;br&gt;
  &lt;p&gt;The page builder that doesn't…&lt;/p&gt;
&lt;br&gt;
  &lt;a&gt;Get started&lt;/a&gt;

&lt;p&gt;…&lt;/p&gt;

&lt;p&gt;Ask: which data-pids are relevant to this request? Response is a JSON array of IDs. Cheap, fast, and surprisingly accurate — locating is a much easier task than editing.&lt;/p&gt;

&lt;p&gt;Step 2 — edit. Send only the full outerHTML of those nodes, plus the relevant CSS rules, and ask for operations.&lt;/p&gt;

&lt;p&gt;Combined token cost on a typical edit dropped roughly 80% versus full-page regeneration, and the latency improvement is more than the numbers suggest because output tokens dominate wall-clock time.&lt;/p&gt;

&lt;p&gt;The failure mode to watch: step 1 under-selects. The user says "make the buttons consistent" and the locator returns two of five buttons. My mitigation is to expand the selection — if a returned node has siblings sharing its class signature, include them. Not elegant, but it converted the most common complaint into a non-issue.&lt;/p&gt;

&lt;p&gt;Storing it in WordPress&lt;/p&gt;

&lt;p&gt;Since this is a WordPress plugin, a note on persistence, because the obvious choice is wrong.&lt;/p&gt;

&lt;p&gt;I do not put the generated HTML in post_content. Instead:&lt;/p&gt;

&lt;p&gt;post_meta holds separated html, css, and js, with distinct draft and published keys. Editing never touches what's live.&lt;br&gt;
post_content holds the text copy only, stripped of markup.&lt;/p&gt;

&lt;p&gt;That last decision is the one I'd defend hardest. SEO plugins, search indexing, excerpt generation, and the REST API all read post_content. If it contains a wall of &lt;/p&gt;, every one of those systems gets garbage. Keeping plain prose there means the rest of the WordPress ecosystem behaves normally, for free.

&lt;p&gt;CSS and JS get written to files with content-hashed names:&lt;/p&gt;

&lt;p&gt;php&lt;br&gt;
$hash = substr(hash('xxh128', $css), 0, 12);&lt;br&gt;
$file = "page-{$postId}-{$hash}.css";&lt;/p&gt;

&lt;p&gt;Immutable filenames mean you can set a far-future Cache-Control and never think about invalidation again. Old files get garbage-collected on a scheduled hook.&lt;/p&gt;

&lt;p&gt;What I'd tell you if you're building something similar&lt;/p&gt;

&lt;p&gt;Constrain the output format, not the model's behaviour. Every hour I spent adding "do not modify unrelated sections" to a system prompt was wasted. Making unrelated modification structurally impossible took an afternoon and actually worked.&lt;/p&gt;

&lt;p&gt;Validate before persisting, always. Parse the model's JSON, check the schema, check every selector resolves, apply to a clone, diff the node count. Reject and retry beats saving something broken.&lt;/p&gt;

&lt;p&gt;Locating and editing are different tasks. Splitting them was the single largest win, larger than the operations schema itself.&lt;/p&gt;

&lt;p&gt;libxml is old and grumpy but it's already installed. For a plugin that has to run on shared hosting, no-dependencies-that-need-extensions beats elegance.&lt;/p&gt;

&lt;p&gt;The plugin is Pagora AI if you want to poke at the result — it's free and the source is on GitHub. Mostly I'm curious whether anyone has found a better answer to the step-1 under-selection problem, because mine is held together with heuristics.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Human + AI: how I now build WordPress pages 10x faster without sacrificing quality</title>
      <dc:creator>jdku sjdu</dc:creator>
      <pubDate>Mon, 23 Mar 2026 11:29:13 +0000</pubDate>
      <link>https://dev.to/jdku_sjdu_6171aee799d6341/human-ai-how-i-now-build-wordpress-pages-10x-faster-without-sacrificing-quality-4kea</link>
      <guid>https://dev.to/jdku_sjdu_6171aee799d6341/human-ai-how-i-now-build-wordpress-pages-10x-faster-without-sacrificing-quality-4kea</guid>
      <description>&lt;p&gt;We've all heard the fear: &lt;em&gt;"AI is going to replace web designers."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After months of building WordPress sites with AI tools, I think the reality is more interesting — and more optimistic — than that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI doesn't replace the human. It removes the parts that were wasting the human's time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's what I mean in practice.&lt;/p&gt;




&lt;h2&gt;
  
  
  The old workflow (and why it was painful)
&lt;/h2&gt;

&lt;p&gt;Building a WordPress page the traditional way means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hunting for a layout that roughly matches your vision&lt;/li&gt;
&lt;li&gt;Swapping text, fighting column alignments, debugging spacing on mobile&lt;/li&gt;
&lt;li&gt;Searching stock photo sites for images that don't look stock&lt;/li&gt;
&lt;li&gt;Writing SEO copy from scratch&lt;/li&gt;
&lt;li&gt;Manually rewriting everything if the client wants it in another language&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is &lt;em&gt;creative&lt;/em&gt; work. It's mechanical work. And it was eating a huge chunk of the actual craft — the part where you think about what will convert, what will communicate, what will actually look good.&lt;/p&gt;

&lt;p&gt;The tool that changed this for me is &lt;strong&gt;&lt;a href="https://website-ai-builder.com/" rel="noopener noreferrer"&gt;WP AI Builder&lt;/a&gt;&lt;/strong&gt; — a WordPress plugin that generates complete Gutenberg pages from a plain text description.&lt;/p&gt;




&lt;h2&gt;
  
  
  What "AI + Human" looks like in practice
&lt;/h2&gt;

&lt;p&gt;The workflow shift isn't "AI does everything." It's more like having a very fast, very tireless junior who handles the scaffolding while you focus on the vision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You describe. AI builds. You refine.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You write a prompt like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"A homepage for a boutique interior design studio. Warm tones, elegant feel. Include a hero with a full-width image, a services section with 3 cards, client testimonials, and a contact CTA."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Forty-five seconds later, you have a full Gutenberg page — blocks, layout, copy, custom CSS, and even AI-generated images. Not a template. Not placeholder text. An actual first draft of a real page, tailored to your description.&lt;/p&gt;

&lt;p&gt;Then &lt;em&gt;you&lt;/em&gt; take over. You adjust the headline, swap an image, tweak the spacing, push the colors to better match the brand. The creative decisions stay with the human. The mechanical assembly is gone.&lt;/p&gt;

&lt;p&gt;That's the shift. And it's not small — it's the difference between spending a day on a page and shipping it in under an hour.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the AI actually generates
&lt;/h2&gt;

&lt;p&gt;A few things worth knowing about how WP AI Builder works:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gutenberg blocks, not proprietary markup.&lt;/strong&gt;&lt;br&gt;
Everything generated is standard WordPress blocks. No shortcodes, no lock-in. If you stop using the plugin tomorrow, every page you built stays exactly as it is, fully editable, forever. Your content belongs to you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CSS and JS included.&lt;/strong&gt;&lt;br&gt;
The AI doesn't just drop text into blocks — it generates custom CSS for each section so the layout actually looks designed. For developers, all of that CSS and JS is fully accessible and editable. You can open it, modify it, and take it wherever you want.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI-generated images, auto-optimized.&lt;/strong&gt;&lt;br&gt;
No more switching tabs to Unsplash or Midjourney. Images are generated inline, royalty-free, and automatically compressed for the web. The page is fast from day one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1-click translation.&lt;/strong&gt;&lt;br&gt;
You can translate an entire page — content, layout, everything — in a single click. The AI adapts the tone for the target language rather than doing a word-for-word swap. Useful for multilingual sites without needing WPML or Polylang.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No API keys, no external accounts.&lt;/strong&gt;&lt;br&gt;
Everything runs through the plugin. No OpenAI account needed, no Stripe setup for AI services, nothing to configure. Install, sign up, generate.&lt;/p&gt;




&lt;h2&gt;
  
  
  The quality argument
&lt;/h2&gt;

&lt;p&gt;Speed is obvious. But I want to make the case for &lt;em&gt;quality&lt;/em&gt; too, because I think it's underrated.&lt;/p&gt;

&lt;p&gt;When you're not spending 80% of your energy on mechanical assembly, you have more headspace for the decisions that actually matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this copy &lt;em&gt;converting&lt;/em&gt;, or just filling space?&lt;/li&gt;
&lt;li&gt;Does this layout &lt;em&gt;guide the eye&lt;/em&gt; where you want it to go?&lt;/li&gt;
&lt;li&gt;Would a real user understand what this page is asking them to do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI gives you a solid, usable first draft fast. Your job as a designer, developer, or agency professional becomes &lt;em&gt;editorial&lt;/em&gt; — shaping, elevating, and making the page actually great — rather than building from zero.&lt;/p&gt;

&lt;p&gt;The combination produces better output than either would alone. The AI is fast and thorough. The human is discerning and creative. Together, they're a strong team.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pricing — and yes, there's a free tier
&lt;/h2&gt;

&lt;p&gt;You can try WP AI Builder with &lt;strong&gt;150 free credits&lt;/strong&gt; on signup — no credit card required. That's enough to generate 2 full pages and see if it fits your workflow.&lt;/p&gt;

&lt;p&gt;Paid plans start at &lt;strong&gt;$9/month&lt;/strong&gt; (750 credits) and go up to &lt;strong&gt;$49/month&lt;/strong&gt; (6,000 credits) for heavier use. Individual credit packs are also available at $10 for 750 credits.&lt;/p&gt;

&lt;p&gt;Full pricing details here: &lt;a href="https://website-ai-builder.com/pricing/" rel="noopener noreferrer"&gt;website-ai-builder.com/pricing&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  See what it can actually produce
&lt;/h2&gt;

&lt;p&gt;If you want to see the quality of pages the AI generates before you install anything, there's a design gallery with real editable examples:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://website-ai-builder.com/ai-design-gallery-10-editable-style-showcases/" rel="noopener noreferrer"&gt;AI Design Gallery — 10 Editable Style Showcases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each one shows a different style and use case — from agency pages to e-commerce to portfolios.&lt;/p&gt;




&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;The best AI tools aren't the ones that try to remove the human from the equation. They're the ones that make the human more powerful by handling what was never worth their time in the first place.&lt;/p&gt;

&lt;p&gt;WP AI Builder is, in my experience, the most capable tool in this category for WordPress right now. It's the only one that generates truly native Gutenberg output — with CSS, with images, with translation — without any platform lock-in.&lt;/p&gt;

&lt;p&gt;If you're building WordPress sites and you're still doing it the slow way, it's worth 5 minutes to try.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://wordpress.org/plugins/ai-builder/" rel="noopener noreferrer"&gt;Download free on WordPress.org&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Built an AI That Actually Generates WordPress Pages From Scratch (Not Just Templates)</title>
      <dc:creator>jdku sjdu</dc:creator>
      <pubDate>Tue, 18 Nov 2025 15:33:59 +0000</pubDate>
      <link>https://dev.to/jdku_sjdu_6171aee799d6341/i-built-an-ai-that-actually-generates-wordpress-pages-from-scratch-not-just-templates-53fk</link>
      <guid>https://dev.to/jdku_sjdu_6171aee799d6341/i-built-an-ai-that-actually-generates-wordpress-pages-from-scratch-not-just-templates-53fk</guid>
      <description>&lt;p&gt;After months of development, I'm excited to share AI Builder - a WordPress plugin that uses AI to generate complete Gutenberg pages with custom blocks and CSS, tailored to your exact needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem with Current AI Page Builders&lt;/strong&gt;&lt;br&gt;
Most AI WordPress tools just shuffle pre-made templates or combine existing blocks. They don't truly create - they assemble. I wanted something different: an AI that generates 100% custom content for every request, from the blocks themselves to the CSS styling.&lt;br&gt;
What Makes AI Builder Different?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🤖 Chat-Driven Page Creation&lt;/strong&gt;&lt;br&gt;
A chat interface appears in the bottom-left corner of every page, post, and pattern editor (headers, footers, etc.). Just describe what you want, and the AI generates the complete Gutenberg content on the fly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎨 Truly Custom Generation&lt;/strong&gt;&lt;br&gt;
Unlike template-based builders, AI Builder generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom blocks tailored to your prompt&lt;/li&gt;
&lt;li&gt;Unique CSS for every element&lt;/li&gt;
&lt;li&gt;Context-aware content based on your site settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🧩 Rich Custom Blocks Library&lt;/strong&gt;&lt;br&gt;
The AI can use specialized blocks that go beyond standard Gutenberg:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contact forms&lt;/li&gt;
&lt;li&gt;Interactive maps&lt;/li&gt;
&lt;li&gt;Statistics panels&lt;/li&gt;
&lt;li&gt;Carousels&lt;/li&gt;
&lt;li&gt;And many more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🖼️ AI Image Generation&lt;/strong&gt;&lt;br&gt;
Generate images directly from prompts within any block on the editor. No need to leave WordPress or use external tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Smart Content Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fill text on demand&lt;/strong&gt;: Ask the AI to populate any paragraph with relevant content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Insert custom blocks anywhere&lt;/strong&gt;: Generate specific blocks at any position on your page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editable CSS&lt;/strong&gt;: Click the button in the top-right of the chat to modify the generated CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fully editable blocks&lt;/strong&gt;: Everything the AI creates can be manually adjusted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⚙️ Context-Aware Generation&lt;/strong&gt;&lt;br&gt;
In the plugin settings, you can provide information that the AI will consider for every request:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primary and secondary site colors&lt;/li&gt;
&lt;li&gt;Site name&lt;/li&gt;
&lt;li&gt;Business/site information
This ensures consistent, on-brand content across all generations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🚀 Multi-Page Generator&lt;/strong&gt;&lt;br&gt;
Need to create multiple pages at once? The Multi-Page Generator lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter prompts for multiple pages/posts simultaneously&lt;/li&gt;
&lt;li&gt;Generate home, features, contact, and pricing pages in one go&lt;/li&gt;
&lt;li&gt;Launch all generations at the same time
Perfect for quickly scaffolding entire websites.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing&lt;/strong&gt;&lt;br&gt;
AI Builder uses a credit-based system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free tier: 150 credits on signup&lt;/li&gt;
&lt;li&gt;$10/month: 750 credits&lt;/li&gt;
&lt;li&gt;$20/month: 2,000 credits&lt;/li&gt;
&lt;li&gt;$50/month: 6,000 credits&lt;/li&gt;
&lt;li&gt;One-time purchase: $10 for 1,000 credits (available on request)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;See It In Action&lt;/strong&gt;&lt;br&gt;
🎥 Demo video: &lt;a href="https://www.youtube.com/watch?v=osEnvVFlDNo&amp;amp;t=1s" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=osEnvVFlDNo&amp;amp;t=1s&lt;/a&gt;&lt;br&gt;
🌐 Website: &lt;a href="https://website-ai-builder.com/" rel="noopener noreferrer"&gt;https://website-ai-builder.com/&lt;/a&gt;&lt;br&gt;
⬇️ Download on WordPress.org: &lt;a href="https://wordpress.org/plugins/ai-builder/" rel="noopener noreferrer"&gt;https://wordpress.org/plugins/ai-builder/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Implementation&lt;/strong&gt;&lt;br&gt;
The plugin integrates deeply with Gutenberg's block editor, using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time AI communication through a persistent chat interface&lt;/li&gt;
&lt;li&gt;Dynamic block generation with custom attributes&lt;/li&gt;
&lt;li&gt;CSS injection and management per block&lt;/li&gt;
&lt;li&gt;Asynchronous multi-page generation with queue management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try It Out&lt;/strong&gt;&lt;br&gt;
I'd love to hear your feedback! The plugin is free to start (150 credits), so you can test it out on your WordPress site without any commitment.&lt;/p&gt;

&lt;p&gt;What features would you like to see added? What challenges do you face with current page builders?&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
