<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Builder.io Blog</title>
        <link>https://www.builder.io/blog</link>
        <description>Builder.io Blog</description>
        <lastBuildDate>Sun, 22 Dec 2024 15:21:59 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Builder.io Blog</title>
            <url>https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd0d4f1f35cf54b5f8b957c50216cb314?width=1200</url>
            <link>https://www.builder.io/blog</link>
        </image>
        <copyright>All rights reserved 2023, Builder.io</copyright>
        <item>
            <title><![CDATA[Windsurf vs Cursor: which is the better AI code editor?]]></title>
            <link>https://www.builder.io/blog/windsurf-vs-cursor</link>
            <guid>https://www.builder.io/blog/windsurf-vs-cursor</guid>
            <pubDate>Tue, 17 Dec 2024 19:00:00 GMT</pubDate>
            <description><![CDATA[Comparing Windsurf & Cursor AI-powered IDEs: features, user experience & workflow efficiency. Which is best for you?]]></description>
            <content:encoded><![CDATA[<p>Let's take a look at two popular AI-powered IDEs: <a href="https://codeium.com/windsurf" rel="noopener noreferrer" target="_blank">Windsurf</a> and <a href="https://www.cursor.com/" rel="noopener noreferrer" target="_blank">Cursor</a>. Both claim to accelerate your coding experience, but which one is better for you? I've deeply evaluated both, and here's what I've found.</p><p>If you're a fan of the Cursor Composer's new agent mode like I am, where you can chat without first specifying some files for context and it can automatically generate and run shell commands for you, then you've got Windsurf’s Cascade to thank (they did it first).</p><p></p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F739a36143cb54fc0b5f4f4e7a9374ba2%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=739a36143cb54fc0b5f4f4e7a9374ba2&alt=media&optimized=true" type="video/mp4">
    </video><p>Cursor's new agent mode that can generate code across multiple files, run commands, and automatically figure out what context it needs (no need to manually add files explicitly).</p><p>Windsurf generally has a cleaner UI compared to Cursor's. It feels like comparing an Apple product to a Microsoft one — those little details really make Windsurf feel more refined.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F132411baa39a48c39061e2850a0ff117%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=132411baa39a48c39061e2850a0ff117&alt=media&optimized=true" type="video/mp4">
    </video><p>Windsurf's Cascade feature — the original AI IDE agent that can automatically fill context, run commands, etc.</p><p>And, Windsurf is cheaper. While it starts at&nbsp;$15/seat, compared to Cursor's&nbsp;$20/seat, I'll say the pricing isn’t as clear cut as Cursor’s.</p><p>Things like <em>"model flow action credits"</em> — whatever the heck that means — are part of the pricing model. So, hopefully you won't run out of those. Fortunately, I didn't.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc582e10ac91d4ce78a4f5f1c82560547?width=705" alt="" /><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2d9bf9d5b62b47d4a1b503882a90ca63?width=705" alt="" /><p>Overall, it seems worth diving in to compare these products in more depth.</p><h2><strong>Standard features</strong></h2><p>Both IDEs support the standard features you'd expect, like:</p><ul><li>AI-driven auto-completions</li>
<li>Chatting with your codebase</li>
<li>Generating and updating multiple files at a time</li>
<li>Inline editing of code with AI</li></ul>These have become the staple features of an AI-driven IDE, and both do a solid job at the fundamentals.<br><p></p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ffb5f562afc5b483db8b6ecb84ceedfd1%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=fb5f562afc5b483db8b6ecb84ceedfd1&alt=media&optimized=true" type="video/mp4">
    </video><h2><strong>They’re both Claude</strong></h2><p>Both IDEs effectively have the same brain, as they're using Claude 3.5 Sonnet under the hood for the hard stuff.</p><p>I've noticed that functionally, I don't see a major difference in the quality of code generations or updates by either of these IDEs.</p><p>And I don't expect to — these are really just UIs on top of standard models.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F9b2b1b27aaf74aa3961c47062e0ab85c?width=400" alt="A Scooby-Doo meme where Fred unmasks Windsurf and Cursor to reveal Claude 3.5 Sonnet." /><p>When people try to compare and say "this code generated better than that one," it's my belief that they're mostly comparing the randomness of Claude outputs.</p><p>Both use smaller models for smaller edits and inline completions, but I similarly didn't find a major difference in the quality of one small model versus another.</p><br><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F377316ec930243728b21cb349061fd1b%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=377316ec930243728b21cb349061fd1b&alt=media&optimized=true" type="video/mp4">
    </video><h2><strong>Windsurf: simple and beginner-friendly</strong></h2><p>Windsurf really seems to push to be a very simple, easy-to-use product that's beginner-friendly and pushes for high-level, simple interactions with your code:</p><ul><li>The default chat mode is the Agentic mode.</li><li>It indexes and pulls relevant code as needed.</li><li>It will run commands for you.</li><li>It won't clutter the UIs with buttons and code diffs everywhere.</li><li>You need to click the <strong>Open Diff</strong> button to see it in the full code pane.</li></ul><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fa80fc2085e1b4bdbb37818155336fcf1%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=a80fc2085e1b4bdbb37818155336fcf1&alt=media&optimized=true" type="video/mp4">
    </video><p>This creates for a much better it-just-works experience. There aren't 100 features to learn with lots of different modes and tabs and options and sub options.</p><p>Just hop in, start writing what you want changed, and it'll change. It's easy, the UI is clean, and just overall feels really nice.</p><h2><strong>Cursor: More manual, more control</strong></h2><p>Cursor leans towards more manual control:</p><ul><li>The Composer mode always defaults to <em>normal</em> (not <em>agentic</em>).</li><li>You need to choose what files you want to put in the context for it to generate.</li><li>It always shows you inline code diffs.</li><li>It seems to push the point that you should always be reviewing this code closely every time.</li></ul><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2953ad2cea0e481f88a5ae4d0ac312b5%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=2953ad2cea0e481f88a5ae4d0ac312b5&alt=media&optimized=true" type="video/mp4">
    </video><p>In general, Cursor feels like more of a power tool with more precise control and handling.</p><p>There is a steeper learning curve, and I find many people don't even know about Cursor's best features (unlike Windsurf), but once you learn it, you have every tool you need and more.</p><h2><strong>Windsurf keeps you better in the flow</strong></h2><p>One thing that Windsurf does by default that I <em>really</em> like is the AI generations are written to disk before you approve them.</p><p>That means you'll see the results right inside your dev server in real time. You can use that to also see if the generated UI is what you want, if the new code creates build errors, and so on —<em>before</em> accepting them.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F959a94ce40c444379503240b0d3f0e1d%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=959a94ce40c444379503240b0d3f0e1d&alt=media&optimized=true" type="video/mp4">
    </video><p>If the updates still aren't quite right, you can chat again to continue to modify before you accept the changes entirely. And if you don't love the changes, even after some iteration, you can revert to a previous step or even discard everything in one go.</p><p></p><p>Compare that to Cursor — you need to accept changes before you can actually get the results. Sometimes that means you make changes that end up looking horrible.</p><p>Reverting them isn’t as easy, either. I need to figure out where a chat started (which sometimes could be midway through a long thread and hard to find), then manually revert to that prior state and time.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F87c5849b529f4aa2b4c26b18e8be563f%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=87c5849b529f4aa2b4c26b18e8be563f&alt=media&optimized=true" type="video/mp4">
    </video><h2><strong>Cursor is deep with power features</strong></h2><p>Where Cursor really shines is in a lot of its <a href="https://www.builder.io/blog/cursor-advanced-features">power features</a>. For instance, Cursor supports multi-tabbing. </p><p>If it detects that you made a change that would benefit from another change later in the code, you can just hit tab and tab again to keep applying those new changes.</p><p></p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F654d515b5aef406da9cfc071fb6f07db%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=654d515b5aef406da9cfc071fb6f07db&alt=media&optimized=true" type="video/mp4">
    </video><p>I find this very cool when it works, but it can be kind of clunky and confusing when the changes don’t apply in the right spots.</p><p>Cursor generally takes a “kitchen sink” approach to AI in the IDE. <em>Everything</em> has an AI button:</p><ul><li>See an error? There's a <strong>Fix with AI</strong> button.</li><li>Dropdown options? There's a <strong>Fix with AI</strong> button.</li><li>Error in the terminal? There's a <strong>Debug with AI</strong> button.</li><li>And so on...</li></ul><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff4fc6331c6fc455988552be455f55981%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=f4fc6331c6fc455988552be455f55981&alt=media&optimized=true" type="video/mp4">
    </video><p>Clicking these generally opens the chat so you can go back and forth with the AI to fix the issue.</p><p>I find these “kitchen sink” features useful, but they add clutter to the UI. For instance, I've had cases where these overlays are annoying and in the way, and I can't dismiss them when I need to.</p><p>Having an AI in the terminal that's a keyboard shortcut away at any point is really helpful if you're like me and like to focus more on what your code needs, rather than remembering exact command names or arguments. </p>
<video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff16a8f172d984b6db2ea01baaf3fefe3%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=f16a8f172d984b6db2ea01baaf3fefe3&alt=media&optimized=true" type="video/mp4">
    </video><p>One thing that annoys me, though, is how Cursor has specifically hijacked <code>Command+K</code> for this, which means I can't use it to clear the terminal. It doesn’t seem like there’s a way to override that or turn it off.</p><p>Both IDEs let you specify custom rules to inform their completions, but Cursor's support is a bit more robust and flexible. It includes the ability to have Notepads you can search for and include in your context as needed.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd3a34a84e9244e489d55513d05480403?width=705" alt=".cursorrules file" /><p>Generally speaking, Cursor is way more robust at context management. Both IDEs let you tag certain files you want to include in the context, but Cursor lets you add:</p>
<ul>
  <li>Whole doc sets</li>
  <li>Specific pages from the web</li>
  <li>Specific git branches and commits</li>
  <li>Tagging <code>@web</code> to do a web search</li>
</ul>
<p></p>

<video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff93c8eb10422459a8addc680c11f8a82%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=f93c8eb10422459a8addc680c11f8a82&alt=media&optimized=true" type="video/mp4">
    </video><p> One other really cool feature of Cursor is automatically generated commit messages with one click. </p><p>Even better, it respects your <code>.cursorrules</code> file. I found the default output to be more verbose than I like, so I added a note in my <code>.cursorrules</code> to keep commit messages shorter and voilà, perfect.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F4605e69475e2437e86787f400ca8d368%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=4605e69475e2437e86787f400ca8d368&alt=media&optimized=true" type="video/mp4">
    </video><p>Another cool experimental feature of Cursor is the new bug finder.</p><p>After looking past an aggressive error message and clicking a button that has its own usage-based pricing (so may cost a dollar or a few just for the click) it'll scan through all the code changes on your feature branch versus main and look for potential bugs in your updates.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F063434f059ee4a118eac9f5a89b8cdc1%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=063434f059ee4a118eac9f5a89b8cdc1&alt=media&optimized=true" type="video/mp4">
    </video><p>It's found some really useful bugs and saved me time having to find and fix them. For each bug it finds, it gives a confidence rating as well as an overview. </p><p>When you choose to fix it in Composer, it will fill the details into the prompt and generate updates like you're used to.</p><h2><b>What's missing from both</b></h2><p>The main thing I wish both products had was a more robust debugging loop. Something like what <a href="https://www.builder.io/blog/devin-vs-cursor" rel="noopener noreferrer" target="_blank">Devin promises</a> (and sometimes can achieve), but right here in the IDE.</p>
<video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F9d9cb7eaab164a0a894be3a729d38ef0%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=9d9cb7eaab164a0a894be3a729d38ef0&alt=media&optimized=true" type="video/mp4">
    </video><p>Both Windsurf and Cursor claim they have agents, but I am not sure if what they offer are truly agents.</p><p>I'm used to the idea of an agent being something that can try something, evaluate it, and repeat until it verifies that the result is correct. Which neither of them actually do. They only generate code, and if you've got bugs, it's your responsibility to go in and fix them.</p><p>Fortunately though, unlike the <a href="https://zed.dev/" rel="noopener noreferrer" target="_blank">Zed editor</a>, Windsurf and Cursor are forks of VS Code. This means you have access to the massive VS Code extension marketplace.</p><p>One extension available is Cline, which works great with either of these IDEs. Cline is more of an agent than Cursor or Windsurf have as it can take a series of steps, evaluate the result, fix its own issues, and continue.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F402c513d10794448bc2d6b933f24c327%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=402c513d10794448bc2d6b933f24c327&alt=media&optimized=true" type="video/mp4">
    </video><p>Cline is surprisingly smart in some cases, like being able to run commands to validate its own correctness, open a browser to inspect what your dev server rendered, and so on. It's not perfect, but it's a solid step in the direction that I hope both Cursor and Windsurf ultimately go with their agents.</p><h2>My favorite workflow</h2><p>Speaking of compatibility with other tools, let's check out how you can turn a Figma design to code through Cursor or Windsurf and use AI to bring the design to life.</p><p>All you have to do is launch the <a href="https://www.figma.com/community/plugin/747985167520967365" rel="noopener noreferrer" target="_blank">Builder.io Figma plugin</a>, select the element or frame you want to convert, click <strong>Generate</strong>, and copy the resulting command and paste it into the Cursor or Windsurf terminal.</p><p>Builder.io will generate pixel-perfect code from the design, even reusing your existing components just like you would.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F202f552ae9c24089880919f473231e98%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=202f552ae9c24089880919f473231e98&alt=media&optimized=true" type="video/mp4">
    </video><p>Now that you have the markup I need, you can hop into Cascade or Cursor composer and prompt them to add whatever functionality you need like data, interactivity, and business logic, to name a few.</p><p>This is the end-to-end workflow I typically use: grab the design, have the AI add the logic, auto-generate a commit message, and fire up a PR. It truly feels like magic.</p><h2><strong>So, which should you use?</strong></h2><p>Honestly, I don't think you can go wrong with either Windsurf or Cursor.</p><p>Both are fantastic IDEs that support AI-driven auto-completion, inline editing, multi-file editing, chatting with your codebase, and agentic workflows where they can read and write to multiple files based on what you ask.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd7d967400edb45b7a95e001fd25becf1?width=705" alt="Comparison of the features both Windsurf and Cursor have" /><p>While I find Windsurf to be a little simpler, a little more intuitive, and with a slightly nicer and more polished UI, Cursor is just loaded with power features.</p><p>All those buttons everywhere can add clutter, but I find it hard to let go of some of these features I just love. I love the auto generated commit messages, I love the bug finder, and I even sometimes love using the multi-tabbing (when it works).</p><p>And while I'll suffer through some glitches in the UI, for a professional development tool, it's my personal preference.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F053d6911b74a49ea8850e9a8c67f35d9?width=705" alt="Windsurf has a simpler UI, but Cursor has more power features" /><p>For a more beginner developer, or someone who really prefers UI polish, Windsurf is probably a better go-to. It also has a lower starting point, and if you're coming off a tool like <a href="https://bolt.new/" rel="noopener noreferrer" target="_blank">Bolt.new</a>, Windsurf will feel a lot more like what you're used to.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5a11c6f2d9ad4f809e3a1fa357cebc07?width=705" alt="Windsurf is best for beginners, and Cursor is best for power users" /><p>But that's just what I think. What do you think?</p><p>We've launched a <a href="https://stateofai.tools/" rel="noopener noreferrer" target="_blank">State of AI Tools</a> survey for you to share what tools you find work best for you. Fill out the survey to receive the results once ready.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd550aa721e4a4f618c790e4652cfea8b%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d550aa721e4a4f618c790e4652cfea8b&alt=media&optimized=true" type="video/mp4">
    </video><p>PS: I made that site with Cursor + Windsurf :)</p><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;"><iframe src="https://www.youtube.com/embed/9jgR-Ih_wGs?rel=0" style="top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;" allowfullscreen scrolling="no" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share;"></iframe></div><h3><strong>If you enjoyed this post, you might also like:</strong></h3><ul><li><a href="https://www.builder.io/blog/cursor-advanced-features" rel="noopener noreferrer" target="_blank"><strong>5 Advanced Features for Cursor </strong></a></li><li><a href="https://www.builder.io/blog/devin-vs-cursor" rel="noopener noreferrer" target="_blank"><strong>Devin vs. Cursor</strong></a></li><li><a href="https://www.builder.io/blog/cursor-vs-github-copilot" rel="noopener noreferrer" target="_blank"><strong>Cursor vs. GitHub Copilot</strong></a></li><li><a href="https://www.builder.io/blog/ai-pair-programming" rel="noopener noreferrer" target="_blank"><strong>AI Pair Programming in 2025</strong></a></li><li><a href="https://www.builder.io/blog/is-o1-worth-it" rel="noopener noreferrer" target="_blank"><strong>OpenAI o1 vs. Claude Sonnet</strong></a></li></ul>
    <h5><i>Read the <a href="https://www.builder.io/blog/windsurf-vs-cursor">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F1c58f439fea646e9a8f68f96c7166aec" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F1c58f439fea646e9a8f68f96c7166aec"/>
        </item>
        <item>
            <title><![CDATA[Cursor AI: 5 Advanced Features You're Not Using]]></title>
            <link>https://www.builder.io/blog/cursor-advanced-features</link>
            <guid>https://www.builder.io/blog/cursor-advanced-features</guid>
            <pubDate>Tue, 17 Dec 2024 17:00:00 GMT</pubDate>
            <description><![CDATA[Learn about advanced Cursor AI features: the Agent, custom rules, Notepads, bug finder & web search. Also covers AI commit messages & Figma-to-code conversion.]]></description>
            <content:encoded><![CDATA[<p>If you've been using <a href="https://www.cursor.com/">Cursor AI</a> code editor, you're probably already blown away by tab completion, code generation, chat, and the composer. These features alone can make you feel like you've got superpowers.</p><p>But here's the thing, there's more. A lot more. Cursor has some seriously cool advanced features that most people aren't using yet. In this post, I'm going to show you five of them.</p><p>If you're new to Cursor, check out my posts on <a href="https://www.builder.io/blog/cursor-ai-for-developers">Cursor AI for developers</a> and <a href="https://www.builder.io/blog/cursor-vs-copilot">Cursor vs. GitHub Copilot</a> to get up to speed.</p><h2>The Cursor agent</h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F0dc168adfc8d40699d1478a4fb250e95%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=0dc168adfc8d40699d1478a4fb250e95&alt=media&optimized=true" type="video/mp4">
    </video><p></p><p>First up is the Cursor Agent. It's like having a super-smart coding assistant that you can summon with <code>⌘.</code> (<code>Command + period</code>). Here's what it can do:</p><ul><li>Pull in context automatically (try <code>@Recommended</code>)</li>
<li>Run terminal commands.</li>
<li>Create and modify files.</li>
<li>Do semantic code search.</li>
<li>Handle file operations.</li></ul><p>Right now, it only works with Claude models, and each tool operation counts as a separate request in your quota.</p><h2>Cursor rules</h2><p>Next up is the <code>.cursorrules</code> file. It's a way to give Cursor project-specific instructions. Here's what you need to know:</p><ul><li>Put it in your project's root directory.</li>
<li>It provides instructions for Cursor Chat and <code>Ctrl/⌘ K</code> commands.</li>
<li>It's like the "Rules for AI" in Cursor's settings, but just for your project.</li></ul><p>Here’s a sample <code>.cursorrules</code> file you could define in a Next.js project:</p><pre><code>You are an expert in TypeScript, Node.js, Next.js App Router, React, Shadcn UI, Radix UI and Tailwind CSS.
  
Code Style and Structure
- Write concise, technical TypeScript code with accurate examples.
- Use functional and declarative programming patterns; avoid classes.
- Prefer iteration and modularization over code duplication.
- Use descriptive variable names with auxiliary verbs (e.g., isLoading, hasError).
- Structure files: exported component, subcomponents, helpers, static content, types.

Naming Conventions
- Use lowercase with dashes for directories (e.g., components/auth-wizard).
- Favor named exports for components.

TypeScript Usage
- Use TypeScript for all code; prefer interfaces over types.
- Avoid enums; use maps instead.
- Use functional components with TypeScript interfaces.

Syntax and Formatting
- Use the &quot;function&quot; keyword for pure functions.
- Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
- Use declarative JSX.

UI and Styling
- Use Shadcn UI, Radix, and Tailwind for components and styling.
- Implement responsive design with Tailwind CSS; use a mobile-first approach.

Performance Optimization
- Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
- Wrap client components in Suspense with fallback.
- Use dynamic loading for non-critical components.
- Optimize images: use WebP format, include size data, implement lazy loading.

Key Conventions
- Use 'nuqs' for URL search parameter state management.
- Optimize Web Vitals (LCP, CLS, FID).
- Limit 'use client':
  - Favor server components and Next.js SSR.
  - Use only for Web API access in small components.
  - Avoid for data fetching or state management.

Follow Next.js docs for Data Fetching, Rendering, and Routing.</code></pre><p>This is super useful when you want to give Cursor some context about your project's specific requirements or conventions. It's worth noting that while <code>.cursorrules</code> is cool, Cursor also has Notepads, which can do even more. Speaking of which...</p><h2>Notepads</h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb0224f79169a4b6c818115a515837439%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=b0224f79169a4b6c818115a515837439&alt=media&optimized=true" type="video/mp4">
    </video><p></p><p>Notepads in Cursor are like supercharged sticky notes for your code. They bridge the gap between composers and chat interactions.</p><p>Here's what makes them special:</p><ul><li>You can share them between different parts of your dev environment</li>
<li>Reference them using the <code>@</code> syntax</li>
<li>Attach files to them</li>
<li>Use them as dynamic templates for various scenarios</li></ul><p>To create a Notepad in Cursor, click the "<b>+</b>" in the Notepads section, give it a meaningful name, and add any necessary content, context, or files. Reference Notepads in composers or chats using the <code>@</code> symbol.</p><p>Notepads are great for documenting project architecture decisions, development guidelines, reusable code templates, team-specific rules and frequently referenced materials.</p><p>When you're creating a Notepad, try to use clear headings, markdown for readability, and include examples or file attachments as needed.</p><p>Notepads are still in beta, but they're already a super flexible way to enhance your workflow.</p><h2>Bug finder</h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F7857571c386f4870ba400c809fd41a57%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=7857571c386f4870ba400c809fd41a57&alt=media&optimized=true" type="video/mp4">
    </video><br><p>Cursor's got this neat new bug finder feature. It's pretty cool, even if it comes with a slightly aggressive warning message and a pay-per-click pricing model (yeah, you might shell out a buck or more just to use it).</p><p>Here's how it works: it scans through all your code and recent changes. If you're on a feature branch, it'll compare that to main, looking for potential bugs.</p><p>For each bug it finds, you get a confidence rating and a quick overview. Then it's just a click to fix it in the editor. Cursor fills in all the details in the prompt and generates updates, just like you're used to.</p><p>It's not perfect, but it's a pretty handy tool to have in your back pocket.</p><h2>@web symbol</h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F7bda0c44fa364e9b8b5e04989670bb11%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=7bda0c44fa364e9b8b5e04989670bb11&alt=media&optimized=true" type="video/mp4">
    </video><p></p><p>With&nbsp;<b><code>@Web</code></b>, Cursor constructs a search query based on the query and the context you’ve provided, and searches the web to find relevant information as additional context. This is particularly useful for finding the most up-to-date information.</p><p>The <code>@Web</code> symbol is like having a research assistant built into Cursor. Here's how it works:</p><ol><li>You give it a query and some context.</li>
<li>Cursor turns that into a web search.</li>
<li>It searches the internet for relevant info.</li>
<li>The search results get added to your query's context.</li></ol><p>This is super useful when you're working with new tech or anything where you need the latest info.</p><h2>Bonus: AI commit messages</h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F975c252d1ed14ba282d189e562582c5d%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=975c252d1ed14ba282d189e562582c5d&alt=media&optimized=true" type="video/mp4">
    </video><p></p><p>Here's a little bonus feature: AI-generated commit messages. It might not sound like much, but it saves me a couple of minutes every day and reduces the mental load of coming up with good commit messages.</p><p>Now, Cursor does have this habit of being a bit...wordy with its commit messages. But hey, you can tweak that behavior by adding some instructions in a&nbsp;<b><code>.cursorrules</code></b>&nbsp;file.</p><h2>Convert Figma designs to code in Cursor</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F4e9bdd0f5ba0444e9dad9793872a8734?width=600" alt="Builder.io's visual copilot converts figma designs into code" /><p>Let's talk about turning Figma designs into code using Builder.io's <a href="https://www.figma.com/community/plugin/747985167520967365">Visual Copilot</a> plugin. It's a game-changer when you're working in Cursor.</p><p>Here's what you can do:</p><ol><li>Export your Figma design using the Visual Copilot plugin.</li>
<li>Copy the generated command from Builder.io.</li>
<li>Paste that command right into Cursor's terminal and generate the code</li></ol><p>From there, you can tell Cursor to add interactivity, animations, event handlers and more. It'll generate all the code you need.</p><p>The result? You get a pixel-perfect UI that uses your components as expected. It's pretty slick. This whole process — from design to functional code — is way faster than doing it manually.</p><p>The best part? This workflow fits right into Cursor's other AI features. You can use the agent to add logic, make your updates and auto-generate a commit message.</p><h2><b>Cursor AI FAQ</b></h2><p>Here are some commonly asked questions about Cursor AI:</p><p><b>Does Cursor work with all programming languages?</b></p><p>Pretty much. It's great with the usual suspects like Python, JavaScript, and Java, but it'll work with most languages VS Code supports.</p><p><b>Do I need an OpenAI API key to use Cursor?</b></p><p>Nope. Cursor works straight out of the box. No extra setup needed.</p><p><b>Can Cursor handle both easy and hard coding tasks?</b></p><p>Absolutely! It'll help with simple functionality, but it can also tackle bigger jobs like refactoring huge codebases or writing entire functions.</p><p><b>Is Cursor good for beginners?</b></p><p>Definitely. If you're just starting out, its AI assistance can help explain concepts, suggest best practices, and help you learn as you go.</p><p><b>How does Cursor deal with existing code?</b></p><p>Pretty well, actually. It can understand and work with code you've already written. It can help you manipulate code, refactor, and even explain complex sections of your codebase</p><p><b>Can Cursor make a whole app from scratch?</b></p><p>It's not magic — it can't conjure up a full app out of thin air. But it can speed things up a lot. With the right prompts, you can go from a simple idea to basic working app pretty quick.</p><p><b>Will Cursor mess with my existing workflow?</b></p><p>Cursor is designed to seamlessly fit into your development process. It's built on top of VS Code, so if you're used to that, you'll be fine.</p><p><b>Can Cursor help with unit testing?</b></p><p>Yes, Cursor can assist in writing and improving unit tests. It can suggest test cases, help with test setup, and even identify areas of your code that might need better test coverage.</p><p><b>What are the pricing options for Cursor?</b></p><p>Cursor offers a free Hobby tier with limited features, a Pro tier at $20/month with expanded capabilities, and a Business tier at $40 per user/month for advanced features and team management.</p><h3><strong>If you enjoyed this post, you might also like:</strong></h3><ul><li><a href="https://www.builder.io/blog/devin-vs-cursor" rel="noopener noreferrer" target="_blank"><strong>Devin AI vs. Cursor</strong></a></li><li><a href="https://www.builder.io/blog/cursor-vs-github-copilot" rel="noopener noreferrer" target="_blank"><strong>Cursor vs. GitHub Copilot</strong></a></li><li><a href="https://www.builder.io/blog/ai-pair-programming" rel="noopener noreferrer" target="_blank"><strong>AI Pair Programming in 2025</strong></a></li><li><a href="https://www.builder.io/blog/windsurf-vs-cursor" rel="noopener noreferrer" target="_blank"><strong>Windsurf vs. Cursor</strong></a></li><li><a href="https://www.builder.io/blog/is-o1-worth-it" rel="noopener noreferrer" target="_blank"><strong>OpenAI o1 vs. Claude Sonnet</strong></a></li></ul>
    <h5><i>Read the <a href="https://www.builder.io/blog/cursor-advanced-features">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F588c1ad563a94b5db4da2480a736d8c7" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F588c1ad563a94b5db4da2480a736d8c7"/>
        </item>
        <item>
            <title><![CDATA[What is Builder's Visual Development Platform?]]></title>
            <link>https://www.builder.io/blog/visual-development-platform</link>
            <guid>https://www.builder.io/blog/visual-development-platform</guid>
            <pubDate>Fri, 13 Dec 2024 06:00:00 GMT</pubDate>
            <description><![CDATA[Learn how Builder's Visual Development Platform combines AI-powered design-to-code, visual editing, and an Enterprise CMS for faster web and mobile development.]]></description>
            <content:encoded><![CDATA[<p>Web and mobile development often involves multiple teams working in silos, leading to inefficiencies and delays. Builder's <a href="https://www.builder.io/visual-development-platform">Visual Development Platform</a> addresses these challenges with a toolkit that combines AI, visual editing, CMS capabilities, optimization features, and extensive integrations.</p><p>The platform consists of two main components: Builder Develop and Builder Publish. Here's a breakdown:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F798efdfafee44176b09f92b039700f10?width=705" alt="Builder's Visual Development Platform" /><h2>Builder Develop:</h2><p>Builder Develop is the core of Builder's AI-powered <a href="https://www.builder.io/m/design-to-code">design-to-code</a> functionality. It offers several key features that significantly streamline the development process:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F599288d996434a85aa144d155dd5494e?width=705" alt="Builder Develop" /><ul><li>Design to Code: Reduce <a href="https://www.builder.io/blog/figma-to-code-ai" rel="noopener noreferrer" target="_blank">Figma-to-code</a> development time by 80%. This feature transforms design files into production-ready code, dramatically speeding up the implementation process.</li></ul><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fe72f6863ceed40ba8ab6471d1d7950ba%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=e72f6863ceed40ba8ab6471d1d7950ba&alt=media&optimized=true" type="video/mp4">
    </video><ul><li><a href="https://www.builder.io/c/docs/mapping-functions" rel="noopener noreferrer" target="_blank">Component Mapping</a>: Automatically reuses existing code components when available. This ensures consistency with your current codebase and reduces redundancy.</li></ul><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F91ae11827a204632a07dc20bd6e915bb%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=91ae11827a204632a07dc20bd6e915bb&alt=media&optimized=true" type="video/mp4">
    </video><ul><li><a href="https://www.builder.io/c/docs/custom-instructions" rel="noopener noreferrer" target="_blank">Custom Instructions</a>: Refine code output at the developer or team level. This allows for fine-tuning the generated code to match your specific coding standards and preferences.</li></ul><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fbfcb0d6516c647dc82feb70c50002170%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=bfcb0d6516c647dc82feb70c50002170&alt=media&optimized=true" type="video/mp4">
    </video><ul><li><a href="https://www.builder.io/c/docs/generate-code#syncing-the-code-automatically-with-your-codebase" rel="noopener noreferrer" target="_blank">Code Sync</a>: Quickly shifts generated code from Builder to your developers' code editor. This seamless integration helps maintain workflow efficiency.</li></ul><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F4adcb91ebd154a5c85021c85210dca63%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=4adcb91ebd154a5c85021c85210dca63&alt=media&optimized=true" type="video/mp4">
    </video><ul><li><a href="https://www.builder.io/c/docs/ai-use" rel="noopener noreferrer" target="_blank">Enterprise-ready AI</a>: Builder's use of customer data for AI training varies by plan type. While free plans may use customer data to train and improve AI, and self-serve paid plans offer a toggle option, Enterprise plans do not use customer data for AI training or improvement purposes. Enterprise customers also have additional controls, including the option to choose specific LLMs or turn off LLM-use entirely.</li></ul><p><a href="https://www.builder.io/visual-editor" rel="noopener noreferrer" target="_blank">Visual Editor</a>: A new AI-powered Visual Editor that helps you:</p><ul><li>Create interactive features using natural language commands</li><li>Work with your real data, APIs, and code components</li><li>Visually make tweaks using your design system, including colors, typography, and spacing</li><li>Sync design changes to code while preserving custom edits</li><li>Enable non-technical team members to make updates without constant developer intervention</li></ul><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F22a5cf55964649da934ee4fad745ca04?width=705" alt="image.png" /><p><a href="https://www.builder.io/blog/visual-copilot-2">Visual Copilot</a> understands your entire tech stack, from design files to code components and business logic. This allows it to generate complex, production-ready features that align with your specific design and development standards.</p><p>These features work together to create a powerful <a href="https://www.builder.io/m/knowledge-center/design-to-code">design-to-code</a> pipeline that respects your existing architecture and coding practices while significantly reducing development time and enabling faster iteration cycles.</p><h2>Builder Publish:</h2><p>Builder Publish is a system that enables non-technical team members to manage content without frequent developer intervention. It integrates a Visual Editor, headless CMS, and optimization tools into a single API-driven platform. This setup is designed to work alongside existing codebases and respect established component structures.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F978c2daa5b4d493d92316471dd93230a?width=705" alt="Builder publish.png" /><p>Builder Publish combines three key features:</p><ul><li><a href="https://www.builder.io/visual-editor" rel="noopener noreferrer" target="_blank">Visual Editor</a>: A drag-and-drop interface for making content changes without touching code.</li></ul><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2150aa0d323b418e95a41bc38b4a10f6%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=2150aa0d323b418e95a41bc38b4a10f6&alt=media&optimized=true" type="video/mp4">
    </video><ul><li><a href="https://www.builder.io/headless-cms" rel="noopener noreferrer" target="_blank">Headless CMS</a>: An enterprise-ready headless content management system that can handle complex data structures and integrate with existing stacks.</li></ul><ul><li><a href="https://www.builder.io/c/docs/abtesting" rel="noopener noreferrer" target="_blank">Optimization tools</a>: Built-in A/B testing and personalization features that don't require constant developer intervention.</li></ul><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fcc07cd8b87b54e469af9f88855849f06%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=cc07cd8b87b54e469af9f88855849f06&alt=media&optimized=true" type="video/mp4">
    </video><h2>Integrations:</h2><p>Builder integrates with existing tech stacks, supporting a wide range of tools and services across various categories:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fdc3b648fce7046d3a162712b387e9d99?width=705" alt="Builder platform.png" /><ul><li>Omnichannel Commerce: <a href="https://www.builder.io/m/shopify">Shopify</a>, <a href="https://www.builder.io/m/bigcommerce">BigCommerce</a>, <a href="https://www.builder.io/m/integration/salesforce-commerce-cloud">Salesforce</a></li>
<li>Digital Asset Management: <a href="https://www.builder.io/m/cloudinary">Cloudinary</a></li>
<li>Deployment: <a href="https://www.builder.io/m/vercel">Vercel</a>, <a href="https://www.builder.io/m/netlify">Netlify,</a> <a href="https://www.builder.io/c/docs/deploy-preview">Amplify Hosting</a></li>
<li>Localization: <a href="https://www.builder.io/m/phrase">Phrase</a>, <a href="https://www.builder.io/c/docs/integrating-smartling">Smartling</a></li></ul><p>These <a href="https://www.builder.io/m/integrations">integrations</a> allow for pulling in data and content from various sources, creating a unified development and content management workflow.</p><p>What sets Builder apart is its ability to work within existing architectures. It respects design systems and coding standards, integrating with workflows rather than forcing adaptation to a new one.</p><h2>Get started</h2><p>Here's how different team members can leverage Builder:</p><h3>Builder Develop:</h3><p>Builder Develop is particularly useful for:</p><ol><li>Automated code generation from designs</li>
<li>Rapid prototyping</li>
<li><a href="https://www.builder.io/m/explainers/design-systems">Design system</a> implementation</li>
<li>Legacy system modernization</li></ol><p>Example: When building a new SaaS dashboard, use Builder Develop to convert new Figma designs into a modern, responsive React application, significantly reducing development time.</p><h3>Builder Publish:</h3><p>Builder Publish can help teams by:</p><ol><li>Reducing maintenance overhead</li>
<li>Facilitating A/B testing</li>
<li>Enabling content personalization</li>
<li>Streamlining content updates</li>
<li>Managing multi-language content</li>
<li>Implementing dynamic content rules without complex backend logic</li></ol><p>Example: Set up a component library that marketing can use to drag and drop to create and A/B test landing pages, freeing up development resources for more complex tasks.</p><h3>Integrated approach:</h3><p>For optimal results, use both Builder Develop and Builder Publish in tandem:</p><ol><li>Use Builder Develop to create the core application and component library.</li>
<li>Leverage Builder Publish for visual editing, content management, and optimization.</li></ol><p>Example: Build the front-end components for a high-performance, custom e-commerce storefront with Builder Develop. Use those components in Builder Publish to manage product pages, create seasonal landing pages, and run personalized promotions while maintaining performance and consistency.</p><p>To get started with <a href="https://www.builder.io/">Builder.io</a>, you can:</p><ul><li><a href="https://www.builder.io/signup">Sign up for a free trial</a></li>
<li>Explore the <a href="https://www.builder.io/c/docs/api-intro">API documentation</a></li>
<li>Schedule a technical <a href="https://www.builder.io/m/demo">demo</a></li></ul><p>Whether you're looking to optimize the design-to-code development workflow or reduce the backlog of content-related tasks, Builder provides the tools to build and iterate more efficiently.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/visual-development-platform">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F496edfab08014ccab014dc4ccc12b702" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F496edfab08014ccab014dc4ccc12b702"/>
        </item>
        <item>
            <title><![CDATA[AI Pair Programming in 2025: The Good, Bad, and Ugly]]></title>
            <link>https://www.builder.io/blog/ai-pair-programming</link>
            <guid>https://www.builder.io/blog/ai-pair-programming</guid>
            <pubDate>Fri, 13 Dec 2024 22:00:00 GMT</pubDate>
            <description><![CDATA[Explore the pros and cons of AI pair programming in 2025. From boosting productivity to ethical concerns, discover how AI is reshaping software development.]]></description>
            <content:encoded><![CDATA[<p><br></p><p>AI in programming isn't some far-off sci-fi dream anymore. With tools like <a href="https://www.figma.com/community/plugin/747985167520967365">Visual Copilot</a>, you can <a href="https://www.builder.io/blog/figma-to-code-ai">convert Figma designs into code</a> in one click or <a href="https://www.builder.io/blog/cursor-ai-for-developers">prototype features in a minute</a> using <a href="https://www.cursor.com/">Cursor</a>. What began as basic code completion is now reshaping how we build software, offering context-aware code completions and even assisting with complex architecture.</p><p>AI has become as common in our IDEs as syntax highlighting. And just like any major shift in tech, it's bringing a mix of exciting possibilities and potential challenges.</p><p>Let’s explore what’s working, what’s not, and what’s downright concerning about AI pair programming.</p><h2>The good</h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5c9c880449c9477cbcd9bb5350981f54%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=5c9c880449c9477cbcd9bb5350981f54&alt=media&optimized=true" type="video/mp4">
    </video><p></p><p>When it works, AI pair programming tools can be pretty sweet:</p><ol><li><b>Speed boost:</b> AI can instantly provide accurate code suggestions, handle code generation, and even implement entire functions based on natural language descriptions. Software developers focused on writing code can ship faster than ever before.</li>
<li><b>Cleaner code:</b> Large Language Models (LLM) have been trained on a vast amounts of public code. They can suggest patterns that improve code quality  and make your code cleaner and easier to maintain thereby reducing time spent debugging code. AI tools are particularly helpful when working with multiple files in complex projects.</li>
<li><b>Learning on the job:</b> Junior developers can learn best practices in real-time as AI powered code assistants explain their suggestions. Even experienced developers working in multiple languages can discover new patterns and techniques without spending hours reading documentation.</li>
<li><b>Cost-effective (maybe):</b> While the initial investment might make your CFO nervous, over time, organizations are seeing reductions in their software development lifecycle and fewer bugs in production.</li>
<li><b>Goodbye, grunt work:</b> Repetitive coding tasks like writing unit tests, CRUD operations, and documentation can be delegated to AI, letting you focus on the more creative aspects of software development.</li></ol><h2>The bad</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2dd5c8da508c46cba8d045278f9cfed7?width=705" alt="AI has limitations; a user prompts an AI to write a deep clone function and it returns bad code" /><p>AI pair programming has its perks, but it also brings along some challenges to watch out for:</p><ol><li><b>Over-reliance:</b> It’s tempting to let the AI coding assistant handle everything, but this can lead to a shallow understanding of the codebase. If you're just accepting every piece of AI generated code into your existing code base without understanding the logic, you’ll face serious issues when things inevitably break.</li>
<li><b>Learning curve:</b> Knowing how to interact with your AI pair programmer, when to trust its suggestions, and when to ignore them is a skill in itself. “You get what you prompt” is the rule, and there’s no shortcut around it.</li>
<li><b>Contextual limitations:</b> Even advanced language models can struggle with domain-specific challenges, complex business logic, or new algorithms. When this happens, the code written by AI might be irrelevant or even counterproductive, slowing down progress.</li>
<li><b>Privacy concerns:</b> Many organizations are grappling with how to leverage artificial intelligence capabilities without compromising intellectual property. The potential for code snippets to be used in training future AI models raises serious questions about ownership and confidentiality.</li></ol><h2>The ugly</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F127b481ca1a44cb5813bca5ffdd29b84?width=705" alt="GitHub Copilot auto complete suggesting the logic for woman's salary" /><a href="https://mastodon.social/@gvwilson/113549897292144975">source</a><p></p><p>Certain aspects of AI pair programming reveal deeper, systemic implications:</p><ol><li><b>Job market impact:</b> AI can empower senior developers but might leave junior developers without the foundational learning opportunities they need, widening the skill gap and creating barriers to entry for newcomers.</li>
<li><b>Ethical implications:</b> Questions around code attribution, licensing, and intellectual property rights become increasingly murky when AI generates or assists in code creation.</li>
<li><b>Bias perpetuation:</b> AI trained on publicly available code and older codebases risks reinforcing outdated practices, ethical biases, and security vulnerabilities present in its training data, along with potentially suggesting discriminatory code patterns</li>
<li><b>AI agents:</b> The evolution of AI agents toward autonomy — moving from reactive assistants to proactive collaborators — is exciting but raises ethical and practical concerns. Autonomous debugging and task execution offer promise, but boundaries must be set for responsible use.</li></ol><h2>AI coding tools for pair programming</h2><p>If you're thinking about diving into AI pair programming, here are some tools that can genuinely make a difference.</p><h3><b>ChatGPT and Claude</b></h3><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fdf702ae1cc794d00ad1457ccbec570dd?width=705" alt="Claude AI's &quot;Meet Claude&quot; page" /><p>Think of <a href="https://chatgpt.com/">ChatGPT</a> and <a href="https://claude.ai/">Claude</a> as the Swiss Army knives of coding assistants. Whether you're stuck on a weird bug, need a quick code snippet, or need code explanation that breaks things down like you're five, these tools are there for you.</p><h3><b>GitHub Copilot</b></h3><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ffd842519e2844f6c92aa67640d889351?width=705" alt="Statistics from GitHub copilot including one million developers currently using" /><p>As one of the first AI coding assistants to gain mainstream traction, <a href="https://github.com/features/copilot">GitHub Copilot</a> transformed the development process by integrating powerful machine learning capabilities directly into <a href="https://code.visualstudio.com/">Visual Studio Code</a> editor. It offers high quality code completions, contextual suggestions based on your project, and support for various programming languages like C++, Python, JavaScript etc.</p><h3><b>Visual Copilot</b></h3><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F3ae4be8081fa45729b4340725845c15d?width=705" alt="Builder.io's Visual Copilot homepage" /><p>Got a Figma file? <a href="https://www.figma.com/community/plugin/747985167520967365">Visual Copilot</a> turns designs into responsive, production-ready code for HTML, React, Angular, Vue and more—letting you tweak the design or code to suit your needs. Instead of generating UI from scratch, it helps you leverage existing designs to accelerate development and maintain consistency.</p><h3><b>Cursor</b></h3><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F9c771f2c09d54992bc11358a91f00cd6?width=705" alt="Cursor's AI Homepage" /><p>Imagine if your IDE got bitten by a radioactive AI. That's <a href="https://www.cursor.com/">Cursor</a>. With features like built-in AI chat, code completion, AI agent and automated debugging, Cursor redefines how you interact with code.</p><h3><b>Bolt</b></h3><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F6a409848fbf6456d9e98d69da225c03f?width=705" alt="Bolt's AI Homepage" /><p>When you want to build a full-stack web app without the hassle of setting up a local environment, <a href="https://bolt.new/">Bolt</a> is your go-to. Just describe what you want, and boom - you've got an app. Plus, you can see what you're building in real-time and deploy it without much fuss.</p><p>These tools aren’t flawless, but they’re designed to help you write better code faster, whether you're debugging, building new features, or transforming designs into functional apps.</p><h2>The bottom line</h2><p>The future of AI pair programming will not be defined by whether we use AI, but by how we use it. At <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a>, we've been messing around with AI tools in our dev process for a while now. We've plugged them into everything from quick prototypes to shipping actual features.</p><p>Has it been a game-changer? Yeah, pretty much. We're moving faster, our code's more consistent, and our devs get to focus on the tricky stuff instead of writing boring boilerplate all day.</p><p>But it hasn't all been smooth sailing. We've learned that AI's great at some things, but it's not about to replace good old human brainpower. It's more like a really smart intern — helpful when you know how to use it, but you wouldn't let it run the whole show.</p><p>The key? Use AI to make your skills better, not to do your thinking for you. At the end of the day, we're still the ones responsible for building stuff that actually solves problems.</p><p>So yeah, the future of coding isn't about AI taking over. It's about figuring out how we can team up with AI to build cooler stuff, faster. And that's pretty exciting, if you ask me.</p><h3><strong>If you enjoyed this post, you might also like:</strong></h3><ul><li><a href="https://www.builder.io/blog/cursor-advanced-features" rel="noopener noreferrer" target="_blank"><strong>5 Advanced Features for Cursor </strong></a></li><li><a href="https://www.builder.io/blog/cursor-vs-github-copilot" rel="noopener noreferrer" target="_blank"><strong>Cursor vs. GitHub Copilot</strong></a></li><li><a href="https://www.builder.io/blog/devin-vs-cursor" rel="noopener noreferrer" target="_blank"><strong>Devin vs. Cursor</strong></a></li><li><a href="https://www.builder.io/blog/windsurf-vs-cursor" rel="noopener noreferrer" target="_blank"><strong>Windsurf vs. Cursor</strong></a></li><li><a href="https://www.builder.io/blog/is-o1-worth-it" rel="noopener noreferrer" target="_blank"><strong>OpenAI o1 vs. Claude Sonnet</strong></a></li></ul>
    <h5><i>Read the <a href="https://www.builder.io/blog/ai-pair-programming">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb146fca648074a2db92303d05a5034a4" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb146fca648074a2db92303d05a5034a4"/>
        </item>
        <item>
            <title><![CDATA[Animate hero elements with scroll-driven CSS animations]]></title>
            <link>https://www.builder.io/blog/scroll-driven-animations</link>
            <guid>https://www.builder.io/blog/scroll-driven-animations</guid>
            <pubDate>Fri, 13 Dec 2024 14:00:00 GMT</pubDate>
            <description><![CDATA[Recreate GitHub's landing page scroll effect using modern CSS techniques, including scroll-driven animations, for a performant and maintainable solution.]]></description>
            <content:encoded><![CDATA[<p>When you navigate to github.com (you must be logged out because otherwise you'll enter the GitHub app), you'll be greeted by this landing page.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F75b6bb181d7c49eaa4a8733c74fc56b7%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=75b6bb181d7c49eaa4a8733c74fc56b7&alt=media&optimized=true" type="video/mp4">
    </video><p></p><p>It's a well-designed centered hero design with a sign-up box. It stands out that the hero text fades away while moving behind the code editor once you scroll down. How can you achieve such an effect?</p><p>I was curious and kicked off a quick reverse engineering session to discover that everything's built with React, and the application listens to <code>scroll</code> events. When scrolling, the JS updates the hero text's <code>scale</code> and <code>opacity</code> properties in a <code>requestAnimationFrame</code> loop. In short, a lot is going on to create this effect!</p><p>In this article, I will explain how to <b>achieve a similar effect with modern (and future) CSS and zero JavaScript</b>.</p><p><i>If you want to look at the final example, check a <a href="https://main.d3739ajl2fez28.amplifyapp.com/examples/github-hero">deployed demo version</a> online!</i></p><h2><strong>Some prep work</strong></h2><p>To have some code ready, I quickly designed a hero section in Figma and <a href="https://www.builder.io/c/docs/import-from-figma">used the Builder Figma plugin</a> to generate some React code with <a href="https://www.builder.io/blog/figma-to-code-visual-copilot">Visual Copilot</a>.</p>

<video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F8358b62a92404578ac11714dd6a66d2c%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=8358b62a92404578ac11714dd6a66d2c&alt=media&optimized=true" type="video/mp4">
    </video><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;">While my Figma-to-code result is less pretty than the GitHub example, this workflow lets me create something to work off in five minutes.</span><br><h2><strong>Sliding the hero image over the text with </strong><code><strong>position: sticky</strong></code></h2><p>A reasonable first step to recreate the GitHub effect is to slide the hero image over the hero text.</p><p>To do this, we can stick the hero text at the top while scrolling. By using <code>position: sticky</code>, we can place an element inside a container and "make it stick" somewhere when people scroll around.</p><p>To give the hero text some air, we'll also add some space using the top CSS property.</p><pre><code>.hero-text {
  /* Make the element sticky */
  position: sticky;
  /* Give the element some space at the top */
  top: 1rem;
}</code></pre><p>When we add <code>position: sticky</code>, we'll discover that the hero text scrolls on top of the other scrolling elements. This is exactly what you want in most sticky scenarios, but in our case, we want the sticky element to go below the rest.</p><p></p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2fa5d331bcf04bfe8b8aef4679df02a4%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=2fa5d331bcf04bfe8b8aef4679df02a4&alt=media&optimized=true" type="video/mp4">
    </video><p></p><p>To make the hero text "slide under", we need to create a new stacking context for the other elements. <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_positioned_layout/Understanding_z-index/Stacking_context">There are many ways to do this</a>, but I like to set <code>isolation: isolate</code> to create a new stacking context because it's a nifty one-liner, and more people should know about the <code>isolation</code> CSS property.</p><pre><code>.hero-image {
  /* Create a new stacking context */
  isolation: isolate;
}</code></pre><p>And voila — look at this!</p><p></p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F1546f23be9d24c119344a8502a592115%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=1546f23be9d24c119344a8502a592115&alt=media&optimized=true" type="video/mp4">
    </video><p></p><p>That's not too shabby, isn't it? Now, we only need to add the scroll-fade behavior. How can we add it?</p><h2><strong>Adding CSS-only scroll-driven animations</strong></h2><p>If you're reading this blog, you're probably aware of the ongoing CSS evolution. Let me tell you, there hasn't been a better time to be a web developer. To name a few recent CSS features: we now have container queries, the <code>:has()</code> selector entered the stage, and view transitions make animating things easier than ever before.</p><p>The modern web is fantastic, and one other exciting feature in the making is scroll-driven CSS animations. Scroll what? Yes, you heard that right!</p><h3>What are scroll-driven CSS animations?</h3><p>Scroll-driven animations allow you to remove all these custom JavaScript scroll handlers and use the CSS Animations API to add scroll animation behavior.</p><p>The API runs off the main thread and provides a massive performance boost compared to thousands of firing scroll handlers in JavaScript land. With scroll-driven CSS animations, you can create scroll effects with less and more performant code.</p><p>The new CSS feature is currently supported only by Chromiums, but <a href="https://github.com/WebKit/standards-positions/issues/152">Webkit is open to this platform addition</a>, and Firefox ships an initial implementation behind a flag! Native scroll-driven animations will be coming to the web!</p><p>If Chromium-only isn't good enough to use the new CSS feature yet, I understand. However, with Chromium-based browsers having a global market share of over 70%, it's fair to treat scroll effects as progressive enhancement. Browsers that support scroll-driven animations will show users some eye candy, while the other browsers will only render a headline on top of a hero image.</p><p><i>Side note: if scroll-driven animations are essential for your site, <a href="https://github.com/flackr/scroll-timeline">there is also a polyfill</a>. I haven't used it, but it might be a valid alternative to add custom scroll behavior.</i></p><p>But let's get to it and add some eye candy!</p><h3>Adding your first scroll-driven animation</h3><p>Scroll-driven animations are based on good old <code>@keyframes</code>.</p><pre><code>@keyframes fade-out {
  0% {
    opacity: 1;
    scale: 1;
  }

  100% {
    opacity: 0;
    scale: 0.5;
  }
}</code></pre><p>We can define a <code>fade-out</code> animation that makes an element disappear by scaling it down and reducing its opacity. Next, we take our <code>hero-text</code> class and set our scroll-driven animation.</p><pre><code>.hero-text {
  /* Set the animation */
  animation: fade-out linear;
  /* Connect the animation to the nearest scroller's scroll progress */
  animation-timeline: scroll();
}</code></pre><p>And look at this: two added CSS declarations give us something to work off of already.</p>

<video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F9c02a8b0a38741b0a24b6e60fdc86027%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=9c02a8b0a38741b0a24b6e60fdc86027&alt=media&optimized=true" type="video/mp4">
    </video><p>Let's understand what's going on here!</p><p>The <code>hero-text</code> class now sets the <code>fade-out</code> keyframes using the <code>animation</code> property. It isn't a "normal" <code>animation</code> declaration, though.</p><p>The <code>animation</code> shorthand doesn't define an <code>animation-duration</code>. Usually, time controls the keyframe animation progress, but in our case, the <code>animation-duration</code> is set to <code>auto</code> because we want to make it dependent on scroll progress and a scroll timeline.</p><p>Below the <code>animation</code> declaration, you'll see the new <code>animation-timeline</code> property. Theoretically, <code>animation-timeline</code> is also part of the <code>animation</code> shorthand, but you can only use it to reset a timeline. To define an animation other than <code>auto</code> we must define an animation followed by a specified <code>animation-timeline</code>. Order matters in this case!</p><p>But I got ahead of myself; what's an animation timeline?</p><h3>Specifying an animation timeline</h3><p><b>An animation timeline specifies the timeline used to control the progress of a CSS keyframe animation</b>. Usually, you control your animations by time which maps to <code>animation-timeline: auto</code>. But with scroll-driven animations, there are now two new animation scroll timelines: scroll progress (<code>animation-timeline: scroll()</code>) and view progress (<code>animation-timeline: view()</code>) timelines.</p><h3>Animating the hero element on scroll progress (<code>scroll()</code>)</h3><p>A scroll progress timeline defined with <b>the <code>scroll()</code> CSS function maps the scroll progress of a wrapping scroll container</b> (also called scroller) to values from <code>0%</code> to <code>100%</code> and applies them to a keyframe animation. In our case, the nearest scroll container is the <code>html</code> element. When scrolling down, the overall document scroll progress controls the <code>fade-out</code> animation.</p><p>And while this works, you might now wonder what happens with massively long HTML documents.</p><p></p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fed1b0571878d468f8f3fd1b548ea2abe%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=ed1b0571878d468f8f3fd1b548ea2abe&alt=media&optimized=true" type="video/mp4">
    </video><p><i>When the fade-out animation relies on document scroll progress, a</i><i style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;">&nbsp;longer document affects the animation progress.</i></p><p></p>
<p><code>scroll()</code> comes in handy if you want to display a document scroll progress indicator, but for our hero animation, it doesn't make sense to use a scroll progress timeline. If you scroll 500px down in a 2000px high document, the animation will progress by 25%. But when the document grows to 10000px, the scroll timeline will only progress to 5%. The animation will be barely noticeable. Our animation should rely on something other than the document length!</p>
<p>Luckily, we can use another scroll timeline.</p>
<h3>Animating the hero element on view progress (<code>view()</code>)</h3><p>If you don't want to consider the overall scroll progress, there's another way to control scroll-driven animations. <b>The new <code>view()</code> CSS function allows you to consider the visibility of an element inside a scroller</b>. The <code>view()</code> function is quite a beast to wrap your head around, but most importantly, view progress timelines are also wildly powerful!</p><p>I will only go into some of the details here (check the resources below if you want to learn more), but let's take a step back to rethink how the visual effect should work.</p><p>We want to:</p><ul><li>Start the keyframe animation at <code>0%</code> when our hero starts moving off the screen.</li>
<li>Finish the keyframe animation at <code>100%</code> when the hero disappears.</li></ul><p>To achieve this behavior, we have to adjust the animation range, and of course, there's another new CSS property for it — say hello to <code>animation-range</code>. <code>animation-range</code> enables us to define the start and end of our scroll-driven animation. For our <code>fade-out</code> animation, we're interested in kicking off the animation when an element starts disappearing (<code>0%</code>) until it's entirely gone (<code>100%</code>).</p><p>For this use case, we can add an exit animation range. Let's go ahead and put this into the CSS.</p><pre><code>.hero-text {
  animation: fade-out auto ease-in-out;
  animation-timeline: view();
  /* Apply a custom animation range */
  animation-range: exit 0% exit 100%;
}</code></pre><p>When you add the custom animation range, you'll discover that, for our hero animation, it doesn't work, though.</p>

<video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fff0d7b311b2f4bd7b5121303aba4c286%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=ff0d7b311b2f4bd7b5121303aba4c286&alt=media&optimized=true" type="video/mp4">
    </video><p>We defined the hero text to be sticky, and this positioning implies that it will leave the scroller only when the surrounding container is moving off the screen. The hero text animation is applied, but it's not visible because our hero dummy image covers the scroll exit animation.</p>
<p>When we remove the stickiness, we'll discover that our <code>animation-range</code> works appropriately. What can we do now that we want to animate a sticky element?</p>
<h3>Attaching a named view progress timeline to animate sticky elements</h3><p>Of course, the new scroll-driven animations have a solution to this problem, too. To make our animation visible, we need to control the animation depending on the view progress of another element with a named view progress timeline.</p><p>In our CSS, we can go into the wrapping hero container and specify a <code>view-timeline-name</code>…</p><pre><code>.hero-container {
  /* Define a named view progress timeline */
  view-timeline-name: --hero-scroll;
}</code></pre><p>… to then change our hero text to use the view timeline instead of <code>view()</code>.</p><pre><code>.hero-text {
  animation: fade-out auto ease-in-out;
  /* Specify the container animation timeline */
  animation-timeline: --hero-scroll;
  animation-range: exit 0% exit 100%;
}</code></pre><p>And now check this out!</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fcf54ae8ea1354d4b82aaccb2fbfdf4b9%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=cf54ae8ea1354d4b82aaccb2fbfdf4b9&alt=media&optimized=true" type="video/mp4">
    </video>
<p>Our hero text element fades out and scales down right when the surrounding container starts leaving the screen. And how much CSS did this take us to write? It was only a few CSS declarations and one keyframe animation. I'm amazed!</p>
<p>Let's consider a few more things to be good web citizens, though.</p>
<h2><strong>Watching out for browser support and user preferences</strong></h2><p>First, some folks can feel discomfort or even sickness when faced with unexpected movements on screen. To build <i>"a good web™"</i>, we can add a CSS <code>reduced-motion</code> media query to allow people to opt out of moving animations.</p><p>Second, while creating the demo, I discovered that Firefox's flagged implementation doesn't support the <code>animation-range</code> property yet. To resolve this, we can also add a <code>@supports</code> feature query to avoid a broken animation in browsers that don't support scroll-driven animations yet.</p><p></p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F159683d2ecc94bbabacc6a87b0ebff3d%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=159683d2ecc94bbabacc6a87b0ebff3d&alt=media&optimized=true" type="video/mp4">
    </video><p>If you ask me, the fallback looks excellent as well, but of course, you could also remove the stickiness if you don't like the image sliding over the text.</p>
<p>So, here's the final code.</p>
<pre><code>@supports (animation-range: exit) {
  @media (prefers-reduced-motion: no-preference) {
    .hero-container {
      view-timeline-name: --hero-scroll;
    }

    .hero-text {
      animation: fade-out auto ease-in-out;
      animation-timeline: --hero-scroll;
      animation-range: exit 0% exit 100%;
    }
  }
}

.hero-text {
  position: sticky;
  top: 1rem;
}

.hero-image {
  isolation: isolate;
}

@keyframes fade-out {
  0% {
    opacity: 1;
    scale: 1;
  }

  100% {
    opacity: 0;
    scale: 0.5;
  }
}</code></pre><p>Isn't this magical and fun? I'm a big fan!</p><h2>Conclusion</h2><p>So, with only a few lines of modern CSS, we rebuilt this JavaScript-heavy effect on GitHub's landing page. Our scroll animation is now more maintainable and performant because we're not relying on any JavaScript blocking the main thread!</p><p>And because we're relying on modern CSS paired with progressive enhancement, we can give users the best experience if their browsers support it. Win-win!</p><p>If you want to see the effect in action, here's the <a href="https://main.d3739ajl2fez28.amplifyapp.com/examples/github-hero">deployed version</a>.</p><p>Are you hooked already? I indeed am!</p><h3>Next steps</h3><p>If you want to learn more about scroll-driven animations, there's a single place to go. Bramus from the Chrome DevRel team, aka "Mr. ScrollAnimation", maintains <a href="https://scroll-driven-animations.style/">scroll-driven-animations.style</a>. The site lists many tools, resources, and visual examples.</p><p>If you prefer learning with videos, <a href="https://www.youtube.com/playlist?list=PLNYkxOF6rcICM3ttukz9x5LCNOHfWBVnn">Bramus has also released a free course on YouTube</a>.</p><p>And if you wonder how to debug scroll-driven animations, <a href="https://chromewebstore.google.com/detail/scroll-driven-animations/ojihehfngalmpghicjgbfdmloiifhoce?hl=en">this Chrome extension is invaluable for figuring out what's going on</a>.</p><p>And now we're done, have fun animating, and let me know how it goes!</p><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;"><iframe src="https://www.youtube.com/embed/xTU1qWZHm10?rel=0" style="top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;" allowfullscreen scrolling="no" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share;"></iframe></div><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F054b568276474d1f886f3c107ec1c648?width=163" alt="" />Written by,<h2><span style="font-weight: 700;">Stefan Judis</span></h2>,Stefan loves getting into web performance, new technologies, and accessibility, sends out <a href="https://webweekly.email/" target="_blank">a weekly web development newsletter</a> and enjoys sharing <a href="https://www.stefanjudis.com/today-i-learned/">nerdy discoveries on his blog</a>.
    <h5><i>Read the <a href="https://www.builder.io/blog/scroll-driven-animations">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F4f3c8986d48b47d6845bebfc8d0c0610" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F4f3c8986d48b47d6845bebfc8d0c0610"/>
        </item>
        <item>
            <title><![CDATA[Devin review: is it a better AI coding agent than Cursor?]]></title>
            <link>https://www.builder.io/blog/devin-vs-cursor</link>
            <guid>https://www.builder.io/blog/devin-vs-cursor</guid>
            <pubDate>Wed, 11 Dec 2024 08:00:00 GMT</pubDate>
            <description><![CDATA[I tested Devin, the $500/month AI coding agent, against Cursor. Here's what I found, what worked, what didn't, and why I think one has a brighter future.]]></description>
            <content:encoded><![CDATA[<p>I paid the $500 a month to use <a href="https://devin.ai/">Devin</a>, the AI coding agent, so you don't have to. Let's compare it to Cursor agents and see if it's worth the $2 billion valuation of their company.</p><h2>What is Devin?</h2><p>The main thing to know about <a href="https://devin.ai/" rel="noopener noreferrer" target="_blank">Devin</a> is it's primarily a Slack-based workflow — it's not an IDE.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F30df82ede2bc4b1db6385a2bbbf181c2?width=705" alt="Screenshot of me asking Devin to do something" /><p>You tag Devin in Slack and ask Devin to update something, fix something, et cetera. Devin includes:</p><ul><li>A remote server</li>
<li>Browser interface</li>
<li>VS Code editing interface</li>
<li>A planner</li>
<li>A chat interface</li></ul><p>You can follow along step-by-step to see what Devin did and what it's doing.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb3aadcda38584d6390c2c2ea985273ab%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=b3aadcda38584d6390c2c2ea985273ab&alt=media&optimized=true" type="video/mp4">
    </video><h2>Testing Devin with an image generation model</h2><p>I heard about this new <a href="https://github.com/ChenDarYen/NitroFusion">image generation model</a> that's supposed to be small enough to run on consumer-grade hardware.</p><p>I was hoping for a basic web UI, but then I found all of this and realized I don't code in Python. I didn't know what to do with this, so I asked Devin.</p><p>Devin went to work and in the course of about 12 minutes it:</p><ol><li>Cloned the repo</li>
<li>Got it spun up</li>
<li>Generated an image of a cat for me</li>
<li>Attached the image back to me</li></ol><p>I then asked for four more images of a dog riding in a hot air balloon. And I got my images in full, terrifying quality.</p><p>Now that's not Devin's fault, of course; that's the model we're using.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fe042be9a4749442e9fa40956c02183ac%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=e042be9a4749442e9fa40956c02183ac&alt=media&optimized=true" type="video/mp4">
    </video><h2>Asking Devin to create a web UI</h2><p>I saw one of the todos on this repo is to create a local, real-time interactive app.</p><p>So I asked Devin if he could clone this repo and add a web-based UI to type prompts and see images. Devin began spinning things up and sending me updates.</p><p>One really interesting thing Devin does is it takes notes and stores them in a notes.txt file to refer back to and use in subsequent prompts.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff3f9e1380c204d568c6923ad67ebd9b9?width=705" alt="Screenshot of Devin's notes.txt file" /><p>This seems like an interesting technique to summarize information that's important and carry it across subsequent steps.</p><p>Devin will also sometimes create knowledge entries, which are like bits of information that could be useful to refer back to in totally subsequent runs.</p><p>It'll store these and look them up when needed, which is supposed to emulate the tribal knowledge that exists within a team.</p><p>Devin was in fact able to add the web UI I asked for, but we hit other issues. More on that in a moment.</p><h2>Devin's capabilities and limitations</h2><p>Overall, Devin's pretty impressive. It:</p><ul><li>Creates plans</li>
<li>Writes code</li>
<li>Finds bugs in the code</li>
<li>Corrects the code</li>
<li>Runs its own end-to-end tests to verify it works</li>
<li>Responds to your feedback if you find issues and attempts to address them</li></ul><p>Anything you reply in Slack, Devin will start working on a reply to. In this case, it was able to verify we're hitting deployment issues.</p><p>I kept working on debugging it, but unfortunately, after a lot of back and forth, it still never was able to solve it. Eventually, I gave up because I was sick of trying.</p><p>Personally, slack thread hell is not my favorite method of developing/debugging:</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F4ea8935cdc164a4393287aee74d4c444%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=4ea8935cdc164a4393287aee74d4c444&alt=media&optimized=true" type="video/mp4">
    </video><p>I prefer not to be demoted to the “any updates?” guy.</p><p>Finally, I asked if I could just pull this code down locally and run it locally. It gave me instructions, but they weren't valid because it didn't actually send this code in a pull request.</p><h2>Devin's pull request capabilities</h2><p>That's not to say that Devin can't do a pull request. One of my very first runs of Devin was to add a feature to a weather app.</p><p>It was able to add the feature I wanted as well as respond to my feedback that I wanted it to look more like iOS styling.</p><p>The final pull request was not bad. It added two packages, and the code was pretty good, but there was a console log in the code.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F503df45833d24bf4a2840a4bfbe3d8a7%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=503df45833d24bf4a2840a4bfbe3d8a7&alt=media&optimized=true" type="video/mp4">
    </video><p>It also forgot to uninstall a package that it no longer needed after my feedback. But we can go in and just leave comments, like a normal person, to remove this log and<span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;">&nbsp;that this package is no longer needed.</span></p><p></p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F56caf13d75af4072bcfa256da7ef0381%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=56caf13d75af4072bcfa256da7ef0381&alt=media&optimized=true" type="video/mp4">
    </video><p>One cool thing Devin did when we were going back and forth on what the UI of this weather app update should be is it actually generated a deployment with a preview URL without me asking.</p><p>So when I type in a city, I can see that the feature I wanted has an iOS style like I asked. Even though I actually don't have a deploy preview set up on this repo, it deployed a version for me to see anyway.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F858dbf1f4a79448daa7277d4b44c3569%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=858dbf1f4a79448daa7277d4b44c3569&alt=media&optimized=true" type="video/mp4">
    </video><p>When it learned I want an iOS style for this app, it proposed this to save in the knowledge. I can review and approve it, and it'll remember that during subsequent runs.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc97a28b3b2c74cdf99f1bda7750fb9f6%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=c97a28b3b2c74cdf99f1bda7750fb9f6&alt=media&optimized=true" type="video/mp4">
    </video><p>For some reason though, I couldn't get Devin to reply to my feedback this time, even though I've seen it do it before. I don't know what went wrong.</p><p>In general, I hit a few bugs along the way while using Devin, but nothing super crazy that I couldn't <i>usually</i> work around.</p><h2>Fixing bugs with Devin</h2><p>A separate task I asked of Devin was to fix a bug in our existing website. After about 12 minutes, it spun up a PR with a fix, finding the necessary boolean and updating it from true to false.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F49525fd7475541d5ad73976cfbc8100e%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=49525fd7475541d5ad73976cfbc8100e&alt=media&optimized=true" type="video/mp4">
    </video><p>But then it updated some other stuff I didn't expect:</p><ul><li>Added a <code>fallback: true</code> in <code>getStaticPaths</code>, even though <code>getBuilderStaticPaths</code> already sets fallback to <code>'blocking'</code></li>
<li>Removed a check, even though we already turned that value to false</li>
<li>Added a type declaration that I know firsthand isn't needed</li></ul><p>The cool part is I asked in the PR why it did this, and Devin added the eyes emoji to tell me it sees this. Then it explained itself.</p><p>I'll be honest, I was kind of hoping it would fix those things. But it did provide a thorough explanation. It just wasn't a good one. Most of this information is not actually true.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F8f6a54d4ac4d4e578e1919e1d4093ffc?width=705" alt="Screenshot of Devin's reply" /><p>Fallback true does not enable client-side navigation or enable <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a>'s preview system. Fallback blocking, which was already used, is our preference. Also, the tabler icons react type definition is just not needed. It's included in the package.</p><p>It made some weird comment that these components are part of the client-side navigation system, whatever that means. But the nice part is I can talk to Devin like a human, leave a comment, and it can make updates accordingly.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc51de45da4fd4049ab859ccb9c91de2f?width=705" alt="Screenshot of me requesting changes" /><h2>Adding a backend feature</h2><p>The last thing I asked Devin to do is implement a backend feature. I said to add to our GraphQL admin API the ability to read and write from the comments collection.</p><p>Devin created a PR that was decent. It added this reflect metadata package that I don't think is needed (we haven't needed it to date).</p><p>But most importantly, it did recognize we use this resolver structure. It created a comments resolver and added it.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fdbf70a90b6e14793bd180d9e065873d1%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=dbf70a90b6e14793bd180d9e065873d1&alt=media&optimized=true" type="video/mp4">
    </video><p>This code actually looks pretty typical of how we've written this on the backend. Now it did make up a couple of fields that would have been nice to ask me what the schema is. But otherwise, I'd say this is decent code.</p><h2>Workflow issues with Devin</h2><p>Overall, I'd say the biggest problem I have with Devin is this is just not my preferred workflow. I don't want to make an ask and wait 15 minutes for a pull request, and then have this back and forth on the pull request and/or Slack.</p><p>I much prefer Cursor's workflow where I have all of this right in my local environment and IDE. I can see the updates in real-time and can commit and debug locally, without jumping to some remote server and other set of tools I don't know, and having all these long waits and delays that are just unfamiliar and unproductive.</p><p>I get that the idea of Devin is to set some asynchronous agent coworkers off at a task and let them do lots of things in parallel and just come to you with results.</p><p>But that really isn't a great workflow until Devins are a lot better. I don't want the AI to just go off and do its thing and come back only when it's done, unless I have high confidence it's going to be really, really reliable at that.</p><p>Otherwise, I'd prefer my IDE just do it.</p><h2>Comparing with Cursor agents</h2><p>Let's compare some of the same tasks with <a href="https://www.cursor.com/" rel="noopener noreferrer" target="_blank">Cursor's</a> new agent features.</p><h3>Context handling</h3><p>The big difference between Cursor agents and the standard Cursor composer view is you don't have to manually add files to the context. Cursor will scan your codebase and find the relevant files and add them for you.</p><p>Cursor was able to find this no client-side routing variable and flip it to false. If I accept the updates, we can see it did exactly what we wanted. One basic minimal diff.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F8eb695cebcde49d8bcef48c000a2007f%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=8eb695cebcde49d8bcef48c000a2007f&alt=media&optimized=true" type="video/mp4">
    </video><h3>User control and feedback</h3><p>Cursor's not always perfect, but the part I like most is I'm in control and in the driver's seat. If I want something different, I could also say, just delete that variable and all references altogether. And I could see the update immediately. There's less waiting and more action.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fa888f680f2c342de8769c792abdc2846%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=a888f680f2c342de8769c792abdc2846&alt=media&optimized=true" type="video/mp4">
    </video><p>While I'm more closely in the loop, I have more trust with this process. Because I know what I want, and if it can scan my code, update multiple files and not make me have to worry about the details, I can provide real-time feedback and hand modifications and send the pull request my way.</p><p>That's a much easier to adopt workflow for me and my team.</p><h3>Ownership clarity</h3><p>With Cursor it's also more clear who owns the pull request: it's me. I find this process faster, easier, and nicer. We don't have weird bots creating pull requests where it's unclear who actually owns that and is responsible for making sure the code is good.</p><p>Nobody has to clone down that bot's PR and push updates to it. And every update happens pretty quickly.</p><h3>GraphQL example</h3><p>I also tried the GraphQL prompt with our very large internal repo in Cursor agent mode as well. And I got very similar results. It:</p><ul><li>Added the comments resolver</li>
<li>Integrated it into the API</li>
<li>Added the types as well</li></ul><p>So pretty similar results to what you'd expect with Cursor's composer view. But again, because of the agent mode, I didn't have to specify files. I just typed my prompt and it happened. That was nice.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F1393443d52ff48b0b3e286a60f1d3985%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=1393443d52ff48b0b3e286a60f1d3985&alt=media&optimized=true" type="video/mp4">
    </video><h3>Image generator repo clone</h3><p>Now let's try a more agentic workflow where we have it clone this image generator model repo. You'll see the main difference between Cursor agents and Devin is it asked me before it runs commands.</p><p>Cursor is generally more cautious than Devin, which is nice because it's running on my local machine. But also sometimes I wish it would just run this stuff for me.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fed603103d07241e8a6787938e8faba55%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=ed603103d07241e8a6787938e8faba55&alt=media&optimized=true" type="video/mp4">
    </video><p>I've noticed if it catches an error, it'll automatically try to fix it, which I've seen it be successful at, which is great. Now it's written the code, which I'll accept. It found an error and it's rewriting the command accordingly.</p><p>Unfortunately, my computer froze before I could show you if Cursor was able to finish that task. It looked to me like it was generating the image fine, but it turns out that model is meant for having a real GPU and not burning through my laptop CPU like I was trying to do.</p><h2>The results</h2><p>Overall, I don't think Devin will take off like Cursor. And it's not just because of the $500 a month starting point. Cursor is so much easier to adopt and I like their incremental approach.</p><p>Devin, I fear, is trying to jump too far. They've raised all this money saying there's this all-new way to build software with agents, but it just wasn't my preferred workflow.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fbfaa4f0b45874a67881e9d1b73d74d60?width=705" alt="Devin vs Cursor pros/cons list" /><p>Maybe one day when LLMs are even better and agents are extremely reliable. But I'm not sure the rate of progress will get us there really soon. And I personally believe more in Cursor's incremental approach than Devin's "let's change everything" approach.</p><h2>My preferred AI stack</h2><p>My preferred workflow looks more like this:</p><ol><li>A developer works iteratively with Cursor</li><li>Other teammates like designers iterate with their tools</li><li>Products like <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a> can convert designs to code and also patch in design updates as they're needed</li></ol><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F706fed109d0c48b68b87fd0278e07f85?width=705" alt="Diagram of my preferred AI stack" /><p>Ultimately your workflow doesn't change much. You're still coding and debugging locally. You're pushing changes as needed.</p><p></p><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;"><iframe src="https://www.youtube.com/embed/oU3H581uCsA?rel=0" style="top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;" allowfullscreen scrolling="no" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share;"></iframe></div><p><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;">But I will say that I'm excited to have a new player in the agent coding space to push Cursor even further. And I can't wait to see what comes out from the result of this.</span></p><p></p><p>But that's my quick take. From everything you saw, what do you think? Let me know in the comments. And if you made it to the end and you want to see more videos like this, be sure to like and subscribe.</p><h3><strong>If you enjoyed this post, you might also like:</strong></h3><ul><li><a href="https://www.builder.io/blog/cursor-advanced-features" rel="noopener noreferrer" target="_blank"><strong>5 Advanced Features for Cursor </strong></a></li><li><a href="https://www.builder.io/blog/cursor-vs-github-copilot" rel="noopener noreferrer" target="_blank"><strong>Cursor vs. GitHub Copilot</strong></a></li><li><a href="https://www.builder.io/blog/ai-pair-programming" rel="noopener noreferrer" target="_blank"><strong>AI Pair Programming in 2025</strong></a></li><li><a href="https://www.builder.io/blog/windsurf-vs-cursor" rel="noopener noreferrer" target="_blank"><strong>Windsurf vs. Cursor</strong></a></li><li><a href="https://www.builder.io/blog/is-o1-worth-it" rel="noopener noreferrer" target="_blank"><strong>OpenAI o1 vs. Claude Sonnet</strong></a></li></ul>
    <h5><i>Read the <a href="https://www.builder.io/blog/devin-vs-cursor">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fcdab2e69addd44d69719ed1edd1acb0a" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fcdab2e69addd44d69719ed1edd1acb0a"/>
        </item>
        <item>
            <title><![CDATA[Is OpenAI's o1 model a breakthrough or a bust?]]></title>
            <link>https://www.builder.io/blog/is-o1-worth-it</link>
            <guid>https://www.builder.io/blog/is-o1-worth-it</guid>
            <pubDate>Mon, 09 Dec 2024 21:00:00 GMT</pubDate>
            <description><![CDATA[OpenAI's o1 model is slower and costlier, but its step-by-step approach could improve AI agents. Progress in AI may be slower than the current hype suggests.]]></description>
            <content:encoded><![CDATA[<p>OpenAI's latest model, o1, isn't getting nearly as much buzz as its predecessors GPT-3 and GPT-4. But why?</p><h2><b>AI progress is slowing down</b></h2><p>Let's start with a real-world example. Here's a comparison between o1 and Claude converting a Figma design into code via <a href="https://www.builder.io/">Builder.io</a>:</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F8354badbf8da45bab382b83e4f2bf15a%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=8354badbf8da45bab382b83e4f2bf15a&alt=media&optimized=true" type="video/mp4">
    </video><em>See full clip and details <a href="#full-benchmark">below</a></em><p>As you can see, o1 is significantly slower. It's also more expensive, and only sometimes better.</p><p>So why is OpenAI investing so heavily in o1? It all comes down to this:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fdd9a4c7494884b2b9d2d59729d760dad?width=705" alt="a graph modeling the timeline of various AI models releases and their capabilities" /><p>Source: <a href="https://x.com/alexalbert__/status/1803837844798189580" target="_blank">Alex Albert</a></p><p>Each new large language model (LLM) that comes out seems to be only incrementally better than the last. In fact, it's expected that OpenA/I's latest model, Orion, <a href="https://www.techradar.com/computing/artificial-intelligence/openais-next-gen-orion-model-is-hitting-a-serious-bottleneck-according-to-a-new-report-heres-why">i<span style="margin-left: -1px;">sn't even always better than GPT-4</span></a>.</p><p>Why? <span>We're simply running out of data to train on.</span></p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb44cd7092e934103bc71f616d2a66609?width=705" alt="LLM's are already trained on the data we have available" /><p>Source:&nbsp;<a href="https://arxiv.org/pdf/2211.04325">Will we run out of data? Limits of LLM scaling based on human-generated data</a></p><h2><b>The need for speed</b></h2><p>If we're hitting limits on how smart we can make AI models, what's the next move? Making them faster.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ffdb6754552124d3381ed997095f08a47?width=705" alt="logos of Microsoft, OpenAI, Google, Nvidia, AMD, and Amazon" /><p>AI players are investing in specialized hardware to speed up inference and lower costs. They're building their own data centers and even looking into nuclear power for more sustainable, cheaper energy.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F0192896a7a384fe7bb95f2f272c1183e?width=705" alt="Groq and Cerebras are accelerating GPU performance" /><p>Companies like Groq and Cerebras have seen up to 10x performance increases with LLM-optimized hardware. This isn't just theoretical - Amazon's <a href="https://www.aboutamazon.com/news/aws/amazon-nova-ai-canvas-reel-aws-reinvent">already released their new chips</a>, and <a href="https://www.cnbc.com/2024/12/03/apple-says-it-uses-amazons-custom-ai-chips-.html" target="_blank">Apple is planning to use them</a>.</p><p>Faster inference could open up new workflows that weren't feasible before due to long wait times and poor user experience.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5c72a96eb6bb4c5cb02003d44da92255%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=5c72a96eb6bb4c5cb02003d44da92255&alt=media&optimized=true" type="video/mp4">
    </video><h2><b>The Smartness vs Speed trade-off</b></h2><p>But here's the million-dollar question: does being faster matter if AI can't get any smarter? Or to put it another way:</p><p>If the way we train models today isn't getting better, if AI is plateauing on intelligence, can we use increased speed and decreased cost to find another path to smarter AI outputs?</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F8756313b0c0546ebbf7c581e7d997e8f?width=705" alt="does faster equal smarter?" /><p>The answer might surprise you.</p><p>Let's borrow a concept from Daniel Kahneman. He talks about two systems of thinking:</p><ol><li>System 1: Fast, automatic thinking. Like knowing 3 + 4 = 7 without having to calculate it.</li>
<li>System 2: Slower, more deliberate thinking. Like solving a complex math problem step by step.</li></ol><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff51e5b362afc4d52bcb7b35599ad7e89?width=548" alt="three plus four equals what?" />,<p>System 1 thinking is automatic.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc2024d1683d5477ab00526dfe0f62ff2?width=548" alt="thirty nine plus fourty eight equals what?" />,<p>System 2 thinking requires taking things step-by-step.</p><p><span style="color: inherit;">Using System 2 thinking is used to break down complicated problems into simpler steps. </span></p><p><span style="color: inherit;">For example, you likely don’t have the answer to 39 + 48 memorized the same way as you know the answer to 3 + 4. </span></p><p><span style="color: inherit;">Instead, you’d need to break the more complicated question down into steps like this:</span></p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fade3895d41404694b50b4dcaede4f0ed?width=705" alt="breaking down 39 + 48 into steps to solve it, equaling 87" /><p>Current LLMs work a lot like System 1 thinking. They give you an answer fast, but as complexity increases, accuracy can suffer.</p><p>O1, on the other hand, is more like System 2 thinking. It breaks down complex problems into smaller, manageable steps. This approach can help with one of LLMs' biggest weaknesses: hallucinations.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F7d4dc8c5f93348d4b45ff26a4c4224e9?width=705" alt="o1 breaking down a math problem into steps to correctly solve for 892 + 847, which equals 1739" /><p>For example, if you ask o1 how many Rs are in "strawberry", it might first guess incorrectly. But then it'll go through the word letter by letter, count the Rs, and give you the right answer.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F84dccd12ec8a4626b69037d94b20e78f?width=705" alt="o1 regurgitating the wrong number of &quot;r's&quot; in strawberry, then correctly counting them using step-by-step thinking" /><p>This step-by-step approach isn't entirely novel. Chain-of-thought techniques have been around for a while. </p><p>In fact, open-source models, like the QwQ model from Alibaba, are already beginning to use this approach with similar performance. What's new is training a model to use this approach specifically.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F3497797c65d147529e4fc7e765866b4e?width=705" alt="Alibaba's QwQ model has already caught up  in using chain-of-thought techniques, and is performing similarly to OpenAI and Claude." /><em>Source: <a href="https://www.alibabacloud.com/blog/alibaba-cloud-unveils-open-source-ai-reasoning-model-qwq-and-new-image-editing-tool_601813">Alibaba</a></em><p>As speeds increase and costs decrease, we might be able to afford this extra time to get better answers without hurting the user experience.</p><h2><b>The downsides of o1</b></h2><p>The problem is, o1 doesn't always give a better answer to every type of problem. But it is always more expensive and slower.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fac203f4658894158849449edaaad3a2b?width=705" alt="o1 is not the best model at solving coding problems" /><em>Source: <a href="https://aider.chat/docs/leaderboards/">Aider LLM Leaderhboards</a></em><p>Currently, o1 Preview costs four times more per token than Claude Sonnet. It also outputs 2-10 times more tokens because of all the "thinking" it does.</p><p>This means an o1 output could cost up to 40 times more than Sonnet - and it's not always better.</p><p>The slowness is a big issue too. You often don't see any results from o1 for 10, 20, 30 seconds or more. That's a much worse user experience.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc3ac4ad3f1e24006958a6f6810da24b4%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=c3ac4ad3f1e24006958a6f6810da24b4&alt=media&optimized=true" type="video/mp4">
    </video><p><em>Conversion above done with </em><a href="https://www.builder.io" rel="noopener noreferrer" target="_blank"><em>Builder.io</em></a><em> using claude-3-5-sonnet-20241022 and o1-preview-2024-09-12 (latest API-accessible model versions). I hand checked the results on ChatGPT with the latest o1 and didn't see any major differences in speed or accuracy.﻿</em></p><p>The product in the video above costs $20 per month now. If the o1 model costs up to 40 times more, it doesn’t seem worth it to pay $800 a month for an offering that is slower and only marginally better, if at all.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb3d8a26d6e4f4a7c96468292df368976?width=705" alt="something that is 40 times more expensive than a product that costs 20 dollars a month will cost 800 dollars a month" /><h2><b>The potential of AI agents</b></h2><p>So why is this still interesting? AI agents.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fcb194b68dc174cf498732467be5a7239?width=705" alt="a picture of Agent Smith from &quot;The Matrix&quot;" /><p>We want to use AI to complete a series of tasks without constant human supervision. </p><p>For that to work, AI needs to be better at breaking things down and completing tasks step by step. It also needs to have a lower failure rate and catch its own mistakes sooner.</p><p>Traditional LLMs are great at completing the next word in a sentence, but they weren't trained to break down and execute tasks. </p><p>For instance, Claude’s computer use today only has a 15% success rate at accomplishing real-world tasks. O1 is showing us what happens when we do train for that.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F1cc3b93a93c7466c8b5d0c670b8fc912?width=705" alt="Claude 3.5 Sonnet scored a 14.9% success rate in its ability to solve real world problems " /><p><em>Source: </em><a href="https://www.anthropic.com/news/3-5-models-and-computer-use" rel="noopener noreferrer" target="_blank"><em>Anthropic</em><span class="ql-cursor">﻿</span></a></p><h2><b>The big questions</b></h2><p>How much better can this get with novel training methods? Will this lead to new breakthroughs, or are we heading for an AI bubble burst?</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fee62c57081a844ee9d57d6e0b795b96d?width=705" alt="a graph of the rug pull from the Hawk Tuah cryptocurrency" /><p>The average person's life hasn't changed much despite all the AI hype. If AI models aren't getting that much better, and these new techniques don't lead to major breakthroughs, some of the hype might start to cool off.</p><p>And you know what? That might not be the worst thing.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F47c95221eb474785aca30e66b544ffdf?width=705" alt="Software hype cycle chart with &quot;AI is somewhere in here&quot; pointing toward the peak of inflated expectations" /><h2><b>Lessons from the dot-com bubble</b></h2><p>As the dot-com bubble peaked in 2000, people invested in the web as if its major challenges had already been solved. There was widespread excitement about the web's potential for explosive growth and profitability. </p><p>However, that excitement deflated when companies burned through hundreds of millions of venture capital and failed to become profitable. Only a few companies survived, and they now serve as models for how online businesses can succeed.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F380c132deb154834a1eea1f9bdf22abd?width=705" alt="four companies and their establishment years, being google in 1998, ebay in 1995, amazon in 1994, and paypal in 1998" /><p>Today, we're seeing a similar pattern with AI—growing excitement and venture capital flowing freely. The enthusiasm mirrors what we saw during the dot-com bubble's growth.</p><p>But there will be hard problems. Progress will come in S-curves. While AI could solve an immense number of problems, it might not happen today. Some AI applications might not be effective enough for mass adoption for another decade. </p><p>Remember Webvan and Pets.com? They were viable internet businesses - just 10 years too early.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F59566fdfef084f3fbb8d5582b20a045c?width=705" alt="webvan became instacart in 2012, and pets.com became chewy in 2011" /><p>Before you hit me with the "but this time it's different, man" – don't forget that that's what people say every time.</p><h2><b>What's working now</b></h2><p>While the future is uncertain, some AI use cases are already working well:</p><ol><li>AI chat assistants for brainstorming, researching, writing, and editing</li>
<li>AI-assisted coding, whether through specialized IDEs, Copilot, full application builders, or tools that convert designs into high-quality code</li></ol><p>These categories are seeing major adoption with generally happy users.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F127ab975cc6145a7925f62ab0e64362e?width=705" alt="a list of AI products and their primary uses" /><h2><b>The bottom line</b></h2><p>Maybe AI agents will change everything as soon as next year. Or maybe it'll take longer. We just don't know yet.</p><p>What we do know is that some AI applications are already proving their worth. Those are the ones I'm watching closely, and I'm excited to see what comes next.</p><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;"><iframe src="https://www.youtube.com/embed/tFRfxvg0yPM?rel=0" style="top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;" allowfullscreen scrolling="no" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share;"></iframe></div><h3><strong>If you enjoyed this post, you might also like:</strong></h3><ul><li><a href="https://www.builder.io/blog/cursor-advanced-features" rel="noopener noreferrer" target="_blank"><strong>5 Advanced Features for Cursor </strong></a></li><li><a href="https://www.builder.io/blog/devin-vs-cursor" rel="noopener noreferrer" target="_blank"><strong>Devin vs. Cursor</strong></a></li><li><a href="https://www.builder.io/blog/cursor-vs-github-copilot" rel="noopener noreferrer" target="_blank"><strong>Cursor vs. GitHub Copilot</strong></a></li><li><a href="https://www.builder.io/blog/ai-pair-programming" rel="noopener noreferrer" target="_blank"><strong>AI Pair Programming in 2025</strong></a></li><li><a href="https://www.builder.io/blog/windsurf-vs-cursor" rel="noopener noreferrer" target="_blank"><strong>Windsurf vs. Cursor</strong></a></li></ul>
    <h5><i>Read the <a href="https://www.builder.io/blog/is-o1-worth-it">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd4ba41deb6da48788bd4189192404c7c" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd4ba41deb6da48788bd4189192404c7c"/>
        </item>
        <item>
            <title><![CDATA[Solved: Why ChatGPT Won't Say 'Brian Hood' (Blame Regexes)]]></title>
            <link>https://www.builder.io/blog/chatgpt-mystery</link>
            <guid>https://www.builder.io/blog/chatgpt-mystery</guid>
            <pubDate>Mon, 09 Dec 2024 19:00:00 GMT</pubDate>
            <description><![CDATA[ChatGPT can't say certain names, like "Brian Hood". Solve the mystery behind this error and learn how strict regexes can improve your code.]]></description>
            <content:encoded><![CDATA[<p>We've figured out why ChatGPT refuses to say certain people's names, no matter what. And it's for the best engineering reason ever: regexes.</p><p>Yep, you heard that right. ChatGPT's internal code has regexes looking for specific names and throwing an error anytime it sees them coming out of ChatGPT directly.</p><h2>The oldest security measure in the book</h2><p>What's the oldest and best security measure? Regexes, of course. But why are they even doing this?</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fa5261a564ad54649ac58206bbe51b62e?width=705" alt="An arrow points to code that uses a regex of Brian Hood's name. The arrow is labeled &quot;maximum security&quot;" /><p>It turns out these are people who tried to sue OpenAI. So how can you get in any more trouble with ChatGPT making up lies about people? Simple: just never allow ChatGPT to mention that person's name. Ever. No matter what.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F727341f507a542bf9290a23dc6987f0e?width=705" alt="A news article titled &quot;ChatGPT: Mayor starts legal bid over false bribery claim&quot; with an image of Brian Hood." /><h2>But isn't that terrible engineering?</h2><p>Sure, you might say, "Wow, what terrible engineering. How disgusting." But really? What are they going to do instead?</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fae965a58ea8d482794c63982ef352975?width=705" alt="A meme of &quot;Hackerman&quot;" /><p>Are they going to retrain a new model for millions of dollars just to not mention these few random people's names? And do that every time they're worried about lawsuits?</p><p>Or if someone's mounting a suit against you, are you going to let yourself continue to be liable to the same thing over and over?</p><h2>Sometimes simple is best</h2><p>It's easy to make fun of this approach, but it's such a simple, easy-to-leverage solution that they did in a pinch. Because it was a good idea.</p><p>Fun fact: the actual <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a> codebase for our Figma to code product does literally the same thing. Yes, we have advanced machine learning, malicious content detection, yada yada.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fe4f9af697ef54205a66ccf1fc41b42c4?width=705" alt="Builder.io code that checks for malicious matchers using regex" /><p>But sometimes when we see a very clear pattern that we need to just stop immediately, we just add it to an array of regexes and disable any content that matches. It's fast. It's cheap. It's effective.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb5de8f66b65e4830b77d831b96ece0c8?width=705" alt="A list of names that ChatGPT can't respond with, including Brian Hood" /><p>Y'all, you don't have to over-engineer every single problem.</p><h2>How strict are these regexes?</h2><p>The regexes are pretty strict. If you had a dot in the name, if you had the person's middle initial or middle name in there, it's fine. It'll output it. But just first name, space, last name? No chance.</p><p>And the same goes for other names like this.</p><h2>The power of regex</h2><p>While AI hallucination is no new thing, and it's probably the number one problem that LLMs have had forever and probably will have for some time, at least we know when you can't fix it with the world's most advanced AI, you can always fix it with a regex.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F915b36d3e7e84e6995d30d281d6969ae?width=705" alt="A regex with Brian Hood's name with sparkles" /><p>Don't let anyone tell you in your pull requests that a regex is no good or a bad practice. The biggest, best, most innovative companies do it. And you should do it too.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/chatgpt-mystery">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fa8422553c769459d835323880da3b8b4" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fa8422553c769459d835323880da3b8b4"/>
        </item>
        <item>
            <title><![CDATA[Figma Components: Supercharge Your Design System]]></title>
            <link>https://www.builder.io/blog/understanding-figma-components</link>
            <guid>https://www.builder.io/blog/understanding-figma-components</guid>
            <pubDate>Mon, 09 Dec 2024 04:30:00 GMT</pubDate>
            <description><![CDATA[Figma components can streamline your design process, maintain consistency, & save time. Learn tips for creating, organizing, & managing components effectively.]]></description>
            <content:encoded><![CDATA[<p>Updating the same UI components across hundreds of screens is a pain. But there's a better way - <a href="https://www.figma.com/">Figma</a> components make updating design elements as easy as changing one master copy.</p><p>Let's dig into how components work and how to use them effectively.</p><h2><b>What are components anyway?</b></h2><p>Components are reusable design elements - think buttons, cards, navigation bars - that you can use across your designs. They work like this:</p><ul><li>Make a master component (the original)</li>
<li>Create instances (copies) wherever you need them</li>
<li>Update the master to change all instances at once</li></ul><p>Pretty neat, right?</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F82761724770a4d48b4006e8858201327?width=705" alt="Comparison of updating individual elements vs. updating a component once in a design system." /><h2><b>What can you actually customize?</b></h2><p>Not everything in a component instance can be changed. Here's what you're working with:</p><p><b>Can't change:</b></p><ul><li>Order and position of layers</li>
<li>Constraints on the layers</li>
<li>Core structure</li></ul><p><b>Can change:</b></p><ul><li>Colors</li>
<li>Text content</li>
<li>Text properties</li>
<li>Effects</li></ul><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F10c265c9e2e148d5a513fdc57b3396ed?width=705" alt="Diagram showing the relationship between a component and its instances, including properties that can / cannot be changed in the instances" /><h2><b>Variants: Figma components that do more</b></h2>
<p>Sometimes you need different versions of the same component. That's where variants come in.</p><p>Take a button component — you might need:</p><ul><li>Color (Property) — Primary, Secondary (values)</li>
<li>State (Property) — Focused state, Hover state (values)</li></ul><p>Instead of creating separate components, variants let you handle all these states in one place.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F3aa8dcc5c95c47f0a92899ddced44e85?width=705" alt="Visualization of different variants for a component, including primary and secondary styles as well as different states like enabled, hovered, and pressed." /><h2><b>Creating your first component</b></h2><p>It's super straightforward:</p>
<ol>
  <li>Select your design element.</li>
  <li>Press <code>Option+Command+K</code> or right-click > Create component or click […] on the Properties panel on the right > Create component.</li>
  <li>You can click <b>Create Multiple components</b> to create components in bulk by selecting many design elements.</li>
</ol>
<p>For variants:</p>
<ol>
  <li>Use the Properties panel on the right > <b>Add property</b>.</li>
  <li>Right-click > <b>Main component</b> > <b>Add Variant</b>.</li>
  <li>Or select multiple elements > <b>Create Component Set</b>.</li>
</ol>
<img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F835227c3804849f1a0ef77cec4917c74?width=705" alt="Illustration of how to create component variants by adding properties and modifying the component's appearance." /><h2><b>How to use Figma components in your designs</b></h2>
<ol>
  <li>Drag the component from the <strong>Assets</strong> panel on the left sidebar.</li>
  <li>Or copy the component (master) and paste it (instance) into your frame.</li>
  <li>Swap between instances from the <strong>Properties</strong> panel on the right.</li>
</ol>
<img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F53d10870a54e41f8bfa9fafb133fdbf0?width=705" alt="Screenshot showing how to use component variants in the user interface by selecting different options from a dropdown." /><h2><b>When should you use Figma components?</b></h2>
<p>Components are perfect for:</p><ul><li>Stuff you use over and over</li>
<li>Elements that might change later</li>
<li>Building <a href="https://www.builder.io/m/explainers/design-systems">design systems</a></li></ul><h2><b>Pro tips that'll save you time</b></h2><h3><b>Naming components and properties</b></h3><p>Keep it simple but clear. You don't need a novel — just enough to know what it is.</p><p>Your component names should make sense at a glance in the format Component/Value of the property</p><p>✅ Do this:</p><ul><li><b><code>Card/Blog</code></b></li>
<li><b><code>Button/Primary</code></b></li>
<li><b><code>Input/Search</code></b></li></ul><p>❌ Not this:</p><ul><li><b><code>ButtonV2Final</code></b></li>
<li><b><code>NewCardUpdated</code></b></li>
<li><b><code>ComponentSet47</code></b></li></ul><h3><b>Component organization</b></h3><p>Think about how your team will use these components. Group related stuff together:</p><ul><li>Keep navigation components in one section</li>
<li>Forms and inputs in another</li>
<li>Common UI elements together</li></ul><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fa37cb29ac4ad4aad933ae48697e5207e?width=705" alt="An illustration showing the component organization of a user interface, including buttons, inputs, switches, chips, a select input, pagination, avatar, and tooltip." /><h3><b>Using multi-dimensional component set</b></h3><p>When you're building a design system that needs to scale, multi-dimensional component sets in Figma are a game-changer. They're not just a neat Figma trick — this approach mirrors how popular component libraries like <a href="https://www.figma.com/community/file/912837788133317724/material-ui-for-figma-and-mui-x">Material-UI</a> (MUI) handle variations.</p><p>Here's the idea: instead of creating a ton of individual components, you use properties to define different dimensions of variation. Let's break it down with a button example:</p><ul><li>Property 1: Style (Primary/Secondary)</li>
<li>Property 2: State (Default/Hover/Disabled)</li>
<li>Property 3: Size (Small/Medium/Large)</li></ul><p>This is much cleaner than having 18 separate components floating around.</p><p>✅ Do this: <b><code>Button/Outlined/Primary/hover</code></b> <br>❌ Not this: <b><code>Button/PrimaryOutlinedonHover</code></b></p><h2><b>Managing changes in Figma components (without breaking everything)</b></h2>
<p>Here's the thing about components — changes can affect a lot of designs at once. That's powerful, but it can also be scary.</p><p>Some tips to avoid disasters:</p><ol><li>Let your team know before pushing big changes.</li>
<li>Test changes on a few instances first.</li>
<li>Consider adding new variants instead of creating a new component/ set.</li>
<li>Only detach instances when you absolutely have to.</li></ol><h3><b>Dealing with deleted components</b></h3><p>If you accidentally delete a master component, don't panic. As long as you have one instance left, you can restore the whole thing.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2d44c4fd12c04c759e9c87db1725e700?width=705" alt="An illustration showing the &quot;Restore component&quot; functionality, using an instance and restoring the master component" /><h3><b>When to break the rules with Figma components</b></h3>
<p>Sometimes you need to detach an instance from its master. That's fine, but try these first:</p><ul><li>Add a new variant.</li>
<li>Use component properties.</li>
<li>Override specific attributes.</li></ul><p>Only detach if none of those work. Why? Because detached instances don't get updates from the master component anymore.</p><h2><b>The real power of components</b></h2><p>Components aren't just about keeping things organized. They:</p><ul><li>Save tons of time on updates</li>
<li>Keep your design system consistent</li>
<li>Make it easier to experiment with changes</li>
<li>Help new team members understand your design system</li>
<li>Make handoff to developers smoother</li></ul><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd9d1e87452e54ef78b99f292275855ca?width=705" alt="An illustration examining whether UI components are worth the hype, highlighting benefits like saving time, consistency, ease of use, and smooth handoff." /><h2><b>Convert Figma components to code</b></h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F8b6b7b339f9a454194fac4ac562d3e57%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=8b6b7b339f9a454194fac4ac562d3e57&alt=media&optimized=true" type="video/mp4">
    </video><br><p>If you're using Builder’s&nbsp;<a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more">Visual Copilot</a>&nbsp;Figma plugin, you can leverage the component mapping feature to create a direct link between the design components in your Figma file and their corresponding code components ensuring a consistent output in your projects. Going from Figma to code should not just be about translating designs into code; it should be about translating them into&nbsp;<i>your</i>&nbsp;code.</p><h2><b>The bottom line</b></h2><p>Figma Components might seem like extra work at first, but they're worth it. Start using them in your next project — even if it's just for buttons and cards. Once you see how much time they save, you'll never go back.</p><p>Remember: the biggest mistake with Figma components isn't using them wrong — it's not using them enough.</p><p>Want to learn more about turning your Figma designs into code? Check out our guide on <a href="https://www.builder.io/blog/figma-to-code-ai">Figma to code conversion</a>.</p><h2><b>More Figma to code resources</b></h2><ul>
  <li>
    <a href="https://www.builder.io/blog/ai-figma"><b>Generate Figma Designs with AI</b></a>
  </li>
  <li>
    <a href="https://www.builder.io/blog/figma-auto-layout"><b>Design Smarter with Figma Auto Layout</b></a>
  </li>
  <li><a href="https://www.builder.io/blog/visual-copilot-2"><b>Figma designs to interactive features using nat</a><a href="https://www.builder.io/blog/ai-dropdown">ural language</a></b></li>
  <li>
    <a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more"><b>Builder.io Figma plugin</b></a>
  </li>
</ul>

    <h5><i>Read the <a href="https://www.builder.io/blog/understanding-figma-components">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F141c8690a3ee4d4b8f14f0be7fdbd876" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F141c8690a3ee4d4b8f14f0be7fdbd876"/>
        </item>
        <item>
            <title><![CDATA[Why AI Is Making Dev Skills More Valuable, Not Less]]></title>
            <link>https://www.builder.io/blog/ai-dev-skill</link>
            <guid>https://www.builder.io/blog/ai-dev-skill</guid>
            <pubDate>Tue, 03 Dec 2024 08:00:00 GMT</pubDate>
            <description><![CDATA[AI isn't replacing devs, it's making them more valuable. Let's look at how the job of devs is evolving and how it impacts teams]]></description>
            <content:encoded><![CDATA[<p>This chart is the reason that AI is not making developers obsolete anytime soon. In fact, it shows how development skills are more valuable than ever.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc8407ea276e7418a8be29398fa8b433b?width=705" alt="Graph of the pit of death" /><p>This isn't a phenomenon of just one product; it affects every product that gives non-developers some degree of ability to code.</p><p>The way <a href="https://www.builder.io/blog/ai-lie">AI model progress has been plateauing</a> lately suggests this may not change any time soon, if ever.</p><h2><span>The pit of death</span></h2><p>Anyone who's not a developer but has used tools like Bolt, Cursor, or v0 to build basic applications from prompts knows all too well the pit of death that you eventually always fall into.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F55d7040abb3b4a03a97d681728f4ab46?width=705" alt="bolt, cursor, builder.io logos" /><p>Things start fast and awesome: the basic scaffold of your page or site, or even some of the basic functionality, comes in seconds. But then you start prompting more and more, and you struggle to get what you want out of it.</p><p>As the application gets more complex, the behaviors you're looking for don't come out quite as easily.</p><p>Eventually, some prompt you use breaks everything. Nothing works, and no matter what you try, the AI cannot get out of this corner.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2b1be08142c34bd7896961dc3260ba3c%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=2b1be08142c34bd7896961dc3260ba3c&alt=media&optimized=true" type="video/mp4">
    </video><p>That's the pit of death. I've seen it happen over and over: some esoteric bug is just too challenging for the LLM to solve on its own, and then that's it. Your app is done, if you're lucky enough to not land at a pit of death.</p><h2><span>The plateau of death</span></h2><p>You'll probably hit a plateau of death instead, where after a certain number of prompts, you just don't seem to be able to make progress anymore.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F73e65b367fa3421d9de148d64efbcc69?width=705" alt="graph of the plateau of detah" /><p>There's truly only one fix for these situations: you've got to roll up your sleeves, get in the code, and fix whatever the AI couldn't.</p><p>Whether that means solving some very esoteric bug or implementing features so that the AI can continue off of your implementation, there's always a point where the human is needed.</p><h2><span>The limits of AI in development</span></h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F191c7eb6b87b48a9838a298e8ac92fe9?width=705" alt="Graph showing a developer helping recover from the bit of detah" /><p>Even if the models got 10x better, I don't think you'll actually offset the development need by that much.</p><p>The reality is LLMs are good at code generation, but that's only one part of many in software development. In my experience, when an engineer comes in to unblock the AI, the next pit of death is just right around the corner.</p><p>As the application gets more complex, you need developer intervention more and more, in shorter and shorter intervals.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F43bc777097c24efc9672eaa34bc7d1ea?width=705" alt="Graph showing the repeated fixes being needed over time" /><p>Eventually, what ends up happening is you go from products that don't require any development to ultimately exporting that code and needing developers to fully take it over. The developers then use different tools that are similar but more focused on code editing.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fee7a03b51c2b409da0ccac2c28ccdee3?width=705" alt="Image showing a conversion from tools like bolt to tools like Cursor" /><h2><span>The value of no-coding-skills-needed AI coding tools</span></h2><p>That's not to say that the tools that didn't require development in the beginning aren't useful. They can be incredibly useful for things like prototyping, making simple internal tools, and micro applications like a pricing calculator.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd68a359e9c094569a037f1d8ba3cb1fa?width=705" alt="list showing prototypes, simple internal tools, micro apps" /><h2><span>Making your life better with AI tools</span></h2><p>The big question is how you use these things to make your lives better.</p><p>As an engineer, designer, product manager, marketer, or whatever your role is, I think there are a few heavily overlooked use cases that you could adopt in your workflows now to make your life a lot better by using these tools and leaning into where they're going.</p><h2><span>The pain points we can improve</span></h2><p>As an engineer myself, the two things that drive me the most insane are poorly written specifications (where we didn't fully understand the problem and what's really needed to solve it) and ever-changing requirements.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F05d86e85c87d4211bd9484901627a1e3?width=705" alt="list showing garbage specs, changing requirements" /><p>It turns out our original guesses were wrong, customers and feedback told us different things, and now halfway through building the thing, we're changing how we're doing it, and everything's becoming a mess.</p><h2><span>The value of hands-on testing</span></h2><p>In my experience, you have to get hands-on with an application to really know how it needs to be used. Even better, get it in real users' hands, even if it's not fully functional.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fad173153345d4e249c3b4a307b19cc88?width=705" alt="meme of why ux research is important" /><p>Just having users go through the actual flows and testing the things that looked good in wireframes and designs, but maybe actually don't feel right in practice, can really help improve your product UX.</p><p>But if you have to build the whole thing before you learn that, it's wildly inefficient and can lead to very messy codebases.</p><h2><span>Rapid prototyping with AI</span></h2><p>Alternatively, with these rapid prototyping AI tools, we can iterate before we actually commit to building the full thing.</p><p>We can try out the flows, even if all functionality isn't there.</p><p>If we're lucky, we can even get direct user feedback in small ways and learn as much as possible early before we commit to a finalized spec and building the real full application.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff1e65f10a3cb434fa90363c951c529cb?width=705" alt="a loop of idea and testing" /><h2><span>Less handwritten CSS</span></h2><p>There are other implications coming soon too. While I don't think programming is going away at all, I think it will change. I think every year we're going to see a major reduction in actually handwritten CSS code.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc0a5f90d68c34712af6bb4ede416a71a?width=705" alt="list of css coding, red lining" /><p>The same way you don't handwrite a PDF, you export it from a tool. Design and design-to-code tools are becoming so good that they can generate CSS for you, shockingly close to how you would have written it yourself.</p><p>In doing that, we can stay exactly true to the original design spec and avoid a lot of red lining and back and forth to make sure it looks correct.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F6233ab72b55e4799b36cb6a8e53c15c6?width=705" alt="&quot;the app in figma&quot; vs &quot;the app in prod&quot; meme" /><h2><span>A more collaborative future</span></h2><p>Looking to the future, the big question is: How do we get more tedious development off of our plates? So that developers don't need to update colors, add a simple section, modify text, or tweak some logic.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff34bdb8ec4a64086874a8e4012c44369?width=705" alt="" /><p>If marketing or product or design need small changes, how can we give them tooling like they'd have for a fresh new app with something like Bolt, but compatible with a real application with real users and real developers that work on it daily?</p><h2><span>AI in team workflows</span></h2><p>Luckily, I work on a team that builds one of these products, so I can show you what's coming soon, specifically around how AI can better fold into full team workflows and automate a lot more than just an initial prototype creation.</p><h3><span>Code sync</span></h3><p>The first interesting feature is something called code sync. This is where you can not just convert a design to code with AI, but you can then modify the code, and when the design updates again, there's a link back to the code.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F32accdd553c94c4b955a575c1ed03911?width=705" alt="graph showing code going from Figma to Builder.io to VS Code and back" /><p>So the code gets granularly updated with just the design change, without developers having to do that by hand at all.</p><p>Let's say AI converted the design to code, and you added all kinds of logic and modifications. Now the design has new colors, new buttons, modified text, and tweaked styles.</p><p>With code sync, you can just push the changes right back to your codebase with the most granular update possible and review and merge it. This is currently in private beta, and we're hoping to roll it out soon.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb82ac7f62db8431fab88b7ff5c8d8d6c%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=b82ac7f62db8431fab88b7ff5c8d8d6c&alt=media&optimized=true" type="video/mp4">
    </video><h3><span>AI-integrated CMS</span></h3><p>Another interesting and under-leveraged approach that already exists today is using a deeply AI-integrated CMS. In the case of <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a>, you can section off parts of your site or app and decide what regions can be controlled by the CMS.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F672f55650b354b77bcdaa98d5510ac0d?width=705" alt="Diagram showing a Builder.io editable region in a site" /><p>These regions can be assigned to specific teams, like the homepage body goes to the marketing team, hero section goes to a merchandising team, etc.</p><p>Then you can use generative AI, just like you would with Bolt, Cursor, v0, or whatever, but the updates go directly to the site or app published over an API.</p><p>Think of it as Bolt embedded in your site or app, with whatever rules and restrictions you want around it.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F00fd4255171c4e0991db13d66a11601f%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=00fd4255171c4e0991db13d66a11601f&alt=media&optimized=true" type="video/mp4">
    </video><p>This unlocks not just crazy generative AI use cases within your live sites and apps, but opens up other really interesting use cases.</p><h3><span>AI agents in CMS</span></h3><p>One use case we're exploring is integrating agents into this AI CMS structure. Imagine having a Slack bot where you might have a conversation about what you'd like to change in your homepage or ideas on things you could do differently.</p><p>You just tag the <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a> agent in Slack, and it reads the conversation, applies the suggestions as a five or 10% test, and then comes back a week later to let you know how the test performed.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F59978ee99c8541a290c1f534f3809c05?width=705" alt="" /><p>In this world, for the self-contained regions that are probably more marketing-focused and things you don't really need or want to have in code anyway, the agent could just make those updates end-to-end autonomously, do the tedious work, and just let you know what the results are each time.</p><h3><span>Auto-optimization with AI</span></h3><p>We can even take that one step further and let the AI auto-optimize things. In a CMS like <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a>, where all content is also tied to analytics, when you produce content through the CMS, the AI agent can automatically start creating A/B test variations.</p><p>It leverages context that it already knows about your business, finds what variant converts best, and scales that up to a hundred percent of traffic completely autonomously.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb4322e6363bc42639de6535391f3ef77?width=705" alt="" /><p>It can also take your audiences, create personalized versions of content for each audience, and play with the knobs to make sure every piece of content is as highly converting as possible, in a 100% automatic way.</p><h3><span>Real-time personalization</span></h3><p>If you take that one step further, you can see we're not that far away from a world where we can do one-to-one personalization where the AI is <a href="https://www.builder.io/blog/ai-generated-website">generating parts of the user journey in real-time as they're browsing</a>.</p><p>As you browse the site or app, or I do, we can see completely different flows, optimized for exactly us, generated by LLMs in real-time.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fbb79eb313ab44dc6b821a6d87e5dff7c?width=705" alt="" /><p>This one's probably the furthest because we have to worry about <a href="https://www.builder.io/blog/ai-generated-website#:~:text=Why%20you%20might%20not%20want">cost and latency</a>. But as more LLM-optimized hardware comes out, and we're seeing up to five times gains in speed and efficiency of inference, this might not actually be that far away.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2b77afa8de274740b5966a159c574bab?width=705" alt="" /><h2><span>Conclusion</span></h2><p>While I don't think everyone will be a developer overnight because of AI, I do think the more development skills you have, the more you can use AI to generate code, unblock yourself, and do incredible things.</p><p>I think the biggest unlock that's coming is better connecting the AI tools with your existing teams and workflows. This will enable us to build and iterate on real applications faster than traditional methods, maximizing the skills of everyone.</p><p>We'll all build better products faster together, focus on our unique skills and creativity, and spend less time on redundant menial work.</p><p>Oh and if you found any of what we are working on around using AI to accelerate design to code and/or publishing to your live site, <a href="https://www.builder.io/m/demo" rel="noopener noreferrer" target="_blank">talk to us</a> to get a demo from our team.</p><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;"><iframe src="https://www.youtube.com/embed/FXjf9OQGAlY?rel=0" style="top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;" allowfullscreen scrolling="no" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share;"></iframe></div>
    <h5><i>Read the <a href="https://www.builder.io/blog/ai-dev-skill">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F03247b4c7a9f4a11b20ff8869b2e93b1" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F03247b4c7a9f4a11b20ff8869b2e93b1"/>
        </item>
        <item>
            <title><![CDATA[The Big Lie AI Vendors Keep Telling You]]></title>
            <link>https://www.builder.io/blog/ai-lie</link>
            <guid>https://www.builder.io/blog/ai-lie</guid>
            <pubDate>Wed, 27 Nov 2024 08:00:00 GMT</pubDate>
            <description><![CDATA[AI vendors promise AGI, but reality suggests otherwise. The truth behind AI progress, specialized hardware, and the future of AI products.]]></description>
            <content:encoded><![CDATA[<p>OpenAI and other big AI vendors keep pumping one huge lie, even though all the data suggests they're definitely wrong. Sam Altman loves to preach that Artificial General Intelligence (AGI) is right around the corner.</p><p>"We're about to give you AGI," he claims, even despite key leadership roles leaving the company. In my opinion, if you really were right around the corner from AGI, I wouldn't be leaving.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F34fb260e201a485ca5e6d9d4c63ff23b?width=705" alt="OpenAI's recent key leadership team with Xs over the faces of those no longer there" /><p>At the same time, their latest model just looks like GPT-4 with a chain of thought prompt, which is already a common technique, and just a really long output window (not to mention how <i>incredibly</i> slow it is).</p><h2>The truth about AI model progress</h2><p>It seems like OpenAI is noticing the truth here, which is that new models are plateauing in terms of how effective they are compared to older ones.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F6a1a92a374ad4185a7d80b69a46d40d1?width=705" alt="Graph of models showing them plateauing" /><p>So instead of shipping a GPT-5 that's probably only marginally better and probably larger and more costly, they're trying to make GPT-4 work better for different use cases.</p><p>At the same time, Anthropic consistently produces better models. But even those are only incrementally better each time they launch one. This is a big gap from the GPT-2 to 3 to 3.5 days, where we saw huge leaps each time. We're just not seeing that anymore.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff5f89d890e0b454b9520fd459d5a1a41?width=705" alt="Screenshot of Business Insider article highlighting the text &quot;OpenAI cofounder Ilya Sutskever told Reuters that results from scaling up AI models like this have plateaued.&quot;" /><p><i>Source: <a href="https://www.businessinsider.com/agi-predictions-looking-stretched-openai-sam-altman-google-ai-2024-11">Business Insider</a></i></p><h2>Three interesting implications for the AI ecosystem</h2><p>This leads to three really interesting implications of where the AI ecosystem is going, and one really big unknown that I also think people are really, really lying about.</p><h3>1. Vendors are specializing</h3><p>OpenAI's Sam Altman used to tout "good luck" if you try and compete with their models, but they simply don't have the best models anymore, and haven't for a while. It seems they're acknowledging this and keep focusing time on specializing in consumer products built around the models.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd0984e5f87bf44c9966cdb4a327cbcf6?width=705" alt="Graph showing the revenue share of chatbot subscriptions vs API for OpenAI and Anthropic" /><p>They make three-quarters of their revenue from ChatGPT, which they're investing in better native apps, better experience, better search — all the consumer experience around the model. They're conceding that they just don't build the best models themselves anymore.</p><p>In fact, if you're a vendor using OpenAI's APIs, in almost all cases you probably should use Anthropic, which is reflected in their revenue — 85% of their revenue comes from the API.</p><p>They invest far less in their consumer products, even though the model is better. The user experience of the products just isn't as good. They are clearly not investing there. They're putting everything into just being a few percent better of a model.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F3d25a245e63c49448a0489dae7a1fcd8?width=705" alt="Model benchmarks of Claude vs GPT-4o" /><p><i>Source: <a href="https://www.anthropic.com/news/claude-3-5-sonnet">Anthropic</a></i></p><h3>2. Specialized hardware is coming</h3><p>More and more vendors are building specialized hardware for LLMs which can drastically increase the speed of inference.</p><p>New chip companies like Groq and Cerebras are able to do LLM inference three to five times faster than typical GPUs.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc95694acbfcf42049ed12bceba07d893?width=705" alt="Performance of different hardware " /><p><em>Source: </em><a href="https://cerebras.ai/press-release/cerebras-inference-llama-405b" rel="noopener noreferrer" target="_blank"><em>Cerebras</em></a><em>&nbsp;(evaluation of Llama 3.1 - 8B)</em></p><p>The interesting key here is they're not just five times faster. The can also evaluate three to five times cheaper because they're simply much more efficient.</p><p>So when we can make AI products that are equally as smart but massively faster and cheaper, that could unlock a lot of new use cases that were previously just prohibitively slow and expensive.</p><h3>3. Better utilization of LLMs is coming</h3><p>The third implication is that vendors are going to get a lot better at figuring out how to use LLMs, even if they don't get that much smarter.</p><p>Below is an example of a launch title for the Xbox 360 - Perfect Dark Zero, which came out when the 360 was brand new and the graphics are…fine. Like, it's representative of that era of the console.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2efc453a50f94ae3a77479c60e43fc0b%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=2efc453a50f94ae3a77479c60e43fc0b&alt=media&optimized=true" type="video/mp4">
    </video><p>But what's fascinating is when you remember launch titles versus late in a console series titles. On the same exact foundation, there was no change to the console or hardware itself, but years later we see games like this.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F0ff37fcfe86f4a17b6283395e4c63e64%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=0ff37fcfe86f4a17b6283395e4c63e64&alt=media&optimized=true" type="video/mp4">
    </video><p>This is Halo 4, and this looks like a whole different generation of console. Yet, this is on the same hardware as the prior game.</p><p>What happened over those years? Developers got way better at optimizing how they use this technology. Game engines found more and more clever approaches to get the most out of what they had.</p><p>This is what I think will happen with LLMs. Those who make products on top of LLMs will get better and better at getting more of the smart parts out of them and avoiding the suboptimal, problematic parts.</p><p>I don't think we're anywhere close to AGI, but I do think we'll see major leaps in product quality, just by using the LLM technology better and better.</p><h2>The reality of AI agents</h2><p>What about agents? What about Devin, the AI software engineer that made all these crazy claims, raised a ton of VC money, and just kind of disappeared off the radar? Or Anthropic's Claude with computer use that will navigate your computer and use it like you?</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5e35eae84bd2401282d354ec4ccf6c50?width=705" alt="Screenshot of Devin launch" /><p>Realistically, I think the models are just not smart enough yet for this to make sense. Even in Anthropic's own announcement post, they cited that Claude with computer use only has a 14.9% success rate. I don't see any world where we give AI agents the ability to act on our behalf without them having something more like a 99— if not 100% — success rate.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc0545833d9af41fda1bc4a1616af2818?width=705" alt="Screenshot of Anthropic's Claude computer use with &quot;Claude 3.5 Sonnet scored 14.9%&quot; highlighted" /><p>
  <i>Source: <a href="https://www.anthropic.com/news/3-5-models-and-computer-use">Anthropic</a></i>
</p>
<p><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;">In all of my experience and testing, the models are not smart enough to be able to accomplish autonomous tasks. They need a human in the loop. Otherwise, they derail quickly and those small errors compound very rapidly.</span></p><h2>The future of AI products</h2><p>But that's not to say that some form of agents won't exist in the short term. I think mini or micro agents do show a lot of practical value. For example, the open-source <a href="https://www.builder.io/blog/micro-agent">Micro Agent</a> project that can generate tests, take a set of tests, and write and iterate on code until the tests pass.</p><p>Or in the case of <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a> and our product that uses AI to turn <a href="https://www.builder.io/m/design-to-code" rel="noopener noreferrer" target="_blank">Figma designs into code</a>, we've actually found that rather than using one big traditional LLM, we can use a series of smaller agents that communicate with each other to have a way higher quality output when you convert that Figma design into code.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff2d7d2ae17de4c018de053e30d3cf959%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=f2d7d2ae17de4c018de053e30d3cf959&alt=media&optimized=true" type="video/mp4">
    </video><p>By using a <a href="https://www.builder.io/blog/build-ai-tools">series of smaller agents</a>, in combination with <a href="https://www.builder.io/blog/train-ai">self-trained models</a>, we found that you can both increase reliability, speed, and accuracy, compared to just plugging in something off the shelf.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F3b8745b191da4f5a8a5b5423eeb20627?width=705" alt="Diagram with a traditional approach &quot;single LLM&quot; and a &quot;Gen agents&quot; approach with multiple connected" /><p>These are the types of techniques that I think will bring us to the next generation of our era. Even if the LLMs don't get smarter and we don't have personal coding assistants doing all our work tomorrow, we sure as heck will keep getting better and better products that are more reliable.</p><p>We’ll automate tedious work — like converting designs to code, using generative AI to produce designs and functionality, adding functionality to your designs, making them real-world applications — or develop other kinds of interesting use cases around content generation, code generation, co-pilots, and other interesting products Builder.io keeps producing.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F6a47248a80004d5abdff8f24883c862b%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=6a47248a80004d5abdff8f24883c862b&alt=media&optimized=true" type="video/mp4">
    </video>Source: <a href="https://www.builder.io/blog/visual-copilot-2">Visual Copilot 2.0</a><p>Just be sure to pay a keen attention to which ones people are actually using, versus what are gathering hype but actually don't work. Both will keep happening. I'm certain of that. I don't think we're anywhere near being past the hype curve of BS products intermixed with real effective products.So while I think there'll be a lot of noise in the market, I think we have a lot to look forward to as well.</p><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;"><iframe src="https://www.youtube.com/embed/Wl44OMJBXWw?rel=0" style="top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;" allowfullscreen scrolling="no" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share;"></iframe></div>
    <h5><i>Read the <a href="https://www.builder.io/blog/ai-lie">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2064d262ca0d43a38d16cdc86dcf1e10" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2064d262ca0d43a38d16cdc86dcf1e10"/>
        </item>
        <item>
            <title><![CDATA[Generate Figma Designs with AI]]></title>
            <link>https://www.builder.io/blog/ai-figma</link>
            <guid>https://www.builder.io/blog/ai-figma</guid>
            <pubDate>Mon, 25 Nov 2024 17:00:00 GMT</pubDate>
            <description><![CDATA[You can now generate fully editable designs inside of Figma with AI via prompts. Design to code. Builder.io and Figma plugin. ]]></description>
            <content:encoded><![CDATA[<p>"<i><b>Design me a landing page for a fintech app.</b></i>”</p><p>A few years ago, this would have kicked off hours of creative exploration in Figma. Today, it's a prompt that can generate complete UI designs in seconds.</p><p>This is a big deal for designers, but it got me thinking — what happens after you've got that slick AI-generated mockup?</p><h2>Figma AI</h2><p>Figma AI is a suite of artificial intelligence features integrated into <a href="https://www.figma.com/">Figma</a> and <a href="https://www.figma.com/figjam/">FigJam</a>. The idea? Make design workflow easier for UI and UX designers by helping out with both creative and  routine design tasks.</p><h3>Figma AI plugins</h3><p>Before Figma built their own AI features, designers were already experimenting with AI through figma plugins. Now that it's built right in, let's check out what Figma AI can actually do.</p><h3>What can Figma AI do?</h3><p>As a designer, you spend a lot of time in your design process — organizing design elements, finding the right design assets, and putting it all together. Figma's new AI toolkit is still in beta, but here's what it can do:</p><ul><li><b>First draft</b>: Type in a description and get a full design to work with. It's great for rapid iteration and exploring ideas.</li>
<li><b>Smart duplication</b>: Duplicate elements with AI-generated content variations. Perfect for creating lists and grids quickly.</li>
<li><b>Text improvements</b>: Generate relevant text that fits your product's tone instead of using Lorem Ipsum. Rewrite and translate text directly in your designs.</li>
<li><b>Visual search</b>: Upload an image to find matches or similar designs in your team's work. Makes finding assets a lot easier.</li>
<li><b>Smart layer renaming</b>: It can rename and organize layers automatically. Your teammates might appreciate this one.</li>
<li><b>Background removal</b>: Take out image backgrounds with a single click. No need for manual selection.</li>
<li><b>Instant prototyping</b>: Turn static designs into interactive prototypes automatically. Saves time on manual connections.</li></ul><h3>How to use Figma AI</h3><p>The AI features are easily accessible through the action button at the bottom of your Figma interface or by pressing <code>⌘ + k</code> / <code>Ctrl + k</code>. Here's how to use each key feature:</p>
<p>
  <b>First draft<br /></b>
</p>
<video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2fac6302d1114c3286f99727cce8f051%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=2fac6302d1114c3286f99727cce8f051&alt=media&optimized=true" type="video/mp4">
    </video><p>Select <b>First Draft</b> from the templates (Basic App, App Wireframe, Basic Site, or Site Wireframe). Enter your prompt, like "e-commerce store for iPhone accessories with a search bar." Once generated, use quick actions to switch themes, adjust spacing, modify border radius, or make additional prompt-based changes.</p><p><b>Smart duplication</b></p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F0dcb70b8a1174a23a6e6587cf54d5022%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=0dcb70b8a1174a23a6e6587cf54d5022&alt=media&optimized=true" type="video/mp4">
    </video><p></p><p>Create an auto-layout list or grid, then simply drag the handle at the bottom. The AI will automatically generate new content variations while maintaining design consistency.</p><p><b>Text improvements</b></p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F306907397ee2421caa3abdaae92c50bf%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=306907397ee2421caa3abdaae92c50bf&alt=media&optimized=true" type="video/mp4">
    </video><p>Select any text element to access a range of AI-powered enhancements, including translation to different languages, tone adjustment (professional to casual), and length modification.</p><p><b>Visual search</b></p><p>Type what you're looking for or upload an image through the action menu. AI will find matching elements visually, regardless of naming, and help navigate to the found components.</p><p><b>Smart layer renaming</b></p><p>Select the layers you want to rename, choose "Rename Layers" from the action menu, and AI will automatically rename them based on their content and context.</p><p><b>Background removal</b></p><p>Select any image and choose "Remove Background" from the action menu. Within 30 seconds, you'll get a crisp, clean cut-out with impressive detail preservation.</p><p><b>Instant prototyping</b></p><p>Select up to 10 screens and choose "Make Prototype" for AI to automatically create basic navigation connections. You can then review and refine these connections as needed.</p><h3>Current limitations of Figma AI</h3><p>While Figma's new AI powered features are impressive, there are two important considerations:</p><ol><li><b>Limited availability:</b> The beta is currently restricted to a small subset of users, making it challenging for teams to fully integrate these features into their workflows.</li>
<li><b>The design-to-code gap:</b> Figma AI is great for cranking out designs, but there's still a big gap between a great looking mockup and responsive code. This is where things usually slow down - designers hand off their work, and developers have to figure out how to turn it into a real website or app.</li></ol><p>This is exactly why we built <a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more">Visual Copilot</a> at Builder.io — to bridge this gap between design and implementation. Instead of just generating static mockups that need to be rebuilt in code, what if we could generate functional, production-ready components from the start?</p><h2>Improved design generation with Visual Copilot</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fbc943ddb632d445a847652a1906739a0?width=705" alt="image.png" /><p>Our approach is pretty straightforward: since designs need to become code anyway, why not do both at the same time?</p><p>When you bring your Figma designs into our Visual Development Platform, you can:</p><ul><li>Keep generating designs with AI, just like in Figma</li>
<li>Generate code in real-time as you make changes</li>
<li>Publish your work to production with one click when you're happy with it</li></ul><p>Whether you're working on simple layouts or complex interfaces, Visual Copilot maintains your team's focus and style — from brand colors to fonts. The boost in development speed means you can iterate faster and get to your final product sooner.</p><h3>Generate designs using your design system</h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F7a804dbb30e544319064625663039799%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=7a804dbb30e544319064625663039799&alt=media&optimized=true" type="video/mp4">
    </video><ul><li>Generate designs using natural language prompts, just like in Figma</li><li>Iterate on designs with AI-powered suggestions and variations</li><li>See both the visual preview and corresponding code in real-time</li></ul><p>This approach means you're not just creating static mockups — you're generating production-ready components that can go live immediately. No more lengthy handoff process between design and development teams.</p><h3>Complete context of your product</h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F192be60366f64cdc90c493cf5c016898%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=192be60366f64cdc90c493cf5c016898&alt=media&optimized=true" type="video/mp4">
    </video><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;">Visual Copilot isn't just another AI demo generator. Its power lies in its ability to actually understand your product:</span><br><p></p><ul><li>It knows your Figma components, design tokens and documentation</li>
<li>It knows your code components, coding standards, and development patterns</li>
<li>It can connect to your APIs and data models, and business logic</li></ul><p>This means describing complex features in just a few words gets you exactly what your team would build — using your design system, following your standards, connected to your services.</p><h3>Static designs to interactive code</h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F01ae47a3d9864e49b2021d3321b25b28%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=01ae47a3d9864e49b2021d3321b25b28&alt=media&optimized=true" type="video/mp4">
    </video><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;">In Builder.io, your designs come to life:</span><br><p></p><ul><li>Make stuff interactive</li>
<li>Use your actual data</li>
<li>Edit things live and see changes instantly</li>
<li>Deploy updates automatically through our headless CMS</li></ul><h3>Generate production-ready code</h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fe72f6863ceed40ba8ab6471d1d7950ba%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=e72f6863ceed40ba8ab6471d1d7950ba&alt=media&optimized=true" type="video/mp4">
    </video><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;">Visual Copilot turns your designs into code you can actually use, giving you dev ready websites that just work:</span><br><p></p><ul><li>Pick your favorite framework and styling setup</li>
<li>Skip the prototyping phase and go straight to live previews</li>
<li>It'll even make things responsive for mobile</li></ul><h2>Getting started with Visual Copilot</h2><p>Using Builder.io's Visual Copilot plugin is straightforward and immediately accessible:</p><ol><li>Open the&nbsp;<a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more">Visual Copilot</a>  Figma plugin.</li>
<li>Select a layer or design in your Figma file.</li>
<li>Click the&nbsp;<b>Export to Code</b>&nbsp;button.</li>
<li>Copy the generated code into your project.</li>
<li>Add animations, state, visual effects, and other required functionality with natural language prompts.</li></ol><p>Figma AI is a neat step forward, but we need more than just static designs to build modern websites. Visual Copilot bridges that gap, letting you create designs and functional code at the same time.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/ai-figma">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff35bf11876784805a8d76181878f692e" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff35bf11876784805a8d76181878f692e"/>
        </item>
        <item>
            <title><![CDATA[Builder.io Named a Cool Vendor in the 2024 Gartner® Cool Vendors™ in Software Engineering: User Experience]]></title>
            <link>https://www.builder.io/blog/builder-named-gartner-cool-vendor</link>
            <guid>https://www.builder.io/blog/builder-named-gartner-cool-vendor</guid>
            <pubDate>Thu, 21 Nov 2024 13:00:00 GMT</pubDate>
            <description><![CDATA[Learn why we believe we were named a Gartner Cool Vendor for our design-to-code automation solution that's transforming how enterprises ship experiences.]]></description>
            <content:encoded><![CDATA[<p>We’re proud to share that we’ve been named in the 2024 Gartner Cool Vendors in Software Engineering: User Experience report. Gartner clients can read the report <a href="https://www.gartner.com/document-reader/document/5791915" rel="noopener noreferrer" target="_blank">here</a>.</p><h2><strong>What’s a Gartner Cool Vendor?</strong></h2><p>According to Gartner, “Gartner’s Cool Vendors research offers a window into nascent and emerging technologies which are in the early part of the development cycle before they reach mainstream adoption. It can be extremely beneficial to an enterprise to uncover differentiating opportunities for competitive advantage.”</p><p><h2><b>Why we think Builder.io is named a Cool Vendor</b></h2></p><p>AI has the potential to completely transform how we work for the better, but with so much AI hype to sift through, it’s important to prioritize the solutions that can make a substantial difference.</p><p>We believe we have been identified as a Cool Vendor because our design-to-code automation has the ability to completely transform how quickly enterprises ship digital experiences without sacrificing the quality, consistency, accessibility, and reusability they need to operate at scale.<br></p><h2><strong>Three ways Builder’s design-to-code automation solution is transforming enterprises</strong></h2><h3><br></h3><h3><strong>1. Radically decreasing time to market for web apps, features, and sites</strong></h3><p>In some cases, it can take longer for an enterprise to turn a design into a production experience than it does to build a skyscraper (real story). Development at a snail's pace isn’t just bad for business and job security; it’s demoralizing for everyone involved.&nbsp;</p><p>It doesn’t have to be this way. Enterprises have the capability to build factories that build skyscrapers, and the fastest-moving enterprises have noticed that our design-to-code solution is a key piece of machinery in the factory. Design-to-code automation can assist in cutting design-to-live times by 50% – 80%, shipping twice as many digital experiences while keeping scope on the interesting projects and generating momentum across the organization to <em>finally</em> digitally transform.</p><h3><br></h3><h3><strong>2. Increasing visual consistency and accessibility across every digital property</strong></h3><p>As organizations grow, so do the number of sites, microsites, external apps, internal apps, and dashboards. As different teams and a revolving door of developers spin these up and update them –the UI and UX of each starts to sway farther and farther away from each other. This workflow ends up being like a game of telephone, where pieces of the original concept are abandoned along the way, and the outcome isn’t quite what you expected or desired.&nbsp;</p><p>To solve this, centralized development teams might spin up monorepos and Storybooks; design system teams might create entire design systems in Figma and spend the remainder of their lives redlining the coded versions of these designs. But, despite all the efforts, as one property gets updated, the others lag, and everything ends up looking and feeling out of sync. It doesn’t just look bad – it’s a poor user experience and a waste of time if developers are recreating components and designers are manually checking for pixel grid widths on landing pages 30 levels deep when they already reviewed a similar component last week.&nbsp;</p><p>Our design-to-code solution maps your Figma components to your code components, ensuring it always pulls the right component even if the developer didn’t know it existed. Development teams can also save custom prompts at the team level to ensure every code generation adheres to best practices, including things like accessibility, consistent code refactoring methods, and tests.</p><h3><br></h3><h3><strong>3. Enabling high-fidelity prototyping for non-technical users</strong></h3><p>Everyone knows you need to build, test, and iterate – but in practice, especially in large organizations, the “build” phase can take so long that you rarely get to test and iterate as much as you probably should. By giving non-technical stakeholders the ability to turn Figma designs into real, clickable prototypes without having to know code, significantly accelerates time to live and lets you practice the product development practices you always wanted to implement.</p><h2><strong>How Builder’s design-to-code solution solves enterprise-level needs</strong></h2><h3><br></h3><h3><strong>1. Generates clean, maintainable code</strong></h3><p>Unlike other design-to-code solutions that produce throwaway code, ours acts like an experienced developer assistant. It outputs clean, semantic, accessible code that imports and reuses existing components instead of making up new ones. Just like a professional developer, it refactors code, generates tests, and sticks to your organization's coding standards and best practices.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F31fd7c6e76064f4c9e6c90b0708b2291?width=705" alt="" /><h3><strong>2. Provides a collaborative playing field for developers and designers</strong></h3><p>It’s often quicker for developers to code than it is to drag and drop, and it’s certainly faster for designers to drag and drop than it is to code. Our market-leading visual editor completely integrates with your code so developers can easily make updates in whatever modern framework they use. designers can make changes visually without worrying about whether a developer will actually be able to use the underlying code it’s generating. Both can use AI to speed up their specific workflows: designers can visually iterate with natural language, while developers can use natural language prompts to iterate the underlying code.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F3a29b289bb994d098a1482c7685724d3?width=705" alt="" /><h3><strong>3. Is enterprise-compliant</strong></h3><p>Though Cool Vendors are typically newer to the scene, we’ve been around the block –working with large enterprises like Anheuser-Busch, Schneider Electric, and J.Crew. Our design-to-code solution doesn’t train on your data, our platform is SOC 2 Type II compliant, and we let you bring your own LLM.</p><h2><strong>Learn more about our design-to-code solution</strong></h2><p>Curious to see if we really can shave 50-80% of the time it takes to turn a design into a production-ready experience? Have your developers <a href="/signup" rel="noopener noreferrer">try it out</a>, or <a href="https://www.builder.io/m/demo" rel="noopener noreferrer" target="_blank">contact us</a> to set up a demo where we’ll show you the best practices for using our solution.</p><div><span style="color: rgb(25, 25, 25);">Gartner, Cool Vendors in Software Engineering: User Experience, <a href="https://www.gartner.com/analyst/b9c800ba73a2" target="_blank">Will Grant</a>, <a href="https://www.gartner.com/analyst/bfcc08b87e" target="_blank">Jim Scheibmeir</a>, <a href="https://www.gartner.com/analyst/b1c903bf73">Brent Stewart</a>, 30 September 2024</span></div><div><span style="color: rgb(25, 25, 25);"><br></span></div><div><span style="color: rgb(25, 25, 25);">Gartner Insights, Harness Disruptive Technology to Drive Business Goals, https://www.gartner.com/en/information-technology/insights/cool-vendors</span></div><div><span style="color: rgb(25, 25, 25);">GARTNER is a registered trademark and service mark of Gartner, Inc. and/or its affiliates in the U.S. and internationally, and COOL VENDORS is a registered trademark of Gartner, Inc. and/or its affiliates and are used herein with permission. All rights reserved. Gartner does not endorse any vendor, product or service depicted in its research publications, and does not advise technology users to select only those vendors with the highest ratings or other designation. Gartner research publications consist of the opinions of Gartner’s research organization and should not be construed as statements of fact. Gartner disclaims all warranties, expressed or implied, with respect to this research, including any warranties of merchantability or fitness for a particular purpose.</span><br></div>
    <h5><i>Read the <a href="https://www.builder.io/blog/builder-named-gartner-cool-vendor">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5f03e3f565b14c7b8d97c72b28f3f328" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5f03e3f565b14c7b8d97c72b28f3f328"/>
        </item>
        <item>
            <title><![CDATA[How to Build Reliable AI Tools]]></title>
            <link>https://www.builder.io/blog/build-ai-tools</link>
            <guid>https://www.builder.io/blog/build-ai-tools</guid>
            <pubDate>Fri, 15 Nov 2024 17:00:00 GMT</pubDate>
            <description><![CDATA[Building AI tools: Ensure seamless integration, reliability, and outstanding performance with Visual Copilot 2.0]]></description>
            <content:encoded><![CDATA[<p>For decades, developers have lived by a simple mantra: "Make it work, make it work right, make it work fast." This ordered priority has guided software development through multiple technological waves. As we enter the age of AI, these principles remain crucial but we need to evolve our thinking.</p><p>At Builder.io, we've developed our own mantra for building production-grade AI tools:</p><ol><li>Make it completely integrated.</li>
<li>Make it reliable and predictable.</li>
<li>Make it highly performant.</li></ol><p>At Builder.io, we've just launched <a href="https://www.builder.io/blog/visual-copilot-2">Visual Copilot 2.0</a>, our next-generation AI-powered development environment that <a href="https://www.builder.io/blog/figma-to-code-ai">transforms Figma designs into production-ready code</a>.</p><p>In this post, I'll share the engineering decisions and architectural approaches we took to build a production-grade AI system that delivers on these principles.</p><h2>The context challenge in AI systems</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F9073ff467b554815862fcc1f002c4046?width=705" alt="AI needs context about you-- your codebase, your design system, your APIs, and your document-- in order to create production ready code" /><p>Just as a JIRA ticket alone isn't enough context for a developer to implement a feature properly, a simple prompt isn't enough for an AI to generate production-quality code. The reality is much more complex, requiring:</p><ul><li>Business context</li>
<li>Design system specifications</li>
<li>Component libraries</li>
<li>Codebase knowledge</li>
<li>API integrations</li>
<li>Code style guidelines</li></ul><h2>Principle 1: complete integration</h2><p>The first principle in our AI tooling mantra is complete integration. Here's how we've implemented it:</p><h3>Deterministic foundation</h3><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fbc5a008347ed410793f5699ee22e7580?width=705" alt="Deterministic Foundation" /><p>We've built several core systems that ensure seamless integration with existing tools and workflows:</p><ul><li><b>Component mapping</b>: A declarative syntax for mapping Figma components to React, Vue, or Angular components with 100% reliability</li>
<li><b>DevTools CLI</b>: Leverages TypeScript's compiler to extract and understand project patterns</li>
<li><b>Mitosis</b>: Our open-source compiler that transforms React-like components into multiple framework outputs</li>
<li><b>Decision trees</b>: Break down complex Figma designs into manageable chunks for LLM processing</li>
<li><b>Advanced RAG</b>: Retrieval-augmented generation system that helps understand how companies want their code structured and formatted, collecting data about coding patterns and preferences to ensure consistent output</li></ul><h2>Principle 2: reliability and predictability</h2><p>The second principle focuses on creating AI systems that developers can trust. We've achieved this through our <i>Gen Agents</i> architecture:</p><h3>Gen Agents: Small, focused models</h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fcac9bb904a1149669e7854483fc08a4a%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=cac9bb904a1149669e7854483fc08a4a&alt=media&optimized=true" type="video/mp4">
    </video><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;">Rather than relying on a single large model to solve everything, we've developed Gen Agents – smaller, specialized models that:</span><br><p></p><ul><li>Focus on specific tasks (animations, interactivity, data wiring)</li>
<li>Operate with narrow context and specific goals</li>
<li>Run in rapid feedback loops</li>
<li>Can work in parallel</li>
<li>Validate and iterate quickly</li></ul><p>This approach significantly reduces hallucinations and increases reliability by breaking complex tasks into manageable, verifiable pieces.</p><h2>Principle 3: high performance</h2><p>Our third principle ensures that our AI tools maintain their utility at scale. Traditional AI implementations often suffer from:</p><ul><li>Large context windows</li>
<li>Slow processing times</li>
<li>Linear scaling with document size</li>
<li>Increased hallucination risk with larger contexts</li></ul><p>We've addressed these challenges through:</p><h3><b>Fast input processing</b></h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F8d692cceb5974a12afd4715539a9cccb%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=8d692cceb5974a12afd4715539a9cccb&alt=media&optimized=true" type="video/mp4">
    </video><p><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;">Instead of passing all context through an LLM, we've implemented a system of downstream and upstream models that can process input efficiently. These models intelligently filter and process only the essential parts that need LLM attention, dramatically reducing the processing overhead. We only delegate the key parts to the LLM, making the entire pipeline much more efficient.</span></p><h3>Partial evaluation with out-of-order streaming</h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fedc2e007505748a4b6f3ee7c93258ccf%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=edc2e007505748a4b6f3ee7c93258ccf&alt=media&optimized=true" type="video/mp4">
    </video><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;">We've implemented a sophisticated system that combines out-of-order streaming with partial evaluation. This means we can process different parts asynchronously and update disjoint parts of the code tree without regenerating everything in between.</span><br><p></p><p>When you make changes like renaming elements, our system can intelligently patch updates across the entire codebase without re-emitting unchanged code, styles, or other elements - making iterations significantly faster since most updates only require changing a small portion of the code.</p><h3><b>Stable performance</b></h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F73fb3aaf320d4c3eb94cc20c13857f16%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=73fb3aaf320d4c3eb94cc20c13857f16&alt=media&optimized=true" type="video/mp4">
    </video><br><p>The real impact of our performance optimizations becomes clear when you look at scaling. In traditional systems, as your document grows in complexity or size, the time to render and iterate grows linearly. Not only does this slow down development, but it also increases the chances of hallucinations due to larger context windows.</p><p>Our architecture maintains consistent performance regardless of project size. In our benchmarks:</p><ul><li>Initial generation takes around 8 seconds</li>
<li>Updates complete in approximately 3 seconds</li>
<li>These times remain stable whether you're working with a simple card component or an entire landing page</li></ul><p>This stability is crucial for maintaining developer flow and ensuring our tools remain practical for real-world use, where projects often grow large and complex over time.</p><h2>Visual Copilot 2.0: design to interactive</h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F23d46211ee6044788bedb44f2ab21556%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=23d46211ee6044788bedb44f2ab21556&alt=media&optimized=true" type="video/mp4">
    </video><br><p>Our latest release, Visual Copilot 2.0, brings all these capabilities together in a powerful visual development environment. It allows teams to:</p><ul><li>Convert Figma designs to production-ready code</li>
<li>Make real-time updates with AI assistance</li>
<li>Connect to real data and APIs</li>
<li>Generate interactive components</li>
<li>Maintain consistent performance at scale</li></ul><p><a href="https://builder.io/signup">Signup</a> and try Visual Copilot 2.0 today!</p><h2>Conclusion</h2><p>Building production-ready AI tools isn't just about having the latest LLM or the flashiest demos. It's about creating reliable, predictable systems that developers can trust and use efficiently. By combining deterministic systems with specialized AI models, we've created a tool that's not just powerful, but practical for everyday use.</p><p>The future of development tools lies not in replacing human expertise, but in augmenting it with AI in thoughtful, reliable ways. We're excited to see how teams use Visual Copilot 2.0 to build better products faster while maintaining the quality and reliability their users expect.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/build-ai-tools">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F34cb5fd2ffa147f9a80ec16b31495a45" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F34cb5fd2ffa147f9a80ec16b31495a45"/>
        </item>
        <item>
            <title><![CDATA[Design Smarter with Figma Auto Layout]]></title>
            <link>https://www.builder.io/blog/figma-auto-layout</link>
            <guid>https://www.builder.io/blog/figma-auto-layout</guid>
            <pubDate>Wed, 13 Nov 2024 17:00:00 GMT</pubDate>
            <description><![CDATA[Discover how Figma's auto layout revolutionizes design. Learn to create responsive, maintainable layouts with ease. Boost efficiency now!]]></description>
            <content:encoded><![CDATA[<p><a href="https://www.figma.com/" rel="noopener noreferrer" target="_blank">Figma</a>'s auto layout is pretty neat. If you've used it, you know it's a game-changer.</p><p>If you haven't, you're in for a treat. It's one of those features that once you start using, you'll wonder how you ever designed without it.</p><p>Let's break down what auto layout is, why it's such a powerful feature, and how to use it effectively — especially when you're <a href="https://www.builder.io/blog/figma-to-code-ai" rel="noopener noreferrer" target="_blank">converting Figma designs to code</a> with <a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more" rel="noopener noreferrer" target="_blank">Visual Copilot</a>.</p><h2>What is auto layout in Figma?</h2><h3>Basic concepts</h3><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fe75fa9f38c2f434d93dcf665f7cf55c3?width=705" alt="UI design showing deconstructed vs assembled product card components for an e-commerce layout." /><p>If you're new to Figma, let's start with the basics: Figma is a design tool where you create interfaces using various elements like buttons, text, images, and shapes. These elements are what Figma calls "objects" — basically anything you can create or work with on your design canvas.</p><p>Now, imagine you're arranging these elements (like a button, some text, and an icon) to create a navigation menu. Traditionally, you'd need to manually position each element and readjust everything when you make changes. This is where auto layout comes in.</p><p>At its core, auto layout is Figma's way of automatically organizing elements within a special container (called an auto layout frame). Think of it like a smart container that follows rules you set for arranging its contents.</p><h3>How it works</h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Faa72a259d2574cb088cf29e4fcdd9364%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=aa72a259d2574cb088cf29e4fcdd9364&alt=media&optimized=true" type="video/mp4">
    </video><p><span style="color: inherit;">When you put elements inside this container, they automatically maintain their spacing and arrangement, even when you make changes.</span></p><p>You just select the elements you want to organize together, press <code>Shift+A</code>, and Figma transforms them into an auto layout frame, automatically determining the best way to space and align everything.</p><p>It's like giving your design elements a set of rules to follow so they behave predictably when you resize or rearrange them.</p><p>Auto layout also introduces a parent-child relationship between elements. The container (parent) determines how elements inside it (children) behave, while these elements can have their own auto layout properties. This hierarchical structure gives you more control and flexibility in your designs.</p><h2><b>Why auto layout is a game-changer</b></h2><p>Auto layout isn't just another fancy feature — it's a powerhouse that can seriously level up your design game. Here's why it's so cool:</p><h3>Responsive sizing</h3><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2547ff4063f24a63b680d808d18d7dbd?width=705" alt="UI comparison showing how Grouping (Shift+G) versus Auto layout (Shift+A) handles button resizing in design software." /><p>Auto layout gives you flexible options for how elements behave:</p><ul><li>Fill available space</li>
<li>Hug their contents</li>
<li>Maintain fixed dimensions</li>
<li>Set maximum and minimum sizes</li></ul><p>This resizing ability makes creating responsive designs a breeze, allowing your layouts to adapt to different screen sizes without breaking.</p><h3>Smart spacing and alignment</h3><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F94b061bb8bd847399c0430bbb4ab9aed?width=705" alt="Comparison of horizontal and vertical auto-layout options for displaying a sunglasses product gallery." /><p>Auto layout lets you arrange elements with powerful spacing controls:</p><ul><li>Horizontal or vertical arrangement with consistent spacing</li>
<li>Negative spacing for creative overlaps</li>
<li>'Auto' spacing to push elements apart</li>
<li>Precise alignment controls separate from text alignment</li></ul><p>Think of it like having an invisible grid that maintains perfect spacing, even when you make changes.</p><h3>Responsive grids with wrap</h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F234aae41cc234823a5cb6554ade9b07d%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=234aae41cc234823a5cb6554ade9b07d&alt=media&optimized=true" type="video/mp4">
    </video><p><span style="color: inherit;">The wrap feature is particularly useful when elements need to adapt to different screen sizes. When elements run out of space, they automatically flow to the next row or column — perfect for:</span></p><ul><li>Image galleries</li><li>Product grids</li><li>Tag clouds</li><li>Card layouts</li></ul><h3><b>Flexible Styling</b></h3><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd769bca5e3904fe2960d386f072a32db?width=705" alt="UI demonstration of styling controls to build a product card from raw data to final design." /><p>Auto layout frames work just like any other design element. You can:</p><ul><li>Add backgrounds, borders, and effects</li>
<li>Control opacity and other visual properties</li>
<li>Set padding (space inside the frame) with precise control</li>
<li>Create consistent, polished components</li></ul><p>Each of these features builds on the others, giving you a complete system for creating flexible, maintainable designs.</p><h2><b>How to add auto layout</b></h2><p>Here's how to get started:</p><ol><li>Select a group of objects.</li><li>Press <code>Shift+A</code> to apply auto layout.</li><li>Play with properties like alignment, constraints, and styles in the right panel.</li></ol><p>But here's a pro tip: don't just <code>Shift+A</code> everything and call it a day. Think of auto layout as a super-powered group. Start with the smallest components and work your way up. This approach helps you create more complex layouts with nested auto layout frames.</p><h2><b>A real-world example: Building an e-commerce card</b></h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd20a58396a2546649454cd6d7293dbac%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d20a58396a2546649454cd6d7293dbac&alt=media&optimized=true" type="video/mp4">
    </video><p>Let's say you're creating a product card for an e-commerce website. Here's how you might approach it using auto layout:</p><ol><li>Start with the button. Apply auto layout to your CTA text to create a button, then style it.</li><li>Add your product image and apply styling (like border radius).</li><li>Select the title and price text, then click <code>Shift+A</code> or click the <code>+</code> next to auto layout in the right panel. Figma will automatically create a horizontal layout since these elements are placed side by side. Figma is smart that way.</li><li>Want different spacing between the image and text? Select all text layers and create another auto layout frame (this creates a nested auto layout).</li><li>Combine all your auto layout frames by placing them in a vertical auto layout container.</li><li>Style your card by adding a background, adjusting padding, and applying any other visual properties.</li><li>Now you can copy-paste the card, update the content for different products, and they'll all maintain consistent spacing. Group these cards in another auto layout frame and you've got a responsive product listing!</li></ol><p>This example shows how auto layout works to create responsive, editable designs. As the contents change, the layout adapts automatically.</p><h2><b>Common auto layout pitfalls and how to avoid them:</b></h2><ol><li><strong>Over-nesting layouts</strong>: creating too many nested auto layout frames (frames within frames within frames), leading to performance issues and hard-to-maintain designs. Keep nesting to 2-3 levels max. Break complex components into smaller, reusable pieces. Think in sections rather than infinite nesting.</li><li><strong>Overusing auto layout</strong>: adding auto layout to every element, even when it's not the best solution. Regular frames work better for certain cases — like overlapping elements (stacked cards with depth), absolutely positioned elements (floating notifications or badges), and decorative elements (background patterns).</li><li><strong>Text handling issues</strong>: not accounting for how text will grow or shrink, especially in buttons or cards. Always test your components with different text lengths, implement text truncation when needed, and set proper constraints to handle varying content.</li><li><strong>Inconsistent sizing strategy</strong>: mixing fixed-width and flexible elements without proper planning can cause layouts to break at different screen sizes. Be intentional about choosing between <strong>Fill container</strong>, <strong>Hug contents</strong>, or fixed sizes. Create a consistent system and stick to it throughout your design.</li></ol><h2>Converting Figma designs to code with Visual Copilot</h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Faf2ac7c2044549719d91a7ad722cdbef%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=af2ac7c2044549719d91a7ad722cdbef&alt=media&optimized=true" type="video/mp4">
    </video><p><span style="color: inherit;">Now that you understand the power of auto layout, let's talk about something exciting: turning these well-structured designs into production-ready code automatically. This is where </span><a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more" rel="noopener noreferrer" target="_blank">Visual Copilot</a><span style="color: inherit;">, our AI-powered Figma plugin, comes into play.</span></p><p>When you use auto layout effectively, you're not just making your designs more maintainable — you're also creating a clear structural hierarchy that AI can understand and translate into code.</p><p>Visual Copilot excels at recognizing these auto layout patterns and converting them into appropriate code constructs:</p><ul><li>Vertical auto layout frames become flex containers with column direction</li><li>Horizontal layouts translate to row-based flex layouts</li><li>Spacing between elements is preserved with proper margins or gap properties</li><li>Responsive behaviors are maintained through appropriate CSS properties</li><li>Nested auto layouts become nested component structures in your framework of choice</li></ul><p>The best part? Visual Copilot handles this conversion with a single click, supporting multiple frameworks (React, Vue, Svelte, Angular, Qwik, Solid, React Native) and styling solutions (CSS, Tailwind, Emotion, Styled Components).</p><p>It's particularly effective when your designs use auto layout consistently, as this creates a clear component hierarchy that translates naturally to code.</p><h2>Conclusion</h2><p>Auto layout in Figma represents a fundamental shift in how we create designs. Whether you're working with simple buttons or complex layouts, this awesome feature helps you determine the perfect spacing and alignment for every object in your design.</p><p>When structured thoughtfully, your auto layout components become the perfect blueprint for Visual Copilot to transform your designs into clean, efficient code. No more lost details in translation, no more back-and-forth about implementation.</p><p>Like any tool, it takes some practice to master, but once you get the hang of it, you'll wonder how you ever designed without it. The ability to quickly create and edit responsive layouts will significantly speed up your design workflow.</p><p>So go ahead, give auto layout a spin in your next project. Start small, think about the structure of your design, and before you know it, you'll be creating complex, responsive layouts with ease.</p><p>Play with different properties, experiment with nested frames, and see how auto layout inside your designs can transform your UI design process.</p><h2><strong>More Figma to code resources</strong></h2><ul><li><a href="https://www.builder.io/blog/ai-dropdown" rel="noopener noreferrer" target="_blank"><strong>Dropdown in Figma to interactive code in 60 seconds</strong></a></li><li><a href="https://www.builder.io/blog/visual-copilot-2" rel="noopener noreferrer" target="_blank"><strong>Figma designs to interactive features using nat</strong></a><a href="https://www.builder.io/blog/ai-dropdown" rel="noopener noreferrer" target="_blank"><strong>ural language</strong></a></li><li><a href="https://www.builder.io/blog/best-figma-plugins" rel="noopener noreferrer" target="_blank"><strong>Best Figma plugins for Developers</strong></a></li><li><a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more" rel="noopener noreferrer" target="_blank"><strong>Builder.io Figma plugin</strong></a></li></ul>
    <h5><i>Read the <a href="https://www.builder.io/blog/figma-auto-layout">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F07a0bbda99934f45834126a1c17e88af" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F07a0bbda99934f45834126a1c17e88af"/>
        </item>
        <item>
            <title><![CDATA[A Guide to Server-Side Rendering]]></title>
            <link>https://www.builder.io/blog/server-side-rendering</link>
            <guid>https://www.builder.io/blog/server-side-rendering</guid>
            <pubDate>Tue, 12 Nov 2024 06:00:00 GMT</pubDate>
            <description><![CDATA[Server-side rendering generates HTML on the server. Learn how SSR improves performance and SEO for web apps and when to use it vs client-side rendering.]]></description>
            <content:encoded><![CDATA[<p>Server-side rendering (SSR) has been around for a while, but it's worth exploring further. This technique can make your web apps faster and more SEO-friendly.</p><p>In this guide, we'll explain SSR, why you might want to use it, and how to implement it without pulling your hair out. We'll cover the basics, compare it to client-side rendering, and discuss some practical examples.</p><h2>What is server-side rendering?</h2><p>Fundamentally, SSR is about rendering your web pages on the server instead of in the browser. When a user requests a page, the server does all the heavy lifting and sends a fully rendered page to the client. Then, the client-side JavaScript takes over to make it interactive.</p><p>The server is doing the prep work in the kitchen, and the browser just has to plate and serve.</p><p>Here's a minimal Express.js example:</p><pre><code>const express = require('express');
const React = require('react');
const ReactDOMServer = require('react-dom/server');
const App = require('./App');

const app = express();

app.get('/', (req, res) =&gt; {
  const html = ReactDOMServer.renderToString(&lt;App /&gt;);
  res.send(`
    &lt;!DOCTYPE html&gt;
    &lt;html&gt;
      &lt;body&gt;
        &lt;div id=&quot;root&quot;&gt;${html}&lt;/div&gt;
        &lt;script src=&quot;client.js&quot;&gt;&lt;/script&gt;
      &lt;/body&gt;
    &lt;/html&gt;
  `);
});

app.listen(3000, () =&gt; console.log('Server running on port 3000'));
</code></pre><h2>From server to browser with fully rendered pages</h2><p>When we talk about SSR delivering "fully rendered pages," it's important to understand what that actually means. Let's break it down:</p><h3>What is a fully rendered page?</h3><p>A fully rendered page is an HTML document containing all the content users would get when they first load the page. This includes:</p><ol><li>The complete DOM structure</li>
<li>All text content</li>
<li>Image placeholders and other media elements</li>
<li>Initial styles</li></ol><p>Here's a basic example:</p><pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;My SSR Page&lt;/title&gt;
    &lt;style&gt;
      /* Initial styles */
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;header&gt;
      &lt;h1&gt;Welcome to My Site&lt;/h1&gt;
      &lt;nav&gt;&lt;!-- Fully populated navigation --&gt;&lt;/nav&gt;
    &lt;/header&gt;
    &lt;main&gt;
      &lt;article&gt;
        &lt;h2&gt;Article Title&lt;/h2&gt;
        &lt;p&gt;This is the full content of the article...&lt;/p&gt;
      &lt;/article&gt;
    &lt;/main&gt;
    &lt;footer&gt;&lt;!-- Fully populated footer --&gt;&lt;/footer&gt;
    &lt;script src=&quot;hydration.js&quot;&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><h3>The difference between CSR</h3><p>In contrast, a client-side rendered (CSR) initial HTML might be like this:</p><pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;My CSR Page&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div id=&quot;root&quot;&gt;&lt;/div&gt;
    &lt;script src=&quot;bundle.js&quot;&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>The CSR page relies entirely on JavaScript to populate the content.</p><h3>Benefits of fully rendered HTML</h3><ol><li><b>Faster Initial Paint</b>: The browser can start rendering content immediately.</li>
<li><b>Better SEO</b>: Search engines read all your content without executing JavaScript.</li>
<li><b>Improved Accessibility</b>: Screen readers and other assistive technologies can access content immediately.</li>
<li><b>Resilience</b>: Basic content is available even if JavaScript fails to load.</li></ol><h3>The hydration process</h3><p>After sending the fully rendered HTML, SSR applications typically go through a process called <a href="https://www.builder.io/blog/hydration-is-pure-overhead">hydration</a>:</p><ol><li>The server sends the fully rendered HTML.</li>
<li>The browser displays this HTML immediately.</li>
<li>JavaScript loads and <i>hydrates</i> the page, adding interactivity.</li></ol><pre><code>// Simplified React hydration example
import { hydrateRoot } from 'react-dom/client';
import App from './App';

const domNode = document.getElementById('root');
hydrateRoot(domNode, &lt;App /&gt;);
</code></pre><p>This process allows for fast initial loads while still providing the rich interactivity of modern web apps.</p><p>Remember, while SSR provides these fully rendered pages, it's not without trade-offs. The server does more work, and you'll need to handle the state carefully between the server and the client. However, for many applications, the benefits of fully rendered pages make SSR a compelling choice.</p><h2>What's the difference between CSR and SSR?</h2><p>Client Side Rendering (CSR) and Server Side Rendering (SSR) are two different approaches to rendering web pages. Here's a breakdown of their main differences:</p><h3>Client-side rendering (CSR)</h3><ol><li>The server sends a minimal HTML file with a JavaScript bundle.</li>
<li>The browser downloads and runs the JavaScript.</li>
<li>JavaScript creates the page content and makes it interactive.</li></ol><p>Pros:</p><ul><li>Smooth interactions after the initial load</li>
<li>Fewer server resources are needed</li></ul><p>Cons:</p><ul><li>Slower initial page load</li>
<li>Potential SEO challenges</li></ul><h3>Server-side rendering (SSR)</h3><ol><li>The server creates the full HTML content.</li>
<li>The browser receives and displays the pre-rendered HTML quickly.</li>
<li>JavaScript then loads to make the page fully interactive.</li></ol><p>Pros:</p><ul><li>Faster initial page load</li>
<li>Better for SEO</li>
<li>Works well on slower devices</li></ul><p>Cons:</p><ul><li>It can be more complex to set up</li>
<li>May use more server resources</li></ul><p>Here's a simple visual comparison:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb400e6dfc9754565af97ab5d125fa26e?width=705" alt="Client-side rendering vs Server-side rendering" /><p>In essence, CSR works more in the browser, while SSR does more on the server. The choice between them depends on your project's specific needs, balancing factors like initial load time, SEO requirements, and server resources.</p><h2>SSR and search engines: a match made in HTTP</h2><p>Server-side rendering can have a big impact on how search engines see your site. Let's break it down:</p><ol><li>Faster Indexing</li></ol><p>Search engine bots are impatient. They want to see your content NOW. With SSR, your pages are ready to go when the bot comes knocking — no waiting around for JavaScript to load and render.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fe0bfbaf0ac66474e8ebab791b1167d9f?width=705" alt="Search engins for CSR and SSR" /><ol><li>Content consistency</li></ol><p>SSR ensures that search engines see the same content that users do. With client-side rendering, there's always a risk that the bot might miss some dynamically loaded content.</p><ol><li>Improved Load Times</li></ol><p>Search engines love fast sites. SSR can significantly cut down initial load times, which could give you a slight edge in rankings.</p><pre><code>// Pseudo-code for search engine ranking
function calculateRanking(site) {
  let score = site.relevance;
  if (site.loadTime &lt; FAST_THRESHOLD) {
    score += SPEED_BONUS;
  }
  return score;
}
</code></pre><ol><li>Mobile-First Indexing</li></ol><p>With Google's mobile-first indexing, SSR's performance benefits on slower mobile connections become even more important.</p><ol><li>Social Media Previews</li></ol><p>While not strictly a search engine feature, SSR makes it easier to generate accurate previews when your content is shared on social platforms. This can indirectly boost your SEO by increasing engagement and backlinks.</p><pre><code>&lt;!-- SSR makes it easier to include accurate meta tags --&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Your Dynamic Title Here&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;Your Dynamic Description Here&quot;&gt;
</code></pre><p>SSR is a powerful tool for SEO, but it's not the only factor. Content quality, relevance, and overall user experience are crucial in search engine rankings. SSR simply ensures that search engines can efficiently crawl and index your content, potentially giving you an edge in visibility and performance metrics.</p><h2>How to actually do SSR</h2><p>Implementing SSR doesn't have to be complicated. Let's cover at how to do it using Next.js, a popular React framework that makes SSR straightforward:</p><ol><li>Set up a Next.js project.</li>
<li>Create server-side rendered pages.</li>
<li>Let Next.js handle serving the fully rendered HTML and client-side hydration.</li></ol><p>Here's a simple Next.js example using the <a href="https://www.builder.io/blog/next-14-app-router">App Router</a>:</p><pre><code>// app/page.js
async function getData() {
  const res = await fetch('&lt;https://api.example.com/data&gt;')
  if (!res.ok) {
    throw new Error('Failed to fetch data')
  }
  return res.json()
}

export default async function Home() {
  const data = await getData()

  return &lt;h1&gt;Hello {data.name}&lt;/h1&gt;
}
</code></pre><p>In this example:</p><ul><li>The <code>Home</code> component is an async function, allowing for server-side <a href="https://www.builder.io/blog/safe-data-fetching">data fetching</a>.</li>
<li><code>getData()</code> fetches the data we need.</li>
<li>The component renders the data directly.</li></ul><p>Next.js automatically handles the SSR process:</p><ol><li>When a request comes in, Next.js runs this <a href="https://www.builder.io/blog/why-react-server-components">component on the server</a>.</li>
<li>It waits for the data to be fetched.</li>
<li>It renders the component with the fetched data.</li>
<li>The fully rendered HTML is sent to the client.</li>
<li>Once the JavaScript loads in the browser, the page becomes interactive.</li></ol><p>This approach gives you the benefits of SSR without having to manually set up a server or manage the rendering process yourself.</p><h2>Higher-level SSR solutions</h2><p>If you don't want to reinvent the wheel, there are several frameworks that handle SSR complexities for you. Here's a rundown of popular options across different ecosystems:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F8b8f71cef3954796a6f4d6f8f5b9baa6?width=705" alt="collage.png" /><h3><a href="https://react.dev/">React</a></h3><ul><li><a href="https://nextjs.org/">Next.js</a>: The most popular React framework with built-in SSR support.</li>
<li><a href="https://remix.run/">Remix</a>: A full stack web framework that leverages React Router.</li>
<li><a href="https://www.gatsbyjs.com/">Gatsby</a>: Primarily a static site generator, but also supports SSR.</li></ul><h3><a href="https://vuejs.org/">Vue</a></h3><ul><li><a href="https://nuxt.com/">Nuxt.js</a>: The go-to framework for Vue applications with SSR capabilities.</li></ul><h3><a href="https://angular.dev/">Angular</a></h3><ul><li>Angular Universal: The official SSR solution for Angular applications.</li></ul><h3><a href="https://svelte.dev/">Svelte</a></h3><ul><li><a href="https://svelte.dev/docs/kit/@sveltejs-kit">SvelteKit</a>: The official application framework for Svelte with SSR support.</li></ul><h3>JavaScript (Framework-agnostic)</h3><ul><li><a href="https://astro.build/">Astro</a>: Allows you to use multiple frameworks and supports SSR.</li>
<li><a href="https://qwik.dev/">Qwik</a>: A new framework designed for optimal performance with built-in SSR support.</li></ul><h3><a href="https://www.php.net/">PHP</a></h3><ul><li><a href="https://laravel.com/">Laravel</a>: Offers SSR capabilities through <a href="https://inertiajs.com/">Inertia.js</a> or its own <a href="https://livewire.laravel.com/docs/components">Livewire component</a>.</li></ul><h3>Ruby</h3><ul><li><a href="https://rubyonrails.org/">Ruby on Rails</a>: Supports SSR through tools like <a href="https://docs.stimulusreflex.com/">Stimulus Reflex</a> or <a href="https://www.hotrails.dev/">Hotwire</a>.</li></ul><h3><a href="https://www.python.org/">Python</a></h3><ul><li><a href="https://www.djangoproject.com/">Django</a>: Can implement SSR using libraries like <a href="https://www.django-unicorn.com/">Django-Unicorn</a> or <a href="https://www.builder.io/blog/htmx-vs-react">HTMX</a>.</li>
<li><a href="https://flask.palletsprojects.com/en/stable/#">Flask</a>: Can be configured for SSR, often used with extensions like Flask-SSE.</li></ul><p>Each of these frameworks offers its own approach to SSR, often with additional features like static site generation, API routes, and more. The choice depends on your preferred language, ecosystem, and specific project requirements.</p><h2>Deployment and caching</h2><p>When deploying an SSR app:</p><ol><li>Build both client-side and server-side bundles.</li>
<li>Run the SSR server as a background process.</li>
<li>Use a process monitor like PM2 or Supervisor to keep your server running.</li></ol><p>Here's a basic deployment flow:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F9a821f3a0a954bfcb6fa8a0150d78e16?width=705" alt="SSR flowchart.png" /><p>Don't forget about caching! Caching server-rendered pages can significantly reduce server load.</p><h2>SSR with Builder.io</h2><p>Builder.io provides support for server-side rendering (SSR) and static site generation (SSG) across all components and frameworks. This out-of-the-box functionality allows you to leverage the benefits of SSR and SSG without additional setup.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fe8a6f0e9110a4cdaad40ae064c217e49?width=705" alt="Builder.io SSR and SSG" /><h3>Key features</h3><ol><li><b>Framework Agnostic</b>: Builder.io works with various frameworks that support SSR and SSG.</li>
<li><b>Automatic Optimization</b>: Builder optimizes your content for performance, including code splitting and lazy loading of off-screen components.</li>
<li><b>Dynamic Rendering</b>: You can render different content based on user attributes or <a href="https://www.builder.io/c/docs/abtesting">A/B tests</a> while maintaining <a href="https://www.builder.io/m/explainers/seo-core-web-vitals">SEO benefits</a>.</li>
<li><b>Easy Integration</b>: Builder provides <a href="https://www.builder.io/c/docs/sdk-comparison">SDKs and documentation</a> to seamlessly integrate your existing projects.</li></ol><h3>Implementation example</h3><p>Here's a basic example of how you might fetch and render content server-side with <a href="https://www.builder.io/c/docs/custom-components-ssr-ssg">Builder and Next.js</a>:</p><pre><code>import { builder, BuilderComponent } from '@builder.io/react'

builder.init('YOUR_API_KEY')

export async function getStaticProps({ params }) {
  const page = await builder
    .get('page', {
      userAttributes: {
        urlPath: '/' + (params?.page?.join('/') || '')
      }
    })
    .toPromise()

  return {
    props: {
      page: page || null,
    },
    revalidate: 5
  }
}

export default function Page({ page }) {
  return (
    &lt;BuilderComponent
      model=&quot;page&quot;
      content={page}
    /&gt;
  )
}
</code></pre><h3>Best practices</h3><ol><li>Ensure you're using a framework that supports SSR or SSG.</li>
<li>Follow your framework's guidelines for fetching data server-side when integrating Builder Pages or Sections.</li>
<li>Refer to the <code>getAsyncProps</code> README for more information on handling server-side data.</li></ol><p>By leveraging Builder for SSR, you can combine the flexibility of a <a href="https://www.builder.io/headless-cms">headless CMS</a> with the performance benefits of server-side rendering, all while maintaining an easy-to-use <a href="https://www.builder.io/m/knowledge-center/visual-editing">visual editing</a> experience.</p><h2>Wrapping up</h2><p>Server-side rendering (SSR) is a powerful approach in web development that can significantly enhance your application's performance, SEO, and user experience. Throughout this article, we've explored what SSR is, how it differs from client-side rendering, its impact on search engines, and practical implementation strategies using popular frameworks like <a href="https://www.builder.io/m/nextjs-cms">Next.js</a>.</p><p>We've also discussed the concept of fully rendered pages and examined various SSR solutions across different ecosystems. While SSR offers many benefits, it's important to consider your project's specific needs when deciding whether to implement it.</p><h2>FAQ</h2><p><strong>Q: How does SSR affect my development workflow? </strong></p><p>A: SSR can make development more complex, as you need to consider both server and client environments. You might need to adjust your build process and be cautious with browser-specific APIs.</p><p><strong>Q: How does SSR impact my site's Time to Interactive (TTI)? </strong></p><p>A: While SSR can improve initial content visibility, it might slightly delay TTI as the browser needs to load and hydrate the JavaScript after receiving the initial HTML.</p><p><strong>Q: Are there any security considerations specific to SSR? </strong></p><p>A: Yes, with SSR, you need to be more careful about exposing sensitive data or APIs on the server side. Always sanitize user inputs and be cautious about what data you include in the initial render.</p><p><strong>Q: How does SSR work with authentication and personalized content? </strong></p><p>A: SSR can work with authentication, but it requires careful handling. You might need to implement techniques like JWT tokens or server-side sessions to manage authenticated SSR requests.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/server-side-rendering">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F6cf91b7e92c64af28a3a6251e5b10cf9" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F6cf91b7e92c64af28a3a6251e5b10cf9"/>
        </item>
        <item>
            <title><![CDATA[Turn a Figma Dropdown Design Into Working React Code in 1 Minute]]></title>
            <link>https://www.builder.io/blog/ai-dropdown</link>
            <guid>https://www.builder.io/blog/ai-dropdown</guid>
            <pubDate>Mon, 11 Nov 2024 08:00:00 GMT</pubDate>
            <description><![CDATA[Let's convert a Figma dropdown menu design into a functional, reusable React component in less than 60 seconds.   ]]></description>
            <content:encoded><![CDATA[<p>I just transformed a Figma design into working React code, complete with TypeScript and tests, in less than 1 minute.</p><p>The best part? The code is clean, customizable, and ready to integrate into your project.</p><p>Let me show you how to do it.</p><h2><b>The Process</b></h2><h3><strong>Step 1: Exporting Figma Dropdown Menu</strong></h3><p>First, grab your <a href="https://www.figma.com/design/c4lCG2eB4rPrRnBauHaWx9/Dropdown?node-id=1-149&amp;node-type=frame&amp;t=pQ3o6pYT936PSD7i-11">design</a> (if using mine, be sure to <b>duplicate it to your drafts</b> first, so you have full edit/plugins access).</p>
<p>Launch the&nbsp;<a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more">**Builder.io Figma plugin</a>** and hit the "Export to Code" button, and you'll be launched into <a href="https://www.builder.io/">Builder.io</a>.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F187df52ce5474eb580ee92ecd8a6b152%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=187df52ce5474eb580ee92ecd8a6b152&alt=media&optimized=true" type="video/mp4">
    </video><h3><b>Step 2: Adding Interactivity with AI</b></h3><p>Once in Builder, it's time to make your design interactive. Use this prompt:</p><pre><code>when I click the button, toggle the menu and rotate the chevron</code></pre><p>Hit enter and let the AI work its magic. It will add the interactivity for you while you sit back and relax.</p>
<p>Then, toggle quick preview (<code>cmd+\</code> or <code>ctrl+\</code>) to verify that everything works as expected. You should see the menu toggle and the chevron rotate when you click the button.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F185dc3cb02bb45fababab6cc1548e265%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=185dc3cb02bb45fababab6cc1548e265&alt=media&optimized=true" type="video/mp4">
    </video><blockquote><strong>Note:</strong> The <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder</a> Visual Editor AI chat released with <a href="https://www.builder.io/blog/visual-copilot-2" rel="noopener noreferrer" target="_blank">Visual Copilot 2.0</a> is currently in a rolling beta — meaning some users will have access now, and some will come soon. We add new users each week — so if you don’t have access just yet, <a href="https://www.builder.io/make-real-notify-me" rel="noopener noreferrer" target="_blank">request to be notified</a> when your accent gets access</blockquote><h3><b>Step 4: Generating Production Code</b></h3><p>When you're happy with the functionality, it's time to get the code:</p><ol><li>Hit the "Develop" button</li>
<li>Click "Generate Code"</li>
<li>Tweak any options as needed (frameworks, styling, languages, etc.)</li></ol><p>Builder supports many frameworks, like Vue, Svelte, Solid.js, as well as native outputs like SwiftUI, Flutter, and Jetpack Compose.<br><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;"></span></p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F6aa1b3cebd6f4ab3b19c78bc9ce61c60%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=6aa1b3cebd6f4ab3b19c78bc9ce61c60&alt=media&optimized=true" type="video/mp4">
    </video><p>You can type to chat with the code to modify it in any way you like. You can also add <a href="https://www.builder.io/c/docs/custom-instructions" rel="noopener noreferrer" target="_blank">custom instructions</a><span style="color: inherit;"> to customize even futher.</span></p><h3><b>Step 5: Syncing the Code to Your Project</b></h3><p>To get the code into your project:</p><ol><li>Click "Sync Code"</li>
<li>Copy the provided command</li>
<li>Run it at the root of your project</li><li>And there you have it - your new React component with TypeScript and tests, ready to be committed to your repository.</li></ol><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Feac878eb7d7542ccb161c7bc437c00f8%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=eac878eb7d7542ccb161c7bc437c00f8&alt=media&optimized=true" type="video/mp4">
    </video><p>And there you have it - your new React component with TypeScript and tests, ready to be committed to your repository.</p><h2><b>What's Next?</b></h2><p>Try this out with your own designs! Remember, AI is a powerful tool that can significantly speed up your development process, but it doesn't replace the need for engineering expertise.</p><p>Use trial and error to get a good feel for what this AI is good for. Use it to accelerate your workflow and focus on the more complex aspects of your projects.</p><h2><b>Resources</b></h2><ul>
  <li>
    <a href="https://www.figma.com/design/c4lCG2eB4rPrRnBauHaWx9/Dropdown?node-id=1-149&node-type=frame&t=pQ3o6pYT936PSD7i-11"><b>Figma file used in this tutorial</b></a>
  </li>
  <li>
    <a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more"><b>Builder.io Figma plugin</b></a>
  </li>
  <li>
    <a href="https://www.builder.io/make-real-notify-me"><b>Get notified when you get full Visual Copilot 2.0 access</b></a>
  </li>
</ul>
<p>Give it a try - I can't wait to see what you build!</p>

    <h5><i>Read the <a href="https://www.builder.io/blog/ai-dropdown">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F840c57e20c164c38ba5d03dbe2b2fa7e" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F840c57e20c164c38ba5d03dbe2b2fa7e"/>
        </item>
        <item>
            <title><![CDATA[Turn a Figma Design Into a Working Dashboard App in 5 Minutes]]></title>
            <link>https://www.builder.io/blog/ai-dashboard</link>
            <guid>https://www.builder.io/blog/ai-dashboard</guid>
            <pubDate>Fri, 08 Nov 2024 08:00:00 GMT</pubDate>
            <description><![CDATA[Turn a Figma dashboard design into a working app with real APIs, data, and pagination in under 5 minutes. Export clean, customizable code for React, Vue, + more]]></description>
            <content:encoded><![CDATA[<p>I just turned a Figma design into a working dashboard app with real APIs, data, and pagination in less than five minutes.</p><p>And the best part is: I can export my creation as clean code across multiple files, including reusing your existing components in your codebase and/or design system.</p><p>React, Vue, Tailwind, SwiftUI, and many more outputs are supported, and everything is customizable.</p><p>Let me show you how to do it.</p><h2>The process</h2><h3>Step 1: exporting Figma design dashboard</h3><p>First, in Figma, launch the <a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more">Builder.io Figma plugin</a> in a design of your choice, for instance with the <a href="https://www.figma.com/design/9cXQQu2rzjk23lhRwcO9z0/CRM-Dashboard?node-id=1-26&node-type=frame&t=XnmdGEdAunteST68-11">dashboard design</a> I used.</p><blockquote><strong>Note:</strong> If you use the dashboard design file I did, you will likely have to duplicate it to your drafts first so you have full access:</blockquote><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Faa0233a4221b4e4abe6e10177adc3233%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=aa0233a4221b4e4abe6e10177adc3233&alt=media&optimized=true" type="video/mp4">
    </video><blockquote><strong>Note</strong>: This plugin works the same in <a href="https://help.figma.com/hc/en-us/articles/15023124644247-Guide-to-Dev-Mode" rel="noopener noreferrer" target="_blank">Dev mode</a> too.</blockquote><p>Once you have the plugin launched, select the Dashboard frame and click the <strong>Export to Code</strong> button, and you'll be launched into Builder.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2856397223b8485aac08e2ced702f016%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=2856397223b8485aac08e2ced702f016&alt=media&optimized=true" type="video/mp4">
    </video><p>If you don’t have a <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a> account yet, you will be asked to sign up, which only takes 2 quick steps.</p><blockquote><strong>Note</strong>: If you use the same <a href="https://www.figma.com/design/9cXQQu2rzjk23lhRwcO9z0/CRM-Dashboard?node-id=1-26&amp;node-type=frame&amp;t=HSxBDrlaA4apkf1K-11" rel="noopener noreferrer" target="_blank">Dashboard design</a> as I did, you will see a “Low auto layout usage” warning. Using auto layout for exported designs is a <a href="https://www.builder.io/c/docs/figma-best-practices" rel="noopener noreferrer" target="_blank">best practice</a>, and without it your results might vary. In this case, this design imports pretty well without auto layout, so we can ignore it.</blockquote><h3>Step 2: adding context for the AI</h3><p>Now that we’re in <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder</a>, your design has been converted into code, and what shows in the Builder canvas is a preview of the resulting code.</p><p>This is cool and all, but it's a <em>lot</em> cooler to make this code actually do something!</p><p>In order to be able to do something useful, we’ll want to give the AI some context about us first.</p><p>For example, if you want to use data, where should the data come from? Is it a public resource or your own private API? What inputs and outputs can this API take?</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F1bd1734f299c4d8ca7bc588a2b0cc174%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=1bd1734f299c4d8ca7bc588a2b0cc174&alt=media&optimized=true" type="video/mp4">
    </video><blockquote><strong>Note:</strong> The <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder</a> Visual Editor AI chat released with <a href="https://www.builder.io/blog/visual-copilot-2" rel="noopener noreferrer" target="_blank">Visual Copilot 2.0</a> is currently in a rolling beta — meaning some users will have access now, and some will come soon. We add new users each week — so if you don’t have access just yet, <a href="https://www.builder.io/make-real-notify-me" rel="noopener noreferrer" target="_blank">request to be notified</a> when your accent gets access</blockquote><p>For my dashboard, I used these instructions. Feel free to copy and use them, including the API used:</p><pre><code>We have an API that can list our users that works like:

https://user-api.builder-io.workers.dev/
https://user-api.builder-io.workers.dev/?page=2
https://user-api.builder-io.workers.dev/?sortBy=name.first
https://user-api.builder-io.workers.dev/?sortBy=location.city

the output looks like:

&lt;output&gt;
{
  &quot;page&quot;: 1,
  &quot;perPage&quot;: 10,
  &quot;total&quot;: 100,
  &quot;data&quot;: [
    {
      &quot;gender&quot;: &quot;female&quot;,
      &quot;name&quot;: { &quot;title&quot;: &quot;Mrs&quot;, &quot;first&quot;: &quot;Aada&quot;, &quot;last&quot;: &quot;Ojala&quot; },
      &quot;location&quot;: {
        &quot;street&quot;: { &quot;number&quot;: 9896, &quot;name&quot;: &quot;Pyynikintie&quot; },
        &quot;city&quot;: &quot;Loviisa&quot;,
        &quot;state&quot;: &quot;Tavastia Proper&quot;,
        &quot;country&quot;: &quot;Finland&quot;,
      },
      &quot;picture&quot;: {
        &quot;large&quot;: &quot;https://randomuser.me/api/portraits/women/51.jpg&quot;,
        &quot;medium&quot;: &quot;https://randomuser.me/api/portraits/med/women/51.jpg&quot;,
        &quot;thumbnail&quot;: &quot;https://randomuser.me/api/portraits/thumb/women/51.jpg&quot;
      },
    },
    ...
  ]
}
&lt;output&gt;

when adding tables of users include their images too. also make tables horizontal scroll on mobile

for loading states, give things a nice spinner</code></pre><p>Notice that at the bottom I included a couple extra tips. For instance, I want the AI to generate tables with images in them, to make them horizontally scrollable on mobile, and be sure to use a nice loading spinner.</p><p>Instructions are infinitely customizable, so experiment with them! Use trial and error to find out what works best for you. With the right approach, they are incredibly powerful.</p><p>Note that you can also instruct the AI to use well known APIs without much guidance (like specific input/output examples). Some other fun ones to use and try:</p><ul><li><strong>catfact.ninja</strong>: returns random cat facts</li><li><strong>dog.ceo</strong>: random dog images by breed</li><li><strong>pokeapi.co</strong>: Pokemon data (stats, moves, types)</li><li><strong>jservice.io</strong>: trivia questions from the <em>Jeopardy!</em> game show</li><li><strong>Open Notify</strong>: space data like the current location of the ISS and people in space.</li><li><strong>RandomUser.me</strong>: random user data (names, photos, addresses)</li><li><strong>Advice Slip API</strong>: random pieces of advice (<a href="https://api.adviceslip.com" rel="noopener noreferrer" target="_blank">https://api.adviceslip.com</a>)</li><li><strong>Universities API</strong>: information on universities worldwide (<a href="http://universities.hipolabs.com/" rel="noopener noreferrer" target="_blank">http://universities.hipolabs.com/</a>)</li><li><strong>Open Meteo</strong>: weather forecasts, historical weather, and current weather data</li></ul><p>Can't find a public API that interests you there? Just try asking Visual Copilot, and it can recommend an API for your use case too.</p><h3>Step 3: making it interactive</h3><h4>Creating the user table</h4><p>In the case of our design, it wasn’t even complete!</p><p>But <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder</a> can handle this as well — we can use AI to generate or update any part of the design, completely matching the existing aesthetic of the design, including components, design tokens, and so on.</p><p>In our case, you can click the <strong>Users table goes here</strong> text and enter the prompt:</p><pre><code>replace this with a table of our users</code></pre><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F172262058e45444eb227ecd2a8ff8030%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=172262058e45444eb227ecd2a8ff8030&alt=media&optimized=true" type="video/mp4">
    </video><h4>Visually tweaking the table</h4><p>We have a nice table, but let's start making some visual modifications. <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a> is a full <a href="https://www.builder.io/visual-development-platform" rel="noopener noreferrer" target="_blank">Visual Development Platform</a>, so we can continue to select parts of the code and edit it visually.</p><p>For instance, we can go to the S<strong>tyle</strong> tab and change the width to <strong>Fill</strong>, and even drag to change the top margin size as well.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F0278fbc890a9489888dbd1f6063db7ca%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=0278fbc890a9489888dbd1f6063db7ca&alt=media&optimized=true" type="video/mp4">
    </video><p>Play around all you like to get things pixel perfect.</p><h4>Adding sorting</h4><p>Now, we have a table connected to real data. But, how do we even know? For all we know, this was hard generated into the design.</p><p>So let's spice things up and add some real interactivity.</p><p>In our design, we have a couple buttons to choose different table sorts. Let’s click on that and use my favorite prompt:</p><pre><code>make these buttons work</code></pre><p>Yes, just from the context of the design and the API info we gave the system, Visual Copilot in this case can infer what these buttons should do, and hook up the functionality for us.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fe3e3aded8fdf4929a0e80d15f6208240%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=e3e3aded8fdf4929a0e80d15f6208240&alt=media&optimized=true" type="video/mp4">
    </video><p>And voilà — we have working sort buttons!</p><p>You can try it out via the <strong>quick preview</strong> mode, for instance by hitting <code>⌘ + \</code> on mac, or <code>Ctrl + \</code> on PC/Linux <em>(yes, I mentioned Linux for all one of you)</em>.</p><p>In preview mode, you can click around your app just like a typical user. Try out your awesome new API-driven dashboard table!</p><h4>Implementing pagination</h4><p>Let’s now implement pagination. We’ll follow similar steps as before. Let's click the pagination buttons and use my favorite prompt:</p><pre><code>make these buttons work</code></pre><p><strong>Disclaimer</strong>: A super vague prompt like that is not the general best practice, I just think it's fun that it works in this case.</p><p>Generally, be descriptive about what you want, and if the AI doesn’t get it right on the first time, give it feedback and have it try again. Working with AI is a trial and error process to get good results.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc54c5587befb4fb0a21ed454699fd657%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=c54c5587befb4fb0a21ed454699fd657&alt=media&optimized=true" type="video/mp4">
    </video><h3>Step 4: generating production code</h3><p>When you're happy with the functionality, let’s grab the code.</p><p>First, switch to Develop mode to show all of your code generation options.</p><p>You can pick between a variety of code frameworks, such as React, Vue, Angular, Svelte, React Native, SwiftUI, HTML, Qwik, Solidjs, Jetpack Compose, Flutter, and more.</p><p>For styling frameworks, built in support includes Tailwind, CSS, CSS modules, Styled Components, Emotion, and you can even add anything else not listed here using <a href="https://www.builder.io/c/docs/custom-instructions" rel="noopener noreferrer" target="_blank">custom instructions</a>.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F88ef2fbad9e2494990267310d3fef464%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=88ef2fbad9e2494990267310d3fef464&alt=media&optimized=true" type="video/mp4">
    </video><h4>Add custom instructions</h4><p>You can also add completely custom instructions in natural language for any additional preferences you have — including frameworks, styling frameworks, testing frameworks not mentioned previously, as well as anything completely custom — like stylistic preferences, libraries you use, or even samples of your existing code so your code can be reused or the AI can match your coding style.</p><p>In my case, I love React Query, so I have this custom instruction saved for all code generations so that React Query is always used for data fetching:</p><pre><code>use @tanstack/react-query for all data fetching</code></pre><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd645a7d809844e6e9ce5c1fa62a041c5%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d645a7d809844e6e9ce5c1fa62a041c5&alt=media&optimized=true" type="video/mp4">
    </video><h4>Generate the code</h4><p>When we’ve got things setup the way we like, we can just click <strong>Generate Code</strong> to get our code.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F9ae325bb0e224e34ac94c0d0538f4e9a%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=9ae325bb0e224e34ac94c0d0538f4e9a&alt=media&optimized=true" type="video/mp4">
    </video><p>Keep in mind you can always change code after the fact too — by chatting to make modifications, as well as by updating your custom instructions and generating again.</p><p>This process can take trial and error to get exactly right—- but is worth it to make sure the system is outputting code just like you and your team would write.</p><p>And remember, the AI can respond to nearly any kind of feedback. If there is anything that makes you say “no I would’ve written this differently”, just tell the system.</p><h3>Step 5: getting the code into your project</h3><p>Now what good is code if it's not in <em>your codebase</em>. I got u fam don’t doubt me so much.</p><ol><li>Click <strong>Sync Code</strong>.</li><li>Copy the provided command.</li><li>Run it at the root of your project.</li></ol><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F00419acced8a4ad3ab91d965578ee502%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=00419acced8a4ad3ab91d965578ee502&alt=media&optimized=true" type="video/mp4">
    </video><p><em>Yes, yes I know I need to update Cursor.</em></p><p>And there you have it — the dashboard code, with functionality, tests, and reusable components is yours!</p><h3>Bonus: Map Your Components</h3><p>This is great and all — but what if you have a design system of components already?</p><p>Ideally, we’d want to reuse those components when importing and generating, including any other components local to our codebase that we typically build with.</p><p>For instance, here is an example of code I generated using the <a href="https://cloudscape.design/" rel="noopener noreferrer" target="_blank">Cloudscape design system</a>:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd54c2e035a254edd9418ec6893892c7a?width=800" alt="Screenshot of code using cloudscape design system" /><p>Fear not, Builder <a href="https://www.builder.io/c/docs/mapping-functions" rel="noopener noreferrer" target="_blank">supports this as well</a>. But that is a topic for another post, but you can visit the docs in the meantime and try it out yourself.</p><h2>What's Next?</h2><p>Try this out on more designs, code, and APIs!</p><p>Remember: AI is a tool. It doesn’t replace engineering work, but when used right it sure as heck an accelerate it. AI will be good at some things, and not good at others. The trick is to experiment — use trial and error and find what works great for you and it can be your new secret superpower.</p><p>If you’d like more use cases and even more ideas on what you can accomplish with Visual Copilot, read <a href="https://www.builder.io/blog/visual-copilot-2" rel="noopener noreferrer" target="_blank">Introducing Visual Copilot 2.0: Design to Interactive</a>.</p><p>Give it a try — I can’t wait to see what you build!</p><h2>Resources</h2><ul><li><a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more" rel="noopener noreferrer" target="_blank">Figma plugin for Builder.io</a></li><li><a href="https://www.figma.com/design/9cXQQu2rzjk23lhRwcO9z0/CRM-Dashboard?node-id=1-26&amp;node-type=frame&amp;t=HSxBDrlaA4apkf1K-11" rel="noopener noreferrer" target="_blank">Dashboard Figma design</a></li><li><a href="https://www.builder.io/make-real-notify-me" rel="noopener noreferrer" target="_blank">Get notified when you get full Visual Copilot 2.0 access</a></li><li><a href="https://www.builder.io/m/demo" rel="noopener noreferrer" target="_blank">Get a demo</a> from the <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a> team</li></ul><p>Useful docs</p><ul><li><a href="https://www.builder.io/c/docs/import-from-figma" rel="noopener noreferrer" target="_blank">Import from Figma</a></li><li><a href="https://www.builder.io/c/docs/ve-visualcopilot" rel="noopener noreferrer" target="_blank">Add interactivity with AI</a></li><li><a href="https://www.builder.io/c/docs/generate-code" rel="noopener noreferrer" target="_blank">Generate code</a>&nbsp;(+ with <a href="https://www.builder.io/c/docs/custom-instructions" rel="noopener noreferrer" target="_blank">custom instructions</a>)</li><li><a href="https://www.builder.io/c/docs/figma-components" rel="noopener noreferrer" target="_blank">Reuse your existing design system and components</a></li></ul><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;"><iframe src="https://www.youtube.com/embed/ix0RlejjMos?rel=0" style="top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;" allowfullscreen scrolling="no" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share;"></iframe></div>
    <h5><i>Read the <a href="https://www.builder.io/blog/ai-dashboard">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F170758f3390148d2afebb61a9476fa7a" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F170758f3390148d2afebb61a9476fa7a"/>
        </item>
        <item>
            <title><![CDATA[Figma to React Native: Convert designs to clean code in a click]]></title>
            <link>https://www.builder.io/blog/convert-figma-to-react-native</link>
            <guid>https://www.builder.io/blog/convert-figma-to-react-native</guid>
            <pubDate>Wed, 06 Nov 2024 20:00:00 GMT</pubDate>
            <description><![CDATA[Discover how to convert Figma designs to React Native code with Visual Copilot. Learn the features and how it streamlines mobile app development.]]></description>
            <content:encoded><![CDATA[<p>Converting Figma designs into React Native code remains a frustrating challenge for developers everywhere. Each Figma file takes many days to convert, making it hard for teams to focus on improving performance and building what truly matters.</p><p>Now, with AI technology becoming more advanced, it's time to leverage it as part of the solution to this challenge. At Builder.io, we've done just that with <a href="https://www.builder.io/m/design-to-code" rel="noopener noreferrer" target="_blank">Visual Copilot</a>. In this blog post, we'll explore how converting Figma designs to React Native code using our AI-powered toolchain can save hours of manual work and streamline the workflow for mobile app development.</p><h2>What is Figma?</h2><p><a href="https://www.figma.com/">Figma</a> is a collaborative interface design tool with an emphasis on real-time collaboration. It's known for its user-friendly interface and strong design capabilities, making it a favorite among designers. Figma components and design files form the basis for creating pixel-perfect designs and prototypes which are crucial for a seamless handoff to development teams.</p>
<p>One of Figma's powerful features is its dev mode, which means developers can inspect designs and extract valuable information for implementation. Many teams use Figma to create UI kits and design systems for their projects. Figma's extensibility through plugins further enhances its capabilities, allowing users to customize their workflow.</p>
<h2>What is React Native?</h2><p><a href="https://reactnative.dev/">React Native</a> is an open-source mobile application development framework created by Facebook that enables developers to build mobile apps for iOS and Android using JavaScript and React. It allows for cross-platform development, meaning you can write code once and deploy it on both major mobile platforms, significantly reducing development time and resources. With more than <a href="https://github.com/facebook/react-native">100k GitHub stars</a> and a huge community, it is one of the leading frameworks for mobile app development.</p><p>

</p><p>The framework uses native components and the platform's standard rendering APIs, resulting in apps with a native look and feel and generally better performance compared to hybrid apps. React Native leverages the popular React library, making it accessible for web developers familiar with React. It also offers features like hot reloading for real-time code changes and provides JavaScript interfaces for accessing platform-specific APIs, allowing developers to tap into device capabilities like cameras and sensors.</p>
<h2>Visual Copilot: AI-powered Figma to React Native plugin</h2><p>At Builder.io, we've created Visual Copilot — an <a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more" rel="noopener noreferrer" target="_blank">AI-powered Figma to code toolchain</a> that leverages AI to accurately convert Figma designs into clean, efficient React Native code.</p><h3>One-click conversion</h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd22b82b2fbc54c45a1d6710cb8ef58ee%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d22b82b2fbc54c45a1d6710cb8ef58ee&alt=media&optimized=true" type="video/mp4">
    </video>Transform complex Figma designs into high-quality React Native components with just a single click.<h3><span data-token-index="0" class="notion-enable-hover"><strong><span style="font-weight: 500;">Seamless integration</span></strong></span></h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd1fcbd828ad945248b65b0d62c44e1f6%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d1fcbd828ad945248b65b0d62c44e1f6&alt=media&optimized=true" type="video/mp4">
    </video>Getting started is as simple as copying the generated code directly from Visual Copilot into your React Native project — no complex setup or integration required.<h3><span style="font-size: 21.06px;">Customizable output</span></h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F08740f6605ea48588ac3510c240bfe66%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=08740f6605ea48588ac3510c240bfe66&alt=media&optimized=true" type="video/mp4">
    </video>Iterate with custom prompts and structure the code to your preferences post-generation. This feature allows developers to fine-tune the output to match their specific project needs and coding standards.<h3><span style="font-size: 21.06px;">Styling support</span></h3><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F402aa796b1e44133b23744d9a54a2e0a%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=402aa796b1e44133b23744d9a54a2e0a&alt=media&optimized=true" type="video/mp4">
    </video>Visual Copilot supports popular React Native styling solutions like StyleSheet and Tailwind CSS.<h3><span style="font-size: 21.06px;">Cross-platform compatibility</span></h3>Generate code that works seamlessly on both iOS and Android platforms, leveraging React Native's cross-platform capabilities.<img src="https://cdn.builder.io/api/v1/image/assets/TEMP/109e96ea21252b82d1e31b1b1b1f63aae2ee6009b7262745e0c6b253fa5e21d2?placeholderIfAbsent=true&width=24" alt="" /><p>With React and Angular, Visual Copilot also supports mapping components and design tokens in a Figma design file to UI components in code.</p><h2>How Visual Copilot uses AI to generate clean React Native code</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F8679812ade334e28827f75b1c207b92c?width=705" alt="" /><p>The core of Visual Copilot is built on advanced AI models and a specialized compiler:</p>
<ol>
<li><strong>Initial AI Model</strong>: Trained on millions of design-to-code data points, our initial model transforms flat design structures into hierarchical code representations, even for complex layouts without auto layout.</li>
<li><strong>Specialized Compiler</strong>: Our open-source compiler, Mitosis, takes the structured hierarchy from the AI model and compiles it into React Native code, ensuring proper component structure and styling.</li>
<li><strong>Fine-tuning LLM</strong>: A finely-tuned Large Language Model (LLM) refines the code to match React Native best practices, your specific styling preferences, and any custom requirements you may have.</li>
</ol>
<p>This multi-stage process ensures that the generated code is not just functional, but also adheres to best practices and your team's coding standards.</p>
<h2>Converting Figma designs to React Native code</h2><p>Getting started with Visual Copilot is straightforward:</p><ol><li>Launch the <a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more" rel="noopener noreferrer" target="_blank">Visual Copilot Figma plugin</a>.</li><li>Select a layer in your Figma file and preview the selected layer.</li><li>Click the “Export to code” button.</li><li>Review the generated code in the preview window.</li><li>Copy the code into your React Native project.</li><li>Make any necessary adjustments for specific React Native functionalities or custom requirements.</li></ol><h2>Best practices for using Figma with Visual Copilot</h2><p>To get the most accurate and efficient conversions, follow these best practices when designing in Figma:</p>
<ol>
<li><strong>Use auto layout</strong>: Implement Figma's auto layout feature to create responsive designs that translate well to React Native's flexbox-based layout system.</li>
<li><strong>Name layers meaningfully</strong>: Use clear, descriptive names for your layers and components. This helps our AI understand the purpose of each element and generate more accurate code.</li>
<li><strong>Use components</strong>: Leverage Figma's component system to create reusable UI elements. This translates well to React Native's component-based architecture.</li>
<li><strong>Consider platform differences</strong>: While designing, keep in mind the differences between iOS and Android. Our tool will try to generate platform-specific code where necessary.</li>
<li><strong>Organize your designs</strong>: Group related elements and use a clear hierarchy in your Figma files. This organization will be reflected in the generated React Native component structure.</li>
<li><strong>Use vector networks for icons</strong>: When possible, use vector networks for icons and simple illustrations. These translate more efficiently to React Native's SVG components.</li>
<li><strong>Define images explicitly</strong>: For complex designs, use Figma's export feature to help the AI model recognize elements as an image or an icon.</li>
<li><strong>Minimize overlaps and intersections</strong>: Align boxes only with related components and avoid unnecessary overlapping to prevent undesired results.</li>
<li><strong>Avoid translucent effects</strong>: Stick to fully opaque colors, as transparency can be challenging for AI to interpret accurately.</li>
</ol>
<h2>Conclusion</h2><p>Visual Copilot represents a significant leap forward in bridging the gap between design and development in the React Native ecosystem. By leveraging AI to automate the conversion of Figma designs to React Native code, we're enabling developers to focus on what truly matters: creating exceptional mobile experiences.</p>
<p>Whether you're working on a startup MVP or a large-scale enterprise application, Visual Copilot can significantly reduce your development time, streamline your workflow, and help you bring your mobile app ideas to life faster than ever before. We're excited to see how it will transform the mobile development landscape, making the journey from pixel-perfect designs to fully functional React Native apps smoother and more efficient than ever before.</p>

    <h5><i>Read the <a href="https://www.builder.io/blog/convert-figma-to-react-native">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fa76af712577a48bc9963c36420d47512" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fa76af712577a48bc9963c36420d47512"/>
        </item>
        <item>
            <title><![CDATA[Introducing Visual Copilot 2.0: Design to Interactive]]></title>
            <link>https://www.builder.io/blog/visual-copilot-2</link>
            <guid>https://www.builder.io/blog/visual-copilot-2</guid>
            <pubDate>Thu, 31 Oct 2024 05:00:00 GMT</pubDate>
            <description><![CDATA[Transform Figma designs into interactive features using natural language with Visual Copilot 2.0 - bridging design and code with AI that understands your stack.]]></description>
            <content:encoded><![CDATA[<p>We've all been there. The design looks perfect in Figma. Everyone's approved it. But then comes the hard part: turning that static design into a living, breathing feature.</p><p>Developers spend hours implementing each interaction. Designers watch their vision get lost in translation. Product managers juggle timelines as simple UI changes turn into week-long projects.</p><p>Today, we're changing that forever by bringing our AI Assistant, Visual Copilot, to the Builder Visual Editor — enabling you to make Figma designs interactive with natural language, using your actual code, data, and APIs.</p><h2><strong>Real data, real APIs, real features</strong></h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd9b2930653b949b385f90d6e6fd32bd7%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d9b2930653b949b385f90d6e6fd32bd7&alt=media&optimized=true" type="video/mp4">
    </video><p>But it goes way beyond basic interactions. Unlike other AI tools, Visual Copilot isn't generating static code or isolated components.</p><p>It understands your entire tech stack. From creating complete data tables to adding advanced features like sorting and pagination – all while working with your real data.</p><h2><strong>Interactive designs from natural language</strong></h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F57a50cc5b39c4647a600f800d05d1236%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=57a50cc5b39c4647a600f800d05d1236&alt=media&optimized=true" type="video/mp4">
    </video><p>Select any element and say what you want. "Turn this FAQ section design into an interactive accordion" and watch as static design content transforms into a smooth, collapsible interface with production-ready code.</p><p>No coding required, just clear instructions.</p><h2><strong>Sync design changes to code</strong></h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F0dd0e88fcad04bcb9816958797a06180%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=0dd0e88fcad04bcb9816958797a06180&alt=media&optimized=true" type="video/mp4">
    </video><p>When designers update their Figma designs, merging those changes into your customized code base can be challenging.</p><p>Visual Copilot makes it seamless – intelligently syncing design updates while preserving your code edits. One click, and changes flow straight to production, no manual reconciliation needed.</p><h2><strong>Your design system automated</strong></h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F7c2009bf45f14f2597c082c17a6d82c4%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=7c2009bf45f14f2597c082c17a6d82c4&alt=media&optimized=true" type="video/mp4">
    </video><p>Colors, typography, spacing, components – Visual Copilot understands and enforces your design system automatically.</p><p>Whether your components are from your design files or generated by Visual Copilot, they're implemented exactly as intended, maintaining your brand's look and feel.</p><p><strong>No more generic AI designs.</strong></p><h2><strong>Publish without bottlenecks</strong></h2><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F15540f4017aa4e0b8909308da5ca2deb%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=15540f4017aa4e0b8909308da5ca2deb&alt=media&optimized=true" type="video/mp4">
    </video><p>Update landing pages, change layouts, or modify pricing tables in minutes. Your marketing team gets pixel-perfect, on-brand results while developers focus on complex features.</p><p>Even better - you can use the AI to personalize your site or app to different audiences, and publish updates (with approval workflows of course!) in a click.</p><p>Everyone moves faster, with complete control over when changes go live.</p><img src="https://cdn.builder.io/api/v1/image/assets/TEMP/109e96ea21252b82d1e31b1b1b1f63aae2ee6009b7262745e0c6b253fa5e21d2?placeholderIfAbsent=true&width=24" alt="" /><p>Want to watch the full launch event? Check out a sneak below and view in its entirety <a href="https://www.builder.io/hub/webinars/make-it-real" rel="noopener noreferrer" target="_blank">here</a>.</p><h2><strong>Filling the space between design and coding tools</strong></h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F58dc4de574cd429f8d254f0cf48a550b?width=705" alt="" /><p>After seeing all these capabilities, you might wonder – what exactly is happening here? It's not exactly designing, though we're using your design tokens and Figma components. It's not exactly coding either, even though we're using your code components and APIs.</p><p>It’s a new type of activity emerging in the space between design and development.</p><p>This is a <strong>Visual Development Environment</strong> – a tool that sits in the space between design and development.</p><p>Because you can completely harness it with natural language, it’s not just for designers or developers; it’s for everyone in your organization.</p><h2><strong>The power of design, code, and business context</strong></h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fe228851112e24201a6ba428fdb0e2e39?width=705" alt="" /><p>Unlike other AI tools that generate isolated components or demos, Visual Copilot is deeply integrated with your entire product:</p><ul><li><strong>Your design context</strong>: It understands your Figma components, design tokens, and documentation</li><li><strong>Your code context</strong>: It knows your code components, coding standards, and development patterns</li><li><strong>Your business context</strong>: It connects to your APIs, data models, and business logic</li></ul><p>This means describing complex features in just a few words gets you exactly what your team would build – using your design system, following your standards, connected to your services.</p><h2><strong>More speed, more fun, better products</strong></h2><p>Our goal is to automate the grunt work, so you and your team can focus on the impactful work that helps you build better products, faster.</p><p>By reducing tedious tasks, we increase the time spent on enjoyable, creative work.</p><p>Faster iteration cycles mean more opportunities to test, learn, and refine, ultimately leading to superior products.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F33a9f4e047584744b5ac541fad13a990%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=33a9f4e047584744b5ac541fad13a990&alt=media&optimized=true" type="video/mp4">
    </video><h2><strong>Get Started with Visual Copilot 2.0</strong></h2><ul><li>The new Visual Editor UI is available now for all Builder users (<a href="/signup" rel="noopener noreferrer">sign up here</a>)</li><li>Visual Copilot features in the <a href="https://www.builder.io/visual-editor" rel="noopener noreferrer" target="_blank">Visual Editor</a> are rolling out gradually to all customers starting today</li><li>Code Sync capabilities will be released soon</li></ul><p>Sign up to get notified when you get beta access to <a href="https://www.builder.io/make-real-notify-me" rel="noopener noreferrer" target="_blank">Visual Copilot for the Visual Editor</a>.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/visual-copilot-2">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd76fae26d40f4fceb2f2df370d4bebb2" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd76fae26d40f4fceb2f2df370d4bebb2"/>
        </item>
        <item>
            <title><![CDATA[Design Systems Explained]]></title>
            <link>https://www.builder.io/blog/design-systems</link>
            <guid>https://www.builder.io/blog/design-systems</guid>
            <pubDate>Fri, 18 Oct 2024 05:00:00 GMT</pubDate>
            <description><![CDATA[Design systems: core components and building process. Learn about pattern libraries, visual elements, and tools for effective implementation.]]></description>
            <content:encoded><![CDATA[<p>If you've ever found yourself copying and pasting UI code from one project to another, or struggling to maintain consistency across a large application, you're not alone. These are common pain points in software development, and they're exactly what design systems aim to solve.</p><p>In this article, we'll break down what design systems are and how they work. We'll cover the core components, walk through the process of building one, and look at some tools that can help. Whether you're just curious about design systems or thinking of implementing one, this should give you a solid overview of what's involved.</p><h2>What is a design system?</h2><p>A design system is more than just a style guide or a component library. It's a comprehensive set of standards, documentation, and reusable components that help teams build more consistent and efficient user interfaces.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb0c97daa30fc4d44973d661dbb2756ee?width=705" alt="What is a Design System" /><p>Here's what you'll typically find in a design system:</p><ul><li>Reusable UI components: Think buttons, forms, modals, and other common UI elements.</li>
<li>Design patterns: Standardized solutions for common UX problems.</li>
<li>Style guides: Documentation on typography, color usage, spacing, and other visual elements.</li>
<li>Best practices: Guidelines on how to use components and apply design principles.</li>
<li><a href="https://www.builder.io/c/docs/design-tokens">Design tokens</a>: Variables for storing visual design attributes.</li></ul><p>A design system serves as a single source of truth for your application's UI. It bridges the gap between design and development, ensuring everyone's on the same page.</p><h2>Why do developers care about design systems?</h2><p>You might be wondering why you should invest time in a design system. Here are some concrete benefits:</p><ol><li>Consistency: No more subtle differences between components across your app. A design system ensures that a button looks and behaves the same way everywhere it's used.</li>
<li>Efficiency: Instead of coding the same components from scratch for each project, you can reuse pre-built, tested components. This can significantly speed up development time.</li>
<li>Better teamwork: Design systems provide a shared language between designers and developers. This reduces miscommunication and speeds up the handoff process.</li>
<li>Scalability: A design system helps maintain consistency and manageability as your application grows. It's much easier to update a single component in your design system than to find and update it across a large codebase.</li>
<li>Quality control: Components in a design system are typically well-tested and refined. This leads to fewer bugs and a more polished final product.</li>
<li>Accessibility: By baking accessibility standards into your design system, you ensure that all parts of your application meet these standards by default.</li>
<li>Brand cohesion: A design system helps maintain a consistent brand identity across all parts of your application or even across multiple applications.</li></ol><h2>The building blocks of a design system</h2><p>Let's review the core components of a design system:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fe2d197b3e31a4e29a52224a835ebc782?width=705" alt="Building Blocks and Core Components" /><h3>Pattern Libraries</h3><p>Pattern libraries are collections of reusable solutions to common design problems. They're not just about visual design; they also encompass interaction patterns and UX best practices.</p><p>For example, a pattern library might include:</p><ul><li>A standard way to structure navigation menus</li>
<li>Best practices for form validation and error handling</li>
<li>Conventions for data visualization</li></ul><p>These patterns help create a consistent user experience across your application. They're handy for complex interactions in multiple places in your app.</p><h3>Visual Elements</h3><p>Visual elements form the foundation of your design system's aesthetics. They include:</p><ul><li>Typography: This goes beyond just choosing fonts. It includes guidelines on font sizes, line heights, and typographic scale.</li>
<li>Color palette: This isn't just a list of colors, but rules about how and when to use each color. It might include primary and secondary colors and rules for text colors, background colors, and accent colors.</li>
<li>Spacing and layout: Consistent spacing is crucial for a polished UI. Many design systems use a standardized spacing scale.</li>
<li>Iconography: Guidelines for icon style, size, and usage.</li></ul><p>These elements work together to create a cohesive visual language for your application. <a href="https://material.io/">Google's Material Design</a> is a comprehensive example of how these elements can be defined and documented.</p><h3>Reusable Components</h3><p>At the heart of any design system are reusable components. These are the LEGO blocks of your UI:</p><ul><li>Basic elements (buttons, inputs)</li>
<li>Complex widgets (date pickers, modals)</li>
<li>Layout components (grids, cards)</li></ul><p>Good reusable components are:</p><ol><li>Modular: They work independently.</li>
<li>Customizable: They adapt to different contexts.</li>
<li>Well-documented: They come with clear usage guidelines.</li></ol><p>Why they matter:</p><ul><li>Consistency: Everyone uses the same building blocks.</li>
<li>Efficiency: No reinventing the wheel for common UI elements.</li>
<li>Easier maintenance: Update once; changes apply everywhere.</li></ul><p>When building components, consider all states (hover, disabled, etc.) and make them responsive. Here's a simple example of a reusable button in React:</p><pre><code>const Button = ({ onClick, disabled, children, variant = 'primary' }) =&gt; (
  &lt;button
    className={`button button--${variant}`}
    onClick={onClick}
    disabled={disabled}
  &gt;
    {children}
  &lt;/button&gt;
);
</code></pre><p>Remember, a good component library evolves with your team's needs. Regular reviews and updates keep your components relevant and valuable.</p><h2>Building your own design system</h2><p>Creating a design system is a significant undertaking but pays dividends in the long run. Here's a more detailed look at the process:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F6883b8289bc544e5a0a067cbae00bf24?width=705" alt="Design System Process" /><ol><li>Audit what you've got: Start by analyzing your existing UI. Look for patterns and inconsistencies. This will help you identify what components you need and where you can standardize.</li>
<li>Define your principles: What core values should guide your design decisions? These might include things like clarity, efficiency, or accessibility.</li>
<li>Create visual elements: Develop your color palette, typography, spacing scale, and other foundational elements. These will inform the design of your components.</li>
<li>Build your component library: Start with the most commonly used components. For each component, consider different states (hover, active, disabled) and variations (size, color).</li>
<li>Document everything: Clear, comprehensive documentation is crucial. Include usage guidelines, code examples, and explanations of when to use each component.</li>
<li>Iterate: A design system is never truly finished. Gather feedback from your team and users, and continuously refine and expand your system.</li></ol><p>Remember, you don't have to build everything at once. Start with the most critical elements and expand over time.</p><h2>Accessibility matters</h2><p>Accessibility shouldn't be an afterthought. By incorporating accessibility into your design system, you ensure that all parts of your application are usable by as many people as possible.</p><p>Your design system should:</p><ul><li>Include specific accessibility guidelines for each component</li>
<li>Ensure color contrast ratios meet WCAG standards</li>
<li>Provide keyboard navigation support</li>
<li>Include guidelines for writing accessible content</li></ul><p>Making your application accessible isn't just about compliance—it's about creating a better user experience for everyone.</p><h2>Teamwork makes the dream work</h2><p>A design system is a collaborative effort that bridges the gap between design and development. To be successful, it should:</p><ul><li>Serve as a shared language understood by all team members</li>
<li>Facilitate collaboration between designers, developers, and other stakeholders</li>
<li>Be open to contributions and feedback from the entire team</li></ul><p>Consider meeting regularly to discuss the design system, gather feedback, and plan updates. This helps ensure the system remains relevant and useful to all team members.</p><h2>Gaining adoption of your design system</h2><p>Implementing a design system is a significant undertaking. Here's a more detailed approach:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fa4b0ad54e85042e38b481327d5c0ab44?width=705" alt="Design System Adoption" /><ol><li>Start small: Begin with a few key components and expand gradually. This allows you to refine your process and demonstrate value quickly.</li>
<li>Get everyone on board: Ensure all stakeholders understand the value of the design system. This can include presentations, workshops, or one-on-one discussions.</li>
<li>Train your team: Provide resources and support to help everyone use the system effectively. This might include documentation, tutorials, and hands-on training sessions.</li>
<li>Monitor adoption: Track how the design system is used and address any challenges. Tools like analytics and code linting can help with this.</li>
<li>Iterate and improve: Continuously gather feedback and refine the system. Be prepared to make changes based on real-world usage and evolving needs.</li></ol><p>Implementation is an ongoing process. Be prepared to adapt and evolve your approach over time.</p><h2>Builder and design systems</h2><p>Design systems promise consistency and efficiency, but implementing them effectively can be challenging. <a href="https://www.builder.io/">Builder</a> addresses common pain points with innovative solutions:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc65646804a964d36bd9fb0bd4a665ce0?width=705" alt="Buider and Design Systems" /><ul><li>Adoption: Builder's Visual Editor makes integration frictionless by <a href="https://www.builder.io/blog/visual-editing-bridging-gap">bridging the gap between design and development</a>.</li>
<li>Multi-Framework Support: <a href="https://mitosis.builder.io/">Mitosis</a>, an open-source tool, allows for the writing of components once and compiling them into multiple frameworks.</li>
<li><a href="https://www.builder.io/m/knowledge-center/design-to-code">Design-to-code</a> Sync: Features like <a href="https://www.builder.io/c/docs/mapping-functions">component mapping</a> and automated code generation help maintain consistency between designs and implementation.</li>
<li>Consistency Maintenance: Automated propagation of design system changes across codebases helps maintain uniformity while allowing for evolution.</li></ul><p>By tackling these challenges, <a href="https://www.builder.io/">Builder.io</a>'s platform streamlines the entire process from design to production, making design systems more accessible and effective for teams of all sizes.</p><h2>Tools to get the most out of your design system</h2><p>There are many tools available to help create and manage design systems:</p><ul><li><a href="https://www.figma.com/">Figma</a> for collaborative design: Allows designers and developers to work together in real-time.</li>
<li><a href="https://storybook.js.org/">Storybook</a> for building component libraries: Provides a sandbox to develop and test UI components in isolation.</li>
<li><a href="https://zeroheight.com/">Zeroheight</a> for documentation: Helps create comprehensive, easy-to-navigate documentation for your design system.</li></ul><p>These tools can streamline the process of creating, implementing, and maintaining your design system. Choose tools that integrate well with your existing workflow and tech stack.</p><h2>Keeping it fresh</h2><p>A design system is never truly "finished." To keep it relevant and effective:</p><ul><li>Regularly review and update components: As your application evolves, so should your design system.</li>
<li>Solicit feedback from users and team members: They use the system daily and can provide valuable insights.</li>
<li>Keep up with design trends and technological changes: While you shouldn't chase every trend, maintaining a modern and relevant system is important.</li>
<li>Document changes and communicate updates to the team: Make sure everyone knows about new features or changes to existing components.</li></ul><p>By treating your design system as a living document, you ensure it continues to meet the changing needs of your organization and users.</p><h2>Wrapping up</h2><p>A design system is a powerful tool for creating consistent, efficient, and scalable user interfaces. While it requires an initial investment of time and resources, the long-term benefits of improved consistency, efficiency, and collaboration make it worthwhile for any organization serious about digital experiences.</p><p>Remember, a successful design system evolves with your organization, continually adapting to meet new challenges and opportunities in the digital landscape. By embracing the concept of a design system, you're not just improving your current products — you're setting the stage for more efficient and effective development in the future.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/design-systems">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5fbed4ec074d46d09eb93ee8f4cae57e" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5fbed4ec074d46d09eb93ee8f4cae57e"/>
        </item>
        <item>
            <title><![CDATA[Visual editing is bridging the gap between developers and designers]]></title>
            <link>https://www.builder.io/blog/visual-editing-bridging-gap</link>
            <guid>https://www.builder.io/blog/visual-editing-bridging-gap</guid>
            <pubDate>Fri, 11 Oct 2024 16:00:00 GMT</pubDate>
            <description><![CDATA[Visual editing is transforming web development and uniting developers and designers. See how it integrates with AI to create more efficient web experiences.]]></description>
            <content:encoded><![CDATA[<p>In the world of web development, there's been long-standing concerns between developers and designers. Developers want clean, efficient code that's easy to maintain. Designers want pixel-perfect layouts that bring their creative visions to life. And marketers? They just want to be able to make changes without having to bug the dev team every five minutes.</p><p>Enter <a href="https://www.builder.io/m/knowledge-center/visual-editing" rel="noopener noreferrer" target="_blank">visual editing</a> — a tipping point that's shaking up how we build and manage digital experiences. Bringing together the functionality to work with your existing components, design systems, and data sources, these newly revamped visual environments are catching the attention of entire digital teams and their leaders.</p><h2>From WYSIWYG to headless (and back again)</h2><p>Let's rewind a bit. Content management systems (CMSs) were originally created so non-technical folks could update websites without having to write code. You'd get a nice WYSIWYG editor to format text, upload images, maybe even set up some basic e-commerce functionality. Life was good.</p><p>As digital needs grew more complex, we saw the rise of <a href="https://www.builder.io/m/explainers/composable-dxp" rel="noopener noreferrer" target="_blank">Digital Experience Platforms (DXPs)</a> - souped-up CMSs that could handle personalization, A/B testing, and multi-channel content delivery. But then mobile apps and IoT devices exploded onto the scene, and even DXPs couldn't keep up.</p><p>That's when <a href="https://www.builder.io/m/knowledge-center/headless-cms-visual-guide" rel="noopener noreferrer" target="_blank">headless CMSs</a> became the tool of choice. They gave developers the flexibility to use whatever frontend tech they wanted, delivering content across any channel. The downside? They kicked non-technical users to the curb. Suddenly, marketers and designers were back to relying on developers for every little change.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fe40827991859489c8e4ebe0c7fbba99c?width=705" alt="Traditional CMS - DXP - Headless CMS - Visual Editing" /><h2>The visual editing renaissance</h2><p>Here's where things get interesting. Visual editing is back — but with a twist. Instead of being tied to a specific tech stack, new visual editors work with your existing components, design systems, and data sources.</p><p>Steve Sewell, the founder of <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a>, explained this lightbulb moment in a recent conversation:</p><p>"I was working at a company called <a href="https://www.shopstyle.com/" rel="noopener noreferrer" target="_blank">ShopStyle</a>, and we felt the pains firsthand. We completely rebuilt this website — all microservices-based, all decoupled, all headless everything. But we hit a really important issue: while the technology was great, and the developers could move much faster, it turned out that e-commerce is a much more marketing-driven business than technology-driven."</p><p>The marketing team was stuck. They couldn't quickly experiment, launch new pages, or run A/B tests without going through developers. What used to take minutes now took weeks or (gasp) months.</p><p>Luckily, a new wave of visual editing is bringing marketers back into the fold and empowering them to take back control of their workflows so that they can ship and iterate on web and mobile experiences faster than ever.</p><h2>Visual editing is more than just pretty interfaces</h2><p>A truly powerful visual editor isn't just a fancy interface bolted onto a CMS. It's the backbone of a <a href="https://www.builder.io/visual-development-platform" rel="noopener noreferrer" target="_blank">visual development platform</a>. Here's what sets the best ones apart:</p><ol><li>Real drag-and-drop editing on a direct canvas</li><li>AI-powered content generation and manipulation</li><li>Seamless import from design tools like <a href="https://figma.com/" rel="noopener noreferrer" target="_blank">Figma</a></li><li>Options to add interactivity and connect to data sources</li><li>Native A/B testing and personalization</li></ol><p>The key is finding a balance between flexibility and guardrails. You want marketers and designers to be able to create and iterate independently, but within the constraints of your brand guidelines and tech stack.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5c5dd5a65da64b01a9fc346238617f75?width=705" alt="Visual Editing Platform" /><h2>How visual editing helps teams collaborate</h2><p>Visual editing platforms are breaking down the silos of how different teams work together on digital experiences. Let's dive deeper into how these tools are fostering collaboration for every role in the development process.</p><p><strong>Designers</strong> often struggle with the gap between their vision and the final implemented product. The right visual editing tools allow them to:</p><ul><li>Import their Figma designs directly into the visual editor</li><li>See how designs render using real components and data</li><li>Make adjustments in real-time to account for responsive behavior</li><li>Ensure designs adhere to the established design system and brand guidelines</li></ul><p><strong>Marketers</strong> often feel constrained by traditional CMSs or dependent on developers for changes. Visual editing empowers them to:</p><ul><li>Create and test new pages or variations without waiting on developer resources</li><li>Run A/B tests and personalization experiments quickly</li><li>Make real-time updates during campaigns or promotions</li></ul><p><strong>Developers</strong> often get bogged down with minor content changes and updates. Visual editing frees them to focus on more impactful work:</p><ul><li>Build reusable components and integrations</li><li>Implement complex functionality and performance optimizations</li><li>Maintain control over the tech stack and architecture</li></ul><p><strong>Product managers</strong> can use visual editing platforms to:</p><ul><li>Quickly prototype and test new features or user flows</li><li>Gather data on user interactions without full development cycles</li><li>Iterate rapidly based on user feedback</li></ul><p>Visual editing platforms don't just empower individual teams – they create new opportunities for cross-functional collaboration:</p><ol><li>Shared Language: By working within the same visual environment, teams develop a common understanding of how designs translate to functional components.</li><li>Real-Time Collaboration: Multiple team members can work on the same page or experience simultaneously, seeing changes update in real-time.</li><li>Approval Workflows: Built-in governance features ensure that the right stakeholders review and approve changes before they go live.</li><li>Version Control: Teams can track changes, compare versions, and roll back if needed – similar to how developers use Git for code.</li></ol><h2>Supercharging visual editing with AI</h2><p>As if visual editing wasn't cool enough on its own, AI is taking things to a whole new level. Imagine being able to:</p><ul><li>Generate entire page layouts based on a simple text description</li><li>Automatically create personalized content variations for different user segments</li><li>Optimize your designs for conversion using machine learning insights</li></ul><p>Steve Sewell explains how AI is enhancing visual editing capabilities:</p><p>"AI copilots can make people who are developers more efficient developers, but with the right tooling, they can also make people who have no development experience become developers as well. That's the step function impact."</p><p>This means that AI isn't just making existing processes faster - it's fundamentally changing who can create and modify digital experiences. Some exciting applications include:</p><ol><li><a href="https://www.builder.io/blog/make-ai-suck-less" rel="noopener noreferrer" target="_blank">Natural Language Interfaces</a>: Instead of learning complex UIs, users can describe what they want in plain language. For example, "Create a shoppable gift guide based on my Salesforce Commerce Cloud product catalog."</li><li><a href="https://www.builder.io/c/docs/abtesting" rel="noopener noreferrer" target="_blank">Automated A/B Testing</a>: AI can generate multiple variations of a page or component, then automatically test and optimize based on user interactions.</li><li><a href="https://www.builder.io/blog/high-performance-personalization" rel="noopener noreferrer" target="_blank">Dynamic Personalization</a>: AI can analyze user data in real-time to adjust content, layout, and messaging for each individual visitor.</li><li><a href="https://www.builder.io/blog/ai-code-generation" rel="noopener noreferrer" target="_blank">Code Generation</a>: For more complex needs, AI can generate production-ready code that adheres to your specific tech stack and design system.</li></ol><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fda4e6e77ad434395afcdd32eaa36be14?width=705" alt="AI in Visual Editing" /><p>As visual editing platforms continue to integrate more advanced AI capabilities, we're likely to see even more powerful tools for creating, optimizing, and personalizing digital experiences — all without requiring deep technical expertise.</p><h2>Real-world impact</h2><p>Companies using advanced visual editing platforms, plus the power of AI, are seeing serious results:</p><ul><li><a href="https://www.builder.io/m/anheuser-busch-optimizes-workflows-with-builder" rel="noopener noreferrer" target="_blank">Anheuser-Busch</a> uses Builder's full no-code visual editing to support over two dozen enterprise-scale sites, significantly reducing developer workload while maintaining brand consistency.</li><li><a href="https://www.builder.io/m/how-techstyle-builds-manages-and-optimizes-multibrand-ecommerce-storefronts-at-scale" rel="noopener noreferrer" target="_blank">Fabletics </a>switched from a headless CMS to <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a>, making their marketing team's workflows 75% more efficient. They can now make changes and view them instantly within the visual editor, leading to faster time-to-market for new products and updates.</li></ul><h2>The future of visual editing</h2><p>As <a href="https://www.builder.io/blog/evolution-of-visual-editors" rel="noopener noreferrer" target="_blank">visual editing platforms mature</a>, we're likely to see even more exciting developments:</p><ol><li>AI agents that can autonomously create, test, and optimize content based on business goals and user data.</li><li>Deeper integration with design tools, allowing for a more seamless handoff between design and development.</li><li>More sophisticated personalization capabilities, creating truly tailored experiences for each user.</li><li>Improved collaboration features, making it easier for cross-functional teams to work together on digital experiences.</li></ol><h2>Empowering everyone to create</h2><p>Visual editing isn't about replacing developers or designers. It's about giving everyone the tools to bring their ideas to life quickly and efficiently. By breaking down the barriers between teams and automating repetitive tasks, visual editing platforms are freeing up time and resources for true innovation.</p><p>We don't want to be in a position where team A has metric A that they're trying to solve for and team B has metric B that they're trying to solve for and team A relies on team B to solve metric A. That's a nightmare. What leaders at large organizations are looking for are solutions that allow their designers to design, marketers to market, and developers to develop.</p><p>The future of web development isn't about choosing between developer freedom and non-developer empowerment. It's about finding tools that give everyone the power to create, while still maintaining the consistency and quality that modern digital experiences demand.</p><p>So, whether you're a developer tired of making button color changes, a designer frustrated with the gap between mockups and reality, or a marketer dreaming of true creative freedom — visual editing might just be the tipping point you've been waiting for.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/visual-editing-bridging-gap">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5e9f13f3f2ff4b37b306b569b9ee272e" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5e9f13f3f2ff4b37b306b569b9ee272e"/>
        </item>
        <item>
            <title><![CDATA[A helpful approach to navigating the SEO AI shift ]]></title>
            <link>https://www.builder.io/blog/seo-ai</link>
            <guid>https://www.builder.io/blog/seo-ai</guid>
            <pubDate>Thu, 03 Oct 2024 05:00:00 GMT</pubDate>
            <description><![CDATA[Explore AI's impact on SEO strategies and content creation. Find out how to balance AI tools with human expertise for better search rankings.]]></description>
            <content:encoded><![CDATA[<p>Artificial Intelligence is changing SEO, creating a mix of new challenges and opportunities that are forcing marketers and developers to rethink their strategies. This shift is changing how we approach search engine optimization and content creation. This article explores the impact AI is really having in many areas of this common practice, including:</p><ul><li>How SEO and its strategies have changed</li><li>The identity crisis SEO is facing because of these changes</li><li>Key Google updates and their effects</li><li>Improvements made to programmatic SEO</li><li>The best SEO tools</li><li>How Builder creates SEO-friendly apps and sites</li></ul><p>Let’s dive in. Starting with some cliches, so we can get that out of the way.</p><h2>SEO is dead… blah blah blah</h2><p>I know, I know, "SEO is dead" is super cringe at this point that it almost hurts to type it. But everywhere I turn, it’s there to scare you into thinking SEO isn’t important anymore. Rest assured, I’m here to debunk that theory.</p><p>Here’s an interesting market trend from <a href="https://x.com/jakezward/status/1841462559053898142" rel="noopener noreferrer" target="_blank">Jake Ward </a>at <a href="https://www.contactstudios.com/" rel="noopener noreferrer" target="_blank">Contact Studios</a> that depicts the death of SEO for the past 27 years. He also shares the reality of things with 8.5B daily searches and SEO being a $1B industry.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fdcccac813cd142129139d528a08bb34e?width=705" alt="SEO AI" /><p>This constant cycle of "X is dead, long live Y" in tech can be exhausting. It creates a feeling similar to FOMO or imposter syndrome, that nagging feeling that you're somehow missing out or faking it -- even when you've put in the work.</p><p>Developers understand imposter syndrome, as a developer I feel this too. Take <a href="https://react.dev/" rel="noopener noreferrer" target="_blank">React</a>, for instance. You spend months getting comfortable with it, building components, managing state, and feeling pretty good about your skills. Then suddenly, everyone's talking about <a href="https://vitejs.dev/" rel="noopener noreferrer" target="_blank">Vite</a> and how it's the next big thing. Should you drop everything and learn Vite? Is React dead now?</p><p>This constant cycle of learning and re-learning can make even seasoned developers feel like they're always one step behind.</p><p>SEO's kind of like that. It keeps evolving, but the core principles stick around. With all these changes, it creates a sense of imposter syndrome. You think you’ve finally figured the game out, and then the next thing comes along. But It's not about gaming the system. It's about creating solid, valuable content that people actually want to read or use. That's still super important, AI or no AI.</p><p>So, no, SEO isn't dead. It's just growing up, and we need to grow with it. Let's look at how AI is shaking things up in the SEO world and what that means for anyone trying to get their content seen online.</p><h2>How AI is being utilized in SEO practices</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F927e2bf0f2c24f1d9c170dd7228f78a3?width=705" alt="SEO AI" /><p>AI is a game changer; just kidding! But in reality, AI is quickly becoming a valuable tool for SEO experts.</p><p>Search engines use AI to understand user intent better, shifting the focus from exact keyword matches to valuable content creation.</p><p>AI tools are helping with various aspects of SEO:</p><ul><li>Writing assistance for idea generation and content outlining</li>
<li>Data analysis for quicker, more accurate insights</li>
<li>Technical SEO support for routine tasks like meta description generation and error identification</li>
<li>Competitor analysis, providing deeper insights into rival strategies and market gaps</li></ul><p>AI is expanding strategies that SEOs didn’t have to think of prior. The ideal situation is the ability to effectively use AI tools, combined with human creativity and strategic thinking, to expand your reach.</p><h2>SEO strategy before and after AI</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fdaf2815d6b8d4f7ea7fc11c4a5cf6c77?width=705" alt="SEO Strategies with AI" /><p>Pre-AI SEO strategy:</p><ul><li>Keyword-centric: Heavy focus on exact-match keywords, keyword usage, and keyword difficulty</li><li>Link building: Emphasis on quantity over quality of backlinks</li><li>Content creation: Often prioritized monthly search volume over depth</li><li>Technical SEO: Basic on-page optimization and site structure</li><li>Manual analysis: Time-consuming data interpretation and competitor research</li></ul><p>Post-AI SEO strategy:</p><ul><li>Intent-focused: Understanding and matching user search intent</li><li>Produce high-quality content: Emphasis on comprehensive, expert-level content</li><li>Natural language processing: Optimizing for conversational queries and voice search</li><li>AI-powered tools: Utilizing machine learning for target keyword research and content optimization</li><li>Predictive analytics: Using AI to forecast trends and adjust strategies proactively</li><li>Automated personalization: Tailoring content and user experience based on AI insights</li><li>Continuous adaptation: Regularly updating strategies to align with AI-driven algorithm changes</li><li><strong>AI visibility optimization (AIVO)</strong>: Making content more visible and understandable to AI search engines</li></ul><p>AIVO is the strategy I’m really interested in. As AI search engines like <a href="https://chatgpt.com/" rel="noopener noreferrer" target="_blank">ChatGPT</a>, <a href="https://gemini.google.com/" rel="noopener noreferrer" target="_blank">Google Gemini</a>, <a href="https://claude.ai/" rel="noopener noreferrer" target="_blank">Claude</a>, and <a href="https://www.perplexity.ai/" rel="noopener noreferrer" target="_blank">Perplexity</a> start eating into the typical search engines, we need to start thinking of how brands are surfacing there.</p><p>The key shift here is from manipulating search engine algorithms to focusing on user experience and content value. AI has made search engines smarter at understanding context and user intent, pushing us to create genuinely helpful, high-quality content rather than just optimizing for keywords.</p><h2>What about Programmatic SEO?</h2><p>Programmatic SEO is a way to automatically create many web pages, each targeting specific search terms. It's like having a robot write hundreds or thousands of articles for you, but each one is tailored to a particular topic or location.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fbdae9eac178f4fe9ad21855e77507810?width=705" alt="Programmatic SEO " /><p>Here's the basic idea:</p><ol><li>Collect a bunch of data (like product info or city names)</li>
<li>Make a template for your pages</li>
<li>Use code to fill the template with your data, creating many pages</li>
<li>Check that the pages make sense</li>
<li>Publish them all to your website</li></ol><p>It's great for businesses with:</p><ul><li>Tons of products</li>
<li>Services in many locations</li>
<li>Large databases of information</li></ul><h3>The good, the bad, and the AI of programmatic SEO</h3><h4>The Good:</h4><ul><li>Efficiently targets long-tail keywords</li><li>Scales content creation for large websites</li><li>Provides useful information for niche queries</li><li>Helps businesses with large catalogs or location-based services</li></ul><h4>The Bad:</h4><ul><li>Risk of creating low-quality, repetitive content</li><li>Can lead to thin content if not done carefully</li><li>Might be seen as manipulative by search engines</li><li>Can flood search results, potentially pushing out smaller, manual content creators</li></ul><h4>How AI is improving programmatic SEO:</h4><ul><li>Generates more natural, varied content that reads like human-written text</li><li>Uses advanced data analysis to identify valuable keyword opportunities</li><li>Personalizes content based on user intent and preferences</li><li>Implements real-time optimization and quality control</li><li>Integrates multi-media elements more effectively</li><li>Enhances content relevance and readability</li></ul><p>The key is balance. AI is helping programmatic SEO evolve from a potential spam tactic to a sophisticated content strategy. When done right, it can provide valuable, tailored content for users searching for specific information.</p><h2>Google updates impact on search engines</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F8c2136a457ef4ef7a9d2d5a76b4ef367?width=705" alt="Google's Helpful Content" /><p>Back in September 2023, Google released a significant update - “<a href="https://searchengineland.com/impact-of-the-google-september-2023-helpful-content-was-big-for-the-seo-industry-432751">Helpful Content</a>,” which altered SEO practices. Here's how it has affected the industry:</p><ul><li>User-first content: Google began prioritizing content that provides genuine value to users rather than content solely optimized for search engine results.</li>
<li>Ranking shifts: Many sites, especially those with content primarily created for SEO, experienced noticeable drops in organic traffic and search rankings.</li>
<li>Long recovery period: Some sites affected by this update have struggled to regain their previous positions, with recovery efforts continuing well into 2024.</li>
<li>Core system integration: In March 2024, Google integrated the helpful content system into its core ranking system, solidifying its importance.</li>
<li>Emphasis on expertise: Content demonstrating first-hand experience and deep knowledge has been increasingly favored.</li>
<li>AI content considerations: The focus shifted to content helpfulness, regardless of the creation method. However, mass-produced AI content for SEO purposes has often underperformed.</li>
<li>Strategy evolution: SEOs have had to prioritize creating genuinely helpful, original content over traditional keyword optimization tactics.</li></ul><p>The helpful content update and subsequent changes sparked controversy in the <a href="https://www.reddit.com/r/SEO/comments/16nwn6y/why_is_the_google_helpful_update_negatively/">SEO community.</a> Google's vague guidelines and limited communication frustrated site owners, leaving them unsure of how to recover. AI-generated content and forum posts in search results raised questions about the update's effectiveness. These issues have led to ongoing debates about Google's algorithmic approach and its impact on content creators and searchers.</p><p>However, this update pushed the SEO industry towards a more user-centric approach, aligning SEO strategies more closely with content marketing principles. While challenging for many, it has aimed to improve the overall quality of search results for users.</p><h2>AI Overviews & Featured Snippets</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc7967c179c5d484aac1baf1df05c6fc7?width=705" alt="AI Overview" /><p>As AI gets smarter, it changes how we do SEO. One big change is the rise of <a href="https://www.notion.so/Weekly-Marketing-Team-Meeting-da6fcdf19c0445479209dc916de8289e?pvs=21">Featured Snippets</a> and <a href="https://www.notion.so/Weekly-Marketing-Team-Meeting-da6fcdf19c0445479209dc916de8289e?pvs=21">AI Overviews</a>. These are like the cool kids of search results - they get special treatment and prime real estate on the search page.</p><blockquote>What are AI Overviews?</blockquote><blockquote><em>AI Overviews are a newer feature from Google. They're like feature snippets on steroids. Instead of pulling info from a single source, AI Overviews synthesize information from multiple high-quality sources to give a comprehensive answer to a query. They're designed to provide a quick, authoritative summary without the need to click through to multiple websites.</em></blockquote><p>To optimize content for AI Overviews:</p><ol><li>Write really good, in-depth content. Cover all the angles.</li>
<li>Stick to facts. Don't make stuff up.</li>
<li>Organize your content well. Use headings and lists.</li>
<li>Build your site's reputation over time.</li>
<li>Keep your content up-to-date.</li>
<li>Generate schema markup to help Google understand your content.</li>
<li>Focus on answering questions people are asking.</li>
<li>Show you know what you're talking about.</li></ol><p>Remember, there's no magic trick here. It's mostly about creating great content that's useful to people. If you're doing that, you're on the right track for both regular SEO and these new AI features.</p><p>Featured snippets, on the other hand, are those boxes at the top of search results that give you a quick answer. They flip the script on regular results by showing the description first. You might also spot them in the "People Also Ask" section.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fccc90978bea44c4ba7e9efe243386647?width=705" alt="Featured Snippet" /><p>Here's a quick breakdown of how feature snippets work:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F04273943c53f4da2bf38aa5f50c3d60d?width=705" alt="Featured Snippet Diagram" /><p>Some key things to know about featured snippets:</p><ul><li>Google picks them automatically based on what people are searching for.</li>
<li>Clicking on one takes you straight to the relevant part of the page.</li>
<li>If you don't want your content in snippets, you can opt-out with some technical tweaks.</li>
<li>There's no secret handshake to get your page chosen as a snippet - it's all about the quality of your content.</li></ul><p>With AI getting better at understanding context and what users want, these snippets are getting smarter, too. This means creating clear, to-the-point content that answers questions directly is more important than ever for SEO.</p><h3>Optimizing content for Featured Snippets</h3><p>While Google doesn't allow direct markup for featured snippets, you can increase your chances:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd5dcaa5ffe3e48149dbd383e35eb049f?width=705" alt="Featured Snippet Strategy" /><ol><li>Answer specific questions clearly and concisely</li>
<li>Use structured data and clear formatting (headers, lists, tables)</li>
<li>Create high-quality, authoritative content</li>
<li>Keep information up-to-date and comprehensive</li>
<li>Focus on satisfying user intent</li></ol><p>Remember, Google ultimately decides which content to feature based on what best serves user needs. These strategies can help, but there's no guarantee of being featured.</p><h2>The best AI SEO tools</h2><p>Here are some standout AI-powered SEO tools that can help in various ways, from AI writing tools to auditing a website's performance.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F7b0265362b7a45be89945f1495c37f90?width=705" alt="SEO Tools" /><h3>Content assistants</h3><ol><li><a href="https://surferseo.com/ai/">Surfer SEO</a>: combines AI-powered content creation with SEO optimization, allowing users to generate high-quality, ready-to-rank articles in minutes while analyzing competitors and optimizing for search intent across multiple languages. Side note - you can connect your Google Search Console, which will help with internal linking as you generate content.</li>
<li><a href="https://www.clearscope.io/">Clearscope</a>: an advanced SEO tool that uses artificial intelligence to analyze top-ranking content, provide keyword suggestions, and offer real-time optimization guidance to help create highly relevant, search engine-friendly articles. Create optimized content or specific SEO content easily. They even have a fun <a href="https://workspace.google.com/marketplace/app/clearscope/322717127952">Google Docs plugin</a> to make the content creation process smoother.</li></ol><h3>Site auditing</h3><ol><li><a href="https://ahrefs.com/blog/ai-features/">Ahrefs</a>: integrates AI into its SEO toolkit to automate keyword research, analyze search intent, grade content, translate keywords, and fix technical issues, streamlining the entire SEO workflow.</li>
<li><a href="https://www.semrush.com/">Semrush</a>: very similiar to Ahrefs but also has an AI Writing Assistant to help create SEO-optimized content, from ideation to final drafts, with real-time optimization suggestions.</li></ol><h3>LLMs</h3><ol><li><a href="https://claude.ai/">Claude</a>: I know I’m not including ChatGPT in this list and they do a fine job. But in my experience, Claude has an edge in content creation, keyword research, and SEO strategy development. The more I work with technical teams, the more I see them adopting Claude as an AI tool over ChatGPT, at least for now.</li></ol><p>As an SEO professional, I've come to appreciate AI SEO software for their ability to provide deep insights and handle repetitive tasks. I often recommend Ahrefs and SurferSEO, but there are many options available. Part of the enjoyment - and the challenge - is finding the right mix of tools for your specific needs. I’m a bit of a tool junkie and can find myself going down rabbit holes, but I do warn you, these aren't free AI SEO tools. Try to remember that these tools enhance our capabilities, but it's our collaboration with team members, strategic thinking, and understanding of our audience that ultimately drives SEO success.</p><h2>Builder and SEO</h2><p><a href="https://www.builder.io/">Builder.io</a> is built with SEO in mind. It gives you tools to create search-friendly content without making things complicated. Here's how Builder helps with SEO and site performance:</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd291f24da34340b8acf4cf6dc74dbd39?width=705" alt="Builder and SEO" /><h3>SEO features:</h3><ol><li><b>Metadata Fields:</b> Builder's default <a href="https://www.builder.io/c/docs/models-pages">Page Model</a> includes meta titles and meta descriptions. Always fill these out - they're crucial for search engine optimization.</li>
<li><b>Custom SEO Fields:</b> You can add your own fields for things like noindex or nofollow tags.</li>
<li><b>Mobile-Friendly:</b> Builder's styles work well on mobile by default, which Google loves.</li>
<li><b>Image Optimization:</b> Builder automatically optimizes images when you use its Image block or API. This helps your pages load faster.</li>
<li><b>Server-side Rendering:</b> Builder works with frameworks that render pages on the server, which can boost your SEO.</li></ol><h3>Core web vitals:</h3><p>Builder helps with Google's Core Web Vitals in a few ways:</p><ul><li><strong>Largest Contentful Paint (LCP):</strong>&nbsp;Builder's automatic image optimization and CDN delivery help large images load faster, improving LCP scores.</li><li><strong>First Input Delay (FID):</strong>&nbsp;Builder's SDKs support code splitting out-of-the-box, which can reduce JavaScript execution time and improve FID.</li><li><strong>Cumulative Layout Shift (CLS):</strong>&nbsp;Builder's responsive design tools and preview features help you create stable layouts that don't shift unexpectedly as the page loads.</li></ul><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F86cb85533e5d469e8ffeed519e2a794a?width=45" alt="Light bulb tip icon." /><div><p><strong>Tip: </strong>Read more about <a href="https://www.builder.io/m/explainers/seo-core-web-vitals" rel="noopener noreferrer" target="_blank">Builder and Core Web Vitals</a>.</p></div><h3>SEO best practices with Builder:</h3><ol><li><b>Use Proper Headings:</b> Set your Text Blocks as H1, H2, etc. when appropriate.</li>
<li><b>Optimize Images:</b> Use Image blocks and add good alt text.</li>
<li><b>Create a Sitemap:</b> You can use Builder's API to make a sitemap.</li>
<li><b>Check Performance:</b> Use tools like <a href="https://github.com/GoogleChrome/lighthouse">Google Lighthouse</a> or <a href="https://pagespeed.web.dev/">PageSpeed Insights</a> to monitor your site's speed. We’ve even built this pretty cool performance tool, <a href="https://www.builder.io/c/performance-insights">Performance Insights</a>.</li></ol><p>By leveraging these features and following these practices, you'll be well on your way to creating SEO-friendly sites with <a href="https://www.builder.io/">Builder.io</a>.</p><h2>SEO's new identity crisis</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F594eff9ddcc24423b5b4820f83397416?width=705" alt="Identity Crisis" /><p>So, is it SEO or content marketing with a side of tech optimization? It’s not one or the other, in reality it’s a partnership that should be a primary focus.</p><p>The "new" SEO strategy isn't new at all. It's what good marketers have been doing for decades: focusing on customer needs and aiming for ROI.</p><p>Think about it:</p><ul><li>Creating content that answers user questions? That's just good copywriting.</li><li>Focusing on user intent? That's basic customer service.</li><li>Building authority in your niche? Welcome to Brand Building 101.</li></ul><p>AI hasn't revolutionized SEO, it has just double-downed on the prior strategies, while heavily weighing on helpful content with a couple new focus areas. And the tech stuff - site speed, structured data, mobile optimization - that's still there.</p><p>As search engines get smarter, they're putting a premium on truly helpful, relevant stuff. So that's where to focus. Create quality content. Solve real problems and experiment with AI tools. That's the ticket to SEO success now and down the road.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F86cb85533e5d469e8ffeed519e2a794a?width=45" alt="Light bulb tip icon." /><div><p><strong>Tip: </strong>Here is a super helpful <a href="https://developers.google.com/search/docs/fundamentals/seo-starter-guide" rel="noopener noreferrer" target="_blank">starter guide</a> for SEO, thanks to Google Search Central.</p></div><h3>About me</h3><p>I'm <a href="https://www.linkedin.com/in/lucasstahl/">Luke Stahl</a>, a front-end developer and digital marketer with a passion for SEO. My philosophy? Build, ship, and learn as you go.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/seo-ai">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5a8aaf1d2ebf4d04a3f80a0ea95bddd6" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5a8aaf1d2ebf4d04a3f80a0ea95bddd6"/>
        </item>
        <item>
            <title><![CDATA[High-Performance Personalization For Modern Frontends]]></title>
            <link>https://www.builder.io/blog/high-performance-personalization</link>
            <guid>https://www.builder.io/blog/high-performance-personalization</guid>
            <pubDate>Thu, 26 Sep 2024 05:00:00 GMT</pubDate>
            <description><![CDATA[Personalization doesn't have to slow your site down. We'll dive into techniques that balance speed, flexibility, and cost.]]></description>
            <content:encoded><![CDATA[<p>Personalizing websites is like walking a tightrope. We want <em>Blazing Fast™</em> performance, deeply personalized end user experiences, and easy management. Sounds simple, right? Well, not quite.</p><p>In this post, we'll dive into different personalization approaches, from <a href="https://www.builder.io/m/explainers/server-side-rendering" rel="noopener noreferrer" target="_blank">server-side rendering</a> to edge trimming. We'll look at their pros and cons, and how each balances performance, flexibility, and ease of use.</p><h2>What We're Aiming For</h2><p>When it comes to personalization for modern frontend apps, we're aiming for four things:</p><ol><li><strong>Best Possible Performance</strong>: We want our page loads to be fast. Like zoom zoom.</li><li><strong>Granular and Flexible Personalization</strong>: We want to personalize deeply and flexibly, not just swap out a line of text.</li><li><strong>Easy Creation and Management</strong>: We don't want to wrestle with complex systems just to change an image.</li><li><strong>Low Cost</strong>: We want to keep our infrastructure and operational costs down.</li></ol><p>On top of this, we'll want to support any modern frontend (React, Next.js, Vue, Svelte, Remix, Qwik, etc) and nearly any hosting provider and/or CDN.</p><p>Sounds simple enough, right? Well, not quite.</p><p>Achieving all four of these goals simultaneously is like trying to nail jelly to a wall. It's tricky, messy, and you'll probably end up with sticky hands. But don't worry, we're going to explore some approaches that can help you find the sweet spot for your needs.</p><h2>Approach 1: Server-Side Rendering for Every Request</h2><p>This is like having a personal chef who cooks a fresh meal for you every time you're hungry. Sounds great, but it's not always practical.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F0e544c4610b841fe9ea3e84a29699aeb?width=726" alt="Diagram of server side rendering flow" /><p>Here's what this might look like in code, for instance in Next.js:</p><pre><code>export async function getServerSideProps({ req }) {
  const user = await getUserData(req.cookies.userId);
  const content = await getContent({
    model: 'page',
    userAttributes: { audiences: user.interests }
  });

  return { props: { content } };
}
</code></pre><p>Server-side rendering for every request is the most straightforward approach to personalization in some ways. Every time a user requests a page, your server springs into action, fetching all the necessary data, and serving up a perfectly tailored page. This gives you ultimate flexibility in personalization.</p><p>But here's the catch: it's slow. Every single page view requires a round trip to your server, which has to do work before sending anything back to the user. If your user is in Australia and your server is in the US, that's a long trip for the data to make.</p><p>Plus, if your site gets popular, you might find your servers sweating harder than a programmer trying to explain why the project is behind schedule. Needless to say, this can get expensive.</p><p>Pros:</p><ul><li>Highly flexible personalization</li>
<li>Server has full control over the output</li></ul><p>Cons:</p><ul><li>Performance can take a hit</li>
<li>Scaling can be costly</li></ul>
      <p>Grading:</p>
      <ul>
        <li>Performance: <span class="dark-mode-invert">⭐⭐</span> (2/5)</li>
        <li>Flexibility: <span class="dark-mode-invert">⭐⭐⭐⭐⭐</span> (5/5)</li>
        <li>Ease of Creation/Management: <span class="dark-mode-invert">⭐⭐⭐⭐</span> (4/5)</li>
        <li>Cost: <span class="dark-mode-invert">⭐</span> (1/5)</li>
      </ul>
    <h2>Approach 2: Edge Caching + Client-Side Injection</h2><p>This is like having pre-cooked meals delivered to your door, and then adding your own special sauce before eating.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff117ff9d95d34fc7a8e931bbfee709b3?width=726" alt="Diagram of client side rendering flow" /><p>In this case, we will cache the core of the page (any parts that don’t need to be personalized), and fill in the personalized details client side, for instance with a skeleton loader until rendered.</p><p>Here's a simplified example of how we can move the personalized bits into the client, for instance with React:</p><pre><code>const [contentPromise] = useState(async function() {
  const user = await getUser();
  // fetch the personalized hero for this user
  // e.g. from Builder.io
  const content = await getContent({
    model: 'hero',
    userAttributes: { audiences: user.audiences }
  });
  return content;
})
const content = use(contentPromise)
</code></pre><p>Edge caching with client-side injection gives you the speed of static content with the flexibility of personalization. You serve a cached, static version of your page from a CDN, which loads fast (literally the fastest way anything can load - CDN to user immediately). Then, JavaScript kicks in and starts fetching personalized content to inject into the page.</p><p>This approach is popular because it's relatively easy to implement, works with any frontend and backend stack, and is cost efficient. But it's not all sunshine and rainbows. There's often a noticeable delay between when the page loads and when the personalized content appears, which can lead to a janky user experience.</p><p>There's also the SEO problem. Search engines might not see your personalized content because they don't always execute JavaScript. And while the initial page load is fast, you're making additional API calls after the page loads, which can slow down the overall experience.</p><p>Pros:</p><ul><li>Fast initial page load</li>
<li>Works with any tech</li></ul><p>Cons:</p><ul><li>Delay between page load and personalized content appearance</li>
<li>SEO issues</li></ul>
      <p>Grading:</p>
      <ul>
        <li>Performance: <span class="dark-mode-invert">⭐⭐⭐</span> (3/5)</li>
        <li>Flexibility: <span class="dark-mode-invert">⭐⭐⭐⭐</span> (4/5)</li>
        <li>Ease of Creation/Management: <span class="dark-mode-invert">⭐⭐⭐</span> (4/5)</li>
        <li>Cost: <span class="dark-mode-invert">⭐⭐⭐⭐</span> (4/5)</li>
      </ul>
    <h2>Approach 3: Edge Rendering</h2><p>This is like having that personal chef, but they're in a food truck right outside your house.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb171e1df3b924611ae99faac5ee9b799?width=726" alt="Diagram of edge rendering flow" /><p>Here's what this might look like using a Remix loader, for instance hosted on Cloudflare’s edge:</p><pre><code>async function loader(request) {
  const user = await getUser(request);
  const content = await getContent({
    model: 'page',
    userAttributes: { audiences: user.interests }
  });
  return content;
}</code></pre><p>Edge rendering brings computation closer to the user, reducing latency and improving performance. Instead of your request traveling halfway around the world to reach a central server, it only needs to go to the nearest edge location. This approach is similar to server side rendering per request but with some performance improvements.</p><p>But it's not all smooth sailing. One of the biggest challenges is data availability. Not all of your data might be easily accessible at the edge, which might require additional round trips across the world to various sources of data before a response can be fully sent. Edge computing environments also often have limitations that can make development more complex.</p><p>Despite these challenges, edge rendering can be powerful for many use cases. It's like having a food truck with a gourmet chef – great if you need it, but maybe too much if you're just serving hot dogs.</p><p>Pros:</p><ul><li>Faster than traditional server rendering</li>
<li>Can still provide highly personalized content</li></ul><p>Cons:</p><ul><li>Not all data is available at the edge</li>
<li>Can get complex with streaming and such</li></ul>
      <p>Grading:</p>
      <ul>
        <li>Performance: <span class="dark-mode-invert">⭐⭐⭐</span> (3/5)</li>
        <li>Flexibility: <span class="dark-mode-invert">⭐⭐⭐⭐</span> (4/5)</li>
        <li>Ease of Creation/Management: <span class="dark-mode-invert">⭐⭐⭐</span> (3/5)</li>
        <li>Cost: <span class="dark-mode-invert">⭐⭐⭐</span> (3/5)</li>
      </ul>
    <h2>Approach 4: Edge Augmentation</h2><p>This is like ordering a standard meal but having the delivery person add a personalized garnish before they hand it to you.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb362f75e380f4f8a982a51c06e76b805?width=726" alt="Diagram of edge augmentation flow" /><p>In this world, we respond with cached content but swap in some dynamic parts as needed at the edge.</p><pre><code>
async function handleRequest(request) {
  const [html, user] = await Promise.all([
    getHtml(request), getUser(request)
  ]);

  // Swap out special strings with personalized info
  return html.replace('%%USER_NAME%%', user.name)
}
</code></pre><p>Edge augmentation is a middle ground between serving entirely static content and generating fully personalized pages for each request. You start with a pre-generated page that's cached at the edge, then make small, targeted modifications based on user data before sending it to the browser.</p><p>The beauty of this approach is that you get the performance benefits of serving cached content, but you still have the ability to add personalized touches. It's particularly well-suited for things like injecting a user's name, swapping out a hero image based on location, or other very surgical operations.</p><p>However, it's important to note that edge augmentation is not a replacement for full server-side rendering. The personalizations you can make are highly limited in scope. You're working with an existing HTML structure, so making sweeping changes to the layout or content structure can be challenging.</p><p>Pros:</p><ul><li>Fast response times</li>
<li>Allows for some personalization</li></ul><p>Cons:</p><ul><li>Limited in the scope of personalizations</li>
<li>Can be tricky to implement for complex changes</li></ul>
      <p>Grading:</p>
      <ul>
        <li>Performance: <span class="dark-mode-invert">⭐⭐⭐⭐⭐</span> (5/5)</li>
        <li>Flexibility: <span class="dark-mode-invert">⭐⭐⭐</span> (3/5)</li>
        <li>Ease of Creation/Management: <span class="dark-mode-invert">⭐⭐</span> (2/5)</li>
        <li>Cost: <span class="dark-mode-invert">⭐⭐⭐⭐</span> (4/5)</li>
      </ul>
    <h2>Approach 5: Segmentation at the Edge</h2><p>This is like having a few different pre-prepared meals and choosing which one to serve based on what you know about the diner.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F3957609c8232420ab8fd8c7801171c78?width=726" alt="Diagram of edge segmentation flow" /><p>In this approach we will redirect users based on their attributes to a finite set of segments.</p><pre><code>async function handleRequest(request) {
  if (!request.url.searchParams.has('segment')) {
    const userSegment = getUserSegment(request)
    const newURL = new URL(request.url)
    newUrl.searchParams.set('segment', userSegment)
    redirect(newUrl)
  }
  // serve the content for this segment, e.g. at ?segment=...
}
</code></pre><p>Segmentation at the edge works by determining which segment a user belongs to and then serving them a pre-generated version of the page tailored to that segment. These pages could be generated statically or just be simple server side rendered pages using stale-while-revalidate caching (e.g. <code>Cache-Control: stale-while-revalidate=...</code>)</p><p>This allows for more significant personalizations than edge augmentation, while still maintaining excellent performance.</p><p>However, you're limited to a fixed number of segments. You can't have an infinite number of variations, or you lose the benefits of caching. This means you need to carefully choose your segments to ensure you're covering your most important use cases without creating too many variations.</p><p>Despite these challenges, segmentation at the edge can be a powerful approach for many websites. It's particularly well-suited for cases where you have clear, distinct user groups with different needs (for instance - an ecommerce site with known menswear shoppers, womenswear shoppers, or unknown/anonymous).</p><p>It's a bit like running a restaurant where you have a few set menus designed for different types of diners.</p><p>Pros:</p><ul><li>Fast response times</li>
<li>Allows for more significant personalizations</li></ul><p>Cons:</p><ul><li>Limited to a fixed number of segments</li>
<li>Requires careful planning of segments</li></ul>
      <p>Grading:</p>
      <ul>
        <li>Performance: <span class="dark-mode-invert">⭐⭐⭐⭐⭐</span> (5/5)</li>
        <li>Flexibility: <span class="dark-mode-invert">⭐⭐⭐</span> (3/5)</li>
        <li>Ease of Creation/Management: <span class="dark-mode-invert">⭐⭐⭐</span> (3/5)</li>
        <li>Cost: <span class="dark-mode-invert">⭐⭐⭐⭐</span> (4/5)</li>
      </ul>
    <h2>Approach 6: Edge-Trim Personalization</h2><p>This is like giving the diner a menu with all the options, but having a waiter who knows their preferences and points out the dishes they're most likely to enjoy.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2a8198ab298047a1a566e11fddde3496?width=726" alt="Diagram of edge-trim personalization flow" /><p>Edge-Trim Personalization serves a single HTML file containing all content variations, which can be aggressively cached at the edge. Then, at the edge, you process this HTML to show only the relevant content for that specific user before sending it to the browser.</p><pre><code>async function handleRequest(request) {
  const html = await getHtml(request)
  const smallHtml = trimHtml(html, {
    userAttributes: { audiences: user.audiences },
  });
  return html
}</code></pre><p>This approach allows for incredibly granular personalization and is great for SEO because all the content is in the initial HTML. This approach even can work without an edge worker too. Platforms like <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a> use inline scripts as a fallback that swaps the content on the client that best match the given user, instantly while the page is rendering.</p><p>I find this approach to be incredibly powerful. It works well with visual editing tools and provides a lot of flexibility. It's like having a restaurant where the menu includes every possible dish, but each diner only sees the dishes that are relevant to them.</p><p>One of the key strengths of this approach is it works even without an edge worker to trim HTML. By default the HTML is saved with inline scripts that executes the personalization synchronously on the client, like:</p><pre><code>&lt;div class=&quot;hero&quot;&gt;
  &lt;h1 class=&quot;title&quot;&gt;Hello there&lt;/h1&gt;
  &lt;script&gt;
    if (userAttributes.segments.includes('returnVisitor')) {
      document.currentScript.previousElementSibling.textContent = 'Welcome back!'
     }
  &lt;/script&gt;
&lt;/div&gt;</code></pre><p>Given this, no CDN is necessary, and due to the nature of gzip, you can have a large amount of personalizations with a small (for instance 5-10%) payload increase. But in the case of using the CDN to trim, if you are in the returnVisitor user segment, you would just get:</p><pre><code>&lt;div class=&quot;hero&quot;&gt;
  &lt;h1 class=&quot;title&quot;&gt;Welcome back!&lt;/h1&gt;
&lt;/div&gt;</code></pre><p>The main downside of this approach is that it requires special tooling that can generate this code across modern frameworks (accounting for correct hydration, etc). Platforms like <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a> support this and give a visual editor to make edits visually or with natural language.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F369752955eda47a285e8a7798f066303%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=369752955eda47a285e8a7798f066303&alt=media&optimized=true" type="video/mp4">
    </video><p><em>Example of using </em><a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank"><em>Builder.io</em></a><em> to personalize parts of a page with natural language</em></p><p>But, rolling this your own can be a bit complex and perhaps best to use one of the other options.</p><p>Pros:</p><ul><li>Optimal caching</li>
<li>Allows for highly granular personalization</li>
<li>Flexible personalization at the edge</li>
<li>SEO-friendly</li></ul><p>Cons:</p><ul><li>Requires special tooling and not the easiest to roll your own</li></ul>
      <p>Grading:</p>
      <ul>
        <li>Performance: <span class="dark-mode-invert">⭐⭐⭐⭐⭐</span> (5/5)</li>
        <li>Flexibility: <span class="dark-mode-invert">⭐⭐⭐⭐⭐</span> (5/5)</li>
        <li>Ease of Creation/Management: <span class="dark-mode-invert">⭐⭐⭐⭐⭐</span> (5/5)</li>
        <li>Cost: <span class="dark-mode-invert">⭐⭐⭐⭐</span> (4/5)</li>
      </ul>
    <h2>Putting It All Together</h2><p>So, what's the best approach? As with most things in tech, it depends on your specific use case. But here's my general recommendation:</p><ol><li>Start with edge caching. It's the foundation of good performance.</li><li>For below-the-fold content or non-critical personalizations, consider client-side fetching, especially for things that need 1:1 personalization such as per-user recommended products.</li><li>Consider edge segmentation if you have well-defined user segments and don't need super granular personalization.</li><li>For a best of all worlds approach, look into platforms like <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a> that gives you the developer and end-user tooling to implement edge-trim personalization effectively, as well as every other option covered here.</li></ol><p>Remember, the goal is to provide a personalized experience without sacrificing performance, flexibility, ease of management, or cost. It's a balancing act, but with these tools in your toolkit, you're well-equipped to handle it.</p><p>Here's a quick summary of how each approach stacks up:</p><style></style>
      <table>
        <thead>
          <tr>
            <th>Approach</th>
            <th>Performance</th>
            <th>Flexibility</th>
            <th>Ease of Use</th>
            <th>Cost</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Server-Side Rendering</td>
            <td><span class="dark-mode-invert">⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐</span></td>
          </tr>
          <tr>
            <td>Edge Caching + Client-Side</td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐</span></td>
          </tr>
          <tr>
            <td>Edge Rendering</td>
            <td><span class="dark-mode-invert">⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐</span></td>
          </tr>
          <tr>
            <td>Edge Augmentation</td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐</span></td>
          </tr>
          <tr>
            <td>Segmentation at the Edge</td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐</span></td>
          </tr>
          <tr>
            <td>Edge-Trim Personalization</td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐⭐</span></td>
            <td><span class="dark-mode-invert">⭐⭐⭐⭐</span></td>
          </tr>
        </tbody>
      </table>
    <p>As you can see, Edge-Trim Personalization offers a great balance across all four criteria, which is why it's my personal favorite and why, while we support all of the above approaches with Builder.io’s personalization features, I push people to consider Edge-Trim personalization most.</p><p>However, the best approach for you will depend on your specific needs, resources, and constraints.</p><h2>Wrapping Up</h2><p>Personalization is a powerful tool, but it needs to be wielded carefully. By understanding these different approaches, you can choose the right strategy for your specific needs.</p><p>Keep in mind:</p><ul><li>Performance is key. Don't sacrifice it for personalization.</li><li>Caching is your friend. Use it wisely.</li><li>Be flexible. Different parts of your site might benefit from different approaches.</li><li>Start small and iterate.</li><li>Always keep your users in mind.</li><li>Consider the cost implications of your chosen approach.</li></ul><p>The world of web personalization is constantly evolving. New techniques and technologies are emerging all the time, pushing the boundaries of what's possible. Stay curious, keep learning, and don't be afraid to experiment.</p><p>Remember, the goal of personalization isn't just to show different content to different users. It's to create experiences that resonate, that feel tailored and relevant. When done right, personalization can make your users feel understood and valued. And that's pretty cool.</p><p>If you want a deep dive on what personalization approach is best for you, <a href="https://www.builder.io/m/demo" rel="noopener noreferrer" target="_blank">talk to our team</a>.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/high-performance-personalization">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2f30facf24df4657ac3169c6c0de2db3" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2f30facf24df4657ac3169c6c0de2db3"/>
        </item>
        <item>
            <title><![CDATA[Locale grouping: Scale localization initiatives more efficiently]]></title>
            <link>https://www.builder.io/blog/locale-grouping</link>
            <guid>https://www.builder.io/blog/locale-grouping</guid>
            <pubDate>Wed, 25 Sep 2024 16:00:00 GMT</pubDate>
            <description><![CDATA[New locale grouping feature. Covers benefits and examples of the feature to help users manage and maintain locales more efficiently.]]></description>
            <content:encoded><![CDATA[<p><span style="text-align: inherit; letter-spacing: inherit; font-weight: inherit; font-size: inherit; font-family: inherit; color: inherit;">Companies with a global presence need to personalize their content to tap into the right markets. At Builder, we provide our customers a way to <a href="https://www.builder.io/c/docs/localization-intro">localize their content</a> to serve relevant content to the right audience. But as any content manager knows, juggling multiple locales can quickly become a logistical nightmare. Copy-pasting content across similar languages, managing minor regional variations, and ensuring consistency across all your locales can eat up countless hours and introduce errors.</span><br></p><p>

</p><p>To make localization feel like a breeze, we’ve recently introduced locale grouping. Let's dive into what it does and how it can help your team manage multilingual content.</p>
<h2>What is locale grouping?<br></h2><p>Locale grouping allows you to bucket your locales into relevant groups. This helps teams accomplish two main things:</p>
<ol>
<li>It helps you manage your locales better</li>
<li>It introduces a secondary fallback system</li>
</ol>
<p>Let's break these down.</p>
<h3>Better locale management</h3><p>First off, locale grouping gives you a cleaner way to organize your locales. You can group related locales together and view them in a more structured format. This might not sound like a big deal, but when you're juggling dozens of locales, having them neatly organized can be a huge relief.<br></p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fa73a1eaf9a064ddfa740889f3f7ccd40?width=705" alt="" /><h3>Secondary fallback system</h3>The second (and probably more exciting!) feature is the secondary fallback system. You can set one locale per group as the Group Default. When content is not specified for any other locales in the group, they’ll fall back to the content from Group Default. If the Group Default is also empty, they’ll fall back to the content from the main Default locale. This system can save you a ton of time and effort, especially when you have locales with similar content.<img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F8e64493189ee4c5f9a5938b63d08720a?width=705" alt="" /><h2>How to set up locale grouping</h2><p>Locale grouping is available today for teams on Enterprise plans. Setting up groups for your locales is straightforward:</p><ol><li>Navigate to the Locales section in your Space settings.</li><li>Click on 'New Group', and name your group. Select the locales you want to include in that group, and click on 'Assign To Group'. You'll be able to see a list of your created groups, and can select the group to which you want to assign the selected locales.</li><li>Alternatively, you can select the locales you want to group, click on 'Assign To Group', and select 'New Group' from the dropdown. This creates a new group containing your selected locales.</li><li>Assign a locale as the Group Default for the group.</li><li>Save your changes.</li></ol><p>You can create as many groups as needed for your Space. For a more detailed explanation, visit our <a href="https://www.builder.io/c/docs/grouping-locales" rel="noopener noreferrer" target="_blank">documentation</a>.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F74e35c82669f4e20bbecaa6ec751ea88%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=74e35c82669f4e20bbecaa6ec751ea88&alt=media&optimized=true" type="video/mp4">
    </video><h2>A real-world example: Managing French content</h2><p></p><p></p><p><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; text-align: inherit;">Let's say you're running a website for a company that operates across Europe. You have separate locales for French (France), French (Belgium), French (Switzerland), and so on. Most of the time, the content for these locales is identical, but occasionally you need something different for a specific country.</span><br></p><p></p><p></p><p>Without locale grouping, you'd probably find yourself copying content from French (France) to all the other French locales whenever the content is supposed to be the same across those locales. It works, but it's tedious and error-prone.</p><p>Instead, you could create a group called French, set French (France) as the Group Default and enter content for French (France). Now, for all the locales where the content is the same as French (France), you don't need to do anything. They'll automatically use the content from French (France).</p><p>If you need something different for, say, French (Switzerland), you can still enter specific content for that locale, or copy from French (France) and make edits to that content. When you do, it'll use that new content instead of falling back to French (France).</p><p>Here are some more applications for locale grouping:</p><p>





</p><ul>
<li><strong>E-commerce Product Descriptions</strong>:
For an online store serving English-speaking countries (US, UK, Australia), you can group these locales together. Set US English as the default, and only update UK and Australian content where specific terminology or pricing differs.</li>
<li><strong>Software Documentation</strong>:
If you're managing documentation for Spanish-speaking countries (Spain, Mexico, Argentina), you can group these locales. Use Spanish (Spain) as the default, and only create specific content for Mexican or Argentinian Spanish where dialectal differences are significant.</li>
<li><strong>Food and Beverage Promotions</strong>:
If you're a food and beverages provider, serving several different countries, you can create groups based on country, with locales set up for different regional languages. For example, for India, you would have locales such as English, Hindi or Punjabi. You could set English (India) as the default for content across your website, and create region-specific content for promotional events.</li>
</ul>
<h2>Benefits of locale grouping</h2><p>Locale grouping offers several advantages:</p><ul>
<li>Less manual copying and pasting</li>
<li>Reduced chance of errors or inconsistencies</li>
<li>Easier to make global changes (just update the group default!)</li>
<li>Still flexible when you need locale-specific content</li>
</ul><p>


</p><p>In short, it lets you focus on the content that actually needs to be different, instead of spending time duplicating content that's the same.</p>
<h2>Wrapping up</h2><p>Locale grouping is a powerful tool for teams dealing with multilingual content. It can help you manage your locales more effectively, save time, and reduce errors.</p>
<p>One thing to note: this feature is only available to our Enterprise customers. If you're interested in using it, please reach out to our <a href="https://www.builder.io/m/demo">Sales team</a> for more info.<br><br>Ready to get started? Log in to your Builder account and try Locale Grouping today!<br></p>

    <h5><i>Read the <a href="https://www.builder.io/blog/locale-grouping">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F9ebdea9c72fd4a06baeb4802d98dc00f" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F9ebdea9c72fd4a06baeb4802d98dc00f"/>
        </item>
        <item>
            <title><![CDATA[Cursor vs GitHub Copilot]]></title>
            <link>https://www.builder.io/blog/cursor-vs-github-copilot</link>
            <guid>https://www.builder.io/blog/cursor-vs-github-copilot</guid>
            <pubDate>Fri, 20 Dec 2024 11:30:00 GMT</pubDate>
            <description><![CDATA[Compare Cursor & GitHub Copilot's features for code completion, generation, and project-wide understanding. Find out which AI assistant best fits your workflow.]]></description>
            <content:encoded><![CDATA[<p>Let's talk about AI coding assistants. They're basically the new hot topic in dev tools, and for good reason. They're designed to help developers write code more efficiently and with fewer errors. They're pretty dang cool.</p><p>While there are quite a few players in this space, let's zoom in on two of the major contenders. In one corner, we've got GitHub Copilot, the established player. In the other, Cursor, the new kid on the block shaking things up. Both are trying to make our lives easier as devs.</p><p>After spending some time with Copilot and Cursor, I thought it might be useful to break down how they stack up against each other. Whether you're curious about trying them out or just want to know what all the fuss is about, stick around. We're going to dig into some of the key features that matter to us as developers.</p><h2><b>Cursor AI</b></h2><p><a href="https://www.cursor.com/">Cursor</a> is basically an AI-powered code editor on steroids. It is a fork of <a href="https://code.visualstudio.com/">Visual Studio Code</a>, bringing advanced AI capabilities to a familiar interface.</p><h2><b>GitHub Copilot</b></h2><p><a href="https://github.com/features/copilot" rel="noopener noreferrer" target="_blank">GitHub Copilot</a>&nbsp;is an AI coding assistant that helps you write code faster and with less effort, allowing you to focus more energy on problem solving and collaboration. </p><p>Developed by GitHub in collaboration with OpenAI, it uses machine learning to generate code suggestions and complete tasks directly in your code editor (Visual Studio Code, Visual Studio, Vim/Neovim, JetBrains IDEs).</p><p>Both Cursor AI and GitHub Copilot offer a range of features designed to enhance productivity and support developers. Let's dive into the specific features and see how these two compare.</p><h2>Tab completion</h2><p>You know that feeling when you're typing and the IDE just <i>gets</i> what you're trying to do? That's what we're talking about here.</p><h3>Cursor</h3><p>Cursor's tab completion is pretty wild. It'll suggest multiple lines of code, and it's looking at your whole project to make those suggestions. For TypeScript and Python files - when Tab suggests an unimported symbol, Cursor will auto-import it to your current file. Plus, it even tries to guess where you're going to edit next.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F76740aa064914e0abc659948bb1f2bc0%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=76740aa064914e0abc659948bb1f2bc0&alt=media&optimized=true" type="video/mp4">
    </video><h3>Copilot</h3><p>Copilot's more focused on inline suggestions. Tab to accept, and you're off to the races. It often predicts the next logical line of code based on the developer's style, which can significantly speed up coding tasks. Need options? Hit <code>Alt+]</code> or <code>Alt+[</code> to cycle through different suggestions, or <code>Ctrl+Enter</code> to see multiple alternatives in a new tab.</p><h2>Code generation</h2><p>This is where things get interesting. Imagine describing what you want your code to do, and boom — it's there.</p><h3>Cursor</h3><p>Cursor has this thing called Composer that can create entire applications based on your description. It's looking at your whole project when it generates code, so it tries to match your style. Use <code>⌘ + I</code> to open it, and <code>⌘ + N</code> to create a new Composer. For inline generation, boilerplate code and edits, you can use the <code>⌘ + K</code> feature. Impressively, it can work with multiple programming languages within the same project, adapting its suggestions accordingly.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd92d67af14a04eca9e8557c929e66171%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d92d67af14a04eca9e8557c929e66171&alt=media&optimized=true" type="video/mp4">
    </video><h3>Copilot</h3><p>Copilot's more about those inline suggestions, but Copilot Chat can handle bigger chunks of code if you ask it nicely. The CLI can also generate code if you describe what you want in plain English.</p><h2>Chat</h2><p>Sometimes you just need to ask a question. But is chatting with an AI actually helpful?</p><h3>Cursor</h3><p>Cursor's chat (<code>⌘ + L</code>) is context-aware, so it knows what you're working on. You can also drag &amp; drop folders into Chat to provide additional context and apply code suggestions right from the chat, which is neat. It even supports images for visual context.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ff8b0d453716849699344ceeceec2c18e%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=f8b0d453716849699344ceeceec2c18e&alt=media&optimized=true" type="video/mp4">
    </video><h3>Copilot</h3><p>GitHub Copilot Chat is similar — you can ask it to explain code or suggest improvements. It's integrated right into VS Code, so it feels pretty seamless. They've been rolling out some new features lately, like better chat history, drag and &amp; folders and ways to attach more context. But if you're already using Cursor, you might not find anything groundbreaking here.</p><h2>Terminal</h2><p>Terminal work can be a pain, especially with complex commands.</p><h3>Cursor</h3><p>Cursor extends its AI smarts to the terminal with <code>⌘ + K</code>. It's pretty handy for translating vague ideas into actual commands. However, it hijacks the terminal's clear shortcut, which is just kind of annoying.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5272c7d2c21c4f84a0dcb9dca6bc4c64%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=5272c7d2c21c4f84a0dcb9dca6bc4c64&alt=media&optimized=true" type="video/mp4">
    </video><h3>Copilot</h3><p>Copilot's got a slick terminal integration that lets you just hit ⌘ + I, type what you want, and get the command you need. No need to be a bash wizard anymore – just describe what you want to do in plain English, hit enter, and you're good to go. The <code>command + enter</code> shortcut to run the suggested command is very handy.</p><h2>Context awareness</h2><p>This is a big one. Can these tools actually understand your whole project, or are they just looking at the current file?</p><h3>Cursor</h3><p>Cursor's pretty impressive here. It looks at your entire codebase and project structure. You can even use @ symbols to reference specific parts of your project, like @Files, @Folders, @Code, and more.</p>
<video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F8bfdd09bafec4773b902c44c7d989341%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=8bfdd09bafec4773b902c44c7d989341&alt=media&optimized=true" type="video/mp4">
    </video><h3>Copilot</h3><p>Copilot's pretty smart about context too. It looks at your open files to figure out what's going on and can pick up cues from your imports, comments, and function names. Use a '#' to reference files or use the 'Attach Context' button to pick exactly what you want Copilot to look at.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F7c1d5b7d80ae435fbe5e8e5299a23fad%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=7c1d5b7d80ae435fbe5e8e5299a23fad&alt=media&optimized=true" type="video/mp4">
    </video><h2>Multi-file support</h2><p>Support for working across multiple files enables AI assistants to understand and modify complex project structures.</p><h3>Cursor</h3><p>Cursor's Composer can make changes across your entire project, which is pretty powerful. It understands how different files and components relate to each other. Composer can generate files for an entire app at once. I’ve personally used the feature to refactor a single file into more organized files and folders.</p><h3>Copilot</h3><p>Copilot's latest addition is its Edits feature, and it's pretty sweet. Just define your working set of files, describe what you want in plain English, and watch Copilot make changes across multiple files. You can review each change, accept what works, and iterate until you get it right.</p><p>In our testing, we found the feature to be surprisingly slow, sometimes getting stuck in infinite loading states or making incorrect file changes.</p><p>Pro tip: manually specify your files instead of relying on automatic detection – it's more work, but you'll get more reliable results.</p><h2>AI agent</h2><p>This is about having an AI assistant that can take control of your editor – running commands, managing files, and handling project-wide tasks.</p><h3>Cursor</h3><p>In Composer, hit <code>⌘.</code> and you've got yourself Cursor Agent, a super-powered AI assistant. It'll automatically grab context, run terminal commands, handle files, and even do semantic code search. The catch? It only works with Claude models, and each operation counts against your quota. But when you need to get things done fast, it's an absolute game-changer.</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F0dc168adfc8d40699d1478a4fb250e95%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=0dc168adfc8d40699d1478a4fb250e95&alt=media&optimized=true" type="video/mp4">
    </video><h3>Copilot</h3><p>Nothing quite like this in Copilot's toolkit yet. While Copilot Chat can handle some similar tasks, it doesn't have the same level of integrated project-wide assistance.</p><h2>Code review</h2><p>We all need a second pair of eyes sometimes. AI-powered code review can provide automated feedback on code quality, potential bugs, and adherence to best practices.</p><h3>Cursor</h3><p>Cursor's new bug finder is pretty neat. It scans your code and branch changes against main, rating each potential bug it finds. One click and it'll fix things right in your editor. There's a catch though – you'll pay per click (we're talking a dollar or more each time)</p><video muted autoplay loop playsinline controls>
      <source src="https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2F7857571c386f4870ba400c809fd41a57%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=7857571c386f4870ba400c809fd41a57&alt=media&optimized=true" type="video/mp4">
    </video><h3>Copilot</h3><p>Copilot's just rolled out a code review feature that's pretty sweet (though still in limited release). Hit the review button in your Source Control tab, and it'll check your staged or unstaged changes. It drops suggestions right inline in your code that you can apply with one click. Skip what you don't like, accept what you do – simple as that.</p><h2>Customization</h2><p>One size doesn't fit all in coding. Can you bend these tools to fit your specific needs, or are you stuck with what they give you?</p><h3>Cursor</h3><p>Cursor lets you set custom instructions through settings and <code>.cursorrules</code> files. You can tailor it to your project's specific needs.</p><h3>Copilot</h3><p>Copilot supports custom instructions through a <code>.github/copilot-instructions.md</code> file, similar to Cursor's approach. This lets you specify your coding preferences and conventions, which Copilot will follow when generating code.</p><h2>AI commit messages</h2><p>Let's see how these tools handle git commits.</p><h3>Cursor</h3><p>AI-generated commit messages might not sound like much, but it saves me a couple of minutes every day and reduces the mental load of coming up with good commit messages. Now, Cursor does have this habit of being a bit...wordy with its commit messages. You can tweak that behavior by adding some instructions in the <code>.cursorrules</code> file.</p><h3>Copilot</h3><p>Copilot does this pretty nice by default. Just hit the auto-generate commit message button and you're good to go. I've found their messages to be cleaner and more concise compared to Cursor's, though you'll probably still want to give them a quick review before committing.</p><h2>IDE integration</h2><p>Nobody wants to switch between a bunch of tools.</p><h3>Cursor</h3><p>Cursor is its own thing — it's built on top of VS Code, so it'll feel familiar if you're used to that.</p><h3>Copilot</h3><p>Copilot on the other hand integrates with various IDEs — VS Code, IntelliJ, Neovim. The CLI works in any terminal.</p><h2>Models</h2><h3>Cursor</h3><p>Cursor offers a range of models, including GPT-4o, o1, Claude 3.5 Sonnet, and their custom cursor-small model. You can choose based on what you need — speed or capability.</p><h3>Copilot</h3><p>Copilot has expanded its model offerings significantly. You can now choose between different models including Claude 3.5 Sonnet, o1, and GPT-4o. This flexibility lets you optimize for different tasks – whether you need quick code completions or more complex reasoning and understanding.</p><h2>Pricing</h2><p>Let's talk money. How do their pricing models compare?</p><h3>Cursor</h3><p>Cursor has a free Hobby tier with limited features, a Pro tier for $20/month, and a Business tier for $40/user/month.</p><h3>Copilot</h3><p>Copilot <a href="https://code.visualstudio.com/blogs/2024/12/18/free-github-copilot" rel="noopener noreferrer" target="_blank">now offers a free tier</a> with limited features (like 12,000 completions per month), while Pro plans start at $10/month. For teams, there's Business at $19/user/month and Enterprise at $39/user/month.</p><h2>Wrapping up: and the winner is...</h2><p>After diving deep into both Cursor and GitHub Copilot, it's time to pick a champ. And drum roll, please...Cursor takes the crown. Its unique features make it a hard sell to beat in the world of AI-assisted coding.</p><p>Now, don't get me wrong, Copilot is a solid tool. It's great for quick suggestions and it plays nice with a bunch of different IDEs. But Cursor? It's just operating on another level.</p><p>Here's why Cursor wins out:</p><ol><li>Project-wide smarts: Cursor's ability to understand and work with your entire codebase is still unmatched. Copilot's context awareness can get sluggish with larger projects.</li><li>Speed and reliability: Cursor's Composer consistently outperforms when it comes to project-wide operations. While Copilot's new Edits feature is promising, it often gets stuck or slows to a crawl. Cursor just gets the job done.</li><li>Agent power: With Cursor, you get a polished Agent mode that just gets what you're trying to do</li></ol><p>Copilot is still a powerful tool, and if you're looking for something that's easy to integrate into your existing workflow, it might be the way to go. Its code completion capabilities are certainly impressive. But if you want to really push the boundaries of what AI can do for your coding, Cursor is where it's at.</p><p>Of course, the best tool is the one that works for you. So give them both a spin if you can. But if you're asking me? Cursor's the one to beat right now.</p><h2>My preferred AI stack</h2><p>My preferred workflow, overall look like this:</p><ol><li>For coding, I work iteratively with Cursor</li><li>Our design team works within Figma</li><li><a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder.io</a> converts designs to code and also patches in design updates as they're needed</li></ol><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F706fed109d0c48b68b87fd0278e07f85?width=705" alt="Diagram of my preferred AI stack" /><p>But those are just my preferences, what are yours?</p><div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;"><iframe src="https://www.youtube.com/embed/Wl5NJVieiBM?rel=0" style="top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;" allowfullscreen scrolling="no" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share;"></iframe></div><p>If you enjoyed this post, you might also like:</p><ul><li><a href="https://www.builder.io/blog/devin-vs-cursor" rel="noopener noreferrer" target="_blank">$500 Devin vs $20 Cursor</a></li><li><a href="https://www.builder.io/blog/windsurf-vs-cursor" rel="noopener noreferrer" target="_blank">Windsurf vs Cursor</a></li><li><a href="https://www.builder.io/blog/train-ai" rel="noopener noreferrer" target="_blank">Training Your Own AI Model</a></li></ul>
    <h5><i>Read the <a href="https://www.builder.io/blog/cursor-vs-github-copilot">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F0375d64d9a304d4a9fd26b621be1042d" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F0375d64d9a304d4a9fd26b621be1042d"/>
        </item>
        <item>
            <title><![CDATA[Figma Plugins for Developers in 2024]]></title>
            <link>https://www.builder.io/blog/best-figma-plugins</link>
            <guid>https://www.builder.io/blog/best-figma-plugins</guid>
            <pubDate>Wed, 18 Sep 2024 05:00:00 GMT</pubDate>
            <description><![CDATA[These Figma plugins bridge design and development. Learn how they can help with tasks like prototyping, asset management, and more.]]></description>
            <content:encoded><![CDATA[<p>Figma has become a go-to platform for design, prototyping, and collaboration. Its real power, however, lies in its extensibility. With plugins, you can supercharge your workflow, bridging the gap between design and development more seamlessly than ever before.</p><p>In this post, we'll explore some of the best Figma plugins that can make your dev life not just easier but maybe even a bit more fun. Whether you're a designer looking to hand off cleaner assets or a developer wanting to streamline your workflow, these plugins will help get you started.</p><h2><b>What are Figma plugins?</b></h2><p>Before we dive into the specific plugins, let's talk about what Figma plugins are. Think of them as add-ons or extensions that supercharge Figma's capabilities. <a href="https://www.figma.com/community">Figma plugins</a> are pieces of software that integrate directly with Figma's interface. They can do all sorts of things:</p><ul><li>Automate repetitive tasks</li>
<li>Add new features to Figma</li>
<li>Connect Figma to other tools and services</li>
<li>Enhance existing Figma functionality</li></ul><p>The cool thing about Figma plugins is that they're not just made by the Figma team. There's a whole community of developers out there creating plugins to solve specific problems or add cool new features. It's like having a bunch of dev buddies constantly working to improve your Figma experience.</p><p>You can find plugins for all sorts of tasks, and the best part is that most of them are free to use. With that in mind, let's explore some standout plugins that can seriously level up your Figma game.</p><h2>Stark</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fb65e014f53ce462a943a974f5922fabd?width=705" alt="Stark.png" /><p>First up, we've got <a href="https://www.figma.com/community/plugin/732603254453395948/stark-contrast-accessibility-checker" rel="noopener noreferrer" target="_blank">Stark</a>. It's all about making your designs accessible from the get-go. It checks for color contrast and other accessibility features so you can ensure your projects are inclusive from the start. No more accessibility as an afterthought!</p><p>Key features:</p><ul><li>Color contrast checker with color suggestions</li><li>Landmarks and Focus Order for screen readers and other assistive technologies</li><li>Vision Simulator colorblind simulation</li><li>Accessibility guidelines, including Alt-Text Annotations</li></ul><h2>Bannerify</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fdef09319ea0f4e128ac6e68686766e7b?width=705" alt="Bannerify.jpeg" /><p>Need to create banner ads? <a href="https://www.figma.com/community/plugin/796124491692147799/bannerify-banner-studio">Bannerify's</a> got your back. Instead of coding everything manually, this plugin generates banners automatically. That frees you up to focus on other important aspects of your work. Less time on banners, more time on the fun stuff.</p><p>Key features:</p><ul><li>Automatic banner generation</li>
<li>Easy timeline animation with real-time previews in Figma</li>
<li>Export to multiple formats: HTML/CSS, GIF, MP4, WebM, and ad platforms</li>
<li>Embed Lottie animations and MP4 videos, with optional audio tracks</li>
<li>Automatic asset optimization and responsive HTML preview pages</li></ul><h2>Autoflow</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd986931640bf4e95b5a5038f1343d34f?width=705" alt="Autoflow.png" /><p><a href="https://www.figma.com/community/plugin/733902567457592893/autoflow">Autoflow</a> helps you understand user behavior before your app even launches. You can link frames together to create interactive prototypes, visualize user journeys, and spot potential issues early in the development process. It's like having a crystal ball for your UX.</p><p>Key features:</p><ul><li>Frame linking for prototypes</li>
<li>User flow visualization</li>
<li>Interactive preview</li>
<li>Offset start/end terminal spacing and multiple terminal styles</li></ul><h2>Responsify</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2464a1c92cd942798e1026110922b34a?width=705" alt="Responsify.png" /><p><a href="https://www.figma.com/community/plugin/743654854885744527/responsify">Responsify</a> turns your Figma designs into responsive web applications. It automatically adjusts your designs based on device type so that you can go from mockups to functional prototypes with less effort. Responsive design made way less painful. This plugin is open source, and contributions are encouraged.</p><p>Key features:</p><ul><li>Automatic responsive layout generation</li>
<li>Device-specific adjustments</li>
<li>CSS output</li></ul><h2>Wireframe</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F29d93195a6504730bc7ff06aa6d2cb56?width=705" alt="Wireframe.png" /><p>Sometimes, you need to strip things back to basics. <a href="https://www.figma.com/community/plugin/742764242781786818/wireframe">Wireframe</a> helps you do just that, letting you quickly create low-fidelity wireframes. Wireframe is a powerful tool for collaborative project ideation and user flow design, offering over 350 custom-built graphics that cover most web and mobile elements. It's great for focusing on structure and functionality without getting bogged down in visual details.</p><p>Key features:</p><ul><li>Low-fidelity wireframe components</li>
<li>Quick prototyping tools</li>
<li>Customizable elements</li></ul><h2>Visual Copilot</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F2c0f96e29c7e4a3ca9270ca0de3f7ccb?width=705" alt="Visual Copilot.png" /><p><a href="https://www.figma.com/community/plugin/747985167520967365" rel="noopener noreferrer" target="_blank">Visual Copilot</a>&nbsp;is an AI-powered&nbsp;<a href="https://www.builder.io/blog/figma-to-code-ai" rel="noopener noreferrer" target="_blank">Figma to code</a>&nbsp;toolchain that leverages AI models and an open-source compiler,&nbsp;<a href="https://mitosis.builder.io/" rel="noopener noreferrer" target="_blank">Mitosis</a>, to transform flat designs into code hierarchies, refined by an LLM for framework and styling preferences.</p><p>Key features:</p><ul><li>Converts Figma designs to code for multiple frameworks (<a href="https://www.builder.io/blog/convert-figma-to-react-code" rel="noopener noreferrer" target="_blank">React</a>, <a href="https://www.builder.io/blog/figma-to-vue" rel="noopener noreferrer" target="_blank">Vue</a>, <a href="https://www.builder.io/blog/figma-to-svelte" rel="noopener noreferrer" target="_blank">Svelte</a>, <a href="https://www.builder.io/blog/figma-to-angular" rel="noopener noreferrer" target="_blank">Angular</a>, Qwik, Solid, React Native, <a href="https://www.builder.io/blog/convert-figma-to-html" rel="noopener noreferrer" target="_blank">HTML</a>)</li><li>Generates responsive layouts with your choice of styling library (CSS, <a href="https://www.builder.io/blog/figma-to-tailwind" rel="noopener noreferrer" target="_blank">Tailwind</a>, Emotion, Styled Components)</li><li>Supports component mapping to integrate with existing design systems</li><li>Offers real-time conversion and code customization options</li></ul><p>The goal is to make visual design more accessible and speed up the design process, especially for developers and people who may not have deep design skills. It's not meant to replace designers but rather to augment design workflows and help bridge the gap between development and design.</p><h2>Iconify</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc6e835ba02d54fb2a4b315331be303d7?width=705" alt="Iconify.png" /><p><a href="https://www.figma.com/community/plugin/735098390272716381/iconify" rel="noopener noreferrer" target="_blank">Iconify</a> gives you access to over 200,000 open-source icons right in Figma. No more hunting around for that perfect icon — just search, click, and insert. It's a huge time-saver when you're working on UI design.</p><p>Key features:</p><ul><li>200,000+ open-source icons</li><li>In-app search functionality</li><li>Easy insertion into designs</li></ul><h2>Run Plugin API</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F5227967d7ee440bb8339cdc60c6d31d3?width=705" alt="Run Plugin API .png" /><p>This one's for the tinkerers. <a href="https://www.figma.com/community/plugin/1061937426144722953/run-plugin-api" rel="noopener noreferrer" target="_blank">Run Plugin API</a> lets you, well, run the Figma Plugin API right in Figma. It's great if you want to create your own custom plugins or experiment with the API. Get your hands dirty with some Figma plugin development!</p><p>Key features:</p><ul><li>Direct access to <a href="https://www.figma.com/plugin-docs/api/api-reference/?fuid=1276633539175500747" rel="noopener noreferrer" target="_blank">Figma Plugin API</a></li><li>Code execution with IntelliSense within Figma</li><li>Testing ground for custom plugin development</li></ul><h2>Lorem Ipsum</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ffb8fd15142d143d9940cb79d7e499611?width=705" alt="Lorem Ipsum.jpeg" /><p>Sometimes, you need some placeholder text; that’s where the <a href="https://www.figma.com/community/plugin/736000994034548392/lorem-ipsum">Lorem Ipsum</a> plugin comes in handy. This plugin generates lorem ipsum text in various formats, making it easy to fill your designs with realistic-looking content. It's a small thing, but it can save you a bunch of time, and by saving you, we mean in one click.</p><p>Key features:</p><ul><li>Auto-generate</li>
<li>Multiple lorem ipsum variants</li>
<li>Customizable length</li>
<li>One-click insertion</li></ul><h2>Content Reel</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F42275999de02499680eac5edd016c130?width=705" alt="Content Reel.png" /><p>If lorem ipsum isn’t what you are looking for, try <a href="https://www.figma.com/community/plugin/731627216655469013/content-reel" rel="noopener noreferrer" target="_blank">Content Reel</a> for dynamic data. It lets you populate your designs with realistic content, which is great for testing how your layouts will behave with actual data. It enables you to access a cache of design elements, apply text strings and images to multiple layers programmatically, and integrate icons from built-in libraries. The plugin supports batch operations with customizable ordering and randomization. You can also create and manage new content, setting visibility flags as needed.</p><p>Key features:</p><ul><li>Dynamic content population</li><li>Various data types (such as names, addresses, and so on)</li><li>Customizable data sets</li></ul><h2>Email Love</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F7e23fb025a0448c2946d869fc1e4e307?width=705" alt="Email Love.png" /><p>If you're working on email templates, <a href="https://www.figma.com/community/plugin/1387891288648822744/email-love-html-email-builder" rel="noopener noreferrer" target="_blank">Email Love</a> is the plugin you must add. The Email Love plugin makes email development easier by letting you export responsive, production-ready HTML or MJML straight from Figma. It offers 40+ pre-built components and global style controls to help you design emails and create a consistent brand system. </p><p>You can also build custom components or convert existing templates, then export accessible, mobile-friendly email code that follows best practices. No more switching between design and coding tools for your email campaigns.</p><p>Key features:</p><ul><li>Figma-to-HTML/MJML export</li><li>Cross-client compatibility</li><li>Accessibility-first HTML</li><li>Modular component system</li></ul><h2>Datavizer</h2><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fac98ccb71b6f444aa96b4e196fe0c0bf?width=705" alt="Datavizer.png" /><p>Working with data visualization? <a href="https://www.figma.com/community/plugin/736737028247625415/datavizer">Datavizer</a> helps you create charts and graphs directly in Figma. It's a great way to prototype data-heavy interfaces without jumping into a separate tool.</p><p>Key features:</p><ul><li>Multiple chart types</li>
<li>Data import functionality (CSV of JSON)</li>
<li>Customizable styles</li></ul><h2>Wrapping up</h2><p>Figma plugins can speed up your workflow and improve collaboration. Some might even make your job more enjoyable if that's your thing.</p><p>Plugins are tools, not magic. They're designed to enhance your skills, not replace them. The real value comes from combining these tools with your own problem-solving abilities and creativity.</p><p>So go ahead and give these plugins a try. Experiment with them. Find out how they fit into your workflow. And who knows? You might find a new favorite tool that transforms the way you work.</p><h3>About me</h3><p>I'm <a href="https://www.linkedin.com/in/lucasstahl/" rel="noopener noreferrer" target="_blank">Luke Stahl</a>, a front-end developer and digital marketer. My philosophy? Build, ship, and learn as you go.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/best-figma-plugins">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fdf7ec5ab745440cab399a913eb30c2d8" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fdf7ec5ab745440cab399a913eb30c2d8"/>
        </item>
        <item>
            <title><![CDATA[The Rise, Fall, and Rebirth of Visual Editing]]></title>
            <link>https://www.builder.io/blog/evolution-of-visual-editors</link>
            <guid>https://www.builder.io/blog/evolution-of-visual-editors</guid>
            <pubDate>Mon, 16 Sep 2024 19:00:00 GMT</pubDate>
            <description><![CDATA[Learn how visual editors have evolved from basic CMS tools to the advanced AI-powered platforms they'll be in the future. ]]></description>
            <content:encoded><![CDATA[<p>Visual editors have come full circle in the world of content management systems (CMSs). Once a staple feature, they disappeared for a while, and now they're back with a vengeance.</p><p>But why? Let's dive into the history, evolution, and future of visual editors in the world of web development.</p><h2><b>The rise and fall of visual editing</b></h2><p>Traditional CMSs like WordPress came with built-in visual editors. Initially basic, these editors evolved to allow for image insertion, text styling, and even interactive widgets.</p><p>Then came the era of headless CMSs. These systems decoupled content from presentation, offering more flexibility in content delivery across platforms. However, this architectural shift came at a cost: <a href="https://www.builder.io/m/knowledge-center/visual-editing" rel="noopener noreferrer" target="_blank">visual editing</a> disappeared.</p><p>Content creators were left with abstract form fields and structured data, unable to see how their content would look on the final page. This wasn't just inconvenient — it significantly impacted workflows and business operations.</p><p>Updating a homepage or launching a time-sensitive landing page often required developer involvement, leading to bottlenecks. Marketing teams, once in control of their content, became dependent on development resources for even minor changes.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F06b25349f8eb4708bc49400bfa87071e?width=705" alt="evolution.png" /><p>The result? Slower campaigns, limited A/B testing, and reduced ability to respond quickly to market changes. Businesses found themselves less agile in their digital presence, despite the supposed flexibility of headless architecture.</p><p>This tension between technical benefits and practical content creation needs set the stage for the next evolution in content management systems — one that would aim to bring visual editing back into the headless world.</p><h2><b>Recognizing the gap</b></h2><p>This is where <a href="https://www.builder.io/" rel="noopener noreferrer" target="_blank">Builder</a> came in. We saw a gap in the market — a need for visual editing in a headless world. But we didn't just want to recreate the old visual editors. We wanted something better, something that could truly bridge the gap between developers and content creators.</p><p>Our journey began with a real-world problem. While working at ShopStyle, a company doing <a href="https://www.builder.io/m/knowledge-center/headless-commerce" rel="noopener noreferrer" target="_blank">headless commerce</a> at a massive scale (half a billion in GMV in 2014), I felt the pain of headless architecture firsthand. We had a cutting-edge tech stack, but our marketing team was struggling. They couldn't make the changes they needed without going through development, which slowed down their ability to optimize and personalize content.</p><p>This experience led to a crucial insight: in e-commerce, and many other industries, marketing-driven changes often have a bigger impact on sales than technological improvements. We needed a way to give marketers the power to make changes quickly, without sacrificing the benefits of our headless architecture.</p><p>Our initial requirements for Builder were ambitious:</p><ol><li>It had to work with any tech stack, just like a <a href="https://www.builder.io/m/knowledge-center/headless-cms-visual-guide" rel="noopener noreferrer" target="_blank">headless CMS</a>.</li><li>It needed to use the exact components and <a href="https://www.builder.io/c/docs/design-tokens" rel="noopener noreferrer" target="_blank">design tokens</a> that developers were using in their code.</li><li>It had to be publishable over an API, without requiring code deployment.</li><li>Most importantly, it needed to be as capable as coding, allowing for unlimited customization.</li></ol><p>We wanted marketers to be able to drag and drop components, <a href="https://www.builder.io/c/docs/import-from-figma" rel="noopener noreferrer" target="_blank">import designs from Figma</a>, and even add interactivity — all without needing to understand the underlying code.</p><h2><b>Looking beyond visual editing</b></h2><p>As we developed Builder, our vision expanded. We didn't stop at just creating a <a href="https://www.builder.io/c/docs/ui-ve-tour" rel="noopener noreferrer" target="_blank">visual editor</a> — we set out to build a complete visual development environment.</p><p>We added AI capabilities and Large Language Models (LLMs) to help with content generation and optimization. We developed features for <a href="https://www.builder.io/c/docs/abtesting" rel="noopener noreferrer" target="_blank">A/B testing</a> and <a href="https://www.builder.io/c/docs/cdp-with-builder" rel="noopener noreferrer" target="_blank">personalization</a>, allowing marketers to create targeted content variations easily. These additions made Builder not just a tool for making changes, but a platform for experimentation and optimization.</p><p>One key part of our efforts was developing a way to visually edit code. This means that anything created in Builder can be as performant and consistent with your codebase as if a developer had hand-coded it. It also means that developers can export anything created in Builder as code, giving them the flexibility to work with the visual editor's output in whatever way best fits their workflow.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F68426d54d8894d34af763b65b0604038?width=705" alt="Advantages.png" /><p>We focused on making Builder a true end-to-end solution. It's not just about making small text changes — it's about being able to create entire new pages, add new sections, run experiments, and connect to various data sources, all without needing to involve developers for every change.</p><p>This approach has allowed us to create a tool that's not just a compromise between developer needs and marketer needs, but a solution that empowers both. By building on a foundation of headless architecture, we've ensured that content created in Builder can be delivered anywhere, to any platform or device, while still providing the visual editing capabilities that marketing teams need.</p><p>The result? A platform that accelerates workflows and enables businesses to move at the speed of their ideas, truly bridging the gap between headless flexibility and visual editing power.</p><h2><b>The visual editor landscape</b></h2><p>Since Builder pioneered the headless visual editor, many other companies have jumped on the bandwagon. Contentful, ContentStack, Sanity, Storyblok, Prismic — they've all added some form of visual editing to their offerings.</p><p>But here's the thing — not all visual editors are created equal. There are tiers of visual editing capabilities, and many solutions fall short of what we consider the gold standard.</p><p>At the lowest tier, you have systems that simply provide a button to edit structured data with a visual preview. These don't offer much flexibility or reduce engineering costs significantly.</p><p>The next tier up might allow for rearranging existing components, but they often don't support creating net new designs, A/B testing, or personalization without developer involvement.</p><p>Many of these solutions feel tacked on, like an afterthought rather than a core feature. They often lack the depth and flexibility of a purpose-built visual editor like Builder's.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F0ddf0832c20f47dab98ec05b6448c8b5?width=705" alt="Tiers.png" /><p>Our visual editor isn't just a pretty interface slapped on top of a CMS. It's the foundation of our entire platform. This allows us to offer features that others can't, like:</p><ul><li>True drag-and-drop editing on a direct canvas</li><li>AI-powered content generation and manipulation</li><li>Seamless import from design tools like <a href="https://www.figma.com/community/plugin/747985167520967365/builder-io-ai-powered-figma-to-code-react-vue-tailwind-more" rel="noopener noreferrer" target="_blank">Figma</a></li><li>The ability to add interactivity and connect to data sources</li><li>Native A/B testing and personalization</li></ul><p>These features might not be immediately obvious when you're just looking at screenshots. But they make a world of difference when you're actually using the tool to create and manage content at scale.</p><h2>How this translates to business impact</h2><p>What makes a visual editor like Builder's so revolutionary for businesses? It all comes down to speed and cost-effectiveness.</p><p>In the world of <a href="https://www.builder.io/m/headless-commerce" rel="noopener noreferrer" target="_blank">e-commerce</a> and digital marketing, the ability to move quickly can make or break a business. A robust visual editor allows marketing and content teams to move at the speed of their ideas, rather than being bottlenecked by development resources.</p><p>Imagine creating a new <a href="https://www.builder.io/m/landing-pages" rel="noopener noreferrer" target="_blank">landing page</a> for a flash sale, launching it, and running A/B tests — all without writing a single line of code. Or personalizing your homepage for different audience segments in real-time. These agile marketing tactics can significantly boost conversion rates and drive revenue.</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Ffca0c837022747bc93422613fc4f9e88?width=705" alt="Impacts.png" /><p>But it's not just about speed. It's also about cost savings and resource allocation. By empowering marketing teams to make changes themselves, businesses can allocate their development resources to more complex, high-value tasks. This not only reduces costs, but also improves job satisfaction among developers, who can focus on building new features rather than making minor content updates.</p><p>Moreover, the ability to quickly test and iterate can lead to significant improvements in conversion rates and user engagement. This data-driven approach to content creation can substantially increase the ROI of your marketing efforts. We have customers who are moving four times faster at a quarter of the cost.</p><p>In essence, a robust visual editor doesn't just save time and money — it fundamentally changes how businesses approach their digital presence, allowing for a level of agility and experimentation that was previously impossible in a headless architecture.</p><h2><b>The future is visual (and AI-powered)</b></h2><p>So where do we go from here? At Builder, we're betting big on AI. We're working on features that will make content creation and optimization even more autonomous.</p><p>Imagine being able to have a conversation about your homepage in Slack, and then having an <a href="https://www.builder.io/blog/micro-agent" rel="noopener noreferrer" target="_blank">AI agent</a> automatically implement those changes, run an A/B test, and report back on the results. Or picture a world where every piece of content you create is automatically optimized for different audience segments.</p><p>This is the future we're building towards — a world where content creation is not just visual, but intelligent and autonomous. A world where ideas can go from conception to live on your site with minimal human intervention.</p><p>The visual editor has come a long way from its humble beginnings. And at Builder, we're excited to be at the forefront of its evolution. We believe that visual is the only way forward for creating digital experiences. It's faster, more intuitive, and more accessible. And when combined with the power of AI, it has the potential to revolutionize how we create and optimize content on the web.</p><p>So the next time you're frustrated with your current CMS or struggling to get changes made to your site, remember — there's a better way. The future of content management is visual, and it's already here.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/evolution-of-visual-editors">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F4e64dbe94f2748bf925fc389de8a7184" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F4e64dbe94f2748bf925fc389de8a7184"/>
        </item>
        <item>
            <title><![CDATA[Key Considerations for Next.js App Router Files]]></title>
            <link>https://www.builder.io/blog/nextjs-app-router-files</link>
            <guid>https://www.builder.io/blog/nextjs-app-router-files</guid>
            <pubDate>Thu, 12 Sep 2024 17:00:00 GMT</pubDate>
            <description><![CDATA[Dive into the 9 special routing files in Next.js App Router. We break down each file's purpose and spotlight crucial tips to boost performance and structure.]]></description>
            <content:encoded><![CDATA[<p>Next.js has become a powerhouse in the React ecosystem, and understanding its file conventions is key to getting the most out of it. In this blog post, we'll break down the 9 special routing files in the App Router, which replaces the older pages directory approach. We'll look at each file type and answer four main questions:</p><ol><li>What is it?</li>
<li>Why should you care?</li>
<li>How do you use it?</li>
<li>What are the key considerations?</li></ol><p>Let’s start with a brief intro about the App Router itself.</p><h2>Next.js App Router</h2><p>The Next.js App Router, introduced in Next.js 13, represents a shift from the previous pages directory approach. It uses folders in the app directory to define routes. </p><p>This new system supports layouts, loading states, and error handling at the route level. It also allows seamless mixing of client and server components, offering improved performance and a more flexible development experience from the first load onwards.</p><p>Now, let's dive into each of these special files, starting with the fundamental building block of Next.js routing.</p><h2><code>page.tsx</code></h2><h3>What</h3><p><code>page.tsx</code> contains the UI components that are unique to a route.</p><h3>Why</h3><p>This file is crucial because it works hand-in-hand with Next.js's folder structure to create your routing system. It means you can define the content for each page in your application.</p><h3>How</h3><ul><li>Create a <code>page.tsx</code> file in any folder within your <code>app</code> directory.</li>
<li>The file's location corresponds directly to the URL path.</li>
<li>Export a default React component that defines the page content.</li>
<li>You can nest folders inside other folders to create nested routes.</li></ul><p>Example:</p><pre><code>// app/blog/page.tsx
export default function BlogPage() {
  return &lt;h1&gt;Welcome to my blog&lt;/h1&gt;
}</code></pre><h3>Key considerations</h3><ol><li><b>Export type</b>: Always use <code>export default</code> for your page component, not a named export.</li>
<li><b>Directory structure</b>: Avoid mixing <code>pages/</code> and <code>app/</code> directories in the same project to prevent routing conflicts.</li>
<li><b>Data fetching</b>: Use the <code>fetch</code> API with <code>async/await</code> directly in your components.</li>
<li><b>Component type</b>: <code>page.tsx</code> components are Server Components by default. Add the <code>'use client'</code> directive at the top of your file if you need client-side interactivity for client components.</li></ol><h2><code>layout.tsx</code></h2><h3>What</h3><p><code>layout.tsx</code> creates a shared layout that wraps around your page content.</p><h3>Why</h3><p>This way you can create reusable layouts, reducing redundant code and ensuring a cohesive user experience across your site. Layouts are also performance-optimized, as they don't re-render when navigating between pages.</p><h3>How</h3><ul><li>Create a <code>layout.tsx</code> file in the <code>app</code> folder for a root layout, or in any subfolder for more specific layouts.</li>
<li>Export a default React component that accepts a <code>children</code> prop.</li></ul><p>Example:</p><pre><code>// app/layout.tsx
export default function Layout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    &lt;html lang=&quot;en&quot;&gt;
      &lt;body&gt;
        &lt;header&gt;Builder.io&lt;/header&gt;
        &lt;main&gt;{children}&lt;/main&gt;
        &lt;footer&gt;© 2024&lt;/footer&gt;
      &lt;/body&gt;
    &lt;/html&gt;
  )
}</code></pre><h3>Key considerations</h3><ol><li><strong>Root layout</strong>: The root layout (<code>app/layout.tsx</code>) must define the <code>&lt;html&gt;</code> and <code>&lt;body&gt;</code> tags.</li><li><strong>Nesting</strong>: Be mindful of how nested layouts interact with each other.</li><li><strong>Route information</strong>: Layouts don't have access to the current route segment. Use <code>useSelectedLayoutSegment</code> or <code>useSelectedLayoutSegments</code> hooks if needed.</li><li><strong>Rendering behavior</strong>: Layouts are not re-rendered when navigating between pages. Avoid using route-specific data in layouts.</li></ol><h2><code>template.tsx</code></h2><h3>What</h3><p><code>template.tsx</code> creates a reusable template that wraps around your page content, similar to <code>layout.tsx</code>, but it re-renders on each navigation.</p><h3>Why</h3><p>It's useful when you need a fresh state or want to trigger animations on every navigation, unlike layouts which persist across routes.</p><h3>How</h3><ul><li>Create a <code>template.tsx</code> file in any folder within your <code>app</code> directory.</li>
<li>Export a default React component that accepts a <code>children</code> prop.</li></ul><p>Example:</p><pre><code>&quot;use client&quot;;
import Link from &quot;next/link&quot;;
import { motion } from &quot;framer-motion&quot;;

export default function BlogTemplate({
  children,
}: {
  children: React.ReactNode,
}) {
  return (
    &lt;div&gt;
      &lt;ul&gt;
        &lt;li&gt;
          &lt;Link href=&quot;/blog/1&quot;&gt;Post 1&lt;/Link&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;Link href=&quot;/blog/2&quot;&gt;Post 2&lt;/Link&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
      &lt;motion.div
        initial={{ opacity: 0 }}
        animate={{ opacity: 1 }}
        transition={{ duration: 0.5 }}
      &gt;
        {children}
      &lt;/motion.div&gt;
    &lt;/div&gt;
  );
}</code></pre><h3>Key considerations</h3><ol><li><strong>Use cases</strong>: Use templates only when you specifically need their re-rendering behavior on each navigation.</li><li><strong>Performance</strong>: Be aware of potential performance impacts if overused, as they don't have the same optimizations as layouts.</li><li><strong>Layouts versus templates</strong>: Use templates in conjunction with layouts, not as an alternative.</li></ol><h2><code>loading.tsx</code></h2><h3>What</h3><p><code>loading.tsx</code> creates a loading UI that's shown while the content of a route segment is being loaded.</p><h3>Why</h3><p>It improves user experience by providing instant feedback during content loading, making your app feel more responsive and reducing perceived load times.</p><h3>How</h3><ul><li>Create a <code>loading.tsx</code> file in the same directory as your <code>page.tsx</code> file.</li>
<li>Export a default React component that defines your loading UI.</li></ul><p>Example:</p><pre><code>// app/blog/loading.tsx
export default function Loading() {
  return &lt;div&gt;Loading blog posts...&lt;/div&gt;
}</code></pre><h3>Key considerations</h3><ol><li><b>Suspense boundary</b>: The loading UI is automatically wrapped in a React Suspense boundary. Avoid nested Suspense usage in the loading component.</li>
<li><b>Layout shift</b>: Balance the benefit of showing a loading state against potential layout shifts when content loads.</li>
<li><b>Scope</b>: Loading states are shared by all pages in the same segment. Implement page-specific loading states differently if needed.</li>
<li><b>Dynamic routes</b>: Be aware that the loading state will show even when navigating between different dynamic routes.</li>
<li><b>Hierarchy</b>: <code>loading.tsx</code> only handles loading states for its route segment and children, not parent segments.</li></ol><h2><code>error.tsx</code></h2><h3>What</h3><p><code>error.tsx</code> creates a custom error UI that's displayed when an error occurs within a route segment.</p><h3>Why</h3><p>You can gracefully handle runtime errors, providing a better user experience when things go wrong instead of crashing the entire app.</p><h3>How</h3><ul><li>Create an <code>error.tsx</code> file in the same directory as your <code>page.tsx</code> file.</li>
<li>Export a default React component that accepts <code>error</code> and <code>reset</code> props.</li></ul><p>Example:</p><pre><code>'use client';
import { useRouter } from &quot;next/navigation&quot;;
import { startTransition } from &quot;react&quot;;

export default function Error({
    error,
    reset,
}: {
    error: Error &amp; { digest?: string }
    reset: () =&gt; void
}) {
    const router = useRouter();
    
    function handleReset() {
        startTransition(() =&gt; {
            reset();
            router.refresh();
        });
    }
    
    return (
        &lt;&gt;
            &lt;p&gt;Error: {error.digest}&lt;/p&gt;
            &lt;p&gt;
                &lt;button onClick={handleReset}&gt;Reset&lt;/button&gt;
            &lt;/p&gt;
        &lt;/&gt;
    );
}</code></pre><h3>Key considerations</h3><b style="letter-spacing: 0.2px;">&nbsp;1. Component type</b><span style="letter-spacing: 0.2px;">: </span><code style="letter-spacing: 0.2px;">error.tsx</code><span style="letter-spacing: 0.2px;"> must be a Client Component (use the </span><code style="letter-spacing: 0.2px;">'use client'</code><span style="letter-spacing: 0.2px;"> directive).</span><br><b style="letter-spacing: 0.2px;">2. Full Re-rendering</b><span style="letter-spacing: 0.2px;">: To re-render both client-side and server-side components:</span><br><ul><li>Use <code>startTransition()</code> to wrap both <code>reset()</code> and <code>router.refresh()</code>.</li>
<li><code>reset()</code> alone re-renders only client-side components.</li>
<li><code>router.refresh()</code> alone re-renders only server-side components.</li>
<li>Combining both within <code>startTransition()</code> ensures synchronized re-rendering of all components.</li></ul><b style="letter-spacing: 0.2px;">3. Error scope</b><span style="letter-spacing: 0.2px;">: It doesn't catch errors in the same segment's </span><code style="letter-spacing: 0.2px;">layout.tsx</code><span style="letter-spacing: 0.2px;"> or </span><code style="letter-spacing: 0.2px;">template.tsx</code><span style="letter-spacing: 0.2px;"> files.</span><br><b style="letter-spacing: 0.2px;">4. Error bubbling</b><span style="letter-spacing: 0.2px;">: Errors bubble up to the nearest parent error boundary. Implement appropriate error boundaries at different levels of your app.</span><br><h2><code>global-error.tsx</code></h2><h3>What</h3><p><code>global-error.tsx</code> creates a global error UI that catches and handles errors at the root of your Next.js application.</p><h3>Why</h3><p>It ensures that your users always get a meaningful error message, even if something goes catastrophically wrong at the highest level of your app.</p><h3>How</h3><ul><li>Create a <code>global-error.tsx</code> file in your <code>app</code> folder.</li>
<li>Export a default React component that accepts <code>error</code> and <code>reset</code> props.</li></ul><p>Example:</p><pre><code>'use client'

export default function GlobalError({
  error,
  reset,
}: {
  error: Error
  reset: () =&gt; void
}) {
  return (
    &lt;html&gt;
      &lt;body&gt;
        &lt;h2&gt;Something went wrong!&lt;/h2&gt;
        &lt;button onClick={() =&gt; reset()}&gt;Try again&lt;/button&gt;
      &lt;/body&gt;
    &lt;/html&gt;
  )
}</code></pre><h3>Key considerations</h3><ol><li><strong>Environment behavior</strong>: <code>global-error.tsx</code> only works in production. You'll get the default error overlay in development.</li><li><strong>Layout replacement</strong>: This component completely replaces the root layout when an error occurs.</li><li><strong>HTML structure</strong>: Include the and tags in your <code>global-error.tsx</code> component.</li><li><strong>Complexity</strong>: Keep the <code>global-error.tsx</code> component basic to minimize the risk of it causing errors itself.</li><li><strong>Error handling hierarchy</strong>: Use <code>global-error.tsx</code> as a last resort. Handle errors at more granular levels when possible.</li></ol><h2><code>not-found.tsx</code></h2><h3>What</h3><p><code>not-found.tsx</code> creates a custom UI for 404 Not Found errors in your Next.js application.</p><h3>Why</h3><p>You can create a branded, helpful page that guides users back to valid content when they encounter pages that don't exist.</p><h3>How</h3><ul><li>Create a <code>not-found.tsx</code> file in your <code>app</code> folder or in specific subfolders.</li>
<li>Export a default React component that defines your 404 page content.</li></ul><p>Example:</p><pre><code>import Link from 'next/link'

export default function NotFound() {
  return (
    &lt;div&gt;
      &lt;h2&gt;Not Found&lt;/h2&gt;
      &lt;p&gt;Could not find requested resource&lt;/p&gt;
      &lt;Link href=&quot;/&quot;&gt;Return Home&lt;/Link&gt;
    &lt;/div&gt;
  )
}</code></pre><h3>Key considerations</h3><ol><li><strong>Scope</strong>: <code>not-found.tsx</code> only handles not-found scenarios for its folder and subfolders.</li><li><strong>notFound() function</strong>: When using the <code>notFound()</code> function to trigger a not-found state, ensure a <code>not-found.tsx</code> file exists in the same segment or a parent segment.</li><li><strong>API routes</strong>: <code>not-found.tsx</code> doesn't handle 404 errors for API routes. Handle those separately.</li></ol><h2><code>default.tsx</code></h2><h3>What</h3><p><code>default.tsx</code> provides a fallback UI for parallel routes when no specific match is found.</p><h3>Why</h3><p>It's crucial for creating smooth user experiences in complex routing scenarios, especially when using parallel routes.</p><h3>How</h3><ul><li>Create a <code>default.tsx</code> file in a folder that's prefixed with <code>@</code>, which denotes a slot for parallel routing.</li>
<li>Export a default React component that defines your fallback UI.</li></ul><p>Example:</p><pre><code>// app/@sidebar/default.tsx
export default function DefaultSidebar() {
  return (
    &lt;div&gt;
      &lt;h2&gt;Default Sidebar Content&lt;/h2&gt;
      &lt;p&gt;Select a category to see more information.&lt;/p&gt;
    &lt;/div&gt;
  )
}</code></pre><h3>Key considerations</h3><ol><li><b>Usage context</b>: <code>default.tsx</code> is only relevant in the context of parallel routing.</li>
<li><b>Compatibility</b>: Ensure your <code>default.tsx</code> component is compatible with all possible states of your parallel routes.</li>
<li><b>Rendering behavior</b>: <code>default.tsx</code> will be rendered initially and then replaced when a more specific route is matched.</li>
<li><b>Design</b>: Design your <code>default.tsx</code> content to provide meaningful information or functionality in the absence of specific route content.</li></ol><h2><code>route.ts</code></h2><h3>What</h3><p>Use <code>route.ts</code> to create API routes directly within your app folder.</p><h3>Why</h3><p>It enables you to create serverless API endpoints alongside your frontend code, giving you fine-grained control over how your application responds to HTTP requests.</p><h3>How</h3><ul><li>Create a <code>route.ts</code> file in any route segment of your app directory.</li><li>Export functions named after HTTP methods, such as GET, POST, PUT, DELETE.</li></ul><p>Example:</p><pre><code>import { NextResponse } from &quot;next/server&quot;;

// Dummy data store (in a real app, this would be a database)
let todos = [
  { id: 1, title: &quot;Learn Next.js&quot;, completed: false },
  { id: 2, title: &quot;Build an app&quot;, completed: false },
];

export async function GET() {
  return NextResponse.json(todos);
}

export async function POST(request: Request) {
  const data = await request.json();
  const newTodo = {
    id: todos.length + 1,
    title: data.title,
    completed: false,
  };
  todos.push(newTodo);
  return NextResponse.json(newTodo, { status: 201 });
}</code></pre><h3>Key considerations</h3><ol><li><b>File conflicts</b>: Don't place a <code>page.tsx</code> file in the same folder as your <code>route.ts</code> file with a GET handler to avoid conflicts.</li>
<li><b>Execution context</b>: Remember that <code>route.ts</code> files are always executed on the server. Don't use browser-specific APIs here.</li>
<li><b>Static generation</b>: API routes defined with <code>route.ts</code> are not statically generated at build time.</li></ol><img src="https://cdn.builder.io/api/v1/image/assets/TEMP/109e96ea21252b82d1e31b1b1b1f63aae2ee6009b7262745e0c6b253fa5e21d2?placeholderIfAbsent=true&width=24" alt="" /><p>While the Pages Router is still supported, the App Router takes priority in new projects.</p><h2><strong>Wrapping up</strong></h2><p>So there you have it — the 9 special files that make routing in Next.js’ App Router tick. The App Router introduces many new features that make it easier to build interactive and performant applications. </p><p>With its file system hierarchy and React Server Components, it offers a powerful way to structure your projects. It might seem like a lot at first, but each file has its purpose and can make your life easier once you get the hang of it.</p><p>Remember, you don't need to use all of these in every project. Start with the basics like&nbsp;<code><strong>page.tsx</strong></code>&nbsp;and&nbsp;<code><strong>layout.tsx</strong></code>, and gradually incorporate the others as you need them. Before you know it, you'll be building complex, efficient and production ready Next.js apps like a pro.</p>
    <h5><i>Read the <a href="https://www.builder.io/blog/nextjs-app-router-files">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc338696780364239ba55cd5ab0a4c626" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fc338696780364239ba55cd5ab0a4c626"/>
        </item>
        <item>
            <title><![CDATA[Build Web Apps Absurdly Fast with Vite]]></title>
            <link>https://www.builder.io/blog/vite</link>
            <guid>https://www.builder.io/blog/vite</guid>
            <pubDate>Thu, 12 Sep 2024 16:00:00 GMT</pubDate>
            <description><![CDATA[Speed up web development with Vite. Instant server start, hot module replacement, and easy setup. Learn to build faster, smoother web apps today.]]></description>
            <content:encoded><![CDATA[<p>Let’s face it: the frontend build process has been slow and complicated for too long. Whether you’re dealing with Webpack, Parcel, or your custom Frankenstein monster setup (we’ve all been there), configuring and bundling a web app can be a drag.</p><p><a href="https://vitejs.dev/">Vite</a> is the new kid on the block, ready to blow your mind with speed and simplicity. And Vite isn’t just important for developers; it’s a game-changer for businesses. Speedy development cycles equals happy devs. Happy devs build better code. That means faster time-to-market and lower costs for your business or clients.</p><p>Vite is designed to make the pain of slow builds disappear. It takes advantage of native ES modules in the browser, eliminating the need for bundled code on dev builds. Translation: You get hot module replacement (HMR) so fast that your F5 key will feel neglected. Let’s dive into how you can make your projects Vite-powered and never look back.</p><img src="https://cdn.builder.io/api/v1/image/assets/TEMP/109e96ea21252b82d1e31b1b1b1f63aae2ee6009b7262745e0c6b253fa5e21d2?placeholderIfAbsent=true&width=24" alt="" /><p>Vite is a French word meaning “quick” or “fast.” It’s pronounced “veet” and rhymes with meet.</p><h2><span style="font-weight: 700;">Why Vite? Ain’t nobody got time for slow builds</span></h2><p>We all know how painful it is to stare at our screen, watching that progress bar crawl along. It’s enough to make you question your life choices.</p><p>Vite offers near-instantaneous cold server start, lightning-fast HMR, and builds that are quicker than you can say “npm install.”</p><ol><li><b>Lightning-fast dev startup:</b> Traditional tools like Webpack bundle all your code before serving it. Vite uses native ES modules to serve your code, so it starts fast — the browser loads only what it needs.</li>
<li><b>Hot Module Replacement:</b> Changes reflect instantly, making your development experience smoother than a jazz saxophone solo.</li>
<li><b>Out-of-the-box TypeScript support:</b> Vite handles TypeScript without setting up a complicated build pipeline.</li>
<li><b>Optimized builds:</b> When it’s time to ship, Vite uses Rollup to bundle your code efficiently. It splits your code into chunks, so users aren’t downloading stuff they don’t need.</li></ol><h2><span style="font-weight: 700;">Get started with Vite</span></h2><p>Let’s take Vite for a spin and find out what it can do!</p><h3>Step 1: Set up your Vite project</h3><p>First things first, let’s create a new Vite project. Assuming you have <a href="https://nodejs.org/">Node.js</a> installed, open up your terminal and run:</p><pre><code>npm create vite@latest my-awesome-vite-project -- --template react</code></pre><p>This command creates a new Vite project with <a href="https://react.dev/">React</a>. Feel free to replace “react” with “vue” or “vanilla” if that’s more your jam. <a href="https://svelte.dev/">Svelte</a>, <a href="https://preactjs.com/">Preact</a>, <a href="https://qwik.dev/">Qwik</a>, and others are supported, too!</p><h3>Step 2: Install dependencies and run the dev server</h3><p>Now, let’s install our dependencies and fire up that blazing-fast dev server:</p><pre><code>cd my-awesome-vite-project
npm install
npm run dev</code></pre><p>Boom! Your dev server is now running faster than a caffeinated squirrel. Open up your browser. Change one of the source files and marvel at the speed!</p><h3>Step 3: Structure your project</h3><p>Vite gives you a pretty bare-bones structure to start with. Here’s a typical setup:</p><pre><code>my-awesome-vite-project/
├── public/
│   └── vite.svg
├── src/
│   └── assets/
│       └── react.svg
│   ├── App.css
│   ├── App.jsx
│   ├── index.css
│   └── main.jsx
├── index.html
└── vite.config.js</code></pre><p>Feel free to add more folders like <code>styles</code>, <code>utils</code>, or <code>services</code>. Vite won’t judge you.</p><h3>Step 4: Customize your Vite config</h3><p>Open up <code>vite.config.js</code>, and let’s add a few settings:</p><pre><code>import { defineConfig } from &quot;vite&quot;;
import react from &quot;@vitejs/plugin-react&quot;;

export default defineConfig( {
  plugins: [ react() ],
  server: {
    port: 3000,
  },
  build: {
    outDir: &quot;dist&quot;,
    sourcemap: true,
  },
} );</code></pre><p>This config sets up your dev server port, output directory for builds, and enables source maps. There are lots more ways to configure Vite to meet your needs!</p><h3>Step 5: Add some code and watch the magic happen</h3><p>Let’s create a new component to see Vite’s HMR in action. Create a new file <code>src/Hello.jsx</code>:</p><pre><code>import { useState } from &quot;react&quot;;

export default function Hello() {
  const [ name, setName ] = useState( &quot;World&quot; );

  return (
    &lt;div&gt;
      &lt;h1&gt;Hello, {name}!&lt;/h1&gt;
      &lt;input
        type=&quot;text&quot;
        value={name}
        onChange={( e ) =&gt; setName( e.target.value )}
        placeholder=&quot;Enter a name&quot;
      /&gt;
    &lt;/div&gt;
  );
}</code></pre><p>Now, import and use this component in your <code>App.jsx</code>:</p><pre><code>import { useState } from &quot;react&quot;;
import reactLogo from &quot;./assets/react.svg&quot;;
import viteLogo from &quot;../public/vite.svg&quot;;
import &quot;./App.css&quot;;
import Hello from &quot;./Hello.jsx&quot;;

function App() {
  const [ count, setCount ] = useState( 0 );

  return (
    &lt;&gt;
      &lt;Hello /&gt;
      &lt;div&gt;
        &lt;a href=&quot;https://vitejs.dev&quot; target=&quot;_blank&quot;&gt;
          &lt;img src={viteLogo} className=&quot;logo&quot; alt=&quot;Vite logo&quot; /&gt;
        &lt;/a&gt;
        &lt;a href=&quot;https://react.dev&quot; target=&quot;_blank&quot;&gt;
          &lt;img src={reactLogo} className=&quot;logo react&quot; alt=&quot;React logo&quot; /&gt;
        &lt;/a&gt;
      &lt;/div&gt;
      &lt;h1&gt;Vite + React&lt;/h1&gt;
      &lt;div className=&quot;card&quot;&gt;
        &lt;button onClick={() =&gt; setCount( ( count ) =&gt; count + 1 )}&gt;
          count is {count}
        &lt;/button&gt;
        &lt;p&gt;
          Edit &lt;code&gt;src/App.jsx&lt;/code&gt; and save to test HMR
        &lt;/p&gt;
      &lt;/div&gt;
      &lt;p className=&quot;read-the-docs&quot;&gt;
        Click on the Vite and React logos to learn more
      &lt;/p&gt;
    &lt;/&gt;
  );
}

export default App;</code></pre><p>Save these files and watch as Vite updates your app faster than you can say, “Why didn’t I switch to Vite sooner?”</p><h2><span style="font-weight: 700;">Neat stuff Vite can do</span></h2><p>Vite isn’t a one-trick pony. It’s got some cool features:</p><ol><li><b>Static assets? Got you covered</b>: Vite optimizes your images and other assets automatically.</li>
<li><b>Environment variables? Yep</b>: Use <code>.env</code> files to manage different environments easily.</li>
<li><b>Plugins? Tons of ’em</b>: Need more features? There’s probably a plugin for that.</li>
<li><b>CSS pre-processors? Sure thing</b>: Want to use Sass? Just install it and start using it. Vite figures out the rest.</li></ol><h3>Example of adding Sass to Vite</h3><pre><code>npm install --save-dev sass</code></pre><p>Create a file named <code>App.scss</code> in the <code>src</code> folder and add some code, such as:</p><pre><code>$awesome-color: #ff69b4;
.card {
    color: $awesome-color;
}</code></pre><p>Update <code>App.jsx</code> to import the new Sass file:</p><pre><code>import './App.scss';</code></pre><h2><span style="font-weight: 700;">Wrapping up: Vite is sweet!</span></h2><ol><li><b>Speed matters</b> – Vite’s dev server is so fast you’ll forget you ever had to refresh a page.</li>
<li><b>Easy setup</b> – With one simple command, you can spin up a project, ready to go.</li>
<li><b>Framework agnostic</b> – Whether you’re into React, Vue, Svelte, Preact, Solid, Qwik, or you prefer the taste of plain vanilla JavaScript, Vite has your back.</li>
<li><b>Production ready</b> – Rollup optimization ensures your code is as lean and fast as possible.</li></ol><p>Now, go forth and build something awesome! Vite it!</p><img src="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F744261e2707a434981f77a463b26d0a5?width=195" alt="" /><h2><span style="font-weight: 700;">About Me</span></h2>,<p>Hi, I’m David! I’ve been a web developer pretty much since the beginning of the “World Wide Web”. My mission is to help folks in technology be more awesome! I also do all my own stunts… I mean… illustrations and graphics. You can learn more about me over on my website <a href="https://www.ReverentGeek.com" rel="noopener noreferrer">ReverentGeek.com.</a></p>
    <h5><i>Read the <a href="https://www.builder.io/blog/vite">full post</a> on the <a href="https://www.builder.io/blog">Builder.io blog</a></i></h5>
  ]]></content:encoded>
            <enclosure url="https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F744cebc4df3741d29de99b11a19fd721" length="0" type="image//api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F744cebc4df3741d29de99b11a19fd721"/>
        </item>
    </channel>
</rss>