<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luke Stahl</title>
    <description>The latest articles on DEV Community by Luke Stahl (@stahlwalker).</description>
    <link>https://dev.to/stahlwalker</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F629387%2Fb366dbb6-b3f5-4935-87d1-557a4f62f98c.jpeg</url>
      <title>DEV Community: Luke Stahl</title>
      <link>https://dev.to/stahlwalker</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stahlwalker"/>
    <language>en</language>
    <item>
      <title>What is developer marketing and why it exists</title>
      <dc:creator>Luke Stahl</dc:creator>
      <pubDate>Thu, 05 Feb 2026 13:52:04 +0000</pubDate>
      <link>https://dev.to/stahlwalker/what-is-developer-marketing-and-why-it-exists-394h</link>
      <guid>https://dev.to/stahlwalker/what-is-developer-marketing-and-why-it-exists-394h</guid>
      <description>&lt;p&gt;Developer marketing sits at the intersection of product marketing and growth marketing. You’re responsible for launches, messaging, and positioning, but also for how those decisions show up in campaigns, GTM, and adoption. The role owns the developer persona end to end and is accountable for both product-led and sales-led growth, not just shipping something.&lt;/p&gt;

&lt;p&gt;The role runs in parallel with most marketing functions, from content and lifecycle to web, demand gen, and RevOps. The scope doesn’t stop at signups. You’re responsible for the full funnel, which means accounting for revenue, not just activation. If people sign up but deals don’t close, that’s still a problem to solve.&lt;/p&gt;

&lt;p&gt;You’re also more technical than the average marketer. You’re closer to the product, the workflows, and the constraints, and you put developer trust first. Once that trust is lost, it’s hard to recover.&lt;/p&gt;

&lt;p&gt;That combination is what makes developer marketing both exciting and difficult. The role comes with overlap, ambiguity, and frequent justification, especially in developer-first companies where everyone speaks developer and ownership is rarely clean.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this role exists at all
&lt;/h2&gt;

&lt;p&gt;Most marketing is optimized to explain value at a high level. That breaks down when claims have to hold up under actual usage. Developers evaluate through workflows and constraints, and they notice quickly when something doesn’t..&lt;/p&gt;

&lt;p&gt;Developer marketing exists because this kind of evaluation requires technical judgment before messaging ships. Someone has to pressure-test positioning against how the product actually behaves. Someone has to surface mismatches early, before they turn into sales friction, support tickets, or churn that no one planned for.&lt;/p&gt;

&lt;p&gt;When that responsibility is missing, the gaps don’t disappear. They just move downstream, where they’re harder and more expensive to fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why developer-first companies make the role harder to see
&lt;/h2&gt;

&lt;p&gt;In companies built primarily for developers, developer context is everywhere. Marketing teams tend to be more technical and already speak to developers without translation. There’s a shared baseline for how developers think.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkirtxp16vte1kc1gaigz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkirtxp16vte1kc1gaigz.jpg" alt="devmkt_spiderman.jpg" width="537" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In those environments, developer marketing doesn’t always show up as a clearly defined function. The work spreads across teams. Parts of it live in product. Parts live in content, growth, or demand gen.&lt;/p&gt;

&lt;p&gt;That’s where confusion starts. Not because the role isn’t needed, but because responsibility is diffused. Everyone contributes. No one is clearly accountable for how the product is framed and evaluated by developers end to end. The role doesn’t disappear in developer-first companies. Accountability just becomes harder to pin down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why technical chops matter more than familiarity with developers
&lt;/h2&gt;

&lt;p&gt;There’s a difference between being adjacent to developers and having technical judgment. The first gives exposure. The second lets you evaluate whether something will hold up once it’s actually used.&lt;/p&gt;

&lt;p&gt;Developer marketers need to be able to read content and recognize when something is glossed-over. They need to look at a demo and tell whether it actually holds up. They need to understand why a limitation matters before customers encounter it and turn it into a problem.&lt;/p&gt;

&lt;p&gt;This isn’t about writing production code every day. It’s about understanding systems well enough to evaluate claims honestly. Familiarity with developer culture helps, but technical fluency is what makes the role effective.&lt;/p&gt;

&lt;h2&gt;
  
  
  What developer marketing is responsible for
&lt;/h2&gt;

&lt;p&gt;Developer marketing is responsible for maintaining clarity and credibility with a technical audience, even when ownership across teams is messy.&lt;/p&gt;

&lt;p&gt;In practice, that responsibility tends to show up in a few places:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shaping positioning and framing so it reflects how developers actually evaluate tools&lt;/li&gt;
&lt;li&gt;Validating that messaging aligns with development workflows, not idealized ones&lt;/li&gt;
&lt;li&gt;Surfacing mismatches early, before they ship and become someone else’s problem&lt;/li&gt;
&lt;li&gt;Representing developer reality consistently across product, sales, and marketing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn’t a checklist of tactics. When no one owns it, the gaps show up fast. Demos that fall apart under usage. Content that explains features but avoids constraints. Messaging that sounds right until someone tries to build with the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  How developer marketing runs alongside other marketing functions
&lt;/h2&gt;

&lt;p&gt;Developer marketing doesn’t replace product or growth marketing. In smaller companies, it often &lt;em&gt;is&lt;/em&gt; product and growth marketing because one person owns the work end to end. As teams grow, the functions split out, but the responsibility doesn’t disappear.&lt;/p&gt;

&lt;p&gt;In larger orgs, developer marketing becomes a coordinating role. Product marketing, growth, content, lifecycle, and RevOps have clear owners, but someone still has to keep the work aligned. Positioning has to match how the product actually works. Campaigns can’t get ahead of reality. Growth tactics can’t create downstream cleanup. That’s also why developer marketing experience scales into leadership. You’ve already had to own the whole system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer marketing vs Developer Relations
&lt;/h2&gt;

&lt;p&gt;Developer marketing and DevRel are often confused because they work with the same audience. They solve different problems. DevRel focuses on relationships, education, and feedback loops. Developer marketing focuses on clarity, positioning, adoption and revenue. There’s overlap in execution, but not in responsibility. They work best together. Things break when one is asked to replace the other.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I think about being a better developer marketer
&lt;/h2&gt;

&lt;p&gt;First, you should use the product. You should build with the thing you’re marketing. You should hit the same rough edges users hit and understand why they exist. It’s hard to explain limitations honestly if you’ve never run into them yourself.&lt;/p&gt;

&lt;p&gt;Second, use AI aggressively, but deliberately. Automate repetitive work and invest in reusable tools, like a writing style guide or a Claude skill, so you’re not starting from scratch every time.&lt;/p&gt;

&lt;p&gt;If you’re vibe coding, write instructions that explain what the generated code is doing. You should understand the structure of a codebase well enough to know where files live and how to update them manually if something breaks. Even if you work primarily in visual tools or AI editors, that baseline matters.&lt;/p&gt;

&lt;p&gt;Build a sandbox. Have a place where you can play around with different dev tools and see how they actually behave. My &lt;a href="https://lukestahl.io/" rel="noopener noreferrer"&gt;site&lt;/a&gt; became my personal playground.&lt;/p&gt;

&lt;p&gt;Learn from people who are close to the work and opinionated about it. I read an interesting &lt;a href="https://www.linkedin.com/posts/morganepalomares_questions-i-always-ask-in-interviews-how-activity-7417609243677356032-F4H1?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAVTVpMBxaiFbpYSMC1uTcI4crtPYBeihxA" rel="noopener noreferrer"&gt;question&lt;/a&gt; posed to potential hiring candidates, who do you think is doing marketing well? It made me run through the exercise and I think it’s important to follow folks who show their thinking, not just outcomes. Here are a couple folks that keep my wheels spinning, it a good way of course.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://x.com/theHankTaylor" rel="noopener noreferrer"&gt;Hank Taylor&lt;/a&gt; - Developer Marketing Advisor, &lt;a href="https://codetomarket.fm/" rel="noopener noreferrer"&gt;CodetoMarket&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/in/morganepalomares/" rel="noopener noreferrer"&gt;Morgane Palomares&lt;/a&gt; - VP of Marketing, &lt;a href="https://www.braintrust.dev/" rel="noopener noreferrer"&gt;Braintrust&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://x.com/Steve8708" rel="noopener noreferrer"&gt;Steve Sewell&lt;/a&gt; - CEO, &lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://x.com/james406" rel="noopener noreferrer"&gt;James Hawkins&lt;/a&gt;- Co-CEO, &lt;a href="https://posthog.com/" rel="noopener noreferrer"&gt;PostHog&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I keep most of this thinking written down so I don’t have to relearn the same lessons every time. I collect articles, threads, talks, and tools as &lt;a href="https://lukestahl.io/gems/" rel="noopener noreferrer"&gt;gems&lt;/a&gt;. Over time, that gets distilled into my &lt;a href="https://lukestahl.io/handbook/" rel="noopener noreferrer"&gt;developer marketing handbook&lt;/a&gt;, which is where I capture how I approach personas, messaging, enablement, and GTM strategies when developers are part of the equation.&lt;/p&gt;

&lt;h2&gt;
  
  
  A note on how I actually apply this
&lt;/h2&gt;

&lt;p&gt;I keep running into the same questions when I’m doing developer marketing work. What actually matters here? What’s noise? Where am I about to overcomplicate something or gloss over a constraint that will come back later?&lt;/p&gt;

&lt;p&gt;One example is a &lt;a href="https://github.com/Stahlwalker/developer-marketing" rel="noopener noreferrer"&gt;Developer Marketing Claude skill&lt;/a&gt; I built that turns my developer marketing handbook into an interactive reference. I plan to use it to get oriented quickly and sanity-check decisions when I’m moving fast. It’s not meant to replace judgment or thinking. It’s there to reduce the cost of starting from scratch every time.&lt;/p&gt;

&lt;p&gt;I’ve also published a &lt;a href="https://lukestahl.io/dev-marketing-cheat-sheet/" rel="noopener noreferrer"&gt;developer marketing cheat sheet&lt;/a&gt; that pulls together roles and responsibilities, along with distribution channels and metrics. It’s intentionally lightweight and doesn’t require an email to download. If it’s useful, take it. If it’s not, ignore it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the job actually demands now
&lt;/h2&gt;

&lt;p&gt;Doing this work well today requires more than knowing channels or tactics. It requires technical literacy, comfort operating between teams with unclear responsibility, and a willingness to be specific even when that means accepting tradeoffs. Most of all, it requires accountability for trust and revenue, not just reach.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>marketing</category>
      <category>devrel</category>
    </item>
    <item>
      <title>AI APIs in 2025</title>
      <dc:creator>Luke Stahl</dc:creator>
      <pubDate>Fri, 28 Feb 2025 11:29:25 +0000</pubDate>
      <link>https://dev.to/builderio/ai-apis-in-2025-70i</link>
      <guid>https://dev.to/builderio/ai-apis-in-2025-70i</guid>
      <description>&lt;p&gt;AI APIs give developers access to powerful pre-trained models without the need for extensive machine-learning expertise. Here’s an overview of the most popular AI APIs and how you can use them effectively in your projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use AI APIs?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Save development time&lt;/strong&gt;: Instead of spending months training your models, you can start using advanced AI capabilities immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add advanced features easily&lt;/strong&gt;: Implement complex functionalities like natural language processing, image recognition, or predictive analytics with just a few API calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Models improve automatically&lt;/strong&gt;: As the API providers update their models, your application benefits from these improvements without any additional work on your part.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost-effective&lt;/strong&gt;: For most use cases, using an API is significantly cheaper than building and maintaining your AI infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focus on your core product&lt;/strong&gt;: By outsourcing the complex processing of AI, you can concentrate on building the unique aspects of your application.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Popular APIs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F3678f441068e4445b6a949696b1982e1%3Fwidth%3D800" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F3678f441068e4445b6a949696b1982e1%3Fwidth%3D800" alt="Open AI" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://openai.com/api/" rel="noopener noreferrer"&gt;OpenAI's&lt;/a&gt; API offers access to various language models, including their o1 and o3 mini reasoning models. These models are designed to handle various language tasks with improved capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advanced text generation and completion&lt;/li&gt;
&lt;li&gt;Improved reasoning and task performance&lt;/li&gt;
&lt;li&gt;Enhanced multilingual capabilities&lt;/li&gt;
&lt;li&gt;Fine-tuning options for custom use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a quick example of how you might use it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;OpenAIApi&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;configuration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAIApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateBlogOutline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;completion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createChatCompletion&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;o1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a helpful assistant that creates blog outlines.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Create an outline for a blog post about &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;generateBlogOutline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;The future of remote work&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; OpenAI uses a per-token pricing model. For the most current pricing information, please refer to OpenAI's official pricing page at &lt;a href="https://openai.com/api/pricing/" rel="noopener noreferrer"&gt;https://openai.com/api/pricing/&lt;/a&gt;. Prices may vary based on the specific model and usage volume.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%2FTEMP%2F109e96ea21252b82d1e31b1b1b1f63aae2ee6009b7262745e0c6b253fa5e21d2%3FplaceholderIfAbsent%3Dtrue%26width%3D24" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%2FTEMP%2F109e96ea21252b82d1e31b1b1b1f63aae2ee6009b7262745e0c6b253fa5e21d2%3FplaceholderIfAbsent%3Dtrue%26width%3D24" alt="icon" width="18" height="18"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The pricing structure for the o1 models may differ from previous models. Always check the official pricing page for the most up-to-date information before integrating the API into your projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anthropic
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fb698430038a54c32a13740dfe765ed04%3Fwidth%3D800" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fb698430038a54c32a13740dfe765ed04%3Fwidth%3D800" alt="Anthropic" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.anthropic.com/api" rel="noopener noreferrer"&gt;Anthropic&lt;/a&gt; recently launched &lt;a href="https://www.anthropic.com/claude/sonnet" rel="noopener noreferrer"&gt;Claude 3.7 Sonnet&lt;/a&gt;, their latest model to date. This hybrid reasoning model significantly improves coding, content generation, data analysis, and planning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enhanced reasoning and task performance&lt;/li&gt;
&lt;li&gt;Advanced coding capabilities&lt;/li&gt;
&lt;li&gt;200K context window&lt;/li&gt;
&lt;li&gt;Computer use capabilities (in beta)&lt;/li&gt;
&lt;li&gt;Extended thinking mode for complex tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Sample use case:&lt;/strong&gt; Creating an AI research assistant&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Anthropic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@anthropic-ai/sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;anthropic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-api-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;researchTopic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Human: Provide a comprehensive overview of the latest research on &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.
  Include key findings, methodologies, and potential future directions.

  Assistant: Certainly! I'll provide an overview of the latest research on &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;. Here's a summary of key findings, methodologies, and future directions:

  1. Key Findings:
  `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;claude-3.7-sonnet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;max_tokens_to_sample&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;researchTopic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;quantum computing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;researchSummary&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;researchSummary&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; As of February 2025, Anthropic's pricing for Claude 3.7 Sonnet starts at $3 per million input tokens and $15 per million output tokens. They offer up to 90% cost savings with prompt caching and 50% cost savings with batch processing. For the most current and detailed pricing information, including any volume discounts or special offers, please refer to Anthropic's official pricing page: &lt;a href="https://www.anthropic.com/pricing#anthropic-api" rel="noopener noreferrer"&gt;https://www.anthropic.com/pricing#anthropic-api&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Claude 3.7 Sonnet offers a balance of advanced capabilities and competitive pricing, making it a strong contender in the AI API market. It's particularly well-suited for complex tasks like coding, content generation, and data analysis. The model is available through the Anthropic API, Amazon Bedrock, and Google Cloud's Vertex AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Google Vertex AI
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/vertex-ai/docs/reference" rel="noopener noreferrer"&gt;Vertex AI&lt;/a&gt; is Google's machine learning platform that offers a wide range of AI and ML services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access to multiple models, including Google's own (like &lt;a href="https://ai.google.dev/gemini-api/docs/models/gemini" rel="noopener noreferrer"&gt;Gemini Flash 2.0&lt;/a&gt;) and third-party options (such as Claude)&lt;/li&gt;
&lt;li&gt;Strong integration with other Google Cloud services&lt;/li&gt;
&lt;li&gt;Automated machine learning features for custom model training&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Sample use case:&lt;/strong&gt; Sentiment analysis of customer reviews&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;aiplatform&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@google-cloud/aiplatform&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;analyzeSentiment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;PredictionServiceClient&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aiplatform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;v1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PredictionServiceClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;apiEndpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;us-central1-aiplatform.googleapis.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;instances&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;parameters&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;confidenceThreshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;maxPredictions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endpointPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-project&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;us-central1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-endpoint-id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;instances&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;predictions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;analyzeSentiment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I absolutely love this product! It's amazing!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sentiment&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sentiment&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Vertex AI uses a pay-as-you-go model for prediction. The cost is based on the number of node hours used. Prices vary by region and machine type. For the most current and detailed pricing information, including rates for different machine types and regions, please refer to the official Vertex AI pricing page: &lt;a href="https://cloud.google.com/vertex-ai/pricing" rel="noopener noreferrer"&gt;https://cloud.google.com/vertex-ai/pricing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%2FTEMP%2F109e96ea21252b82d1e31b1b1b1f63aae2ee6009b7262745e0c6b253fa5e21d2%3FplaceholderIfAbsent%3Dtrue%26width%3D24" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%2FTEMP%2F109e96ea21252b82d1e31b1b1b1f63aae2ee6009b7262745e0c6b253fa5e21d2%3FplaceholderIfAbsent%3Dtrue%26width%3D24" alt="icon" width="18" height="18"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Vertex AI Prediction cannot scale to zero nodes, so there will always be a minimum charge for deployed models. Batch prediction jobs are billed after completion rather than incrementally.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Bedrock
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F5da56d84591d400891cd319e10acbfad%3Fwidth%3D800" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F5da56d84591d400891cd319e10acbfad%3Fwidth%3D800" alt="AWS Bedrock" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/bedrock/" rel="noopener noreferrer"&gt;AWS Bedrock&lt;/a&gt; provides a single API to access various pretrained models from different providers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access to models from Anthropic, AI21 Labs, Cohere, and Amazon&lt;/li&gt;
&lt;li&gt;Seamless integration with other AWS services&lt;/li&gt;
&lt;li&gt;Fine-tuning and customization options&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Sample use case:&lt;/strong&gt; Building a multi-lingual chatbot&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AWS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aws-sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Configure AWS SDK&lt;/span&gt;
&lt;span class="nx"&gt;AWS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-region&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bedrock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;AWS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BedrockRuntime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;translateAndRespond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetLanguage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Human: Translate the following text to &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;targetLanguage&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; and then respond to it:
    &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;

    Assistant: Certainly! I'll translate the text and then respond to it in &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;targetLanguage&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.

    Translation:
    `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;modelId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;anthropic.claude-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;contentType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;max_tokens_to_sample&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;top_p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;stop_sequences&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Human:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bedrock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invokeModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;promise&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;responseBody&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;responseBody&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;translateAndRespond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What's the weather like today?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;French&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; AWS Bedrock pricing model allows for flexible use of different AI models while maintaining a consistent API, making it easier to experiment with various options or switch providers as needed. Check out their pricing page: &lt;a href="https://aws.amazon.com/bedrock/pricing/" rel="noopener noreferrer"&gt;https://aws.amazon.com/bedrock/pricing/&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fast inference options
&lt;/h2&gt;

&lt;p&gt;Both Groq and Cerebras offer impressive performance gains for open-source models, enabling developers to run popular OSS models at speeds that were previously unattainable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Groq
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F66a527575d1b46f3895880118bfbc1d5%3Fwidth%3D800" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F66a527575d1b46f3895880118bfbc1d5%3Fwidth%3D800" alt="Groq" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://groq.com/" rel="noopener noreferrer"&gt;Groq&lt;/a&gt; is an AI hardware company advancing high-speed inference for large language models. Founded by former Google TPU architect Jonathan Ross, Groq has developed a unique architecture called the Language Processing Unit (LPU), which is designed to perform well in sequential processing tasks common in natural language processing.&lt;/p&gt;

&lt;p&gt;The company's LPU-based inference platform offers several key advantages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deterministic performance: Unlike traditional GPUs, Groq's LPUs provide consistent, predictable performance regardless of the input, which is crucial for real-time applications.&lt;/li&gt;
&lt;li&gt;Low latency: Groq's architecture is optimized for minimal latency, often achieving sub-100ms response times even for complex language models.&lt;/li&gt;
&lt;li&gt;Energy efficiency: The LPU design allows for high performance with lower power consumption compared to many GPU-based solutions.&lt;/li&gt;
&lt;li&gt;Scalability: Groq's infrastructure is designed to scale effortlessly, maintaining performance as demand increases.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Groq offers access to a variety of popular open-source models, including variants of &lt;a href="https://www.llama.com/" rel="noopener noreferrer"&gt;LLaMA&lt;/a&gt;, Mixtral, and other advanced language models. Their platform is particularly well-suited for applications that require rapid response times, such as real-time chatbots, code completion tools, and interactive AI assistants.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extremely low latency (often sub-100ms)&lt;/li&gt;
&lt;li&gt;Support for popular open-source models&lt;/li&gt;
&lt;li&gt;Easy integration with existing workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Sample use case:&lt;/strong&gt; Real-time code completion&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Groq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;groq-sdk&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Groq&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your-api-key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;completeCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;codeSnippet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chatCompletion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a helpful coding assistant. Complete the given code snippet.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Complete this code:\n\n&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;codeSnippet&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;llama2-70b-4096&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;chatCompletion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;def fibonacci(n):&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    if n &amp;lt;= 1:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;        return n&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    else:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nf"&gt;completeCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;completedCode&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;completedCode&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Groq uses a token-based pricing model, with costs varying by model and input/output. Groq also offers vision and speech recognition models with separate pricing structures.&lt;/p&gt;

&lt;p&gt;For the most current and detailed pricing information, including rates for different models and capabilities, please refer to the official Groq pricing page: &lt;a href="https://groq.com/pricing/" rel="noopener noreferrer"&gt;https://groq.com/pricing/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Cerebras
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F590d85f7a8b644b9a09f227333b01f10%3Fwidth%3D800" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F590d85f7a8b644b9a09f227333b01f10%3Fwidth%3D800" alt="Cerebras" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://inference-docs.cerebras.ai/introduction" rel="noopener noreferrer"&gt;Cerebras&lt;/a&gt; is another AI hardware company known for developing the Wafer-Scale Engine (WSE) – the largest chip ever built. Their CS-2 system, powered by the WSE-2, is designed to accelerate AI workloads significantly.&lt;/p&gt;

&lt;p&gt;Key aspects of Cerebras' technology:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Large on-chip memory: The WSE-2 contains 40GB of on-chip memory, reducing data movement and improving efficiency.&lt;/li&gt;
&lt;li&gt;Fast data transfer: With 220 petabits per second of memory bandwidth, Cerebras systems can rapidly process complex AI models.&lt;/li&gt;
&lt;li&gt;Scalability: Cerebras' technology is designed to scale from single models to large, multi-cluster deployments.&lt;/li&gt;
&lt;li&gt;Model support: Capable of running a wide range of large language models, including open-source options.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cerebras offers cloud-based access to their AI computing capabilities, allowing developers to leverage high-performance hardware for training and inference tasks without needing on-premises installation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High throughput for batch processing&lt;/li&gt;
&lt;li&gt;Support for custom model deployment&lt;/li&gt;
&lt;li&gt;Scalable for enterprise-level applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Sample use case:&lt;/strong&gt; Bulk text classification&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Note: This is a conceptual example&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CerebrasApi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cerebras-api&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CerebrasApi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-api-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;classifyTexts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;texts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;responses&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;batchClassify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cerebras-gpt-13b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;texts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;texts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Technology&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sports&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Politics&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Entertainment&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;responses&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;articles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Apple announces new iPhone model&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Lakers win NBA championship&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Senate passes new climate bill&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nf"&gt;classifyTexts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;articles&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;classifications&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;articles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Text: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;\nClassification: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;classifications&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="s2"&gt;\n`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Cerebras typically offers custom pricing based on usage volume and specific requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing an API
&lt;/h2&gt;

&lt;p&gt;When selecting an API, consider these factors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Required features&lt;/strong&gt;: Does the API support the specific AI capabilities you need?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost&lt;/strong&gt;: How does the pricing fit your budget and expected usage?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality of documentation&lt;/strong&gt;: Is the API well-documented and easy to integrate?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Can the API handle your expected growth?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency requirements&lt;/strong&gt;: Do you need real-time responses, or is some delay acceptable?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data privacy&lt;/strong&gt;: How does the API provider handle data, and does it comply with relevant regulations?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customization options&lt;/strong&gt;: Can you fine-tune models or adapt them to your specific use case?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community and support&lt;/strong&gt;: Is there a strong developer community and reliable support from the provider?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tips for working with AI APIs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keep API keys secure&lt;/strong&gt;: Use environment variables or secure vaults to store API keys, never hardcode them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor usage&lt;/strong&gt;: Set up alerts for unusual spikes in API calls to avoid unexpected costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control request frequency&lt;/strong&gt;: Respect API rate limits and implement your own rate limiting to prevent overuse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan for errors&lt;/strong&gt;: Always include error handling to manage API downtime or unexpected responses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache responses&lt;/strong&gt;: For non-dynamic queries, consider caching responses to reduce API calls and improve performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stay updated&lt;/strong&gt;: Follow the API provider's changelog and update your integration regularly to benefit from new features and improvements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimize prompts&lt;/strong&gt;: For language models, crafting effective prompts can significantly improve results and reduce token usage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AI SDK for unified API access
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F3ab7ce040fb24ecb9fa1d1e3693be7cb%3Fwidth%3D800" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F3ab7ce040fb24ecb9fa1d1e3693be7cb%3Fwidth%3D800" alt="AI SDK" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://sdk.vercel.ai/docs/foundations/providers-and-models" rel="noopener noreferrer"&gt;AI SDK&lt;/a&gt; offers a consistent interface for multiple AI providers. It simplifies the process of working with various AI models and services by hiding the differences between providers.&lt;/p&gt;

&lt;p&gt;This approach reduces development time and code complexity, allowing developers to switch between or compare different AI services easily. The SDK is particularly useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Experimenting with different providers to find the best fit&lt;/li&gt;
&lt;li&gt;Building applications that need to switch between providers dynamically&lt;/li&gt;
&lt;li&gt;Creating fallback mechanisms to handle API outages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a quick example of using the AI SDK with multiple providers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;OpenAIProvider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AnthropicProvider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;VertexAIProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@sdk-vercel/ai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;openAI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAIProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-openai-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;anthropic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AnthropicProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-anthropic-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vertexAI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;VertexAIProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-vertexai-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Now you can easily switch between providers&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;openAIResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;generateText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Explain quantum computing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;openAI&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;anthropicResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;generateText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Explain quantum computing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vertexAIResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;generateText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Explain quantum computing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vertexAI&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We've covered the major AI APIs available in 2025. Each has its own set of features, pricing models, and integration considerations.&lt;/p&gt;

&lt;p&gt;When choosing an API, consider the specific functionality you need, latency requirements, pricing structure, integration complexity, and data privacy concerns.&lt;/p&gt;

&lt;p&gt;That's it. The rest is up to you and your code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For further related AI tooling articles, check out:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/blog/cursor-vs-github-copilot" rel="noopener noreferrer"&gt;Cursor vs GitHub Copilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/blog/cursor-vs-trae" rel="noopener noreferrer"&gt;Cursor vs Trae&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/blog/devin-vs-cursor" rel="noopener noreferrer"&gt;$500 Devin vs $20 Cursor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/blog/best-ai-code-editors" rel="noopener noreferrer"&gt;Best AI Code Editors 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/blog/windsurf-vs-cursor" rel="noopener noreferrer"&gt;Windsurf vs Cursor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Building High-Performance React Components with AI Assistance</title>
      <dc:creator>Luke Stahl</dc:creator>
      <pubDate>Wed, 29 Jan 2025 16:10:19 +0000</pubDate>
      <link>https://dev.to/builderio/building-high-performance-react-components-with-ai-assistance-fbj</link>
      <guid>https://dev.to/builderio/building-high-performance-react-components-with-ai-assistance-fbj</guid>
      <description>&lt;p&gt;React components are the core of modern web apps. As projects grow, so do the challenges of writing efficient, maintainable code. &lt;a href="https://www.builder.io/blog/best-ai-coding-tools" rel="noopener noreferrer"&gt;AI tools&lt;/a&gt; offer new ways to tackle these challenges. This post covers practical ways to improve component architecture, performance, state management, and testing with AI assistance. We'll go over real code examples and specific techniques you can use in your projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Component architecture: keeping things tidy
&lt;/h2&gt;

&lt;p&gt;Keeping components small, focused, and reusable is a constant theme. But how do we actually do that in practice? Here's what I've found works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start with a clear purpose for each component. If you can't explain it in a sentence, it might be doing too much.&lt;/li&gt;
&lt;li&gt;Use AI to help spot patterns in your code. I've been using &lt;a href="https://www.cursor.com/" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;, and it's pretty good at suggesting ways to break down complex components.&lt;/li&gt;
&lt;li&gt;Don't be afraid to &lt;a href="https://www.builder.io/blog/good-vs-bad-refactoring" rel="noopener noreferrer"&gt;refactor&lt;/a&gt;. AI can also help here, suggesting common patterns seen in other codebases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a quick example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Before&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;UserProfile&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;comments&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Lots of logic here&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// After&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;UserProfile&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;UserInfo&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;UserPosts&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;UserComments&lt;/span&gt; &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here's how we might visualize this breakdown:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Ffff5521200214b7d9fc476e39703d7ce%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Ffff5521200214b7d9fc476e39703d7ce%3Fwidth%3D705" alt="UserProfile - UserInfo - UserPosts - UserComments" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This structure keeps each component focused on a single responsibility, making our code easier to maintain and test.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Performance optimization: speed things up
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React's&lt;/a&gt; pretty fast out of the box, but there's always room for improvement. Here are some suggestions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;a href="https://react.dev/reference/react/memo" rel="noopener noreferrer"&gt;React.memo&lt;/a&gt; for components that render often but don't change much.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://react.dev/reference/react/lazy" rel="noopener noreferrer"&gt;Lazy load&lt;/a&gt; components that aren't immediately visible.&lt;/li&gt;
&lt;li&gt;Be smart about your re-renders, useCallback and useMemo can help.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Or you could just use &lt;a href="https://react.dev/blog/2023/05/03/react-compiler" rel="noopener noreferrer"&gt;React Compiler&lt;/a&gt; to automatically optimize your React code at build time. It can eliminate unnecessary re-renders and reduce bundle size. Test it out at the &lt;a href="https://playground.react.dev/" rel="noopener noreferrer"&gt;React Compiler Playground&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here's a diagram showing how React Complier can prevent unnecessary re-renders:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F3332de52544f4c089c4a8decb7524e2f%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F3332de52544f4c089c4a8decb7524e2f%3Fwidth%3D705" alt="React code - react compiler - optimization process - reduce bundle size - optimized React code - build process - optimized bundle" width="705" height="705"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This diagram shows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;React code enters React Compiler.&lt;/li&gt;
&lt;li&gt;The compiler optimizes by reducing re-renders, shrinking bundle size, and streamlining the component tree.&lt;/li&gt;
&lt;li&gt;Optimized code is processed and bundled.&lt;/li&gt;
&lt;li&gt;Result: An efficient, deployment-ready bundle.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;AI can help spot potential performance issues. Cursor is my go-to again for reviewing my code and suggesting optimizations.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. State management: keeping things in check
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://redux.js.org/" rel="noopener noreferrer"&gt;Redux&lt;/a&gt;, &lt;a href="https://mobx.js.org/README.html" rel="noopener noreferrer"&gt;MobX&lt;/a&gt;, and &lt;a href="https://recoiljs.org/" rel="noopener noreferrer"&gt;Recoil&lt;/a&gt; are some examples here but there are more. Here's an example of what can work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start with local state. You'd be surprised how far you can get with just &lt;code&gt;useState&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For more complex state needs, consider lightweight libraries like &lt;a href="https://jotai.org/" rel="noopener noreferrer"&gt;&lt;strong&gt;Jotai&lt;/strong&gt;&lt;/a&gt; or &lt;a href="https://github.com/pmndrs/zustand" rel="noopener noreferrer"&gt;&lt;strong&gt;Zustand&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Only reach for heavy-duty state management libraries when your app truly requires it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a diagram showing different levels of state management:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F6805480e26cc49e6ba686e63d72cc128%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F6805480e26cc49e6ba686e63d72cc128%3Fwidth%3D705" alt="App state - local component state - Lightweight state library - Full state management library" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI can help you decide which approach to use. You can describe your app structure to an AI assistant and ask for state management suggestions. It might not always give you the perfect answer, but it can offer fresh perspectives and ideas you hadn't considered.&lt;/p&gt;

&lt;p&gt;The goal is to keep your state management as simple as possible while meeting your app's needs. Then, you can scale your solution as your app grows.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Testing: because we all should
&lt;/h2&gt;

&lt;p&gt;Testing React components can be a pain, but it's worth it. Here's a good approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;a href="https://jestjs.io/" rel="noopener noreferrer"&gt;Jest&lt;/a&gt;/&lt;a href="https://vitest.dev/" rel="noopener noreferrer"&gt;Vitest&lt;/a&gt; and &lt;a href="https://testing-library.com/docs/react-testing-library/intro/" rel="noopener noreferrer"&gt;React Testing Library&lt;/a&gt;. They work well together.&lt;/li&gt;
&lt;li&gt;Test behavior, not implementation. Your tests should care about what the user experiences, not how you've structured your components.&lt;/li&gt;
&lt;li&gt;Use AI to help generate test cases, whether that is ChatGPT, Claude, or any other.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a basic example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;renders user name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;UserProfile&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;);&lt;/span&gt;
  &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getByText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;toBeInTheDocument&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here's a diagram of a typical test workflow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F5086dcfa24ee45e28de82720facc2b30%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F5086dcfa24ee45e28de82720facc2b30%3Fwidth%3D705" alt="Write component - write tests - run tests - fix issues - refactor/optimize" width="705" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Real-world example: putting it all together
&lt;/h2&gt;

&lt;p&gt;Let's say we're building a chat application. Here's how we might apply these principles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useCallback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;memo&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ChatWindow&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./ChatWindow&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;UserList&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./UserList&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Chat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Chat&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;selectedUser&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setSelectedUser&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleUserSelect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useCallback&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setSelectedUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"chat-app"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;UserList&lt;/span&gt; &lt;span class="na"&gt;users&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onSelectUser&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleUserSelect&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;selectedUser&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ChatWindow&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;selectedUser&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Chat&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's a diagram of how this component structure might look:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F3a35032dcaad438696dcc17e199ca299%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F3a35032dcaad438696dcc17e199ca299%3Fwidth%3D705" alt="Chat application - UserList - ChatWindow " width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this example, we're using &lt;code&gt;memo&lt;/code&gt; to optimize re-renders, &lt;code&gt;useState&lt;/code&gt; for local state management, and &lt;code&gt;useCallback&lt;/code&gt; to memoize our event handler. We've also split our UI into smaller, focused components.&lt;/p&gt;

&lt;p&gt;Here is what's happening:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We're using &lt;code&gt;memo&lt;/code&gt; to wrap our Chat component. This ensures that the component only re-renders if its props change.&lt;/li&gt;
&lt;li&gt;We're using &lt;code&gt;useState&lt;/code&gt; to manage the selected user state locally within the Chat component. This is a good example of starting with local state before reaching for more complex state management solutions.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;handleUserSelect&lt;/code&gt; function is wrapped with &lt;code&gt;useCallback&lt;/code&gt;. This memoizes the function, preventing unnecessary re-renders of child components that receive this function as a prop.&lt;/li&gt;
&lt;li&gt;We've split the UI into two main components: &lt;code&gt;UserList&lt;/code&gt; and &lt;code&gt;ChatWindow&lt;/code&gt;. This separation of concerns makes our code more maintainable and easier to test.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;ChatWindow&lt;/code&gt; is only rendered when a user is selected, improving performance by not rendering unnecessary components.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This structure allows for easy testing and maintenance. For example, we could easily write tests for the &lt;code&gt;UserList&lt;/code&gt; and &lt;code&gt;ChatWindow&lt;/code&gt; components in isolation, as well as integration tests for the Chat component.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Builder.io's Visual Copilot: AI-assisted React development&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt; has developed an AI tool to enhance React development workflows. Here's what &lt;a href="https://www.builder.io/m/design-to-code" rel="noopener noreferrer"&gt;Visual Copilot&lt;/a&gt; offers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;AI component generation&lt;/strong&gt;: creates React component structures adhering to best practices, reducing setup time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated performance optimization&lt;/strong&gt;: analyzes components and applies performance improvements like code splitting and lazy loading without manual intervention.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State management recommendations&lt;/strong&gt;: evaluates application complexity and suggests appropriate state management solutions based on the project's needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-driven test generation&lt;/strong&gt;: automatically generates test cases, including edge case scenarios, for Jest and react-testing-library.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context-aware code suggestions&lt;/strong&gt;: offers inline suggestions for React patterns and best practices as you code, improving efficiency and code quality.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Visual Copilot aims to reduce repetitive tasks in React development, so developers can focus more on solving unique problems and creating effective user interfaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;The best code is often the most straightforward. Don't over-optimize, and always consider the readability and maintainability of your code.&lt;/p&gt;

&lt;p&gt;AI can be a powerful tool in your React development toolkit. It can help you spot patterns, suggest optimizations, and even generate boilerplate code.&lt;/p&gt;

&lt;p&gt;As you're building your next React app, try incorporating some of these techniques and see how they work for you.&lt;/p&gt;

&lt;p&gt;If you enjoyed this post, you might also like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/blog/convert-figma-to-react-code" rel="noopener noreferrer"&gt;Figma to React&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/blog/react-component-library" rel="noopener noreferrer"&gt;React UI Component Libraries in 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/blog/react-ai-stack" rel="noopener noreferrer"&gt;React + AI Stack for 2025&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>ai</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>React UI Component Libraries in 2025</title>
      <dc:creator>Luke Stahl</dc:creator>
      <pubDate>Mon, 06 Jan 2025 19:05:37 +0000</pubDate>
      <link>https://dev.to/builderio/react-ui-component-libraries-in-2025-d74</link>
      <guid>https://dev.to/builderio/react-ui-component-libraries-in-2025-d74</guid>
      <description>&lt;p&gt;As we start 2025, React continues to be a popular choice in frontend development. The ecosystem of React UI component libraries has evolved significantly, offering developers tools to build modern, efficient, and accessible user interfaces. Let's explore the top React UI component libraries gaining popularity in 2025, along with their key features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key trends for React UI libraries in 2025:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Improved accessibility
&lt;/h3&gt;

&lt;p&gt;React UI libraries now include built-in accessibility features. These libraries offer ARIA attribute support, keyboard navigation, and screen reader compatibility out of the box.&lt;/p&gt;

&lt;p&gt;This shift makes it easier for developers to create inclusive applications without additional work. The goal is to ensure that applications are usable by everyone, regardless of their abilities.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AccessibleButton&lt;/span&gt;
  &lt;span class="na"&gt;aria-label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Submit form"&lt;/span&gt;
  &lt;span class="na"&gt;onKeyDown&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleKeyboardNavigation&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  Submit
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;AccessibleButton&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  AI integrations
&lt;/h3&gt;

&lt;p&gt;AI is integrated into UI development, changing how developers work with component libraries. These AI systems can suggest component configurations based on project needs, generate color schemes that match brand guidelines, and analyze user interactions to optimize UI layouts. While this technology is still evolving, it offers new possibilities for UI development.&lt;/p&gt;

&lt;p&gt;Potential usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AIComponentSuggester&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ai-react-lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SuggestedComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AIComponentSuggester&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;form&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;modern&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Performance optimization
&lt;/h3&gt;

&lt;p&gt;As web applications become more complex, performance optimization is important. React UI libraries adopt techniques like automatic code-splitting, tree-shaking, and lazy loading.&lt;/p&gt;

&lt;p&gt;These methods ensure that only necessary code is loaded, which reduces initial bundle sizes and improves load times. Libraries are also working on more efficient rendering techniques to minimize unnecessary re-renders.&lt;/p&gt;

&lt;p&gt;Example of lazy loading:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;LazyComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./HeavyComponent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;MyComponent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Suspense&lt;/span&gt; &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Loading&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;LazyComponent&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Suspense&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Design tool compatibility
&lt;/h3&gt;

&lt;p&gt;React UI libraries now offer integrations with popular design tools like Figma, Sketch, and Adobe XD. This allows for real-time synchronization between design changes and component code and automated generation of React components from design files. The aim is to reduce the time and effort needed to translate designs into functional code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Better TypeScript support
&lt;/h3&gt;

&lt;p&gt;As TypeScript gains popularity in the React ecosystem, UI libraries are enhancing their TypeScript support. Libraries now offer types for components and utilities, along with improved autocompletion and type inference. This improved support helps catch errors earlier in the development process and makes working with complex component APIs easier.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;ButtonProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;primary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;secondary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ButtonProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Implementation&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These developments in React UI libraries aim to address common challenges in web development, improve code quality, and increase development efficiency. By focusing on accessibility, performance, and developer experience, these libraries are evolving to meet the needs of modern web applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Top React UI component libraries for 2025
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Material UI
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://mui.com/material-ui/" rel="noopener noreferrer"&gt;Material UI&lt;/a&gt; has expanded its customization options and introduced &lt;a href="https://www.notion.so/React-UI-Component-Libraries-in-2025-15f3d7274be58019b41ec2ffd330e9f8?pvs=21" rel="noopener noreferrer"&gt;AI-assisted theming&lt;/a&gt;. Its extensive set of components and community support keep it at the forefront.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-assisted theming and component customization&lt;/li&gt;
&lt;li&gt;Advanced accessibility features with ARIA support&lt;/li&gt;
&lt;li&gt;Integrated design token system&lt;/li&gt;
&lt;li&gt;Real-time collaboration tools for team-based development&lt;/li&gt;
&lt;li&gt;Performance-optimized rendering with automatic code-splitting&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chakra UI
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.chakra-ui.com/" rel="noopener noreferrer"&gt;Chakra UI&lt;/a&gt; has solidified itself by introducing Chakra UI Pro, offering even more composable and accessible components. Its intuitive API and focus on developer experience make it a top choice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F8550e50564ae46b1a021bc71383d2061%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F8550e50564ae46b1a021bc71383d2061%3Fwidth%3D705" alt="a preview of the chakra UI library" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enhanced composable component system&lt;/li&gt;
&lt;li&gt;Built-in motion library for smooth animations&lt;/li&gt;
&lt;li&gt;Advanced form handling with validation&lt;/li&gt;
&lt;li&gt;Dark mode support with customizable color modes&lt;/li&gt;
&lt;li&gt;AI-powered responsive design suggestions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Radix UI + Tailwind
&lt;/h3&gt;

&lt;p&gt;The combination of &lt;a href="https://www.radix-ui.com/" rel="noopener noreferrer"&gt;Radix UI's&lt;/a&gt; unstyled, accessible components with Tailwind's utility-first CSS approach has gained significant traction, offering high flexibility and good performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F54b8eddd0d9d4da8a9f88f966a0b3678%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F54b8eddd0d9d4da8a9f88f966a0b3678%3Fwidth%3D705" alt="a preview of the radix UI + tailwind library" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Headless UI components with Tailwind CSS integration&lt;/li&gt;
&lt;li&gt;Advanced state management for complex UI patterns&lt;/li&gt;
&lt;li&gt;Cross-browser compatibility layer&lt;/li&gt;
&lt;li&gt;Custom plugin system for extended functionality&lt;/li&gt;
&lt;li&gt;Visual editor for creating and managing design systems&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Next UI
&lt;/h3&gt;

&lt;p&gt;Optimized for use with Next.js, &lt;a href="https://nextui.org/" rel="noopener noreferrer"&gt;Next UI&lt;/a&gt; has become a popular choice for developers building React applications with server-side rendering and static site generation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F5831db0cb66e45b2b36b00d8d607b146%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F5831db0cb66e45b2b36b00d8d607b146%3Fwidth%3D705" alt="a preview of the Next UI library" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Optimized for &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; and &lt;a href="https://www.builder.io/m/explainers/server-side-rendering" rel="noopener noreferrer"&gt;server-side rendering&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Built-in internationalization support&lt;/li&gt;
&lt;li&gt;Adaptive loading strategies for improved performance&lt;/li&gt;
&lt;li&gt;AI-driven accessibility improvements&lt;/li&gt;
&lt;li&gt;Integration with popular &lt;a href="https://www.builder.io/m/nextjs-cms" rel="noopener noreferrer"&gt;CMS platforms&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ant Design
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://ant.design/" rel="noopener noreferrer"&gt;Ant Design's&lt;/a&gt; React implementation continues to be a favorite for enterprise applications, with its extensive component set and advanced theming capabilities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F920ea0bbb0e4489b9786acd61e31fd32%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F920ea0bbb0e4489b9786acd61e31fd32%3Fwidth%3D705" alt="a preview of the ant design library" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extensive enterprise-grade component library&lt;/li&gt;
&lt;li&gt;Advanced data visualization components&lt;/li&gt;
&lt;li&gt;Customizable design token system&lt;/li&gt;
&lt;li&gt;Built-in state management solution&lt;/li&gt;
&lt;li&gt;AI-assisted component documentation generation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mantine
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://v3.mantine.dev/" rel="noopener noreferrer"&gt;Mantine&lt;/a&gt; has evolved into a feature-rich UI framework, offering a wide range of components, hooks, and utilities that streamline React development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F6425c49daa3b40bd97c062ec0626f152%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F6425c49daa3b40bd97c062ec0626f152%3Fwidth%3D705" alt="a preview of the mantine library" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive hook library for common UI patterns&lt;/li&gt;
&lt;li&gt;Advanced theming engine with CSS-in-JS support&lt;/li&gt;
&lt;li&gt;Built-in form generation and validation system&lt;/li&gt;
&lt;li&gt;Integrated testing utilities for components&lt;/li&gt;
&lt;li&gt;AI-powered prop suggestion system&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Shadcn UI
&lt;/h3&gt;

&lt;p&gt;Building on the innovative approach of copying and pasting component code, &lt;a href="https://ui.shadcn.com/" rel="noopener noreferrer"&gt;Shadcn UI&lt;/a&gt; has expanded its offerings and introduced a visual builder for easier customization.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fb1e1a612829842ff82bb89f34d6ea914%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fb1e1a612829842ff82bb89f34d6ea914%3Fwidth%3D705" alt="a preview of the shadcn UI library" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual component builder and customizer&lt;/li&gt;
&lt;li&gt;Automatic dark mode generation&lt;/li&gt;
&lt;li&gt;Performance-optimized animations&lt;/li&gt;
&lt;li&gt;Integration with popular icon libraries&lt;/li&gt;
&lt;li&gt;AI-assisted accessibility auditing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  React Aria
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://react-spectrum.adobe.com/react-aria/index.html" rel="noopener noreferrer"&gt;Adobe's React Aria&lt;/a&gt; has matured into a full-fledged component library, offering advanced accessibility and customization options for complex UI patterns.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F4b167f172c304561ad35bd0486b19805%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F4b167f172c304561ad35bd0486b19805%3Fwidth%3D705" alt="a preview of the react aria library" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong accessibility support&lt;/li&gt;
&lt;li&gt;Cross-platform compatibility (web, mobile, desktop)&lt;/li&gt;
&lt;li&gt;Extensive internationalization features&lt;/li&gt;
&lt;li&gt;State machine-driven component behavior&lt;/li&gt;
&lt;li&gt;AI-powered voice and gesture control integration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Headless UI
&lt;/h3&gt;

&lt;p&gt;An evolution of the popular &lt;a href="https://headlessui.com/" rel="noopener noreferrer"&gt;Headless UI&lt;/a&gt; library, now offering more pre-styled components while maintaining its focus on accessibility and customization.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fdca5426c68f94fb697753635b3c7d879%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fdca5426c68f94fb697753635b3c7d879%3Fwidth%3D705" alt="a preview of the headless UI library" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expanded set of unstyled, accessible components&lt;/li&gt;
&lt;li&gt;Advanced styling API for easy customization&lt;/li&gt;
&lt;li&gt;Built-in animation system&lt;/li&gt;
&lt;li&gt;Server-side rendering support&lt;/li&gt;
&lt;li&gt;AI-assisted component composition suggestions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Base UI&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://base-ui.com/" rel="noopener noreferrer"&gt;Base UI&lt;/a&gt; is relatively new and known for providing unstyled, accessible components. It's designed to be a starting point for custom designs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fc42add569a9f4d199207b19a236db247%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fc42add569a9f4d199207b19a236db247%3Fwidth%3D705" alt="a preview of the base UI library" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unstyled, accessible components&lt;/li&gt;
&lt;li&gt;Tree-shakeable architecture for optimized bundle sizes&lt;/li&gt;
&lt;li&gt;Flexible styling options (works with CSS Modules, Tailwind, or any CSS-in-JS solution)&lt;/li&gt;
&lt;li&gt;Built-in portal system for complex components like modals and popovers&lt;/li&gt;
&lt;li&gt;TypeScript support out of the box&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Builder.io and React UI libraries
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt; is making some interesting moves in the React ecosystem. Here's what's going on:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fba6962cc7dcd4a9184cae659d5a31796%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fba6962cc7dcd4a9184cae659d5a31796%3Fwidth%3D705" alt="builder's UI features" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Visual Editor&lt;/strong&gt;: Builder lets you build React components visually. It's not just for simple landing pages — use it to prototype complex UIs and even build production components faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Component Generation&lt;/strong&gt;: You can describe a component to Builder.io's AI, and it'll generate React code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design System Compatibility&lt;/strong&gt;: You can use your existing design system components in the Visual Editor, which helps maintain consistency and speeds up development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic Performance Tweaks&lt;/strong&gt;: The platform handles some performance optimizations for you, like code-splitting and lazy loading.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Headless CMS for React&lt;/strong&gt;: Builder.io's headless CMS lets non-devs update React components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework Agnostic Output&lt;/strong&gt;: While we're talking about React here, Builder.io can output to other frameworks too. Your visually built components could potentially be used in Vue, Angular, or even native mobile apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better Team Workflows&lt;/strong&gt;: Builder.io has some features aimed at improving collaboration between designers, devs, and content folks. It's trying to smooth out some of the friction in the UI development process.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;React UI libraries are evolving, with some incorporating AI features. These additions aim to assist with various development tasks.&lt;/p&gt;

&lt;p&gt;When selecting a library for your project, consider how these new features align with your needs and workflow. They may offer efficiency gains in certain areas of development.&lt;/p&gt;

&lt;p&gt;As with any tech advancement, it's worth staying informed about these changes in the React ecosystem. The fundamental goal remains to build effective user interfaces.&lt;/p&gt;

&lt;p&gt;These new features are additional tools that are available to you. Their usefulness will depend on your specific project requirements and preferences.&lt;/p&gt;

</description>
      <category>react</category>
      <category>ui</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>What is Builder's Visual Development Platform?</title>
      <dc:creator>Luke Stahl</dc:creator>
      <pubDate>Fri, 13 Dec 2024 17:58:56 +0000</pubDate>
      <link>https://dev.to/builderio/what-is-builders-visual-development-platform-3c3k</link>
      <guid>https://dev.to/builderio/what-is-builders-visual-development-platform-3c3k</guid>
      <description>&lt;p&gt;Web and mobile development often involves multiple teams working in silos, leading to inefficiencies and delays. Builder's &lt;a href="https://www.builder.io/visual-development-platform" rel="noopener noreferrer"&gt;Visual Development Platform&lt;/a&gt; addresses these challenges with a toolkit that combines AI, visual editing, CMS capabilities, optimization features, and extensive integrations.&lt;/p&gt;

&lt;p&gt;The platform consists of two main components: Builder Develop and Builder Publish. Here's a breakdown:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F798efdfafee44176b09f92b039700f10%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F798efdfafee44176b09f92b039700f10%3Fwidth%3D737" alt="Builder's Visual Development Platform" width="737" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Builder Develop:
&lt;/h2&gt;

&lt;p&gt;Builder Develop is the core of Builder's AI-powered &lt;a href="https://www.builder.io/m/design-to-code" rel="noopener noreferrer"&gt;design-to-code&lt;/a&gt; functionality. It offers several key features that significantly streamline the development process:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F599288d996434a85aa144d155dd5494e%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F599288d996434a85aa144d155dd5494e%3Fwidth%3D737" alt="Builder Develop" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design to Code: Reduce &lt;a href="https://www.builder.io/blog/figma-to-code-ai" rel="noopener noreferrer"&gt;Figma-to-code&lt;/a&gt; development time by 80%. This feature transforms design files into production-ready code, dramatically speeding up the implementation process.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.builder.io/c/docs/mapping-functions" rel="noopener noreferrer"&gt;Component Mapping&lt;/a&gt;: Automatically reuses existing code components when available. This ensures consistency with your current codebase and reduces redundancy.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.builder.io/c/docs/custom-instructions" rel="noopener noreferrer"&gt;Custom Instructions&lt;/a&gt;: 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.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.builder.io/c/docs/generate-code#syncing-the-code-automatically-with-your-codebase" rel="noopener noreferrer"&gt;Code Sync&lt;/a&gt;: Quickly shifts generated code from Builder to your developers' code editor. This seamless integration helps maintain workflow efficiency.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.builder.io/c/docs/ai-use" rel="noopener noreferrer"&gt;Enterprise-ready AI&lt;/a&gt;: 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.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.builder.io/visual-editor" rel="noopener noreferrer"&gt;Visual Editor&lt;/a&gt;: A new AI-powered Visual Editor that helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create interactive features using natural language commands&lt;/li&gt;
&lt;li&gt;Work with your real data, APIs, and code components&lt;/li&gt;
&lt;li&gt;Visually make tweaks using your design system, including colors, typography, and spacing&lt;/li&gt;
&lt;li&gt;Sync design changes to code while preserving custom edits&lt;/li&gt;
&lt;li&gt;Enable non-technical team members to make updates without constant developer intervention&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F22a5cf55964649da934ee4fad745ca04%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F22a5cf55964649da934ee4fad745ca04%3Fwidth%3D737" alt="image.png" width="737" height="737"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.builder.io/blog/visual-copilot-2" rel="noopener noreferrer"&gt;Visual Copilot&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;These features work together to create a powerful &lt;a href="https://www.builder.io/m/knowledge-center/design-to-code" rel="noopener noreferrer"&gt;design-to-code&lt;/a&gt; pipeline that respects your existing architecture and coding practices while significantly reducing development time and enabling faster iteration cycles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Builder Publish:
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F978c2daa5b4d493d92316471dd93230a%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F978c2daa5b4d493d92316471dd93230a%3Fwidth%3D737" alt="Builder publish.png" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Builder Publish combines three key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.builder.io/visual-editor" rel="noopener noreferrer"&gt;Visual Editor&lt;/a&gt;: A drag-and-drop interface for making content changes without touching code.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.builder.io/headless-cms" rel="noopener noreferrer"&gt;Headless CMS&lt;/a&gt;: An enterprise-ready headless content management system that can handle complex data structures and integrate with existing stacks.&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.builder.io/c/docs/abtesting" rel="noopener noreferrer"&gt;Optimization tools&lt;/a&gt;: Built-in A/B testing and personalization features that don't require constant developer intervention.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2&gt;
  
  
  Integrations:
&lt;/h2&gt;

&lt;p&gt;Builder integrates with existing tech stacks, supporting a wide range of tools and services across various categories:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fdc3b648fce7046d3a162712b387e9d99%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fdc3b648fce7046d3a162712b387e9d99%3Fwidth%3D737" alt="Builder platform.png" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Omnichannel Commerce: &lt;a href="https://www.builder.io/m/shopify" rel="noopener noreferrer"&gt;Shopify&lt;/a&gt;, &lt;a href="https://www.builder.io/m/bigcommerce" rel="noopener noreferrer"&gt;BigCommerce&lt;/a&gt;, &lt;a href="https://www.builder.io/m/integration/salesforce-commerce-cloud" rel="noopener noreferrer"&gt;Salesforce&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Digital Asset Management: &lt;a href="https://www.builder.io/m/cloudinary" rel="noopener noreferrer"&gt;Cloudinary&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Deployment: &lt;a href="https://www.builder.io/m/vercel" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;, &lt;a href="https://www.builder.io/m/netlify" rel="noopener noreferrer"&gt;Netlify,&lt;/a&gt; &lt;a href="https://www.builder.io/c/docs/deploy-preview" rel="noopener noreferrer"&gt;Amplify Hosting&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Localization: &lt;a href="https://www.builder.io/m/phrase" rel="noopener noreferrer"&gt;Phrase&lt;/a&gt;, &lt;a href="https://www.builder.io/c/docs/integrating-smartling" rel="noopener noreferrer"&gt;Smartling&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These &lt;a href="https://www.builder.io/m/integrations" rel="noopener noreferrer"&gt;integrations&lt;/a&gt; allow for pulling in data and content from various sources, creating a unified development and content management workflow.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;p&gt;Here's how different team members can leverage Builder:&lt;/p&gt;

&lt;h3&gt;
  
  
  Builder Develop:
&lt;/h3&gt;

&lt;p&gt;Builder Develop is particularly useful for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Automated code generation from designs&lt;/li&gt;
&lt;li&gt;Rapid prototyping&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.builder.io/m/explainers/design-systems" rel="noopener noreferrer"&gt;Design system&lt;/a&gt; implementation&lt;/li&gt;
&lt;li&gt;Legacy system modernization&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3&gt;
  
  
  Builder Publish:
&lt;/h3&gt;

&lt;p&gt;Builder Publish can help teams by:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reducing maintenance overhead&lt;/li&gt;
&lt;li&gt;Facilitating A/B testing&lt;/li&gt;
&lt;li&gt;Enabling content personalization&lt;/li&gt;
&lt;li&gt;Streamlining content updates&lt;/li&gt;
&lt;li&gt;Managing multi-language content&lt;/li&gt;
&lt;li&gt;Implementing dynamic content rules without complex backend logic&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrated approach:
&lt;/h3&gt;

&lt;p&gt;For optimal results, use both Builder Develop and Builder Publish in tandem:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use Builder Develop to create the core application and component library.&lt;/li&gt;
&lt;li&gt;Leverage Builder Publish for visual editing, content management, and optimization.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;To get started with &lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt;, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/signup" rel="noopener noreferrer"&gt;Sign up for a free trial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Explore the &lt;a href="https://www.builder.io/c/docs/api-intro" rel="noopener noreferrer"&gt;API documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Schedule a technical &lt;a href="https://www.builder.io/m/demo" rel="noopener noreferrer"&gt;demo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3&gt;
  
  
  Watch our latest launch:
&lt;/h3&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/MgAPAl20hDM"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A Guide to Server-Side Rendering</title>
      <dc:creator>Luke Stahl</dc:creator>
      <pubDate>Tue, 12 Nov 2024 19:19:43 +0000</pubDate>
      <link>https://dev.to/builderio/a-guide-to-server-side-rendering-5gk6</link>
      <guid>https://dev.to/builderio/a-guide-to-server-side-rendering-5gk6</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is server-side rendering?
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;The server is doing the prep work in the kitchen, and the browser just has to plate and serve.&lt;/p&gt;

&lt;p&gt;Here's a minimal Express.js example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ReactDOMServer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-dom/server&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ReactDOMServer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;renderToString&lt;/span&gt;&lt;span class="p"&gt;(&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`
    &amp;lt;!DOCTYPE html&amp;gt;
    &amp;lt;html&amp;gt;
      &amp;lt;body&amp;gt;
        &amp;lt;div id="root"&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/div&amp;gt;
        &amp;lt;script src="client.js"&amp;gt;&amp;lt;/script&amp;gt;
      &amp;lt;/body&amp;gt;
    &amp;lt;/html&amp;gt;
  `&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Server running on port 3000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  From server to browser with fully rendered pages
&lt;/h2&gt;

&lt;p&gt;When we talk about SSR delivering "fully rendered pages," it's important to understand what that actually means. Let's break it down:&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a fully rendered page?
&lt;/h3&gt;

&lt;p&gt;A fully rendered page is an HTML document containing all the content users would get when they first load the page. This includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The complete DOM structure&lt;/li&gt;
&lt;li&gt;All text content&lt;/li&gt;
&lt;li&gt;Image placeholders and other media elements&lt;/li&gt;
&lt;li&gt;Initial styles&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's a basic example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;My SSR Page&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
      &lt;span class="c"&gt;/* Initial styles */&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;header&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Welcome to My Site&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;nav&amp;gt;&lt;/span&gt;&lt;span class="c"&gt;&amp;lt;!-- Fully populated navigation --&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;main&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;article&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Article Title&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is the full content of the article...&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;footer&amp;gt;&lt;/span&gt;&lt;span class="c"&gt;&amp;lt;!-- Fully populated footer --&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"hydration.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The difference between CSR
&lt;/h3&gt;

&lt;p&gt;In contrast, a client-side rendered (CSR) initial HTML might be like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;My CSR Page&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"root"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"bundle.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CSR page relies entirely on JavaScript to populate the content.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of fully rendered HTML
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Faster Initial Paint&lt;/strong&gt;: The browser can start rendering content immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better SEO&lt;/strong&gt;: Search engines read all your content without executing JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Accessibility&lt;/strong&gt;: Screen readers and other assistive technologies can access content immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resilience&lt;/strong&gt;: Basic content is available even if JavaScript fails to load.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The hydration process
&lt;/h3&gt;

&lt;p&gt;After sending the fully rendered HTML, SSR applications typically go through a process called &lt;a href="https://www.builder.io/blog/hydration-is-pure-overhead" rel="noopener noreferrer"&gt;hydration&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The server sends the fully rendered HTML.&lt;/li&gt;
&lt;li&gt;The browser displays this HTML immediately.&lt;/li&gt;
&lt;li&gt;JavaScript loads and &lt;em&gt;hydrates&lt;/em&gt; the page, adding interactivity.&lt;/li&gt;
&lt;/ol&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Simplified React hydration example&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;hydrateRoot&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-dom/client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;domNode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;hydrateRoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;domNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This process allows for fast initial loads while still providing the rich interactivity of modern web apps.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the difference between CSR and SSR?
&lt;/h2&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;h3&gt;
  
  
  Client-side rendering (CSR)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;The server sends a minimal HTML file with a JavaScript bundle.&lt;/li&gt;
&lt;li&gt;The browser downloads and runs the JavaScript.&lt;/li&gt;
&lt;li&gt;JavaScript creates the page content and makes it interactive.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smooth interactions after the initial load&lt;/li&gt;
&lt;li&gt;Fewer server resources are needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slower initial page load&lt;/li&gt;
&lt;li&gt;Potential SEO challenges&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Server-side rendering (SSR)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;The server creates the full HTML content.&lt;/li&gt;
&lt;li&gt;The browser receives and displays the pre-rendered HTML quickly.&lt;/li&gt;
&lt;li&gt;JavaScript then loads to make the page fully interactive.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster initial page load&lt;/li&gt;
&lt;li&gt;Better for SEO&lt;/li&gt;
&lt;li&gt;Works well on slower devices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It can be more complex to set up&lt;/li&gt;
&lt;li&gt;May use more server resources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a simple visual comparison:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fb400e6dfc9754565af97ab5d125fa26e%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fb400e6dfc9754565af97ab5d125fa26e%3Fwidth%3D737" alt="Client-side rendering vs Server-side rendering" width="737" height="654"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  SSR and search engines: a match made in HTTP
&lt;/h2&gt;

&lt;p&gt;Server-side rendering can have a big impact on how search engines see your site. Let's break it down:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Faster Indexing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fe0bfbaf0ac66474e8ebab791b1167d9f%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fe0bfbaf0ac66474e8ebab791b1167d9f%3Fwidth%3D737" alt="Search engins for CSR and SSR" width="737" height="654"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Content consistency&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Improved Load Times&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Search engines love fast sites. SSR can significantly cut down initial load times, which could give you a slight edge in rankings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Pseudo-code for search engine ranking&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calculateRanking&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;relevance&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loadTime&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;FAST_THRESHOLD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;SPEED_BONUS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Mobile-First Indexing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With Google's mobile-first indexing, SSR's performance benefits on slower mobile connections become even more important.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Social Media Previews&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- SSR makes it easier to include accurate meta tags --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your Dynamic Title Here"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Your Dynamic Description Here"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to actually do SSR
&lt;/h2&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set up a Next.js project.&lt;/li&gt;
&lt;li&gt;Create server-side rendered pages.&lt;/li&gt;
&lt;li&gt;Let Next.js handle serving the fully rendered HTML and client-side hydration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's a simple Next.js example using the &lt;a href="https://www.builder.io/blog/next-14-app-router" rel="noopener noreferrer"&gt;App Router&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/page.js&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;https://api.example.com/data&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to fetch data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hello &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;Home&lt;/code&gt; component is an async function, allowing for server-side &lt;a href="https://www.builder.io/blog/safe-data-fetching" rel="noopener noreferrer"&gt;data fetching&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;getData()&lt;/code&gt; fetches the data we need.&lt;/li&gt;
&lt;li&gt;The component renders the data directly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next.js automatically handles the SSR process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When a request comes in, Next.js runs this &lt;a href="https://www.builder.io/blog/why-react-server-components" rel="noopener noreferrer"&gt;component on the server&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;It waits for the data to be fetched.&lt;/li&gt;
&lt;li&gt;It renders the component with the fetched data.&lt;/li&gt;
&lt;li&gt;The fully rendered HTML is sent to the client.&lt;/li&gt;
&lt;li&gt;Once the JavaScript loads in the browser, the page becomes interactive.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach gives you the benefits of SSR without having to manually set up a server or manage the rendering process yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Higher-level SSR solutions
&lt;/h2&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F8b8f71cef3954796a6f4d6f8f5b9baa6%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F8b8f71cef3954796a6f4d6f8f5b9baa6%3Fwidth%3D737" alt="collage.png" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;: The most popular React framework with built-in SSR support.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://remix.run/" rel="noopener noreferrer"&gt;Remix&lt;/a&gt;: A full stack web framework that leverages React Router.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.gatsbyjs.com/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt;: Primarily a static site generator, but also supports SSR.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://vuejs.org/" rel="noopener noreferrer"&gt;Vue&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nuxt.com/" rel="noopener noreferrer"&gt;Nuxt.js&lt;/a&gt;: The go-to framework for Vue applications with SSR capabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://angular.dev/" rel="noopener noreferrer"&gt;Angular&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Angular Universal: The official SSR solution for Angular applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://svelte.dev/" rel="noopener noreferrer"&gt;Svelte&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://svelte.dev/docs/kit/@sveltejs-kit" rel="noopener noreferrer"&gt;SvelteKit&lt;/a&gt;: The official application framework for Svelte with SSR support.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  JavaScript (Framework-agnostic)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://astro.build/" rel="noopener noreferrer"&gt;Astro&lt;/a&gt;: Allows you to use multiple frameworks and supports SSR.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://qwik.dev/" rel="noopener noreferrer"&gt;Qwik&lt;/a&gt;: A new framework designed for optimal performance with built-in SSR support.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.php.net/" rel="noopener noreferrer"&gt;PHP&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://laravel.com/" rel="noopener noreferrer"&gt;Laravel&lt;/a&gt;: Offers SSR capabilities through &lt;a href="https://inertiajs.com/" rel="noopener noreferrer"&gt;Inertia.js&lt;/a&gt; or its own &lt;a href="https://livewire.laravel.com/docs/components" rel="noopener noreferrer"&gt;Livewire component&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ruby
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://rubyonrails.org/" rel="noopener noreferrer"&gt;Ruby on Rails&lt;/a&gt;: Supports SSR through tools like &lt;a href="https://docs.stimulusreflex.com/" rel="noopener noreferrer"&gt;Stimulus Reflex&lt;/a&gt; or &lt;a href="https://www.hotrails.dev/" rel="noopener noreferrer"&gt;Hotwire&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.python.org/" rel="noopener noreferrer"&gt;Python&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.djangoproject.com/" rel="noopener noreferrer"&gt;Django&lt;/a&gt;: Can implement SSR using libraries like &lt;a href="https://www.django-unicorn.com/" rel="noopener noreferrer"&gt;Django-Unicorn&lt;/a&gt; or &lt;a href="https://www.builder.io/blog/htmx-vs-react" rel="noopener noreferrer"&gt;HTMX&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://flask.palletsprojects.com/en/stable/#" rel="noopener noreferrer"&gt;Flask&lt;/a&gt;: Can be configured for SSR, often used with extensions like Flask-SSE.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment and caching
&lt;/h2&gt;

&lt;p&gt;When deploying an SSR app:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build both client-side and server-side bundles.&lt;/li&gt;
&lt;li&gt;Run the SSR server as a background process.&lt;/li&gt;
&lt;li&gt;Use a process monitor like PM2 or Supervisor to keep your server running.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's a basic deployment flow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F9a821f3a0a954bfcb6fa8a0150d78e16%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F9a821f3a0a954bfcb6fa8a0150d78e16%3Fwidth%3D737" alt="SSR flowchart.png" width="737" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Don't forget about caching! Caching server-rendered pages can significantly reduce server load.&lt;/p&gt;

&lt;h2&gt;
  
  
  SSR with Builder.io
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fe8a6f0e9110a4cdaad40ae064c217e49%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fe8a6f0e9110a4cdaad40ae064c217e49%3Fwidth%3D737" alt="Builder.io SSR and SSG" width="737" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Key features
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Framework Agnostic&lt;/strong&gt;: Builder.io works with various frameworks that support SSR and SSG.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic Optimization&lt;/strong&gt;: Builder optimizes your content for performance, including code splitting and lazy loading of off-screen components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Rendering&lt;/strong&gt;: You can render different content based on user attributes or &lt;a href="https://www.builder.io/c/docs/abtesting" rel="noopener noreferrer"&gt;A/B tests&lt;/a&gt; while maintaining &lt;a href="https://www.builder.io/m/explainers/seo-core-web-vitals" rel="noopener noreferrer"&gt;SEO benefits&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy Integration&lt;/strong&gt;: Builder provides &lt;a href="https://www.builder.io/c/docs/sdk-comparison" rel="noopener noreferrer"&gt;SDKs and documentation&lt;/a&gt; to seamlessly integrate your existing projects.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Implementation example
&lt;/h3&gt;

&lt;p&gt;Here's a basic example of how you might fetch and render content server-side with &lt;a href="https://www.builder.io/c/docs/custom-components-ssr-ssg" rel="noopener noreferrer"&gt;Builder and Next.js&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;BuilderComponent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@builder.io/react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getStaticProps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;page&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;userAttributes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;urlPath&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toPromise&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;revalidate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;BuilderComponent&lt;/span&gt;
      &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"page"&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Best practices
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Ensure you're using a framework that supports SSR or SSG.&lt;/li&gt;
&lt;li&gt;Follow your framework's guidelines for fetching data server-side when integrating Builder Pages or Sections.&lt;/li&gt;
&lt;li&gt;Refer to the &lt;code&gt;getAsyncProps&lt;/code&gt; README for more information on handling server-side data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By leveraging Builder for SSR, you can combine the flexibility of a &lt;a href="https://www.builder.io/headless-cms" rel="noopener noreferrer"&gt;headless CMS&lt;/a&gt; with the performance benefits of server-side rendering, all while maintaining an easy-to-use &lt;a href="https://www.builder.io/m/knowledge-center/visual-editing" rel="noopener noreferrer"&gt;visual editing&lt;/a&gt; experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;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 &lt;a href="https://www.builder.io/m/nextjs-cms" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: How does SSR affect my development workflow?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How does SSR impact my site's Time to Interactive (TTI)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Are there any security considerations specific to SSR?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How does SSR work with authentication and personalized content?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>html</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Design Systems Explained</title>
      <dc:creator>Luke Stahl</dc:creator>
      <pubDate>Fri, 18 Oct 2024 17:17:10 +0000</pubDate>
      <link>https://dev.to/builderio/design-systems-explained-14df</link>
      <guid>https://dev.to/builderio/design-systems-explained-14df</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a design system?
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fb0c97daa30fc4d44973d661dbb2756ee" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fb0c97daa30fc4d44973d661dbb2756ee" alt="What is a Design System" width="1920" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's what you'll typically find in a design system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reusable UI components: Think buttons, forms, modals, and other common UI elements.&lt;/li&gt;
&lt;li&gt;Design patterns: Standardized solutions for common UX problems.&lt;/li&gt;
&lt;li&gt;Style guides: Documentation on typography, color usage, spacing, and other visual elements.&lt;/li&gt;
&lt;li&gt;Best practices: Guidelines on how to use components and apply design principles.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.builder.io/c/docs/design-tokens" rel="noopener noreferrer"&gt;Design tokens&lt;/a&gt;: Variables for storing visual design attributes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do developers care about design systems?
&lt;/h2&gt;

&lt;p&gt;You might be wondering why you should invest time in a design system. Here are some concrete benefits:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Better teamwork: Design systems provide a shared language between designers and developers. This reduces miscommunication and speeds up the handoff process.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Quality control: Components in a design system are typically well-tested and refined. This leads to fewer bugs and a more polished final product.&lt;/li&gt;
&lt;li&gt;Accessibility: By baking accessibility standards into your design system, you ensure that all parts of your application meet these standards by default.&lt;/li&gt;
&lt;li&gt;Brand cohesion: A design system helps maintain a consistent brand identity across all parts of your application or even across multiple applications.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The building blocks of a design system
&lt;/h2&gt;

&lt;p&gt;Let's review the core components of a design system:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fe2d197b3e31a4e29a52224a835ebc782%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fe2d197b3e31a4e29a52224a835ebc782%3Fwidth%3D737" alt="Building Blocks and Core Components" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern Libraries
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;For example, a pattern library might include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A standard way to structure navigation menus&lt;/li&gt;
&lt;li&gt;Best practices for form validation and error handling&lt;/li&gt;
&lt;li&gt;Conventions for data visualization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These patterns help create a consistent user experience across your application. They're handy for complex interactions in multiple places in your app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visual Elements
&lt;/h3&gt;

&lt;p&gt;Visual elements form the foundation of your design system's aesthetics. They include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Typography: This goes beyond just choosing fonts. It includes guidelines on font sizes, line heights, and typographic scale.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Spacing and layout: Consistent spacing is crucial for a polished UI. Many design systems use a standardized spacing scale.&lt;/li&gt;
&lt;li&gt;Iconography: Guidelines for icon style, size, and usage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These elements work together to create a cohesive visual language for your application. &lt;a href="https://material.io/" rel="noopener noreferrer"&gt;Google's Material Design&lt;/a&gt; is a comprehensive example of how these elements can be defined and documented.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reusable Components
&lt;/h3&gt;

&lt;p&gt;At the heart of any design system are reusable components. These are the LEGO blocks of your UI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basic elements (buttons, inputs)&lt;/li&gt;
&lt;li&gt;Complex widgets (date pickers, modals)&lt;/li&gt;
&lt;li&gt;Layout components (grids, cards)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good reusable components are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Modular: They work independently.&lt;/li&gt;
&lt;li&gt;Customizable: They adapt to different contexts.&lt;/li&gt;
&lt;li&gt;Well-documented: They come with clear usage guidelines.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why they matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistency: Everyone uses the same building blocks.&lt;/li&gt;
&lt;li&gt;Efficiency: No reinventing the wheel for common UI elements.&lt;/li&gt;
&lt;li&gt;Easier maintenance: Update once; changes apply everywhere.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When building components, consider all states (hover, disabled, etc.) and make them responsive. Here's a simple example of a reusable button in React:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;primary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
    &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`button button--&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;disabled&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remember, a good component library evolves with your team's needs. Regular reviews and updates keep your components relevant and valuable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building your own design system
&lt;/h2&gt;

&lt;p&gt;Creating a design system is a significant undertaking but pays dividends in the long run. Here's a more detailed look at the process:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F6883b8289bc544e5a0a067cbae00bf24%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F6883b8289bc544e5a0a067cbae00bf24%3Fwidth%3D737" alt="Design System Process" width="737" height="737"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Define your principles: What core values should guide your design decisions? These might include things like clarity, efficiency, or accessibility.&lt;/li&gt;
&lt;li&gt;Create visual elements: Develop your color palette, typography, spacing scale, and other foundational elements. These will inform the design of your components.&lt;/li&gt;
&lt;li&gt;Build your component library: Start with the most commonly used components. For each component, consider different states (hover, active, disabled) and variations (size, color).&lt;/li&gt;
&lt;li&gt;Document everything: Clear, comprehensive documentation is crucial. Include usage guidelines, code examples, and explanations of when to use each component.&lt;/li&gt;
&lt;li&gt;Iterate: A design system is never truly finished. Gather feedback from your team and users, and continuously refine and expand your system.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Remember, you don't have to build everything at once. Start with the most critical elements and expand over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accessibility matters
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Your design system should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Include specific accessibility guidelines for each component&lt;/li&gt;
&lt;li&gt;Ensure color contrast ratios meet WCAG standards&lt;/li&gt;
&lt;li&gt;Provide keyboard navigation support&lt;/li&gt;
&lt;li&gt;Include guidelines for writing accessible content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Making your application accessible isn't just about compliance—it's about creating a better user experience for everyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Teamwork makes the dream work
&lt;/h2&gt;

&lt;p&gt;A design system is a collaborative effort that bridges the gap between design and development. To be successful, it should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serve as a shared language understood by all team members&lt;/li&gt;
&lt;li&gt;Facilitate collaboration between designers, developers, and other stakeholders&lt;/li&gt;
&lt;li&gt;Be open to contributions and feedback from the entire team&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gaining adoption of your design system
&lt;/h2&gt;

&lt;p&gt;Implementing a design system is a significant undertaking. Here's a more detailed approach:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fa4b0ad54e85042e38b481327d5c0ab44%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fa4b0ad54e85042e38b481327d5c0ab44%3Fwidth%3D737" alt="Design System Adoption" width="737" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start small: Begin with a few key components and expand gradually. This allows you to refine your process and demonstrate value quickly.&lt;/li&gt;
&lt;li&gt;Get everyone on board: Ensure all stakeholders understand the value of the design system. This can include presentations, workshops, or one-on-one discussions.&lt;/li&gt;
&lt;li&gt;Train your team: Provide resources and support to help everyone use the system effectively. This might include documentation, tutorials, and hands-on training sessions.&lt;/li&gt;
&lt;li&gt;Monitor adoption: Track how the design system is used and address any challenges. Tools like analytics and code linting can help with this.&lt;/li&gt;
&lt;li&gt;Iterate and improve: Continuously gather feedback and refine the system. Be prepared to make changes based on real-world usage and evolving needs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Implementation is an ongoing process. Be prepared to adapt and evolve your approach over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Builder and design systems
&lt;/h2&gt;

&lt;p&gt;Design systems promise consistency and efficiency, but implementing them effectively can be challenging. &lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder&lt;/a&gt; addresses common pain points with innovative solutions:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fc65646804a964d36bd9fb0bd4a665ce0%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fc65646804a964d36bd9fb0bd4a665ce0%3Fwidth%3D737" alt="Buider and Design Systems" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adoption: Builder's Visual Editor makes integration frictionless by &lt;a href="https://www.builder.io/blog/visual-editing-bridging-gap" rel="noopener noreferrer"&gt;bridging the gap between design and development&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Multi-Framework Support: &lt;a href="https://mitosis.builder.io/" rel="noopener noreferrer"&gt;Mitosis&lt;/a&gt;, an open-source tool, allows for the writing of components once and compiling them into multiple frameworks.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.builder.io/m/knowledge-center/design-to-code" rel="noopener noreferrer"&gt;Design-to-code&lt;/a&gt; Sync: Features like &lt;a href="https://www.builder.io/c/docs/mapping-functions" rel="noopener noreferrer"&gt;component mapping&lt;/a&gt; and automated code generation help maintain consistency between designs and implementation.&lt;/li&gt;
&lt;li&gt;Consistency Maintenance: Automated propagation of design system changes across codebases helps maintain uniformity while allowing for evolution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By tackling these challenges, &lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt;'s platform streamlines the entire process from design to production, making design systems more accessible and effective for teams of all sizes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools to get the most out of your design system
&lt;/h2&gt;

&lt;p&gt;There are many tools available to help create and manage design systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.figma.com/" rel="noopener noreferrer"&gt;Figma&lt;/a&gt; for collaborative design: Allows designers and developers to work together in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://storybook.js.org/" rel="noopener noreferrer"&gt;Storybook&lt;/a&gt; for building component libraries: Provides a sandbox to develop and test UI components in isolation.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://zeroheight.com/" rel="noopener noreferrer"&gt;Zeroheight&lt;/a&gt; for documentation: Helps create comprehensive, easy-to-navigate documentation for your design system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping it fresh
&lt;/h2&gt;

&lt;p&gt;A design system is never truly "finished." To keep it relevant and effective:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regularly review and update components: As your application evolves, so should your design system.&lt;/li&gt;
&lt;li&gt;Solicit feedback from users and team members: They use the system daily and can provide valuable insights.&lt;/li&gt;
&lt;li&gt;Keep up with design trends and technological changes: While you shouldn't chase every trend, maintaining a modern and relevant system is important.&lt;/li&gt;
&lt;li&gt;Document changes and communicate updates to the team: Make sure everyone knows about new features or changes to existing components.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By treating your design system as a living document, you ensure it continues to meet the changing needs of your organization and users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

</description>
      <category>designsystem</category>
      <category>webdev</category>
      <category>design</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A helpful approach to navigating the SEO AI shift</title>
      <dc:creator>Luke Stahl</dc:creator>
      <pubDate>Fri, 04 Oct 2024 11:01:32 +0000</pubDate>
      <link>https://dev.to/builderio/a-helpful-approach-to-navigating-the-seo-ai-shift-3f4p</link>
      <guid>https://dev.to/builderio/a-helpful-approach-to-navigating-the-seo-ai-shift-3f4p</guid>
      <description>&lt;p&gt;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:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How SEO and its strategies have changed&lt;/li&gt;
&lt;li&gt;The identity crisis SEO is facing because of these changes&lt;/li&gt;
&lt;li&gt;Key Google updates and their effects&lt;/li&gt;
&lt;li&gt;Improvements made to programmatic SEO&lt;/li&gt;
&lt;li&gt;The best SEO tools&lt;/li&gt;
&lt;li&gt;How Builder creates SEO-friendly apps and sites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s dive in. Starting with some cliches, so we can get that out of the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  SEO is dead… blah blah blah
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Here’s an interesting market trend from &lt;a href="https://x.com/jakezward/status/1841462559053898142" rel="noopener noreferrer"&gt;Jake Ward &lt;/a&gt;at &lt;a href="https://www.contactstudios.com/" rel="noopener noreferrer"&gt;Contact Studios&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fdcccac813cd142129139d528a08bb34e%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fdcccac813cd142129139d528a08bb34e%3Fwidth%3D705" alt="SEO AI" width="705" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Developers understand imposter syndrome, as a developer I feel this too. Take &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React&lt;/a&gt;, 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 &lt;a href="https://vitejs.dev/" rel="noopener noreferrer"&gt;Vite&lt;/a&gt; and how it's the next big thing. Should you drop everything and learn Vite? Is React dead now?&lt;/p&gt;

&lt;p&gt;This constant cycle of learning and re-learning can make even seasoned developers feel like they're always one step behind.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  How AI is being utilized in SEO practices
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F927e2bf0f2c24f1d9c170dd7228f78a3%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F927e2bf0f2c24f1d9c170dd7228f78a3%3Fwidth%3D705" alt="SEO AI" width="705" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI is a game changer; just kidding! But in reality, AI is quickly becoming a valuable tool for SEO experts.&lt;/p&gt;

&lt;p&gt;Search engines use AI to understand user intent better, shifting the focus from exact keyword matches to valuable content creation.&lt;/p&gt;

&lt;p&gt;AI tools are helping with various aspects of SEO:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing assistance for idea generation and content outlining&lt;/li&gt;
&lt;li&gt;Data analysis for quicker, more accurate insights&lt;/li&gt;
&lt;li&gt;Technical SEO support for routine tasks like meta description generation and error identification&lt;/li&gt;
&lt;li&gt;Competitor analysis, providing deeper insights into rival strategies and market gaps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  SEO strategy before and after AI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fdaf2815d6b8d4f7ea7fc11c4a5cf6c77%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fdaf2815d6b8d4f7ea7fc11c4a5cf6c77%3Fwidth%3D705" alt="SEO Strategies with AI" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pre-AI SEO strategy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keyword-centric: Heavy focus on exact-match keywords, keyword usage, and keyword difficulty&lt;/li&gt;
&lt;li&gt;Link building: Emphasis on quantity over quality of backlinks&lt;/li&gt;
&lt;li&gt;Content creation: Often prioritized monthly search volume over depth&lt;/li&gt;
&lt;li&gt;Technical SEO: Basic on-page optimization and site structure&lt;/li&gt;
&lt;li&gt;Manual analysis: Time-consuming data interpretation and competitor research&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Post-AI SEO strategy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intent-focused: Understanding and matching user search intent&lt;/li&gt;
&lt;li&gt;Produce high-quality content: Emphasis on comprehensive, expert-level content&lt;/li&gt;
&lt;li&gt;Natural language processing: Optimizing for conversational queries and voice search&lt;/li&gt;
&lt;li&gt;AI-powered tools: Utilizing machine learning for target keyword research and content optimization&lt;/li&gt;
&lt;li&gt;Predictive analytics: Using AI to forecast trends and adjust strategies proactively&lt;/li&gt;
&lt;li&gt;Automated personalization: Tailoring content and user experience based on AI insights&lt;/li&gt;
&lt;li&gt;Continuous adaptation: Regularly updating strategies to align with AI-driven algorithm changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI visibility optimization (AIVO)&lt;/strong&gt;: Making content more visible and understandable to AI search engines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AIVO is the strategy I’m really interested in. As AI search engines like &lt;a href="https://chatgpt.com/" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt;, &lt;a href="https://gemini.google.com/" rel="noopener noreferrer"&gt;Google Gemini&lt;/a&gt;, &lt;a href="https://claude.ai/" rel="noopener noreferrer"&gt;Claude&lt;/a&gt;, and &lt;a href="https://www.perplexity.ai/" rel="noopener noreferrer"&gt;Perplexity&lt;/a&gt; start eating into the typical search engines, we need to start thinking of how brands are surfacing there.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about Programmatic SEO?
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fbdae9eac178f4fe9ad21855e77507810%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fbdae9eac178f4fe9ad21855e77507810%3Fwidth%3D705" alt="Programmatic SEO " width="705" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's the basic idea:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Collect a bunch of data (like product info or city names)&lt;/li&gt;
&lt;li&gt;Make a template for your pages&lt;/li&gt;
&lt;li&gt;Use code to fill the template with your data, creating many pages&lt;/li&gt;
&lt;li&gt;Check that the pages make sense&lt;/li&gt;
&lt;li&gt;Publish them all to your website&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's great for businesses with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tons of products&lt;/li&gt;
&lt;li&gt;Services in many locations&lt;/li&gt;
&lt;li&gt;Large databases of information&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The good, the bad, and the AI of programmatic SEO
&lt;/h3&gt;

&lt;h4&gt;
  
  
  The Good:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Efficiently targets long-tail keywords&lt;/li&gt;
&lt;li&gt;Scales content creation for large websites&lt;/li&gt;
&lt;li&gt;Provides useful information for niche queries&lt;/li&gt;
&lt;li&gt;Helps businesses with large catalogs or location-based services&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  The Bad:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Risk of creating low-quality, repetitive content&lt;/li&gt;
&lt;li&gt;Can lead to thin content if not done carefully&lt;/li&gt;
&lt;li&gt;Might be seen as manipulative by search engines&lt;/li&gt;
&lt;li&gt;Can flood search results, potentially pushing out smaller, manual content creators&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  How AI is improving programmatic SEO:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Generates more natural, varied content that reads like human-written text&lt;/li&gt;
&lt;li&gt;Uses advanced data analysis to identify valuable keyword opportunities&lt;/li&gt;
&lt;li&gt;Personalizes content based on user intent and preferences&lt;/li&gt;
&lt;li&gt;Implements real-time optimization and quality control&lt;/li&gt;
&lt;li&gt;Integrates multi-media elements more effectively&lt;/li&gt;
&lt;li&gt;Enhances content relevance and readability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google updates impact on search engines
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F8c2136a457ef4ef7a9d2d5a76b4ef367%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F8c2136a457ef4ef7a9d2d5a76b4ef367%3Fwidth%3D705" alt="Google's Helpful Content" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Back in September 2023, Google released a significant update - “&lt;a href="https://searchengineland.com/impact-of-the-google-september-2023-helpful-content-was-big-for-the-seo-industry-432751" rel="noopener noreferrer"&gt;Helpful Content&lt;/a&gt;,” which altered SEO practices. Here's how it has affected the industry:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User-first content: Google began prioritizing content that provides genuine value to users rather than content solely optimized for search engine results.&lt;/li&gt;
&lt;li&gt;Ranking shifts: Many sites, especially those with content primarily created for SEO, experienced noticeable drops in organic traffic and search rankings.&lt;/li&gt;
&lt;li&gt;Long recovery period: Some sites affected by this update have struggled to regain their previous positions, with recovery efforts continuing well into 2024.&lt;/li&gt;
&lt;li&gt;Core system integration: In March 2024, Google integrated the helpful content system into its core ranking system, solidifying its importance.&lt;/li&gt;
&lt;li&gt;Emphasis on expertise: Content demonstrating first-hand experience and deep knowledge has been increasingly favored.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Strategy evolution: SEOs have had to prioritize creating genuinely helpful, original content over traditional keyword optimization tactics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The helpful content update and subsequent changes sparked controversy in the &lt;a href="https://www.reddit.com/r/SEO/comments/16nwn6y/why_is_the_google_helpful_update_negatively/" rel="noopener noreferrer"&gt;SEO community.&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Overviews &amp;amp; Featured Snippets
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fc7967c179c5d484aac1baf1df05c6fc7%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fc7967c179c5d484aac1baf1df05c6fc7%3Fwidth%3D705" alt="AI Overview" width="705" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As AI gets smarter, it changes how we do SEO. One big change is the rise of &lt;a href="https://www.notion.so/Weekly-Marketing-Team-Meeting-da6fcdf19c0445479209dc916de8289e?pvs=21" rel="noopener noreferrer"&gt;Featured Snippets&lt;/a&gt; and &lt;a href="https://www.notion.so/Weekly-Marketing-Team-Meeting-da6fcdf19c0445479209dc916de8289e?pvs=21" rel="noopener noreferrer"&gt;AI Overviews&lt;/a&gt;. These are like the cool kids of search results - they get special treatment and prime real estate on the search page.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What are AI Overviews?&lt;br&gt;
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.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To optimize content for AI Overviews:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write really good, in-depth content. Cover all the angles.&lt;/li&gt;
&lt;li&gt;Stick to facts. Don't make stuff up.&lt;/li&gt;
&lt;li&gt;Organize your content well. Use headings and lists.&lt;/li&gt;
&lt;li&gt;Build your site's reputation over time.&lt;/li&gt;
&lt;li&gt;Keep your content up-to-date.&lt;/li&gt;
&lt;li&gt;Generate schema markup to help Google understand your content.&lt;/li&gt;
&lt;li&gt;Focus on answering questions people are asking.&lt;/li&gt;
&lt;li&gt;Show you know what you're talking about.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fccc90978bea44c4ba7e9efe243386647%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fccc90978bea44c4ba7e9efe243386647%3Fwidth%3D705" alt="Featured Snippet" width="705" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a quick breakdown of how feature snippets work:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F04273943c53f4da2bf38aa5f50c3d60d%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F04273943c53f4da2bf38aa5f50c3d60d%3Fwidth%3D705" alt="Featured Snippet Diagram" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some key things to know about featured snippets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google picks them automatically based on what people are searching for.&lt;/li&gt;
&lt;li&gt;Clicking on one takes you straight to the relevant part of the page.&lt;/li&gt;
&lt;li&gt;If you don't want your content in snippets, you can opt-out with some technical tweaks.&lt;/li&gt;
&lt;li&gt;There's no secret handshake to get your page chosen as a snippet - it's all about the quality of your content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optimizing content for Featured Snippets
&lt;/h3&gt;

&lt;p&gt;While Google doesn't allow direct markup for featured snippets, you can increase your chances:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fd5dcaa5ffe3e48149dbd383e35eb049f%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fd5dcaa5ffe3e48149dbd383e35eb049f%3Fwidth%3D705" alt="Featured Snippet Strategy" width="705" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Answer specific questions clearly and concisely&lt;/li&gt;
&lt;li&gt;Use structured data and clear formatting (headers, lists, tables)&lt;/li&gt;
&lt;li&gt;Create high-quality, authoritative content&lt;/li&gt;
&lt;li&gt;Keep information up-to-date and comprehensive&lt;/li&gt;
&lt;li&gt;Focus on satisfying user intent&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  The best AI tools for SEO
&lt;/h2&gt;

&lt;p&gt;Here are some standout AI-powered SEO tools that can help in various ways, from AI writing tools to auditing a website's performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F7b0265362b7a45be89945f1495c37f90%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F7b0265362b7a45be89945f1495c37f90%3Fwidth%3D705" alt="SEO Tools" width="705" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Content assistants
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://surferseo.com/ai/" rel="noopener noreferrer"&gt;Surfer SEO&lt;/a&gt;: 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.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.clearscope.io/" rel="noopener noreferrer"&gt;Clearscope&lt;/a&gt;: 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 &lt;a href="https://workspace.google.com/marketplace/app/clearscope/322717127952" rel="noopener noreferrer"&gt;Google Docs plugin&lt;/a&gt; to make the content creation process smoother.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Site auditing
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://ahrefs.com/blog/ai-features/" rel="noopener noreferrer"&gt;Ahrefs&lt;/a&gt;: 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.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.semrush.com/" rel="noopener noreferrer"&gt;Semrush&lt;/a&gt;: 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.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  LLMs
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://claude.ai/" rel="noopener noreferrer"&gt;Claude&lt;/a&gt;: 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.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Builder and SEO
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt; 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:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fd291f24da34340b8acf4cf6dc74dbd39%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fd291f24da34340b8acf4cf6dc74dbd39%3Fwidth%3D705" alt="Builder and SEO" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  SEO features:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Metadata Fields:&lt;/strong&gt; Builder's default &lt;a href="https://www.builder.io/c/docs/models-pages" rel="noopener noreferrer"&gt;Page Model&lt;/a&gt; includes meta titles and meta descriptions. Always fill these out - they're crucial for search engine optimization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom SEO Fields:&lt;/strong&gt; You can add your own fields for things like noindex or nofollow tags.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile-Friendly:&lt;/strong&gt; Builder's styles work well on mobile by default, which Google loves.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image Optimization:&lt;/strong&gt; Builder automatically optimizes images when you use its Image block or API. This helps your pages load faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server-side Rendering:&lt;/strong&gt; Builder works with frameworks that render pages on the server, which can boost your SEO.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Core web vitals:
&lt;/h3&gt;

&lt;p&gt;Builder helps with Google's Core Web Vitals in a few ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Largest Contentful Paint (LCP):&lt;/strong&gt; Builder's automatic image optimization and CDN delivery help large images load faster, improving LCP scores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First Input Delay (FID):&lt;/strong&gt; Builder's SDKs support code splitting out-of-the-box, which can reduce JavaScript execution time and improve FID.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cumulative Layout Shift (CLS):&lt;/strong&gt; Builder's responsive design tools and preview features help you create stable layouts that don't shift unexpectedly as the page loads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F86cb85533e5d469e8ffeed519e2a794a%3Fwidth%3D45" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F86cb85533e5d469e8ffeed519e2a794a%3Fwidth%3D45" alt="Light bulb tip icon." width="45" height="46"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Read more about &lt;a href="https://www.builder.io/m/explainers/seo-core-web-vitals" rel="noopener noreferrer"&gt;Builder and Core Web Vitals&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  SEO best practices with Builder:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use Proper Headings:&lt;/strong&gt; Set your Text Blocks as H1, H2, etc. when appropriate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimize Images:&lt;/strong&gt; Use Image blocks and add good alt text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a Sitemap:&lt;/strong&gt; You can use Builder's API to make a sitemap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check Performance:&lt;/strong&gt; Use tools like &lt;a href="https://github.com/GoogleChrome/lighthouse" rel="noopener noreferrer"&gt;Google Lighthouse&lt;/a&gt; or &lt;a href="https://pagespeed.web.dev/" rel="noopener noreferrer"&gt;PageSpeed Insights&lt;/a&gt; to monitor your site's speed. We’ve even built this pretty cool performance tool, &lt;a href="https://www.builder.io/c/performance-insights" rel="noopener noreferrer"&gt;Performance Insights&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By leveraging these features and following these practices, you'll be well on your way to creating SEO-friendly sites with &lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  SEO's new identity crisis
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F594eff9ddcc24423b5b4820f83397416%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F594eff9ddcc24423b5b4820f83397416%3Fwidth%3D705" alt="Identity Crisis" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Think about it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating content that answers user questions? That's just good copywriting.&lt;/li&gt;
&lt;li&gt;Focusing on user intent? That's basic customer service.&lt;/li&gt;
&lt;li&gt;Building authority in your niche? Welcome to Brand Building 101.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F86cb85533e5d469e8ffeed519e2a794a%3Fwidth%3D45" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F86cb85533e5d469e8ffeed519e2a794a%3Fwidth%3D45" alt="Light bulb tip icon." width="45" height="46"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Here is a super helpful &lt;a href="https://developers.google.com/search/docs/fundamentals/seo-starter-guide" rel="noopener noreferrer"&gt;starter guide&lt;/a&gt; for SEO, thanks to Google Search Central.&lt;/p&gt;

&lt;h3&gt;
  
  
  About me
&lt;/h3&gt;

&lt;p&gt;I'm &lt;a href="https://www.linkedin.com/in/lucasstahl/" rel="noopener noreferrer"&gt;Luke Stahl&lt;/a&gt;, a front-end developer and digital marketer with a passion for SEO. My philosophy? Build, ship, and learn as you go.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Figma Plugins for Developers in 2024</title>
      <dc:creator>Luke Stahl</dc:creator>
      <pubDate>Wed, 18 Sep 2024 12:37:38 +0000</pubDate>
      <link>https://dev.to/builderio/figma-plugins-for-developers-in-2024-2l41</link>
      <guid>https://dev.to/builderio/figma-plugins-for-developers-in-2024-2l41</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What are Figma plugins?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;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. &lt;a href="https://www.figma.com/community" rel="noopener noreferrer"&gt;Figma plugins&lt;/a&gt; are pieces of software that integrate directly with Figma's interface. They can do all sorts of things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automate repetitive tasks&lt;/li&gt;
&lt;li&gt;Add new features to Figma&lt;/li&gt;
&lt;li&gt;Connect Figma to other tools and services&lt;/li&gt;
&lt;li&gt;Enhance existing Figma functionality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stark
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fb65e014f53ce462a943a974f5922fabd%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fb65e014f53ce462a943a974f5922fabd%3Fwidth%3D705" alt="Stark.png" width="705" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First up, we've got &lt;a href="https://www.figma.com/community/plugin/732603254453395948/stark-contrast-accessibility-checker" rel="noopener noreferrer"&gt;Stark&lt;/a&gt;. 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!&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Color contrast checker with color suggestions&lt;/li&gt;
&lt;li&gt;Landmarks and Focus Order for screen readers and other assistive technologies&lt;/li&gt;
&lt;li&gt;Colorblind simulation via their Vision Simulator&lt;/li&gt;
&lt;li&gt;Accessibility guidelines, including Alt-Text Annotations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bannerify
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fdef09319ea0f4e128ac6e68686766e7b%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fdef09319ea0f4e128ac6e68686766e7b%3Fwidth%3D705" alt="Bannerify.jpeg" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Need to create banner ads? &lt;a href="https://www.figma.com/community/plugin/796124491692147799/bannerify-banner-studio" rel="noopener noreferrer"&gt;Bannerify's&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic banner generation&lt;/li&gt;
&lt;li&gt;Easy timeline animation with real-time previews in Figma&lt;/li&gt;
&lt;li&gt;Export to multiple formats: HTML/CSS, GIF, MP4, WebM, and ad platforms&lt;/li&gt;
&lt;li&gt;Embed Lottie animations and MP4 videos, with optional audio tracks&lt;/li&gt;
&lt;li&gt;Automatic asset optimization and responsive HTML preview pages&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Autoflow
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fd986931640bf4e95b5a5038f1343d34f%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fd986931640bf4e95b5a5038f1343d34f%3Fwidth%3D705" alt="Autoflow.png" width="705" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/community/plugin/733902567457592893/autoflow" rel="noopener noreferrer"&gt;Autoflow&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frame linking for prototypes&lt;/li&gt;
&lt;li&gt;User flow visualization&lt;/li&gt;
&lt;li&gt;Interactive preview&lt;/li&gt;
&lt;li&gt;Offset start/end terminal spacing and multiple terminal styles&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Responsify
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F2464a1c92cd942798e1026110922b34a%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F2464a1c92cd942798e1026110922b34a%3Fwidth%3D705" alt="Responsify.png" width="705" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/community/plugin/743654854885744527/responsify" rel="noopener noreferrer"&gt;Responsify&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic responsive layout generation&lt;/li&gt;
&lt;li&gt;Device-specific adjustments&lt;/li&gt;
&lt;li&gt;CSS output&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wireframe
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F29d93195a6504730bc7ff06aa6d2cb56%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F29d93195a6504730bc7ff06aa6d2cb56%3Fwidth%3D705" alt="Wireframe.png" width="705" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sometimes, you need to strip things back to basics. &lt;a href="https://www.figma.com/community/plugin/742764242781786818/wireframe" rel="noopener noreferrer"&gt;Wireframe&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low-fidelity wireframe components&lt;/li&gt;
&lt;li&gt;Quick prototyping tools&lt;/li&gt;
&lt;li&gt;Customizable elements&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Visual Copilot
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F2c0f96e29c7e4a3ca9270ca0de3f7ccb%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F2c0f96e29c7e4a3ca9270ca0de3f7ccb%3Fwidth%3D705" alt="Visual Copilot.png" width="705" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/community/plugin/747985167520967365" rel="noopener noreferrer"&gt;Visual Copilot&lt;/a&gt; is an AI-powered &lt;a href="https://www.builder.io/blog/figma-to-code-ai" rel="noopener noreferrer"&gt;Figma to code&lt;/a&gt; toolchain that leverages AI models and an open-source compiler, &lt;a href="https://mitosis.builder.io/" rel="noopener noreferrer"&gt;Mitosis&lt;/a&gt;, to transform flat designs into code hierarchies, refined by an LLM for framework and styling preferences.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Converts Figma designs to code for multiple frameworks (React, Vue, Svelte, Angular, Qwik, Solid, React Native, HTML)&lt;/li&gt;
&lt;li&gt;Generates responsive layouts with your choice of styling library (CSS, Tailwind, Emotion, Styled Components)&lt;/li&gt;
&lt;li&gt;Supports component mapping to integrate with existing design systems&lt;/li&gt;
&lt;li&gt;Offers real-time conversion and code customization options&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Iconify
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fc6e835ba02d54fb2a4b315331be303d7%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fc6e835ba02d54fb2a4b315331be303d7%3Fwidth%3D705" alt="Iconify.png" width="705" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/community/plugin/735098390272716381/iconify" rel="noopener noreferrer"&gt;Iconify&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;200,000+ open-source icons&lt;/li&gt;
&lt;li&gt;In-app search functionality&lt;/li&gt;
&lt;li&gt;Easy insertion into designs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run Plugin API
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F5227967d7ee440bb8339cdc60c6d31d3%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F5227967d7ee440bb8339cdc60c6d31d3%3Fwidth%3D705" alt="Run Plugin API .png" width="705" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one's for the tinkerers. &lt;a href="https://www.figma.com/community/plugin/1061937426144722953/run-plugin-api" rel="noopener noreferrer"&gt;Run Plugin API&lt;/a&gt; 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!&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Direct access to &lt;a href="https://www.figma.com/plugin-docs/api/api-reference/?fuid=1276633539175500747" rel="noopener noreferrer"&gt;Figma Plugin API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Code execution via IntelliSense within Figma&lt;/li&gt;
&lt;li&gt;Testing ground for custom plugin development&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lorem Ipsum
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Ffb8fd15142d143d9940cb79d7e499611%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Ffb8fd15142d143d9940cb79d7e499611%3Fwidth%3D705" alt="Lorem Ipsum.jpeg" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sometimes, you need some placeholder text; that’s where the &lt;a href="https://www.figma.com/community/plugin/736000994034548392/lorem-ipsum" rel="noopener noreferrer"&gt;Lorem Ipsum&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-generate&lt;/li&gt;
&lt;li&gt;Multiple lorem ipsum variants&lt;/li&gt;
&lt;li&gt;Customizable length&lt;/li&gt;
&lt;li&gt;One-click insertion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Content Reel
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F42275999de02499680eac5edd016c130%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F42275999de02499680eac5edd016c130%3Fwidth%3D705" alt="Content Reel.png" width="705" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If lorem ipsum isn’t what you are looking for, try &lt;a href="https://www.figma.com/community/plugin/731627216655469013/content-reel" rel="noopener noreferrer"&gt;Content Reel&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dynamic content population&lt;/li&gt;
&lt;li&gt;Various data types (names, addresses, etc.)&lt;/li&gt;
&lt;li&gt;Customizable data sets&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Email Love
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F7e23fb025a0448c2946d869fc1e4e307%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F7e23fb025a0448c2946d869fc1e4e307%3Fwidth%3D705" alt="Email Love.png" width="705" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're working on email templates, &lt;a href="https://www.figma.com/community/plugin/1387891288648822744/email-love-html-email-builder" rel="noopener noreferrer"&gt;Email Love&lt;/a&gt; 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. 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.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Figma-to-HTML/MJML export&lt;/li&gt;
&lt;li&gt;Cross-client compatibility&lt;/li&gt;
&lt;li&gt;Accessibility-first HTML&lt;/li&gt;
&lt;li&gt;Modular component system&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Datavizer
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fac98ccb71b6f444aa96b4e196fe0c0bf%3Fwidth%3D705" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fac98ccb71b6f444aa96b4e196fe0c0bf%3Fwidth%3D705" alt="Datavizer.png" width="705" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Working with data visualization? &lt;a href="https://www.figma.com/community/plugin/736737028247625415/datavizer" rel="noopener noreferrer"&gt;Datavizer&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple chart types&lt;/li&gt;
&lt;li&gt;Data import functionality (CSV of JSON)&lt;/li&gt;
&lt;li&gt;Customizable styles&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ghost Artist
&lt;/h2&gt;



&lt;p&gt;&lt;a href="https://www.figma.com/community/plugin/1144729549755848431/ghost-artist-ai-drawing-assistant" rel="noopener noreferrer"&gt;Ghost Artist&lt;/a&gt; is an AI drawing assistant. Let’s face it: not everyone can draw, so let AI do the work for you. While it's more design-focused, it can be super helpful for quickly mocking up custom graphics or illustrations for your projects. Sometimes, a quick sketch is all you need to communicate an idea.&lt;/p&gt;

&lt;p&gt;Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-assisted drawing&lt;/li&gt;
&lt;li&gt;Style customization&lt;/li&gt;
&lt;li&gt;Quick sketch-to-vector conversion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Figma plugins can speed up your workflow and improve collaboration. Some might even make your job more enjoyable if that's your thing.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;So go ahead and give these plugins a try. Experiment with them. See how they fit into your workflow. And who knows? You might find a new favorite tool that transforms the way you work.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>productivity</category>
      <category>developer</category>
    </item>
    <item>
      <title>Extensibility: Building software that adapts</title>
      <dc:creator>Luke Stahl</dc:creator>
      <pubDate>Tue, 10 Sep 2024 10:52:48 +0000</pubDate>
      <link>https://dev.to/builderio/extensibility-building-software-that-adapts-18e4</link>
      <guid>https://dev.to/builderio/extensibility-building-software-that-adapts-18e4</guid>
      <description>&lt;p&gt;As software developers, we always look for ways to build better, more resilient systems. We want our code to stand the test of time and to be able to grow and change without causing headaches down the line. This is where the concept of extensibility comes in.&lt;/p&gt;

&lt;p&gt;In this article, we will take a deep dive into extensibility in software development. We'll start by defining what extensibility means and why it's such a big deal in our field. Then, we'll explore the practical benefits it brings to both developers and businesses.&lt;/p&gt;

&lt;p&gt;But we won't stop at theory. We'll get into the nuts and bolts of how extensibility works, looking at the key components and mechanisms that make it possible. We'll also examine how we implement extensibility here at Builder.io.&lt;/p&gt;

&lt;p&gt;Finally, we'll explore the future of extensibility in software development, considering how emerging technologies and trends might influence our approach. Whether you're a seasoned pro or just starting out, this article aims to give you a comprehensive understanding of extensibility and how it can enhance your workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is extensibility?
&lt;/h2&gt;

&lt;p&gt;Extensibility is a design principle in software development that allows for the addition of new functionality or modification of existing features without altering the system's core code. It's about creating flexible, modular systems that can adapt to changing requirements over time.&lt;/p&gt;

&lt;p&gt;At its heart, extensibility is about preparing for the unknown. It's an acknowledgment that no matter how well we plan, we can't predict all future needs. An extensible system is built with "hooks" or "extension points" that allow developers to add new features or modify existing ones without having to rewrite or significantly alter the original codebase.&lt;/p&gt;

&lt;p&gt;Extensibility enables custom functionality to be integrated into a system without restructuring its foundational components. Think of it like a well-designed API — you can add new endpoints without breaking existing ones. Take a look at the example below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F92b6e85036454d859196d0edae859587%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F92b6e85036454d859196d0edae859587%3Fwidth%3D737" alt="What is Extensibility.png" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This diagram illustrates this scenario for a social media API :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The social media API is the core system.&lt;/li&gt;
&lt;li&gt;Existing endpoints:&lt;/li&gt;
&lt;li&gt;A new feature, live video streaming, connected with a dotted line, showing it can be added without altering the existing API structure.&lt;/li&gt;
&lt;li&gt;The Live Video Streaming feature is styled differently to emphasize its status as a new addition.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This visual representation shows how extensibility in a social media platform's API allows for the addition of new features (like live video streaming) without changing the core API or affecting existing endpoints. The platform can evolve by adding new capabilities while maintaining compatibility with applications using the existing endpoints.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why extensibility matters
&lt;/h2&gt;

&lt;p&gt;Extensible software is valuable because it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adapts to changing requirements&lt;/li&gt;
&lt;li&gt;Integrates with other tools&lt;/li&gt;
&lt;li&gt;Allows for customization&lt;/li&gt;
&lt;li&gt;Extends its lifespan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F2011af7699df46cc8656a8d204d1b81c%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F2011af7699df46cc8656a8d204d1b81c%3Fwidth%3D737" alt="Why Extensibility.png" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For developers, extensibility means less refactoring when new requirements come up. For businesses, it means getting more mileage out of their software investments.&lt;/p&gt;

&lt;p&gt;Extensibility offers several benefits:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Future-proofing: Adapt to new technologies without significant rewrites.&lt;/li&gt;
&lt;li&gt;Cost-effectiveness: Adding features is often cheaper and faster than rebuilding.&lt;/li&gt;
&lt;li&gt;Quick iterations: Respond to market demands by easily adding new features or integrations.&lt;/li&gt;
&lt;li&gt;User satisfaction: Customize software to meet specific user needs.&lt;/li&gt;
&lt;li&gt;Ecosystem growth: Foster developer communities that create add-ons and extensions.&lt;/li&gt;
&lt;li&gt;Scalability: Handle increased loads and complexity as your project grows.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How extensibility works
&lt;/h2&gt;

&lt;p&gt;Extensible systems are like modular synthesizers. They have a core system (the base unit) that can be expanded with various modules (extensibility mechanisms). Each module adds new capabilities without requiring a complete redesign.&lt;/p&gt;

&lt;p&gt;Key components of extensible systems include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;Webhooks&lt;/li&gt;
&lt;li&gt;Plugins/Extensions&lt;/li&gt;
&lt;li&gt;Custom scripting&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fa4549f2ae0b2414fbddba8d3d74a4da0%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fa4549f2ae0b2414fbddba8d3d74a4da0%3Fwidth%3D737" alt="Key Components.png" width="737" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This diagram shows how different extensibility mechanisms interact with the core system. This setup is like a power strip with multiple outlets. Your core system (the power strip) provides a standardized way (the outlets) for various components to plug in and interact.&lt;/p&gt;

&lt;p&gt;Let's break it down:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;APIs (Application Programming Interfaces): Define how different software components should interact, allowing integration and data exchange.&lt;/li&gt;
&lt;li&gt;Webhooks: Automated messages sent from apps when something happens, enabling real-time data transfer between systems.&lt;/li&gt;
&lt;li&gt;Plugins/extensions: Self-contained pieces of code that add functionality to the main application without modifying its core.&lt;/li&gt;
&lt;li&gt;Custom scripting: Allows users to write their own code to extend functionality beyond what's built-in.&lt;/li&gt;
&lt;li&gt;Microservices architecture: Breaks an application into smaller, independent services that can be developed, deployed, and scaled separately.&lt;/li&gt;
&lt;li&gt;Event-driven architecture: Allows components to publish and subscribe to events, enabling loose coupling and more accessible addition of new functionality.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Implementing extensibility requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modular design: Breaking the system into independent, interchangeable modules.&lt;/li&gt;
&lt;li&gt;Clear interfaces: Defining how different parts of the system can interact.&lt;/li&gt;
&lt;li&gt;Documentation: Providing clear guidelines for how to extend the system.&lt;/li&gt;
&lt;li&gt;Versioning: Managing different versions of APIs or plugins to ensure compatibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By leveraging these extensibility mechanisms, developers can create flexible, adaptable systems that evolve with changing requirements and technologies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extensibility at Builder.io
&lt;/h2&gt;

&lt;p&gt;At &lt;a href="http://builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt;, we've built our visual development platform with extensibility in mind. Here's how we implement it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F07edbb53946242bf90dbe7ff0643b055%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F07edbb53946242bf90dbe7ff0643b055%3Fwidth%3D737" alt="Extensibility at Builder.png" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Custom components
&lt;/h3&gt;

&lt;p&gt;Developers can create and add custom components to the &lt;a href="http://builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt; interface. This allows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creation of project-specific UI elements&lt;/li&gt;
&lt;li&gt;Integration of complex, interactive features&lt;/li&gt;
&lt;li&gt;Component reuse across projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: Creating a custom data visualization component that integrates with your backend API.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Plugins
&lt;/h3&gt;

&lt;p&gt;Our &lt;a href="https://www.builder.io/c/docs/plugins-builtin-overview" rel="noopener noreferrer"&gt;plugin system&lt;/a&gt; extends Builder's core functionality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add new tools to the &lt;a href="http://builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt; interface&lt;/li&gt;
&lt;li&gt;Integrate with third-party services&lt;/li&gt;
&lt;li&gt;Automate workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: An &lt;a href="https://www.builder.io/c/docs/algolia-plugin" rel="noopener noreferrer"&gt;Algolia plugin&lt;/a&gt; that enhances your application's search and recommendation capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. APIs
&lt;/h3&gt;

&lt;p&gt;Builder.io's API enables deep integration with other tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content management: CRUD operations on content&lt;/li&gt;
&lt;li&gt;User management: Control access and permissions&lt;/li&gt;
&lt;li&gt;Custom workflows: Event-driven actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: An e-commerce site could use the &lt;a href="https://www.builder.io/c/docs/content-api" rel="noopener noreferrer"&gt;Content API&lt;/a&gt; to dynamically fetch and display product information, pricing, and promotions based on user preferences and real-time inventory data, ensuring customers always see the most relevant and up-to-date content.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Headless architecture
&lt;/h3&gt;

&lt;p&gt;Our headless architecture provides flexibility in content delivery:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Separates content from presentation&lt;/li&gt;
&lt;li&gt;Enables multi-platform content delivery&lt;/li&gt;
&lt;li&gt;Allows use of preferred front-end technologies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F36facd9b1b7043818ad54e7671fb0f64%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F36facd9b1b7043818ad54e7671fb0f64%3Fwidth%3D737" alt="Builder headless architecture.png" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. SDKs and framework integrations
&lt;/h3&gt;

&lt;p&gt;We provide SDKs and integrations for popular frameworks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/m/react-cms" rel="noopener noreferrer"&gt;React&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/m/nextjs-cms" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/m/vue-cms" rel="noopener noreferrer"&gt;Vue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/m/nuxt-cms" rel="noopener noreferrer"&gt;Nuxt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/m/angular-cms" rel="noopener noreferrer"&gt;Angular&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.builder.io/m/svelte-cms" rel="noopener noreferrer"&gt;Svelte&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These &lt;a href="https://www.builder.io/hub/home?resource-type=frameworks" rel="noopener noreferrer"&gt;framework&lt;/a&gt;s make it easy to integrate Builder.io with your existing tech stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Customizable workflows
&lt;/h3&gt;

&lt;p&gt;Create custom workflows to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set up approval processes&lt;/li&gt;
&lt;li&gt;Manage content across environments&lt;/li&gt;
&lt;li&gt;Automate publishing schedules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F756cc78ebe564098a4227379973ec7e6%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F756cc78ebe564098a4227379973ec7e6%3Fwidth%3D737" alt="Workflows.png" width="737" height="737"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Extensible data model
&lt;/h3&gt;

&lt;p&gt;Our flexible data model allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create custom content types&lt;/li&gt;
&lt;li&gt;Define custom fields and data structures&lt;/li&gt;
&lt;li&gt;Set up relationships between content types&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This flexibility means Builder.io can adapt to your data schema, not vice versa.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Open source components
&lt;/h3&gt;

&lt;p&gt;Many of our components and tools are open source, allowing the community to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contribute improvements&lt;/li&gt;
&lt;li&gt;Create new features&lt;/li&gt;
&lt;li&gt;Customize components for specific needs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We've got several open-source projects that you might find useful. &lt;a href="https://qwik.dev/" rel="noopener noreferrer"&gt;Qwik&lt;/a&gt;, our resumable framework for instant web apps; &lt;a href="https://partytown.builder.io/" rel="noopener noreferrer"&gt;Partytown&lt;/a&gt;, which runs third-party scripts in a web worker; and &lt;a href="https://mitosis.builder.io/" rel="noopener noreferrer"&gt;Mitosis&lt;/a&gt;, which lets you write components once and compile to multiple frameworks. These aren't just demos — they're real tools we use and actively develop.&lt;/p&gt;

&lt;h2&gt;
  
  
  The future of extensibility
&lt;/h2&gt;

&lt;p&gt;As software evolves and becomes increasingly complex, extensibility will become even more crucial:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F4a5a7494738449a69f948fec0b4a58eb%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F4a5a7494738449a69f948fec0b4a58eb%3Fwidth%3D737" alt="Future of Extensibility.png" width="737" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Modular design: Software components will become more interchangeable.&lt;/li&gt;
&lt;li&gt;Microservices: Large apps will continue to be broken down into smaller, independent services.&lt;/li&gt;
&lt;li&gt;API-first development: APIs will be the foundation of software design.&lt;/li&gt;
&lt;li&gt;AI integration:&lt;/li&gt;
&lt;li&gt;Low-code/No-code: More accessible software customization for non-developers.&lt;/li&gt;
&lt;li&gt;Edge computing: Processing will move closer to data sources.&lt;/li&gt;
&lt;li&gt;IoT integration: Extensibility will need to accommodate diverse devices.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These trends will lead to more flexible and powerful software ecosystems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building software that can grow and change is super important if you want it to last. It’s not just about creating great software, but software that can adapt and extend beyond it’s original intention is crucial to its shelf life. By embracing extensibility, developers can create more adaptable and valuable systems. At &lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt;, we're committed to providing the tools and infrastructure to make this possible. When we make our code flexible, we're setting ourselves up to build stuff that's more useful. We're all about giving developers the tools to make this happen. It's not just a nice-to-have - it's how we think software should be built.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: Are there any downsides to making software too extensible?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: Overemphasizing extensibility can potentially lead to increased complexity, performance overhead, or security vulnerabilities if not implemented carefully. It's important to strike a balance between extensibility and simplicity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How can small development teams implement extensibility effectively?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: Small teams can focus on modular design, clear documentation, and using well-defined APIs. Starting with a plugin system or webhook implementation can be a manageable way to introduce extensibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How does extensibility impact software testing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: Extensible systems often require more comprehensive testing strategies to ensure that new additions don't negatively impact existing functionality. This may include increased focus on integration testing and maintaining a robust set of unit tests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can extensibility be added to legacy systems, or is it only for new development?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: While it's easier to design for extensibility from the start, legacy systems can be refactored to become more extensible. This often involves creating APIs, implementing plugin systems, or adopting a microservices architecture.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>webdev</category>
      <category>developers</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Digital asset management: Organize your digital world</title>
      <dc:creator>Luke Stahl</dc:creator>
      <pubDate>Fri, 23 Aug 2024 11:30:04 +0000</pubDate>
      <link>https://dev.to/builderio/digital-asset-management-the-right-time-to-scale-your-tech-stack-33a3</link>
      <guid>https://dev.to/builderio/digital-asset-management-the-right-time-to-scale-your-tech-stack-33a3</guid>
      <description>&lt;p&gt;Let's talk about Digital Asset Management (DAM). It's one of those terms that sounds pretty self-explanatory, but there is actually much more to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What is digital asset management?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Digital Asset Management (DAM) is a system to organize, store, and retrieve your digital stuff. It's like a super-powered file system, but with some extra bells and whistles that make handling large collections of &lt;a href="https://www.builder.io/c/docs/asset-library" rel="noopener noreferrer"&gt;assets&lt;/a&gt; way less painful.&lt;/p&gt;

&lt;p&gt;Imagine you're working on a big project. You've got images, &lt;a href="https://www.builder.io/c/docs/video#embedding-a-video" rel="noopener noreferrer"&gt;videos&lt;/a&gt;, documents, and who knows what else scattered across your hard drive, cloud storage, and maybe even some old USB sticks. Finding the right file becomes a nightmare, but this is where a DAM becomes helpful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F5e15219d05214b02a0dfd7c2c85a92f5%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F5e15219d05214b02a0dfd7c2c85a92f5%3Fwidth%3D737" alt="What is Digital Asset Management.png" width="737" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are the key components that DAM systems usually offers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Centralized storage:&lt;/strong&gt; Everything is in one organized place. No more "which cloud service did I upload that to again?" This centralization also enables easier backup and disaster recovery processes, ensuring your digital assets are safe and accessible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata and tagging:&lt;/strong&gt; Add info to your files so you can actually find them later. Think of it as a turbocharged search. Advanced DAM systems often use AI to automatically generate tags and extract metadata, making organizations even more efficient and reducing human error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version control:&lt;/strong&gt; Keep track of changes without ending up with "final_v3_FINAL_for_real_this_time.psd." This feature also allows you to revert to previous versions if needed and can integrate with approval workflows to ensure only authorized changes are implemented.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access control:&lt;/strong&gt; Decide who can see or edit what. It’s useful when you're working with a large team or multiple clients. Advanced DAM systems can also provide detailed audit trails, showing who accessed or modified files and when, which is crucial for compliance and security purposes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Format conversion:&lt;/strong&gt; Do you need that image as a PNG instead of a JPEG? A good DAM can handle that for you. Many DAM systems can also automatically optimize files for web use, reducing file sizes without significant quality loss and improving your website's loading speed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You might be thinking, "Can't I just use folders and a good naming system?" Sure, for small projects, that works fine. But when you're dealing with thousands of assets across multiple projects and teams, things get messy fast.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F86cb85533e5d469e8ffeed519e2a794a%3Fwidth%3D45" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F86cb85533e5d469e8ffeed519e2a794a%3Fwidth%3D45" alt="Light bulb tip icon." width="45" height="46"&gt;&lt;/a&gt; &lt;strong&gt;Tip:&lt;/strong&gt; &lt;a href="https://www.builder.io/m/integrations" rel="noopener noreferrer"&gt;See our integration for Digital Asset Management.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where DAM systems add the most value
&lt;/h2&gt;

&lt;p&gt;DAM systems really shine in bigger setups — think large companies, media organizations, or any place dealing with a ton of digital content. They're especially handy if you need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collaborate with remote teams&lt;/li&gt;
&lt;li&gt;Maintain brand consistency across various channels&lt;/li&gt;
&lt;li&gt;Quickly find and repurpose content&lt;/li&gt;
&lt;li&gt;Keep track of licensing and usage rights&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DAM isn't a magic bullet. It requires setup, maintenance, and usually some kind of workflow change. And like any tool, if you're not going to use its features, it can be overkill.&lt;/p&gt;

&lt;p&gt;However, a DAM can significantly streamline your asset management processes when implemented effectively. Let's explore how a DAM system could enhance your current setup and workflows, weighing the benefits against potential challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding DAM to your existing tech stack
&lt;/h2&gt;

&lt;p&gt;If you're working with a modern web framework like &lt;a href="https://www.builder.io/m/react-cms" rel="noopener noreferrer"&gt;React&lt;/a&gt; or &lt;a href="https://www.builder.io/m/vue-cms" rel="noopener noreferrer"&gt;Vue&lt;/a&gt;, you might be using something like &lt;a href="https://webpack.js.org/" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt; or &lt;a href="https://rollupjs.org/" rel="noopener noreferrer"&gt;Rollup&lt;/a&gt; to bundle your assets. These tools are great, but a simpler approach to managing assets exists. This is where DAM can complement your existing build process.&lt;/p&gt;

&lt;p&gt;For example, you could set up your DAM system to automatically push updated assets to your CDN whenever they're changed. Your build process could then pull in the latest asset URLs, ensuring your app always uses the most recent versions without manual intervention.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fcdf2ccf6518f4f0892b2244b8ce74fb9%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fcdf2ccf6518f4f0892b2244b8ce74fb9%3Fwidth%3D737" alt="Fits in existing tech stack.png" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a quick pseudo-code example of how this might work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// In your build config&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;assets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetchLatestAssetsFromDAM&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ... other config&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AssetManagementPlugin&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="nx"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;cdnUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CDN_URL&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This approach can be particularly powerful when combined with feature flags or &lt;a href="https://www.builder.io/c/docs/abtesting" rel="noopener noreferrer"&gt;A/B testing&lt;/a&gt;. Imagine switching out entire sets of assets with a single config change without needing to rebuild and redeploy your app.&lt;/p&gt;

&lt;h2&gt;
  
  
  DAM in API-driven content management system
&lt;/h2&gt;

&lt;p&gt;Another area where DAM can shine is in API-driven content management. If you're using a &lt;a href="https://www.builder.io/m/knowledge-center/headless-cms-visual-guide" rel="noopener noreferrer"&gt;headless CMS&lt;/a&gt; like &lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt; or a &lt;a href="https://www.builder.io/m/knowledge-center/jamstack-cms" rel="noopener noreferrer"&gt;JAMstack site&lt;/a&gt;, you're probably already separating your content from your code. DAM takes this a step further by separating your media assets from both your content and your code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fba3809cdb3a5433dab590a0f94519609%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fba3809cdb3a5433dab590a0f94519609%3Fwidth%3D737" alt="API-driven CMS.png" width="737" height="737"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This separation of concerns can make your entire system more flexible and easier to maintain. For instance, you could update the hero image on your landing page by simply changing a reference in your CMS, which pulls the new image data from your DAM. No code changes, no redeploy needed.&lt;/p&gt;

&lt;p&gt;This snippet shows a &lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt; content model and a corresponding content entry, demonstrating how DAM assets can be structured and integrated within &lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt;, including asset metadata and multiple renditions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Builder.io content model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@builder.io/core:Model&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;landing-page&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fields&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;heroImage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DAMAsset&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;subFields&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;damAssetId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;alt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;metadata&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;renditions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;object&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Content entry&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;heroImage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;damAssetId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DAM-1234567&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://your-dam-cdn.com/assets/DAM-1234567&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;alt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;New product showcase&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;metadata&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;copyright&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;© 2023 Our Company&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;photographer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Jane Doe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;license&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Commercial use allowed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;renditions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;thumbnail&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://your-dam-cdn.com/assets/DAM-1234567?w=200&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mobile&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://your-dam-cdn.com/assets/DAM-1234567?w=768&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;desktop&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://your-dam-cdn.com/assets/DAM-1234567?w=1920&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The most common challenges of a DAM
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Anticipating failure points:&lt;/strong&gt; What happens if your DAM service goes down?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asset versioning:&lt;/strong&gt; How do you handle this in your application code?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching strategies:&lt;/strong&gt; Balancing performance with content freshness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development workflow:&lt;/strong&gt; Will designers and content creators be pushing directly to production through your DAM?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These challenges aren't deal-breakers, but they're definitely things you'll want to think about before you dive headfirst into the DAM pool. Planning for these scenarios upfront can save you a lot of headaches down the road.&lt;/p&gt;

&lt;p&gt;To address potential asset management challenges, Builder.io offers a seamless integration with &lt;a href="https://github.com/BuilderIO/builder/tree/main/plugins/cloudinary" rel="noopener noreferrer"&gt;Cloudinary&lt;/a&gt;. With this integration, you can query and fetch assets from your Cloudinary library right inside the Builder Visual Editor. This setup tackles common pain points in asset management:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It centralizes asset storage, so you're not hunting through multiple services.&lt;/li&gt;
&lt;li&gt;Version control for assets is built-in, saving you from filename hell.&lt;/li&gt;
&lt;li&gt;It leverages Cloudinary's CDN and caching, so you don't have to reinvent the wheel for performance optimization.&lt;/li&gt;
&lt;li&gt;You can set up proper workflows, so your designers aren't accidentally pushing to prod.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essentially, it's taking care of the asset management overhead so you can focus on building your actual product.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;In the end, using a DAM system or not depends on the specific needs of your project and team. If you're building a content-heavy application that needs to scale, it could significantly improve your workflow and asset management. For smaller projects, it might be more than you need.&lt;/p&gt;

&lt;p&gt;As with any tech decision, it's all about tradeoffs. DAM can solve many asset-related challenges, but it's another system to learn, integrate, and maintain. It's crucial to weigh the costs against the benefits for your particular use case.&lt;/p&gt;

&lt;p&gt;Remember, the goal is to make your life easier, not to add unnecessary complexity. If DAM helps you ship better code faster, great. If not, your trusty file system and some good naming conventions might be all you need.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Frequently asked questions (FAQ)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: How does DAM help with responsive images in my CMS?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: Many DAM systems can automatically generate different sizes and formats of images. So, when you're setting up responsive images in your CMS, you can pull the right sizes directly from the DAM without manual resizing. It's like having an image CDN built into your asset management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can DAM help me avoid duplicate uploads in my CMS?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: Absolutely. DAM systems use checksums or similar methods to identify duplicate files. This means you won't end up with 20 copies of the same hero image cluttering up your media library. Plus, it saves storage space and keeps your assets organized.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.builder.io/signup" rel="noopener noreferrer"&gt;Get started free&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>webdev</category>
      <category>learning</category>
      <category>programming</category>
    </item>
    <item>
      <title>An SEO aha moment: understanding Core Web Vitals</title>
      <dc:creator>Luke Stahl</dc:creator>
      <pubDate>Tue, 30 Jul 2024 11:59:05 +0000</pubDate>
      <link>https://dev.to/builderio/an-seo-aha-moment-understanding-core-web-vitals-42pe</link>
      <guid>https://dev.to/builderio/an-seo-aha-moment-understanding-core-web-vitals-42pe</guid>
      <description>&lt;h2&gt;
  
  
  What are Core Web Vitals?
&lt;/h2&gt;

&lt;p&gt;Core Web Vitals are a set of specific factors Google considers important for a website's overall user experience. They're part of Google's Page Experience signals, used to assess web page quality.&lt;/p&gt;

&lt;p&gt;These metrics focus on three aspects of user experience: loading, interactivity, and visual stability. Collectively, these are known as the three Core Web Vitals, which include the Largest Contentful Paint (LCP) for loading, First Input Delay (FID) for interactivity, and Cumulative Layout Shift (CLS) for visual stability.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F23323ed22c6e4ceebcfe24bcd6328008%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F23323ed22c6e4ceebcfe24bcd6328008%3Fwidth%3D737" alt="Core Web Vitals" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F86cb85533e5d469e8ffeed519e2a794a%3Fwidth%3D45" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F86cb85533e5d469e8ffeed519e2a794a%3Fwidth%3D45" alt="Light bulb tip icon." width="45" height="46"&gt;&lt;/a&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Start by testing your site with Builder’s &lt;a href="https://www.builder.io/c/performance-insights" rel="noopener noreferrer"&gt;Performance Insights&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Core Web Vitals matter for SEO
&lt;/h2&gt;

&lt;p&gt;Google uses Core Web Vitals as ranking factors. This means they directly impact your site's search engine performance.&lt;/p&gt;

&lt;p&gt;Better Core Web Vitals scores can lead to the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Higher search rankings&lt;/li&gt;
&lt;li&gt;Improved user experience&lt;/li&gt;
&lt;li&gt;Lower bounce rates&lt;/li&gt;
&lt;li&gt;Higher conversion rates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For site owners, understanding and optimizing Core Web Vitals metrics such as Largest Contentful Paint (LCP), First Input Delay (FID), and Cumulative Layout Shift (CLS) is crucial for improving user experience and site performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Web Vitals metrics
&lt;/h2&gt;

&lt;p&gt;Let's break down each Core Web Vital:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F35f954facdbb43e4bcdc76b8fe6b735a%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F35f954facdbb43e4bcdc76b8fe6b735a%3Fwidth%3D737" alt="Core web vitals metrics" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Largest Contentful Paint (LCP)
&lt;/h3&gt;

&lt;p&gt;LCP measures loading performance. It represents how quickly the main content of a page loads.&lt;/p&gt;

&lt;p&gt;What's a good LCP score? &lt;a href="https://web.dev/lcp/" rel="noopener noreferrer"&gt;Under 2.5 seconds&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To improve LCP:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement effective image compression (consider using WebP or AVIF formats)&lt;/li&gt;
&lt;li&gt;Remove non-critical third-party scripts (like unused analytics or ad scripts)&lt;/li&gt;
&lt;li&gt;Upgrade server resources or implement a CDN&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. First Input Delay (FID)
&lt;/h3&gt;

&lt;p&gt;FID measures interactivity. It quantifies when a user first interacts with your page and when the browser responds.&lt;/p&gt;

&lt;p&gt;What's a good FID score? &lt;a href="https://web.dev/fid/" rel="noopener noreferrer"&gt;Less than 100 milliseconds&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To Improve FID:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minimize JavaScript execution time (use async/defer attributes)&lt;/li&gt;
&lt;li&gt;Implement code splitting to reduce the initial bundle size&lt;/li&gt;
&lt;li&gt;Use a &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers" rel="noopener noreferrer"&gt;web worker&lt;/a&gt; for heavy computations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Cumulative Layout Shift (CLS)
&lt;/h3&gt;

&lt;p&gt;CLS measures visual stability. It represents how much unexpected layout shift occurs during the page's entire lifespan.&lt;/p&gt;

&lt;p&gt;What's a good CLS score? &lt;a href="https://web.dev/cls/" rel="noopener noreferrer"&gt;Less than 0.1&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To Improve CLS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set explicit width and height for media elements&lt;/li&gt;
&lt;li&gt;Avoid dynamically injecting content above existing elements&lt;/li&gt;
&lt;li&gt;Use CSS transform for animations instead of properties that trigger reflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to measure Core Web Vitals
&lt;/h2&gt;

&lt;p&gt;You can measure Core Web Vitals using various tools, and there are several methods available for measuring core web vitals:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fdfbe3cf8e1134dd9b10c676e83584627%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fdfbe3cf8e1134dd9b10c676e83584627%3Fwidth%3D737" alt="PageSpeed Insights.png" width="737" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://pagespeed.web.dev/" rel="noopener noreferrer"&gt;PageSpeed Insights&lt;/a&gt;: URL-level analysis&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://search.google.com/search-console/" rel="noopener noreferrer"&gt;Google Search Console&lt;/a&gt;: Site-wide Core Web Vitals report&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.chrome.com/docs/lighthouse/overview" rel="noopener noreferrer"&gt;Lighthouse&lt;/a&gt;: Comprehensive performance audits&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.chrome.com/docs/devtools" rel="noopener noreferrer"&gt;Chrome DevTools&lt;/a&gt;: Real-time performance monitoring&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Additionally, the &lt;a href="https://developer.chrome.com/docs/crux" rel="noopener noreferrer"&gt;Chrome User Experience Report (CrUX)&lt;/a&gt; is a public dataset that provides insights into how real Chrome users interact with sites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strategies to improve Core Web Vitals
&lt;/h2&gt;

&lt;p&gt;Improving your Core Web Vitals often involves technical optimizations:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F026a4d6bbbd44ce8846c49d4fa86d508%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F026a4d6bbbd44ce8846c49d4fa86d508%3Fwidth%3D737" alt="Strategies Core Web Vitals" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Image optimization:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement WebP or AVIF formats&lt;/li&gt;
&lt;li&gt;Use responsive images with srcset and sizes attributes&lt;/li&gt;
&lt;li&gt;Implement &lt;a href="https://www.builder.io/blog/the-challenges-of-lazy-loading-in-javascript" rel="noopener noreferrer"&gt;lazy loading&lt;/a&gt; with loading="lazy"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Code optimization:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minify and compress &lt;a href="https://www.builder.io/blog/the-complete-guide-to-optimizing-css-for-fast-page-loads" rel="noopener noreferrer"&gt;CSS&lt;/a&gt;/JS&lt;/li&gt;
&lt;li&gt;Implement tree shaking to eliminate dead code&lt;/li&gt;
&lt;li&gt;Use code splitting for large applications (e.g., React.lazy() and Suspense)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caching:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement browser caching with appropriate Cache-Control headers&lt;/li&gt;
&lt;li&gt;Utilize service workers for offline functionality and faster repeat visits&lt;/li&gt;
&lt;li&gt;Configure server-side caching (e.g., Redis or Memcached)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Server optimization:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a Content Delivery Network (CDN) to reduce latency&lt;/li&gt;
&lt;li&gt;Optimize database queries (use indexing, avoid N+1 queries)&lt;/li&gt;
&lt;li&gt;Implement HTTP/2 or HTTP/3 for multiplexing and header compression&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Critical rendering path optimization:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inline critical CSS to avoid render-blocking&lt;/li&gt;
&lt;li&gt;Defer non-critical JavaScript using async or defer attributes&lt;/li&gt;
&lt;li&gt;Preload key resources with &lt;code&gt;&amp;amp;lt;link rel="preload"&amp;amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Core Web Vitals and mobile SEO
&lt;/h2&gt;

&lt;p&gt;Mobile optimization is crucial for SEO, and Core Web Vitals play a significant role.&lt;/p&gt;

&lt;p&gt;Given Google's mobile-first indexing, it's crucial to optimize Core Web Vitals for mobile devices. This is to ensure your responsive design works flawlessly across all breakpoints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement responsive design patterns using fluid layouts and flexible images&lt;/li&gt;
&lt;li&gt;Further compress assets for mobile, considering lower bandwidth and processing power&lt;/li&gt;
&lt;li&gt;Minimize or eliminate the use of interstitials that can harm mobile UX&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Balancing Core Web Vitals with other SEO factors
&lt;/h2&gt;

&lt;p&gt;While Core Web Vitals are important, they're not the only ranking factors. You still need to focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High-quality, relevant content (think of it as writing clean, well-documented code)&lt;/li&gt;
&lt;li&gt;Proper on-page SEO implementation (meta tags, header structure, etc.)&lt;/li&gt;
&lt;li&gt;Building a robust backlink profile (like having a well-maintained open-source project)&lt;/li&gt;
&lt;li&gt;Optimizing site structure and internal linking (similar to designing a clean architecture)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key is to find a balance between technical optimization and content quality. Additionally, focusing on quality signals that contribute to delivering a great user experience is essential.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common pitfalls to avoid:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Neglecting mobile performance (like ignoring cross-browser compatibility)&lt;/li&gt;
&lt;li&gt;Overloading pages with unnecessary scripts (bloating your codebase)&lt;/li&gt;
&lt;li&gt;Using unoptimized media assets (like using uncompressed images in your build)&lt;/li&gt;
&lt;li&gt;Failing to re-test after implementing changes (always run your test suite after refactoring!)&lt;/li&gt;
&lt;li&gt;Hyper-focusing on a single metric at the expense of others (don't optimize prematurely)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  SEO, Core Web Vitals, and content management systems
&lt;/h2&gt;

&lt;p&gt;Content Management Systems (CMS) are pivotal in SEO and Core Web Vitals performance. Your choice of CMS can significantly impact your site's ability to rank well and provide a good user experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fd06b1ab5356c4606a6136c57c26ae218%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252Fd06b1ab5356c4606a6136c57c26ae218%3Fwidth%3D737" alt="CMS Impact" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Optimizing CMS for SEO and Core Web Vitals
&lt;/h3&gt;

&lt;p&gt;Your choice of CMS can significantly impact Core Web Vitals performance. Regardless of the platform, consider these optimizations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose a lightweight theme&lt;/strong&gt;: Many CMS themes are bloated with features you don't need.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Minimize plugins&lt;/strong&gt;: Each plugin can add load to your site. Use only what's necessary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use caching&lt;/strong&gt;: Most CMS platforms have caching plugins available to speed up load times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimize images&lt;/strong&gt;: Use image optimization plugins or the &lt;a href="https://qwik.dev/docs/integrations/image-optimization/" rel="noopener noreferrer"&gt;Qwik framework&lt;/a&gt; to compress uploaded images automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep updated&lt;/strong&gt;: Regular updates to your CMS, themes, and plugins can improve performance and security.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F3d6cd3a1dbe5472695a5e8fc60afadcd%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F3d6cd3a1dbe5472695a5e8fc60afadcd%3Fwidth%3D737" alt="CMS Optimization" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Builder.io enhances SEO and Core Web Vitals
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io's&lt;/a&gt; Visual Development Platform offers a unique combination of AI-powered capabilities and a &lt;a href="https://www.builder.io/m/knowledge-center/visual-headless-cms" rel="noopener noreferrer"&gt;Visual CMS&lt;/a&gt; that can significantly improve your SEO efforts and Core Web Vitals scores. Let's explore how Builder.io addresses common SEO and performance challenges:&lt;/p&gt;

&lt;h3&gt;
  
  
  Unprecedented efficiency from idea to production
&lt;/h3&gt;

&lt;p&gt;Builder.io streamlines the process of creating web and mobile experiences, allowing digital teams to turn ideas into live digital experiences more efficiently than ever before.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F41dc8e8fa58f42818c53ff744fdf262f%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F41dc8e8fa58f42818c53ff744fdf262f%3Fwidth%3D737" alt="Accelerated Development Cycle" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;*&lt;em&gt;AI-powered *&lt;/em&gt;&lt;a href="https://www.builder.io/m/design-to-code" rel="noopener noreferrer"&gt;&lt;strong&gt;design-to-code&lt;/strong&gt;&lt;/a&gt;: Automatically convert designs into production-ready code, reducing development time and potential coding errors that could impact Core Web Vitals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual CMS&lt;/strong&gt;: Enables non-technical team members to build and optimize experiences independently, accelerating content creation for SEO.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Bold innovations solving hard problems
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt; tackles challenging issues in the web development space, offering solutions that can significantly boost your SEO efforts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F7145bf0175a746b38f34d910db55fe64%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F7145bf0175a746b38f34d910db55fe64%3Fwidth%3D737" alt="Builder Innovations" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.builder.io/m/design-to-code" rel="noopener noreferrer"&gt;&lt;strong&gt;Visual Copilot&lt;/strong&gt;&lt;/a&gt;: AI-powered design-to-code tool that speeds up development, allowing for quicker implementation of SEO optimizations.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.builder.io/c/docs/ui-ve-tour" rel="noopener noreferrer"&gt;&lt;strong&gt;Visual Editor&lt;/strong&gt;&lt;/a&gt;: Enables rapid content updates, which is crucial for maintaining fresh, relevant content for SEO.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-source solutions like &lt;strong&gt;[&lt;/strong&gt;Qwik**](&lt;a href="https://qwik.dev/" rel="noopener noreferrer"&gt;https://qwik.dev/&lt;/a&gt;)&lt;/strong&gt; and &lt;strong&gt;[&lt;/strong&gt;Partytown**](&lt;a href="https://partytown.builder.io/):" rel="noopener noreferrer"&gt;https://partytown.builder.io/):&lt;/a&gt; Help improve performance at scale, directly impacting Core Web Vitals scores.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Impact on Core Web Vitals
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt;'s platform can have a significant positive impact on your Core Web Vitals scores:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F063664fafde34d0b8590f95caf0a4a78%3Fwidth%3D737" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.builder.io%2Fapi%2Fv1%2Fimage%2Fassets%252FYJIGb4i01jvw0SRdL5Bt%252F063664fafde34d0b8590f95caf0a4a78%3Fwidth%3D737" alt="Builder Platform" width="737" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Largest Contentful Paint (LCP)&lt;/strong&gt;: Builder.io's optimized code and efficient asset handling can significantly reduce load times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First Input Delay (FID)&lt;/strong&gt;: By producing clean, efficient JavaScript, Builder.io helps minimize input delay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cumulative Layout Shift (CLS)&lt;/strong&gt;: The platform's stable layout approach helps reduce unexpected shifts, improving visual stability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Core Web Vitals are a critical component of modern SEO. Understanding these metrics can improve your site's user experience and potentially boost your search rankings.&lt;/p&gt;

&lt;p&gt;By leveraging &lt;a href="https://www.builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt;'s Visual Development Platform, you're not just creating content more efficiently — you're building a foundation for better SEO performance and improved Core Web Vitals scores.&lt;/p&gt;

&lt;p&gt;Our toolkit combines AI-driven algorithms with intuitive visual interfaces to streamline your development workflow. By automating repetitive tasks and providing intelligent suggestions, we help you focus on writing clean, efficient code that not only ranks well in search engines but also delivers a smooth user experience.&lt;/p&gt;

&lt;p&gt;Remember, SEO is an ongoing process. Regularly monitor your Core Web Vitals and make improvements as needed to stay ahead in the search game. With Builder.io, you have a powerful ally in your quest for SEO excellence and superior user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Frequently asked questions (FAQ)&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Q1: How often should I check my Core Web Vitals scores?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A: It's best to check your Core Web Vitals scores at least once a month. After making significant changes to your website, check more often to ensure the changes haven't hurt your scores.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Q2: Can improving Core Web Vitals guarantee better rankings?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A: Improving Core Web Vitals can help your rankings, but it's not guaranteed. Google uses many factors to decide rankings. Better Core Web Vitals scores improve user experience, which can indirectly boost your SEO by keeping visitors on your site longer.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>website</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
