<?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: Momcilo</title>
    <description>The latest articles on DEV Community by Momcilo (@momciloo).</description>
    <link>https://dev.to/momciloo</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%2F110488%2F50734fca-72b8-485e-91e9-b38af7e60613.jpg</url>
      <title>DEV Community: Momcilo</title>
      <link>https://dev.to/momciloo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/momciloo"/>
    <language>en</language>
    <item>
      <title>Can AI coding platforms replace traditional page builders?</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Thu, 27 Mar 2025 15:50:36 +0000</pubDate>
      <link>https://dev.to/momciloo/can-ai-coding-platforms-replace-traditional-page-builders-1c74</link>
      <guid>https://dev.to/momciloo/can-ai-coding-platforms-replace-traditional-page-builders-1c74</guid>
      <description>&lt;p&gt;Will AI make page builders obsolete in the next 12 months? Or are we just swapping one trap for another? This guide breaks down what &lt;strong&gt;AI coding platforms&lt;/strong&gt; can actually do, where they fall short, and how a smarter hybrid approach is already winning.&lt;/p&gt;

&lt;p&gt;Tools like &lt;a href="https://www.framer.com/features/ai/" rel="noopener noreferrer"&gt;Framer AI&lt;/a&gt;, &lt;a href="http://builder.io/" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt;, and ChatGPT’s Code Interpreter promise to automate code generation and streamline development.&lt;/p&gt;

&lt;p&gt;But can they truly replace established page builders like &lt;a href="https://webflow.com/" rel="noopener noreferrer"&gt;Webflow&lt;/a&gt;, &lt;a href="https://elementor.com/" rel="noopener noreferrer"&gt;Elementor&lt;/a&gt;, and &lt;a href="https://www.wix.com/" rel="noopener noreferrer"&gt;Wix&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;Picture this: A freelance developer needs to build a landing page overnight. With Framer AI or Builder.io, they can generate an entire layout in seconds. Meanwhile, a small business owner with zero coding knowledge drags and drops elements in Webflow to create a functional website.&lt;/p&gt;

&lt;p&gt;Both approaches work, but do they scale? Do they produce clean, maintainable code?&lt;/p&gt;

&lt;p&gt;Let’s break down the differences.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI coding platforms vs. page builders: What’s the difference?
&lt;/h2&gt;

&lt;p&gt;AI website generators function by analyzing user prompts and automatically generating code or design elements.&lt;/p&gt;

&lt;p&gt;Platforms like &lt;a href="https://v0.dev/" rel="noopener noreferrer"&gt;v0.dev&lt;/a&gt; allow users to describe a layout, and the AI produces HTML, CSS, and JavaScript.&lt;/p&gt;

&lt;p&gt;Some tools even integrate logic, making it possible to generate interactive components without manually coding them.&lt;/p&gt;

&lt;p&gt;This approach brings numerous advantages such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Speed: AI can generate complete sections of a website in seconds.&lt;/li&gt;
&lt;li&gt;Customization: Full control over the output (assuming the user has coding knowledge).&lt;/li&gt;
&lt;li&gt;No reliance on plugins: Unlike &lt;a href="https://thebcms.com/blog/why-developers-hate-wordpress" rel="noopener noreferrer"&gt;WordPress&lt;/a&gt; or Elementor, AI-generated websites aren’t weighed down by third-party plugins.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But what AI tools can’t do as page builders?&lt;/p&gt;

&lt;p&gt;They can not offer consistency. AI-generated designs may lack uniformity across different pages.&lt;/p&gt;

&lt;p&gt;Even being “smart” AI code doesn’t always follow design best practices.&lt;/p&gt;

&lt;p&gt;On the other hand, page builders like WordPress and Webflow offer structured, template-based systems for creating websites. Even though they are not as fast as AI regarding website building, they allow beginners and developers to build sites quickly.&lt;/p&gt;

&lt;p&gt;There is no need for coding knowledge, and built-in templates and themes follow the design through the pages.&lt;/p&gt;

&lt;p&gt;Other things that make website building a nightmare are plugin dependency and limited customization.&lt;/p&gt;

&lt;p&gt;Let’s break this down by what really matters: speed, flexibility, and maintainability.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI coding platforms vs page builders: Features comparison
&lt;/h2&gt;

&lt;p&gt;Before going to code analysis and the development process, let’s cover the pros/cons of both, focusing on flexibility, speed, and maintainability.&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%2Fabvfs63435x54xt5ruy9.png" 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%2Fabvfs63435x54xt5ruy9.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Feature #1: Speed and performance
&lt;/h3&gt;

&lt;p&gt;AI tools can generate layouts and even functional components in seconds, reducing manual effort. They’re particularly powerful for rapid prototyping and generating boilerplate code.&lt;/p&gt;

&lt;p&gt;Traditional page builders offer a no-code or low-code approach, allowing users to build entire sites visually. While they’re quick to set up, the drag-and-drop nature can introduce bloated code and performance issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  Feature #2: Flexibility and customization
&lt;/h3&gt;

&lt;p&gt;AI-generated code can be fully customized, but it often requires a developer to refine and optimize the output. These tools are best suited for developers who need assistance with repetitive tasks rather than a full website solution.&lt;/p&gt;

&lt;p&gt;Page builders offer &lt;strong&gt;extensive customization options through UI elements&lt;/strong&gt;, but advanced customizations often require diving into custom CSS or JavaScript, which can be limiting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Feature #3: Accessibility
&lt;/h3&gt;

&lt;p&gt;AI Coding Platforms still require users to understand code, making them more suitable for developers than non-technical users.&lt;/p&gt;

&lt;p&gt;Page Builders are designed for ease of use, making them ideal for non-developers. However, complex modifications can bring a need for developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI coding platform vs page builders: which one wins?
&lt;/h3&gt;

&lt;p&gt;Here’s how they compare in real-world use.&lt;/p&gt;

&lt;p&gt;AI tools win over speed and customization (if you know how to code), while page builders are more scalable and easy to update and manage without breaking layouts.&lt;/p&gt;

&lt;p&gt;So, &lt;strong&gt;use AI tools&lt;/strong&gt; if you're a developer looking for full control over code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use page builders&lt;/strong&gt; if you need ease of use and long-term maintainability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A hybrid approach&lt;/strong&gt; (AI-generated templates + CMS) could be the best of both worlds. ( more about this later)&lt;/p&gt;

&lt;p&gt;But before that, let’s get to the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can AI code be good quality code?
&lt;/h2&gt;

&lt;p&gt;While AI coding tools generate websites quickly, the code quality is often questionable. Let’s break down the key issues:&lt;/p&gt;

&lt;h3&gt;
  
  
  Code structure
&lt;/h3&gt;

&lt;p&gt;AI-generated code can be messy, redundant, and inconsistent. Unlike a well-structured, manually written codebase, AI tools often create unnecessary divs, inline styles, and inconsistent class naming conventions.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;AI might generate multiple similar CSS classes for buttons across different sections (.btn-1, .btn-2, etc.) rather than following a DRY principle with a reusable .btn class.&lt;/li&gt;
&lt;li&gt;Accessibility features like proper heading hierarchy, ARIA labels, and semantic HTML are often overlooked by AI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Handling reusable components
&lt;/h3&gt;

&lt;p&gt;One of the major limitations of AI-generated sites is the lack of reusable components. While page builders offer systems for managing global components like headers and footers, AI platforms often require users to manually copy and paste code across different pages.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;A manually coded site (or a Webflow project) allows for a single header component that updates across all pages.&lt;/li&gt;
&lt;li&gt;An AI-generated site requires you to edit multiple HTML files separately if you need to update the navigation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code optimization
&lt;/h3&gt;

&lt;p&gt;AI-generated pages can be unoptimized, with excessive inline styles and redundant scripts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Debugging and extending AI-generated code
&lt;/h3&gt;

&lt;p&gt;AI is not perfect at debugging. Developers often find that AI-generated code works initially but contains subtle bugs or inefficient logic when extended.&lt;/p&gt;

&lt;p&gt;AI-generated JavaScript might work for a simple contact form but lack proper validation handling, requiring manual fixes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Example: AI-Generated Code Before &amp;amp; After Cleanup&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before (AI-generated code):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;html
CopyEdit
&amp;lt;div class="btn-1"&amp;gt;Click Me&amp;lt;/div&amp;gt;
&amp;lt;div class="btn-2"&amp;gt;Click Me&amp;lt;/div&amp;gt;


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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Issues:&lt;/strong&gt; Creates unnecessary duplicate styles, lacks semantics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After (Cleaned Up Code):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;html
CopyEdit
&amp;lt;button class="btn"&amp;gt;Click Me&amp;lt;/button&amp;gt;


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

&lt;/div&gt;



&lt;p&gt;Fixes: Uses semantic HTML and a reusable class.&lt;/p&gt;

&lt;p&gt;Key AI Code Problems:&lt;/p&gt;

&lt;p&gt;❌ Messy structure – Unnecessary wrappers, inline styles.&lt;br&gt;
❌ Poor accessibility – Lacks proper heading hierarchy and ARIA labels.&lt;br&gt;
❌ SEO risks – May omit metadata, &lt;a href="https://thebcms.com/blog/structured-data-in-ai" rel="noopener noreferrer"&gt;structured data&lt;/a&gt;, or proper alt text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resume: AI code can’t build for you
&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhiw0lz7qg4yvxsu2cp72.jpeg" 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%2Fhiw0lz7qg4yvxsu2cp72.jpeg" alt="Image description" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I won’t argue here should or you should not use an AI code tools, instead, I want to conclude that the best option for developers is to approach AI code as a starting point rather than a fully functional solution.&lt;/p&gt;

&lt;p&gt;AI is inevitable, so instead of ignoring it, learn ways to &lt;a href="https://thebcms.com/blog/how-to-outsmart-ai" rel="noopener noreferrer"&gt;outsmart AI&lt;/a&gt; and use it as a powerful tool for your development task as an assistant, not as an ultimate solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI + CMS = A hybrid approach that gives a solution
&lt;/h2&gt;

&lt;p&gt;Rather than picking sides in the AI vs. page builders debate, what if you could combine the best AI features with CMS?&lt;/p&gt;

&lt;p&gt;What would happen if you choose to top building pages and instead start building reusable and flexible content?&lt;/p&gt;

&lt;p&gt;As I mentioned earlier in the text, both approaches are incomplete, so why wouldn’t you try to choose a &lt;a href="https://thebcms.com/blog/structured-content-vs-page-builders" rel="noopener noreferrer"&gt;structured approach&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;AI coding tools are great for speed and automation, while CMS-driven sites provide scalability, structured content, and long-term maintainability.&lt;/p&gt;

&lt;p&gt;A hybrid approach allows developers to use AI's speed while maintaining full control over the content and structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works: AI generates, CMS manages
&lt;/h2&gt;

&lt;p&gt;This concept is based on simple logic. Use the benefits of both to make your life easier. Here’s the possible workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use AI for fast prototyping&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can generate layouts, components, or even full-page structures in seconds. Instead of manually coding boilerplate sections (e.g., a hero section or a pricing table), developers can use AI tools like Framer AI or Builder.io to create an initial version.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Refine and optimize the code&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI-generated code still needs a developer’s touch. This step involves cleaning up unnecessary elements, improving accessibility, and ensuring semantic HTML for SEO and maintainability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integrate with a CMS for content management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI generates the front-end structure.&lt;/li&gt;
&lt;li&gt;A CMS (like BCMS) stores and delivers content dynamically.&lt;/li&gt;
&lt;li&gt;Developers connect the CMS to the AI-generated templates, ensuring a scalable, editable system for non-technical users.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Benefits of this hybrid approach
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: A CMS allows easy content updates without breaking the layout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customization&lt;/strong&gt;: AI provides flexibility while developers refine the final product.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficiency&lt;/strong&gt;: AI speeds up development, and the CMS ensures long-term manageability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better performance&lt;/strong&gt;: Unlike bloated page builders, this approach keeps the codebase clean and optimized.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example: AI + CMS in action
&lt;/h3&gt;

&lt;p&gt;To understand my idea and suggestion, here is a real case:&lt;/p&gt;

&lt;p&gt;Imagine you’re building a multilingual website in Next.js.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Host content on BCMS&lt;/strong&gt;: Store articles in BCMS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fetch content&lt;/strong&gt;: Retrieve articles from BCMS for translation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User preference&lt;/strong&gt;: Add a translation button for language selection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI translation&lt;/strong&gt;: Send content to AI for real-time translation and receive the response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend update&lt;/strong&gt;: Display translated content without modifying the original BCMS data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to see how this looks?&lt;/p&gt;

&lt;p&gt;Luckily, we wrote a step-by-step tutorial for this example. Learn more: &lt;a href="https://thebcms.com/blog/building-multilingual-website-with-ai-translation" rel="noopener noreferrer"&gt;Building a multilingual website in Next.js with AI-powered translation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: AI as a tool, not a replacement
&lt;/h2&gt;

&lt;p&gt;AI isn’t here to replace developers or even page builders entirely. Instead, it’s a tool that, when used correctly, can improve development workflows.&lt;/p&gt;

&lt;p&gt;The best approach isn’t to choose AI over CMS or page builders but to integrate them strategically.&lt;/p&gt;

&lt;p&gt;Rather than seeing AI as a website builder, think of it as an &lt;strong&gt;assistant&lt;/strong&gt;, helping developers generate code faster, while a CMS ensures structured content and long-term site management.&lt;/p&gt;

&lt;p&gt;By leveraging AI for speed and a CMS for scalability, developers get the best of both worlds: automation without compromise.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to outsmart AI as a developer: Tricks &amp; tips to win</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Wed, 19 Mar 2025 14:58:27 +0000</pubDate>
      <link>https://dev.to/momciloo/how-to-outsmart-ai-as-a-developer-tricks-tips-to-win-1j7m</link>
      <guid>https://dev.to/momciloo/how-to-outsmart-ai-as-a-developer-tricks-tips-to-win-1j7m</guid>
      <description>&lt;p&gt;"Will AI take my job?" &lt;/p&gt;

&lt;p&gt;If you ask me that is a wrong question. The right one should be “ Can I outsmart AI?” &lt;/p&gt;

&lt;p&gt;Tools like &lt;a href="https://thebcms.com/blog/use-chatgpt-cms" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt;, GitHub Copilot, and other AI-powered assistants handling tasks from debugging to writing boilerplate code, may bring the feeling that there will be fewer jobs for developers.&lt;br&gt;
But here's the truth: developers who learn to work with AI, rather than against it, will thrive in this new era.&lt;/p&gt;

&lt;p&gt;In the long run, AI will not replace you, it will enhance your abilities. &lt;br&gt;
Let’s break down why your job as a developer is not only safe but about to become more dynamic, impactful, and valuable than ever before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Historical perspective: Tech changes that shaped development forever
&lt;/h2&gt;

&lt;p&gt;Throughout software development, certain technological advancements have radically changed the industry. These industry shits weren’t just incremental, they completely transformed how developers think, work, and create. &lt;/p&gt;

&lt;p&gt;Here’s a look at some of the pivotal shifts that paved the way for today’s AI revolution:&lt;/p&gt;

&lt;h3&gt;
  
  
  Version Control Systems
&lt;/h3&gt;

&lt;p&gt;The introduction of version control tools like Git and SVN was revolutionary. Developers moved from difficult manual file-sharing methods to collaborative workflows where teams could simultaneously write, review, and merge code.&lt;/p&gt;

&lt;p&gt;Impact:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Boosted collaboration in open-source and enterprise projects.&lt;/li&gt;
&lt;li&gt;Made practices like Continuous Integration (CI) and Continuous Deployment (CD) feasible.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cloud computing
&lt;/h3&gt;

&lt;p&gt;Services like AWS, Azure, and Google Cloud eliminated the need for developers to manage physical servers.&lt;/p&gt;

&lt;p&gt;Impact:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allowed for scalable application hosting.&lt;/li&gt;
&lt;li&gt;Introduced infrastructure as code (IaC), creating a bridge between development and operations (DevOps).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  JavaScript frameworks
&lt;/h2&gt;

&lt;p&gt;The rise of frameworks like React, Angular, and Vue.js revolutionized &lt;a href="https://thebcms.com/blog/front-end-development-tools" rel="noopener noreferrer"&gt;front-end development&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Impact:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standardized front-end architectures.&lt;/li&gt;
&lt;li&gt;Help developers to create dynamic, interactive user interfaces.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Headless CMS
&lt;/h3&gt;

&lt;p&gt;Headless content management systems, decoupled content creation from its presentation.&lt;/p&gt;

&lt;p&gt;Migrating from &lt;a href="https://thebcms.com/blog/headless-cms-101" rel="noopener noreferrer"&gt;traditional CMS to headless CMS&lt;/a&gt; had a huge impact not only on content teams but also on devs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allowed developers to deliver omnichannel digital experiences.&lt;/li&gt;
&lt;li&gt;Streamlined workflows by using APIs for &lt;a href="https://thebcms.com/blog/fetch-dynamic-content-from-bcms" rel="noopener noreferrer"&gt;dynamic content delivery&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Programming Languages
&lt;/h3&gt;

&lt;p&gt;Each era of development brought new languages that redefined how software was built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C enabled low-level system programming with portability.&lt;/li&gt;
&lt;li&gt;Java introduced cross-platform development with its "write once, run anywhere" philosophy.&lt;/li&gt;
&lt;li&gt;Python and Ruby simplified scripting and web development, inspiring frameworks like Django and Ruby on Rails.&lt;/li&gt;
&lt;li&gt;Modern web development relies on JavaScript, which started out as a browser scripting language.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What about AI-powered tools?
&lt;/h3&gt;

&lt;p&gt;As you can see from the examples mentioned above, new technologies don’t eliminate the need for expertise, they enhance it. AI tools are not designed to “think” like developers but to assist them in repetitive tasks, freeing up time for complex problem-solving.&lt;/p&gt;

&lt;p&gt;Want to know how to make artificial intelligence your ally? Here are some strategies. &lt;/p&gt;

&lt;h2&gt;
  
  
  Strategies to Outsmart AI in development
&lt;/h2&gt;

&lt;p&gt;Rather than fearing AI, use it as a collaborator. Here’s how:&lt;/p&gt;

&lt;h2&gt;
  
  
  Outsmart AI by using it as a coding assistant
&lt;/h2&gt;

&lt;p&gt;Use tools like GitHub Copilot to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automate routine coding tasks (writing boilerplate code).&lt;/li&gt;
&lt;li&gt;Converting Figma designs to code.&lt;/li&gt;
&lt;li&gt;Catch common bugs in real-time.&lt;/li&gt;
&lt;li&gt;Generate suggestions for optimizing algorithms.&lt;/li&gt;
&lt;li&gt;Build prototypes faster with AI-generated code snippets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡Treat these assistants as a starting point, not the final solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Shift focus to find solutions for high-level problem-solving tasks
&lt;/h3&gt;

&lt;p&gt;AI excels at repetitive tasks but struggles with complex, abstract challenges. Developers should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prioritize learning system architecture and design patterns.&lt;/li&gt;
&lt;li&gt;Deepen expertise in niche areas like cybersecurity or machine learning.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Build AI-powered side projects
&lt;/h3&gt;

&lt;p&gt;Experimenting with AI APIs, like OpenAI or TensorFlow, can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Help you automate tedious parts of your workflow.&lt;/li&gt;
&lt;li&gt;Expand your portfolio by working on AI projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Use headless CMS to bring structured data into AI
&lt;/h3&gt;

&lt;p&gt;Leverage &lt;a href="https://thebcms.com/blog/structured-content-headless-cms" rel="noopener noreferrer"&gt;structured content&lt;/a&gt; in headless CMS to orchestrate artificial intelligence. As an analysis tool, AI systems use structured data to maintain consistency, clarity, and organization when identifying patterns and making predictions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://thebcms.com/blog/structured-data-in-ai" rel="noopener noreferrer"&gt;Structured data in AI&lt;/a&gt; ensures that the data is structured properly and is accessible for AI-related operations such as: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-filling fields&lt;/li&gt;
&lt;li&gt;Generating product descriptions &lt;/li&gt;
&lt;li&gt;Improved search functions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use cases: AI augmenting development
&lt;/h2&gt;

&lt;p&gt;To understand AI’s potential, consider these real-world applications:&lt;/p&gt;

&lt;h3&gt;
  
  
  Automating code reviews
&lt;/h3&gt;

&lt;p&gt;AI tools like DeepCode analyze pull requests to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify potential vulnerabilities.&lt;/li&gt;
&lt;li&gt;Suggest best practices for cleaner, more efficient code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prototyping faster with AI
&lt;/h3&gt;

&lt;p&gt;Imagine integrating Figma with an AI tool that instantly converts designs into React components. AI makes rapid iteration cycles seamless.&lt;/p&gt;

&lt;h3&gt;
  
  
  Revolutionizing content delivery with Headless CMS
&lt;/h3&gt;

&lt;p&gt;AI enables content personalization by analyzing user behavior and dynamically adapting what users see.&lt;/p&gt;

&lt;p&gt;For instance, by pairing CMS with AI you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deliver region-specific content in real-time. &lt;/li&gt;
&lt;li&gt;Use AI for &lt;a href="https://thebcms.com/blog/building-multilingual-website-with-ai-translation" rel="noopener noreferrer"&gt;multilingual support&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Deliver personalized user experiences using AI-driven analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion: Work smarter not harder
&lt;/h2&gt;

&lt;p&gt;We cannot stop the development of AI programming, even if we want to. I think the industry will enter an environment where human and AI programmers co-exist. &lt;/p&gt;

&lt;p&gt;So to make the best of it you should focus on: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understanding the basics of AI&lt;/li&gt;
&lt;li&gt;Knowing the limits of AI&lt;/li&gt;
&lt;li&gt;Learning how to recognize AI deception&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, stop worrying about AI taking your job, start leading the AI revolution, and use it to push the boundaries of what you can achieve. After all, isn’t that why you became a developer in the first place? &lt;/p&gt;

&lt;p&gt;Speaking of taking action, try out &lt;a href="https://thebcms.com/" rel="noopener noreferrer"&gt;BCMS&lt;/a&gt; as a headless CMS for AI-driven content management. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Structured Data in AI: Is Headless CMS the Key to Smarter Automation?</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Mon, 24 Feb 2025 14:18:01 +0000</pubDate>
      <link>https://dev.to/momciloo/structured-data-in-ai-is-headless-cms-the-key-to-smarter-automation-4pjc</link>
      <guid>https://dev.to/momciloo/structured-data-in-ai-is-headless-cms-the-key-to-smarter-automation-4pjc</guid>
      <description>&lt;p&gt;Artificial intelligence has completely changed the way we used to approach content management.&lt;/p&gt;

&lt;p&gt;You can see a major change in how data is structured today and how it is made available for modern technologies such as artificial intelligence.&lt;/p&gt;

&lt;p&gt;The main challenge is how to make the &lt;strong&gt;best-structured data in AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Most of you would not know but at the core of this major transformation is the &lt;a href="https://thebcms.com/blog/headless-cms-101" rel="noopener noreferrer"&gt;headless content management system&lt;/a&gt;. This is an advanced architecture that handles content creation and is responsible for helping businesses deliver content across different channels and platforms.&lt;/p&gt;

&lt;p&gt;When combined with structured data, this headless approach can help a business uncover the true power of AI and also facilitate automation.&lt;/p&gt;

&lt;p&gt;In this guide, we are going to discuss in detail the combination of structured data, ai, and headless content management systems, and explore why combining them is so important for achieving smarter and efficient automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structured data in AI an Overview
&lt;/h2&gt;

&lt;p&gt;A headless content management system is a back-end CMS that stores content but doesn’t manage the way how it is presented or delivered. A &lt;a href="https://thebcms.com/blog/traditional-vs-headless-cms-full-comparison" rel="noopener noreferrer"&gt;headless CMS is different from traditional platforms&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In a traditional CMS, like WordPress, the backend where content is managed, and the frontend where the content is displayed are combined. However, in a headless CMS, the frontend and backend are separated, meaning that content can be accessed via an API and displayed on any platform or device, whether it’s a website, mobile app, or even an IoT device.&lt;/p&gt;

&lt;p&gt;Headless CMS would rely on the backend instead of the front end, enabling content to be accessed via APIs. This means content can be added to websites, applications, IoT devices, and other digital platforms.&lt;/p&gt;

&lt;p&gt;Coming to structured data refers to the data organized in a predefined style or format. Structured data is more searchable and readable by machines.&lt;/p&gt;

&lt;p&gt;AI tools that rely on data analysis would require structured data to work effectively. This is because well-arranged data allows AI algorithms to understand and process information with greater accuracy.&lt;/p&gt;

&lt;p&gt;When AI works with structured data in a headless CMS, it can bring tons of benefits.&lt;/p&gt;

&lt;p&gt;APIs can serve as the connection between the two systems which helps in better integration that is very important while handling tasks such as content creation, automation, and recommendations.&lt;/p&gt;

&lt;p&gt;When put together, these technologies can create an intelligent content management system where data would not only be stored but would also be used for improving business operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why structured data is so much important for AI?
&lt;/h3&gt;

&lt;p&gt;There is no doubt about the fact that structured data has become essential for accuracy and efficiency.&lt;/p&gt;

&lt;p&gt;But before we get down to the reasons behind its importance, we would urge you to read about the differences between both structured and unstructured data.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is structured data different from unstructured data?
&lt;/h3&gt;

&lt;p&gt;Let’s start with structured data. This is a highly organized form of data and is well-formatted in a way that it is easily understood by both humans and bots.&lt;/p&gt;

&lt;p&gt;Structured data is typically used for advanced databases or spreadsheets and can easily be analyzed with the help of digital tools.&lt;/p&gt;

&lt;p&gt;You can take an example of product descriptions, prices, and dates as these are stored in specific fields and have a consistent format.&lt;/p&gt;

&lt;p&gt;Unstructured data on the other hand refers to the data that has no formal structure. It includes heavy textual content having some kind of underlying message.&lt;/p&gt;

&lt;p&gt;Popular examples of unstructured data include blogs and emails. Here you should know that unstructured data no doubt holds its importance but it requires machines to have complex processing techniques to make sense of it.&lt;/p&gt;

&lt;p&gt;Natural language processing is one of the most common techniques used by AI tools for analyzing unstructured text/data.&lt;/p&gt;

&lt;p&gt;Now that we have gone through the key differences of both data types, let’s get down to the next section.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structured data in AI: Why AI model need structured data?
&lt;/h2&gt;

&lt;p&gt;AI systems rely on structured data because this is what helps them maintain consistency, clarity, and organization when identifying patterns and making predictions based on analysis.&lt;/p&gt;

&lt;p&gt;You can take the example of machine learning models that require large amounts of clean and structured data to train on.&lt;/p&gt;

&lt;p&gt;Without it, AI would face a lot of issues in making accurate predictions or decisions.&lt;/p&gt;

&lt;p&gt;A headless CMS plays a very important role in ensuring that the data is structured properly and is accessible for AI-related operations.&lt;/p&gt;

&lt;p&gt;By simplifying how content is stored, tagged, and categorized, a headless CMS makes sure that AI tools can get access to relevant data in minimal time and can use it for tasks such as content generation, paraphrasing, personalization, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  The role of APIs in artificial intelligence and CMS integration
&lt;/h2&gt;

&lt;p&gt;APIs short for Application Programming Interface are the backbone of any headless content management system that allows content to be accessed and delivered to a wide range of devices/platforms.&lt;/p&gt;

&lt;p&gt;In the context of API, these allow AI tools to interact directly with the data stored in the CMS. APIs make it possible to automate procedures related to the content, and provide data quality making sure that AI generates the right information.&lt;/p&gt;

&lt;p&gt;Put it simply: &lt;a href="https://thebcms.com/blog/information-architecture" rel="noopener noreferrer"&gt;Lost in Data? Call an API for directions&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do APIs connect AI tools with Headless CMS data?
&lt;/h3&gt;

&lt;p&gt;APIs assist in two-way communication between headless CMS and AI systems.&lt;/p&gt;

&lt;p&gt;When an AI tool needs to analyze user behavior or make content suggestions, it can use an API to fetch &lt;a href="https://thebcms.com/blog/structured-content-guide" rel="noopener noreferrer"&gt;structured content&lt;/a&gt; from CMS.&lt;/p&gt;

&lt;p&gt;When AI generates new content like product descriptions or blogs, it can send that content back to the CMS through the API for various purposes including storage and delivery.&lt;/p&gt;

&lt;p&gt;For deeper insights check out: &lt;a href="https://thebcms.com/blog/structured-content-headless-cms" rel="noopener noreferrer"&gt;How to get Structured Content in headless CMS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Examples of an API Request/Response for AI assistive content&lt;br&gt;
Consider an AI model designed to help generate blog posts. The request would look like this:&lt;/p&gt;

&lt;p&gt;API Request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /API/content?category=technology&amp;amp;tags=AI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This would retrieve all content in the “Technology” category with an “AI” tag.&lt;/p&gt;

&lt;p&gt;API Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "articles": [
    {
      "title": "AI in Healthcare: The Future of Medicine",
      "body": "AI is changing the healthcare industry by enabling..."
    },
    {
      "title": "The Rise of AI in Business Operations",
      "body": "AI is increasingly becoming important in business decision-making..."
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The AI tool can now analyze this content, learn from it, and even generate a new article based on patterns it identifies. &lt;/p&gt;

&lt;p&gt;It could then send a new blog post back to the CMS!&lt;/p&gt;

&lt;p&gt;API Response (AI-generated content):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "title": "How AI is Revolutionizing the Future of Work",
  "body": "The business world is transforming as AI tools become integrated into everyday tasks...(continued)"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  AI content management system: Use cases
&lt;/h2&gt;

&lt;p&gt;Combining structured data, a headless content management system, and artificial intelligence can lead to plenty of opportunities for smarter automation.&lt;/p&gt;

&lt;p&gt;If you are not familiar with this, read on this section as below we are going to list some of the most compelling use cases for your knowledge:&lt;/p&gt;

&lt;h3&gt;
  
  
  Auto-filling fields
&lt;/h3&gt;

&lt;p&gt;AI as you would already know, can easily predict and suggest content based on structured data that it collects from the CMS.&lt;/p&gt;

&lt;p&gt;For example, when writing a new blog post, AI can suggest metadata, headless, and even categories based on existing content. This helps one save a lot of time and ensure consistency among all blog articles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generating product descriptions
&lt;/h3&gt;

&lt;p&gt;The majority of ecommerce platforms including Amazon rely on generative AI to automate the process of generating product descriptions.&lt;/p&gt;

&lt;p&gt;Writing product descriptions manually can be a time-consuming task but AI tools can automate this by grabbing labeled data from a headless CMS API.&lt;/p&gt;

&lt;p&gt;Based on data, they can create a detailed, unique, and seo-optimized description.&lt;/p&gt;

&lt;p&gt;Example: An AI tool can generate a product description for a new smartwatch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "product_name": "Dashing Smartwatch",
  "features": ["Heart Rate Monitor", "GPS Tracking", "Water-Resistant"],
  "price": "$99"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI-Generated description:&lt;/p&gt;

&lt;p&gt;The Dashing Smartwatch is the perfect companion for your active lifestyle. With a built-in heart rate monitor, GPS tracking, and water resistance, this smartwatch ensures you stay connected and fit no matter where you are. Priced at just $99, it's a must-have for tech geeks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Improved search functions
&lt;/h3&gt;

&lt;p&gt;Artificial intelligence can also provide help in enhancing search functionality by analyzing and understanding user search intent.&lt;/p&gt;

&lt;p&gt;By analyzing the content in a content management system, AI can easily deliver more personalized and relevant search results based on past user behavior and preferences.&lt;/p&gt;

&lt;p&gt;Platforms like Netflix, Disney, and even YouTube rely on AI for enhancing semantic search.&lt;/p&gt;

&lt;p&gt;For example, if a user searches for motivational songs on YouTube, the AI search engine would pull up the most relevant songs based on the past searches, preferences, and intent of the user.&lt;/p&gt;

&lt;p&gt;This is why AI has become important for ensuring a personalized experience.&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://thebcms.com/blog/use-chatgpt-cms" rel="noopener noreferrer"&gt;10 ways to use ChatGPT with headless CMS&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is BCMS a strong fit for AI-driven content?
&lt;/h2&gt;

&lt;p&gt;BCMS is a very powerful headless content management system that is specifically designed for developers and digital experts building modern websites and stores. It doesn’t matter whether you are working with Reach, Vue, or any other platform, BCMS can help you manage content the way it suits you.&lt;/p&gt;

&lt;p&gt;There are many reasons why BCMS is a strong fit for AI-driven content generation out of many other overrated platforms. Below we have listed some of the most popular reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BCMS works efficiently with all front-end frameworks. You can build your UI without worrying about any restrictions.&lt;/li&gt;
&lt;li&gt;This platform empowers you to optimize content according to the guidelines of the search engine. It doesn’t matter whether you’re building a static blog or a dynamic site, you can rely on BCMS for content-related tasks.&lt;/li&gt;
&lt;li&gt;BCMS is probably one of the only platforms that has been designed to scale. It can handle small as well as enterprise-level projects without any hassle.&lt;/li&gt;
&lt;li&gt;BCMS comes with a top-rated global CDN system that ensures that your content is delivered quickly no matter where your users are.&lt;/li&gt;
&lt;li&gt;BCMS allows you to control SEO elements like meta tags, sitemaps, and URLs. The platform has been designed to make your content easily crawlable and SEO-friendly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So if you want to effectively automate your content generation tasks, it is best that you check out BCMS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Use BCMS as the best CMS for AI data management
&lt;/h2&gt;

&lt;p&gt;The combination of structured data with the best headless content management system can be quite beneficial for a business that wants to achieve smarter automation in terms of content generation and refinement.&lt;/p&gt;

&lt;p&gt;Structured data ensures that AI can process information quickly and accurately, and the headless CMS architecture offers flexibility and scalability.&lt;/p&gt;

&lt;p&gt;By using APIs to connect AI tools with CMS data, a business can easily streamline content-related tasks, enhance personalization, and deliver personalized experiences.&lt;/p&gt;

&lt;p&gt;Artificial intelligence is growing and evolving every turning day so choosing a reliable content management platform like BCMS can provide you with the tools and services for smarter automation.&lt;/p&gt;

&lt;p&gt;Try &lt;a href="https://thebcms.com/" rel="noopener noreferrer"&gt;BCMS&lt;/a&gt; and check out how this powerful combination can transform your content management strategies.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>BCMS Wrapped 2024: Top tracks &amp; top achievements</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Tue, 31 Dec 2024 08:49:30 +0000</pubDate>
      <link>https://dev.to/momciloo/bcms-wrapped-2024-top-tracks-top-achievements-2o75</link>
      <guid>https://dev.to/momciloo/bcms-wrapped-2024-top-tracks-top-achievements-2o75</guid>
      <description>&lt;p&gt;For this year's review, let’s look back at BCMS’s chart-topping achievements, much like the hit songs that defined the year. &lt;/p&gt;

&lt;p&gt;BCMS hit the right notes across the board, from global events to major product launches that changed the game for developers. &lt;/p&gt;

&lt;p&gt;Let’s break it down, track by track, as we look back at our standout moments of 2024.&lt;/p&gt;

&lt;h2&gt;
  
  
  BCMS 2024:Chart-topping achievements
&lt;/h2&gt;

&lt;p&gt;Just like any music award competition, there are categories to win. If there are categories in the headless CMS industry, BCMS would win in the following:&lt;/p&gt;

&lt;h2&gt;
  
  
  Best New Artist: BCMS Cloud
&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F719t40t6fu1sic8iy8q4.gif" 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%2F719t40t6fu1sic8iy8q4.gif" alt="Image description" width="500" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The all-new &lt;a href="https://app.thebcms.com" rel="noopener noreferrer"&gt;BCMS Cloud&lt;/a&gt; ensures that you remain unstoppable when working on development tasks while making content management intuitive and scalable.&lt;/p&gt;

&lt;p&gt;Here's a summary of what we were shipping:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input Flexibility: More options for tailoring content to your needs.&lt;/li&gt;
&lt;li&gt;Faster Media Management: The system has been revamped to make finding and using files easier.&lt;/li&gt;
&lt;li&gt;Seamless Editing: Keep your productivity high with a smoother writing and editing experience.&lt;/li&gt;
&lt;li&gt;Effortless Collaboration: BCMS has new tools that make working together super fun.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Biggest Surprise in 2024: BCMS’s launch of Astro starters
&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkjd7vtvrwhiceaoa03oq.gif" 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%2Fkjd7vtvrwhiceaoa03oq.gif" alt="Image description" width="302" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just like Benson Boone’s "Beautiful Things" celebrates the unexpected success of beauty found in growth, 2024 saw BCMS unveil something truly unexpected—the launch of &lt;a href="https://github.com/bcms/starters?tab=readme-ov-file#astrojs-starters" rel="noopener noreferrer"&gt;Astro starters&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F71gvttcfso5cocjkholc.png" 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%2F71gvttcfso5cocjkholc.png" alt="Image description" width="800" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It was a surprise to many, yet the reception was positive, with developers quickly embracing the simplicity and power of &lt;a href="https://thebcms.com/astro-cms" rel="noopener noreferrer"&gt;Astro CMS&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Just like the song’s theme of finding beauty in the most unexpected places, the Astro starters became one of our most beloved features in a short amount of time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx @thebcms/cli create astro
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Best Collaboration 2024: BCMS Affiliate Program
&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnwi7h580zb7t3s5oztmh.gif" 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%2Fnwi7h580zb7t3s5oztmh.gif" alt="Image description" width="480" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Launched in 2024, the affiliate program represents the best collaboration between BCMS and the developers who are passionate about working with our platform. &lt;/p&gt;

&lt;p&gt;This partnership allowed developers to integrate BCMS into their projects while being rewarded for their 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flg3lnuom9fdlap1mdlqd.png" 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%2Flg3lnuom9fdlap1mdlqd.png" alt="Image description" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we speak in the music industry slang, with this program “fans” can even earn by supporting their fav artist. &lt;/p&gt;

&lt;p&gt;By joining the BCMS affiliate program fans can:&lt;/p&gt;

&lt;p&gt;Earn 50% commissions on every subscription by helping their community discover a developer-first CMS.&lt;/p&gt;

&lt;p&gt;Wanna join? &lt;/p&gt;

&lt;p&gt;Start in 3 easy steps:&lt;/p&gt;

&lt;p&gt;Join the program.&lt;/p&gt;

&lt;p&gt;Share BCMS with your audience.&lt;/p&gt;

&lt;p&gt;Earn big rewards!&lt;/p&gt;

&lt;p&gt;Become a &lt;a href="https://thebcms.com/affiliate" rel="noopener noreferrer"&gt;BCMS affiliate&lt;/a&gt; in 2025.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Best Tour 2024: Web Summit Lisbon
&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34q0dhc1wgvy24lpbids.gif" 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%2F34q0dhc1wgvy24lpbids.gif" alt="Image description" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the second year in a row, we had an opportunity to go through the Web Summit experience, and here’s what we gained:&lt;/p&gt;

&lt;p&gt;Four high-quality investor meetings were booked.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User growth: Our user base increased by 1,400%, from 100 to nearly 1,500.&lt;/li&gt;
&lt;li&gt;Product expansion: We launched 30+ free code starters for major frontend frameworks, like Nuxt, Next.js, and Gatsby, to show our product’s flexibility.&lt;/li&gt;
&lt;li&gt;Time for fun&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  BCMS 2024 highlights in numbers
&lt;/h3&gt;

&lt;p&gt;XX new affiliates joined the program, expanding our reach and community.&lt;/p&gt;

&lt;p&gt;1,400% growth in user base, jumping from 100 to 1,500 active users.&lt;/p&gt;

&lt;p&gt;40+ code starters launched to make development even easier across multiple frameworks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead: 2025 – New Hits, New Collaborations
&lt;/h2&gt;

&lt;p&gt;2024 was just the beginning. With BCMS Cloud and Astro integrations, new features, and even more opportunities for collaboration, 2025 is shaping up to be another year full of excitement.&lt;/p&gt;

&lt;p&gt;If we keep using music industry jargon, Here’s what new nominations are coming for BCMS in 2025:&lt;/p&gt;

&lt;h2&gt;
  
  
  Most Anticipated Release: The Svelte Integration
&lt;/h2&gt;

&lt;p&gt;Developers are choosing Svelte more often because it skips the virtual DOM entirely. No virtual DOM. No framework overhead in the browser. Just fast, efficient websites and apps. &lt;/p&gt;

&lt;p&gt;So the next challenge for BCMS is to explain to developers, why is BCMS the best CMS for Svelte. We will prepare guides, tutorials, and examples for 2025, but for now, here is a little sneak peek: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BCMS loves TypeScript maybe even more than Svelte&lt;/li&gt;
&lt;li&gt;BCMS supports both static site generation and server-side rendering&lt;/li&gt;
&lt;li&gt;Responsive image handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Last but not least, there will be code starters for Svelte too! 😍&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%2Ffsory2htbu89r26i0jl3.png" 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%2Ffsory2htbu89r26i0jl3.png" alt="Image description" width="800" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Performance: New BCMS pro features
&lt;/h2&gt;

&lt;p&gt;Here’s a breakdown of the new features arriving next year for BCMS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;- Trash: Never worry about deleting something by accident again.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With the new Trash feature, BCMS will keep everything you delete for a set period. On the Free plan, deleted items are stored for 7 days, giving you a chance to access them. For Pro plan users, this extends to 90 days, offering more time to recover important content.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;History: Track all your changes with ease.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The History feature will automatically store every update made within BCMS. On the Free plan, it retains changes for 7 days, while the Pro plan extends this to 90 days. This allows for effortless rollbacks to previous versions, ensuring you never lose important edits.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advanced Input Validations: Customize your content inputs with precision.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BCMS will support advanced input validations, so you can set specific criteria for your fields. Whether it's a minimum or maximum value, or even more complex validations like minimum/maximum dates or date ranges, you can ensure that only the correct data is submitted.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advanced Media Previews: See your media files like never before.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The new Advanced Media Previews feature allows BCMS to render previews of a variety of new media file types, including 3D objects, PDFs, and more.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commenting on Entries: Collaboration just got easier.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With the ability to comment directly on entries, team members will be able to discuss content without leaving the BCMS interface. Whether it's feedback, suggestions, or notes for future changes, this feature simplifies communication and helps keep everyone on the same page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Special Event: HeadlessCMS Month &amp;amp; BCMS Hackathon
&lt;/h2&gt;

&lt;p&gt;Looking ahead to 2025, we’re preparing for two major events that will define our year: HeadlessCMS Month and the BCMS Hackathon, to bring the community together and push the boundaries of what’s possible with BCMS.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HeadlessCMS Month: We will dedicate an entire month to celebrating headless CMS with a series of guides, tutorials, giveaways, and community engagement activities. Just like a major album release, this month will be packed with informative sessions where developers can learn, connect, and explore new possibilities with BCMS.&lt;/li&gt;
&lt;li&gt;BCMS Hackathon: For the first time in 2025, we’ll be hosting our very own BCMS Hackathon. It’s going to be the ultimate stage for developers to show off their creativity and innovation. Participants will compete to build amazing solutions using BCMS, and we can’t wait to see what the community comes up with. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The world tour: BCMS will Rock in Rio!
&lt;/h2&gt;

&lt;p&gt;Besides &lt;a href="https://thebcms.com/blog/web-summit-guide" rel="noopener noreferrer"&gt;preparation for Web Summit&lt;/a&gt; 2025 in Lisbon, BCMS will perform at the &lt;a href="https://rio.websummit.com/" rel="noopener noreferrer"&gt;Web Summit Rio 2025&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will be the first time that BCMS will perform overseas. So, keeping up with BCMS preparation for this conference that will be held April 27-30, 2025. -  Save the date to see BCMS on a world tour.&lt;/p&gt;

&lt;p&gt;As you can see, the stage is set, the lights are on, and BCMS is ready to release even more chart-topping hits in 2025! Meanwhile, while waiting for 2025 to come, I invite you to join the &lt;a href="https://discord.com/invite/SYBY89ccaR" rel="noopener noreferrer"&gt;Discord BCMS community&lt;/a&gt; for new updates and start listening to the &lt;a href="https://open.spotify.com/playlist/6JhQiPKF1ZgqnP8Qm646OF?si=4ee220fbfa2544a0&amp;amp;nd=1&amp;amp;dlsi=659d075c8924455c" rel="noopener noreferrer"&gt;BCMS FM playlist&lt;/a&gt; that will help you build awesome things with BCMS in 2025.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Astro vs Gatsby: Is Astro becoming a replacement for Gatsby?</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Mon, 30 Dec 2024 14:31:11 +0000</pubDate>
      <link>https://dev.to/momciloo/astro-vs-gatsby-is-astro-becoming-a-replacement-for-gatsby-24d4</link>
      <guid>https://dev.to/momciloo/astro-vs-gatsby-is-astro-becoming-a-replacement-for-gatsby-24d4</guid>
      <description>&lt;p&gt;Gatsby trends show that this once-fav framework is losing its bliss, as developers seek faster, simpler, and lighter options. One competitor that stood out is certainly Astro.&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%2Fro1drnuaz9gjvasrhxh5.png" 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%2Fro1drnuaz9gjvasrhxh5.png" alt="Image description" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But you know what they say about statistics: “There are three kinds of lies: lies, damned lies, and statistics.”&lt;/p&gt;

&lt;p&gt;So, we will leave statistics aside and &lt;strong&gt;compare Astro vs. Gatsby&lt;/strong&gt; in depth to understand what these trends are trying to tell us.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is Gatsby losing its bliss?
&lt;/h2&gt;

&lt;p&gt;There are a lot of reasons &lt;a href="https://thebcms.com/blog/why-developers-hate-gatsby" rel="noopener noreferrer"&gt;why developers love to hate Gatsby&lt;/a&gt;, but here are the top 4 reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plugins maintenance&lt;/li&gt;
&lt;li&gt;React-based&lt;/li&gt;
&lt;li&gt;Can be too slow&lt;/li&gt;
&lt;li&gt;Gatsby Cloud didn’t improve build times&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From this, you can conclude that developers looking for solutions with fewer plugins ( or plugins that are easy to update) have the freedom to choose tech-stack and top of it to be fast and efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is Astro becoming popular?
&lt;/h2&gt;

&lt;p&gt;On the other hand, Astro is becoming more and more popular (besides being a newer tool on the market) for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File-based routing&lt;/li&gt;
&lt;li&gt;Frontend-agnosticism&lt;/li&gt;
&lt;li&gt;Component islands architecture&lt;/li&gt;
&lt;li&gt;Ships zero JavaScript by default&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even though both are static site generators, how do these differences affect the development process? It’s time to compare Astro and Gatsby based on the features crucial for building websites, apps, or other projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Astro vs Gatsby: Features comparison
&lt;/h2&gt;

&lt;p&gt;Here are the features and differences that can make dev life easier or harder, depending on your framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Astro vs Gatsby: Performance and speed
&lt;/h2&gt;

&lt;p&gt;Regarding performance and speed, Astro and Gatsby offer unique advantages but differ in their approaches to site generation and rendering, which can significantly impact how fast your site feels to users. Here’s a closer look at how they compare:&lt;/p&gt;

&lt;h3&gt;
  
  
  Rendering strategy: Astro Islands vs Gatsby Functions
&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu282v0ayixuyt2hkel0w.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%2Fu282v0ayixuyt2hkel0w.jpg" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Astro&lt;/strong&gt; uses an &lt;a href="https://docs.astro.build/en/concepts/islands/" rel="noopener noreferrer"&gt;Islands architecture&lt;/a&gt; approach, meaning it only sends JavaScript to the client for interactive components ("islands"), while the rest is static HTML. Minimizing JavaScript on the front end speeds up loading times, making Astro extremely lightweight.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gatsby&lt;/strong&gt;, on the other hand, relies on &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React&lt;/a&gt; and primarily uses static generation, but it tends to send more JavaScript to the client. While Gatsby does support deferred loading through "Gatsby Functions" and server-side rendering (SSR), its core approach still depends heavily on a JavaScript layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Astro vs Gatsby: Build times
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Astro&lt;/strong&gt; is known for its fast build times, as it only processes the necessary parts of the site. Because Astro generates static sites with no JavaScript by default, it is ideal for rapid development and deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gatsby&lt;/strong&gt; is known for longer build times, especially on large sites with thousands of pages, mainly because it needs to compile a significant amount of JavaScript and run GraphQL queries for data. However, Gatsby Cloud and incremental builds have helped reduce these times, but they still don’t reach Astro’s level of efficiency for static builds.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript and client-side rendering
&lt;/h3&gt;

&lt;p&gt;As Gatsby loads all React components on the client, even those that don't need immediate interaction, Astro's selective hydration feature lets only specific components hydrate when needed. This results in minimal JavaScript and reduced page weight, leading to faster time-to-interactive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data handling
&lt;/h3&gt;

&lt;p&gt;Unlike Gatsby, Astro doesn’t have a built-in GraphQL layer, making it more straightforward for simple, content-based sites. It relies on direct data imports or fetches, which can sometimes be faster and less complex.&lt;/p&gt;

&lt;p&gt;How are these differences in approach reflected in practice? Let's say, you want to build a content-heavy blog site with hundreds of articles and a few interactive components, the development process would look like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Astro site structure example&lt;/strong&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3tlw90iwf44hdyo0k2u.png" 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%2Fu3tlw90iwf44hdyo0k2u.png" alt="Image description" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;index.astro&lt;/strong&gt;: The homepage lists blog posts using static generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[slug].astro&lt;/strong&gt;: Dynamic blog post pages for each article, generated server-side.&lt;/p&gt;

&lt;p&gt;Astro would statically generate the HTML for the article pages and only hydrates JavaScript on the interactive SearchBar and Comments components.&lt;/p&gt;

&lt;p&gt;This minimal JavaScript approach results in a fast and &lt;strong&gt;quick initial load&lt;/strong&gt;, as only necessary interactive components are hydrated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gatsby site structure example&lt;/strong&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ef0l969hvh39tmililc.png" 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%2F6ef0l969hvh39tmililc.png" alt="Image description" width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the same blog example, Gatsby uses GraphQL to query the content. All components (including SearchBar and Comments) are loaded with React.&lt;/p&gt;

&lt;p&gt;As a result, users may notice a slightly longer initial load, especially on mobile devices, because the entire React application and its JavaScript payload are loaded for every page, regardless of the actual interactivity needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Astro vs Gatsby: Syntax
&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiyto1uezyu6h371ggri0.png" 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%2Fiyto1uezyu6h371ggri0.png" alt="Image description" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Astro’s syntax is very similar to HTML, so if you know basic HTML, you’re ready to use it. You need to admit that this is very convenient, even for beginners. Besides being HTML-based, it is framework-agnostic, so you can use its syntax and mix it with different frontend frameworks (React, Vue, Svelte), without any complex configuration. This file-based routing makes Astro easy to use and learn.&lt;/p&gt;

&lt;p&gt;Gatsby’s syntax is fully React-based, so you’ll be writing in JSX, however, it relies on GraphQL for data fetching makes it powerful but a bit more complex.&lt;/p&gt;

&lt;p&gt;Overall, if you are looking for simpler and more flexible syntax that doesn’t lock you into a single framework Astro would be a better choice.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript vs TypeScript support
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://thebcms.com/blog/should-you-use-javascript-or-typescript" rel="noopener noreferrer"&gt;JavaScript vs TypeScript&lt;/a&gt; support in Astro and Gatsby is a key area where they differ.&lt;/p&gt;

&lt;p&gt;Even though Astro is designed to work with JavaScript out of the box it has built-in support for TypeScript, which allows you to add static typing without any extra configuration.&lt;/p&gt;

&lt;p&gt;Gatsby also has solid TypeScript support, and many of its plugins and templates are TypeScript-friendly. However, because Gatsby is React-based, its TypeScript usage aligns specifically with React’s component-based structure.&lt;/p&gt;

&lt;p&gt;The main difference here is that Gatsby doesn’t support components from other frontend frameworks out of the box, so TypeScript’s benefits are focused on React’s APIs and patterns while Astro makes it easy to use TypeScript with any framework you prefer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Support for Tailwind, SCSS, and CSS modules
&lt;/h3&gt;

&lt;p&gt;Both Astro and Gatsby offer support for these popular technologies for building modern sites. The difference is how: out of the box or through plugins. Since Gatsby is known for its plugin system ( almost like WordPress) you can conclude the outcome:&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%2F5wha7xvbec9j2mmnwip8.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%2F5wha7xvbec9j2mmnwip8.jpg" alt="Image description" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see from the table, Astro takes the lead in flexibility and simplicity, offering out-of-the-box support for these styling and configuration tools without extra plugins, which keeps projects lightweight and reduces dependency issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Astro vs Gatsby: SEO comparison
&lt;/h2&gt;

&lt;p&gt;As a person whose daily job is to worry about SEO, I can’t not compare these two in terms of SEO. I will start this comparison with something that both frameworks slay: &lt;strong&gt;SSG&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Static site generation (SSG)
&lt;/h3&gt;

&lt;p&gt;The two frameworks both produce static sites that are lightweight and easy for crawlers to crawl. It means that the site is generated from static HTML, CSS, and JS files and is not hosted on a backend server. By this approach, both frameworks offer SEO-friendly features such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pre-rendered content&lt;/strong&gt;: Both frameworks generate static HTML pages during the build process, which ensures that all content is available to search engines. This eliminates the need for SSR or CSR, making it easier for crawlers to index your site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast loading times&lt;/strong&gt; are directly tied to better SEO performance, as search engines prioritize speed and user experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO-friendly URLs&lt;/strong&gt;: Both Astro and Gatsby support clean, readable URLs that are optimized for SEO, with clear hierarchies and no unnecessary query strings or dynamic parameters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sitemap generation&lt;/strong&gt;: Both Astro and Gatsby allow you to automatically add and update a sitemap. It is done using &lt;a href="https://docs.astro.build/en/guides/integrations-guide/sitemap/" rel="noopener noreferrer"&gt;@astrojs/sitemap&lt;/a&gt; in Astro, and &lt;a href="https://www.gatsbyjs.com/plugins/gatsby-plugin-sitemap/" rel="noopener noreferrer"&gt;gatsby-plugin-sitemap&lt;/a&gt; in Gatsby.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although both frameworks are SEO friendly, each one of them has unique features that improve SEO and that make them different.&lt;/p&gt;

&lt;h3&gt;
  
  
  Astro SEO features that are better:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;No/Minimal JavaScript by default&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Astro’s default behavior is to minimize JavaScript usage. The framework is designed to render static HTML and CSS with zero JavaScript unless needed. By reducing JavaScript, Astro improves page speed and core web vitals, which are crucial for SEO performance. Pages with less JavaScript tend to load faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Crawler friendliness&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since Astro generates minimal JavaScript, search engines can crawl your site more quickly. Crawlers spend less time executing JavaScript, so they can index your content faster, making better use of your crawl budget. This is particularly beneficial for large sites where the crawl budget is limited.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gatsby SEO features that are better:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;SEO Plugins&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gatsby has a rich ecosystem of SEO plugins, such as &lt;a href="https://www.gatsbyjs.com/plugins/gatsby-plugin-seo/" rel="noopener noreferrer"&gt;gatsby-plugin-seo&lt;/a&gt;, that allow you to manage meta tags, open graph tags, and structured data for better indexing by search engines. With this plugin, it’s easy to configure your site's title, description, and other important metadata, ensuring your site is optimized for search engines automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Image optimization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While Astro does support modern image formats and lazy loading through built-in functionality (&lt;a href="https://docs.astro.build/en/guides/images/" rel="noopener noreferrer"&gt;@astrojs/image&lt;/a&gt;) its features are more limited compared to Gatsby’s (&lt;a href="https://www.gatsbyjs.com/plugins/gatsby-plugin-image/" rel="noopener noreferrer"&gt;gatsby-plugin-image&lt;/a&gt;), which automatically serves responsive images with lazy loading, WebP support, and image compression.&lt;/p&gt;

&lt;p&gt;Out of the two, Gatsby does it a lot better. Astro lacks the specific loading styles that Gatsby features, such as images that fade from zero to full opacity when they load.&lt;/p&gt;

&lt;p&gt;In terms of SEO capabilities, I would say that Gatsby and Astro are quite similar. Each one supports SSG and includes features that contribute to strong SEO performance.&lt;/p&gt;

&lt;p&gt;That said, Astro stands out for sites that don’t rely on heavy interactivity, as it uses minimal JavaScript. On the other hand, if your site requires a high level of interactivity Gatsby may be a better choice.&lt;/p&gt;

&lt;p&gt;Interested in how Gatsby compares with other frameworks? Read the comparison of: &lt;a href="https://thebcms.com/blog/gatsby-vs-next-vs-nuxt-key-features" rel="noopener noreferrer"&gt;Gatsby vs Next vs Nuxt: Key Features and Differences&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts: Is Astro ready to take over Gatsby?
&lt;/h2&gt;

&lt;p&gt;Without a doubt, Astro aims to be the best Gatsby alternative because it solves some of Gatsby’s biggest drawbacks (and devos nightmares): heavy JavaScript, longer build times, and complex GraphQL setups.&lt;/p&gt;

&lt;p&gt;In conclusion, Astro is a strong contender and may indeed replace Gatsby for many developers prioritizing speed, simplicity, and modern site architecture. But for high-interactivity sites that rely on advanced plugins, Gatsby still has the upper hand. Astro is close, but it may need a broader plugin ecosystem and more interactivity support before it can fully take over Gatsby's role in the SSG landscape.&lt;/p&gt;

&lt;p&gt;Good news?&lt;/p&gt;

&lt;p&gt;BCMS offers support in whichever framework you choose to build your sites.&lt;/p&gt;

&lt;p&gt;Try &lt;a href="https://thebcms.com/astro-cms" rel="noopener noreferrer"&gt;Astro CMS&lt;/a&gt; to see why this framework is becoming more and more popular.&lt;/p&gt;

&lt;p&gt;And if you need a platform to give back bliss to Gatsby projects, you could try using BCMS as your headless &lt;a href="https://thebcms.com/gatsby-cms" rel="noopener noreferrer"&gt;CMS for Gatsy&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The best CMS for Astro: How to choose CMS for Astro projects</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Fri, 27 Dec 2024 14:56:47 +0000</pubDate>
      <link>https://dev.to/momciloo/the-best-cms-for-astro-how-to-choose-cms-for-astro-projects-51j8</link>
      <guid>https://dev.to/momciloo/the-best-cms-for-astro-how-to-choose-cms-for-astro-projects-51j8</guid>
      <description>&lt;p&gt;Would you agree with this statement: &lt;strong&gt;Finding the &lt;a href="https://thebcms.com/astro-cms" rel="noopener noreferrer"&gt;best CMS for Astro&lt;/a&gt; is the easiest task ever&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;I know this may sound like “lame marketing copy", which could only be believed by people with no coding skills or inexperienced developers. But all of you guys who have been coding every single day for years now know that this statement is nothing more than true.&lt;/p&gt;

&lt;p&gt;Before I get into details I need to explain this statement. Astro is a framework-agnostic framework (🤪) that brings a high level of flexibility within any Astro project, but also makes the CMS choosing process way easier.  Why does this matter? Keep reading.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Astro is a framework-agnostic means
&lt;/h2&gt;

&lt;p&gt;The Astro framework is framework-agnostic in the sense that it allows developers to use components and libraries from multiple front-end frameworks (like React, Vue, Svelte, and others). In contrast to other JavaScript frameworks, Astro allows you to mix and match components without committing to a single one.&lt;/p&gt;

&lt;p&gt;Three key elements allowed Astro to bring these innovations into web development:&lt;/p&gt;

&lt;h3&gt;
  
  
  Component islands architecture
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.astro.build/en/concepts/islands/" rel="noopener noreferrer"&gt;Astro Islands&lt;/a&gt; architecture allows you to create isolated components, only loading JavaScript for the parts of the page that need interactivity.&lt;/p&gt;

&lt;p&gt;In other words, the static content will load quickly without any extra JavaScript, and only the interactive parts =( islands) will load JavaScript when they need it.&lt;/p&gt;

&lt;p&gt;Let me use the &lt;a href="https://thebcms.com/" rel="noopener noreferrer"&gt;BCMS home page&lt;/a&gt; as an example:&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%2Fuqds1tuk9afwhrp5jont.jpeg" 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%2Fuqds1tuk9afwhrp5jont.jpeg" alt="Image description" width="800" height="719"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Say the BCMS homepage has a mix of static content, like an introduction section with text, images, etc., and some interactive parts, like a header or CTA buttons.&lt;/p&gt;

&lt;p&gt;With Astro islands, only the interactive parts—the "islands"—would load JavaScript. So, the text content loads almost instantly, while JavaScript is used only for the parts that need user interaction, such as clicking the CTA button to launch a form.&lt;/p&gt;

&lt;p&gt;This approach keeps the initial page load lightweight and quick, while still allowing the interactive sections to function smoothly when they're needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Framework-agnostic rendering
&lt;/h3&gt;

&lt;p&gt;By default, Astro compiles the project to static HTML, sending JavaScript only when necessary. Since Astro doesn't dictate a particular front-end framework, you can use anything you like, even pure HTML/CSS/JavaScript. As a result, it is easy to integrate any framework without excessive bundling or overhead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Astro component syntax
&lt;/h3&gt;

&lt;p&gt;If you know HTML, you already know enough to write your Astro component. The upgrade starts with .astro files being designed to support components from various frameworks in a single format, which Astro's compiler understands.&lt;/p&gt;

&lt;p&gt;You can import components from different frameworks without compatibility issues, and Astro will render them correctly.&lt;/p&gt;

&lt;p&gt;For full insights and understanding you can check out the &lt;a href="https://docs.astro.build/en/basics/astro-syntax/" rel="noopener noreferrer"&gt;Astro Syntax template&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Besides these elements, some features make Astro more and more popular.&lt;/p&gt;

&lt;h3&gt;
  
  
  Astro features that make website development easier
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thebcms.com/blog/static-site-generation-vs-server-side-rendering" rel="noopener noreferrer"&gt;&lt;strong&gt;Static site generation (SSG) and Server-side rendering (SSR&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even though being a static site generator by default, Astro also supports server-side rendering if necessary. Thanks to this support, SSR generates pages on the server in response to user requests. Users can access dynamic content directly, such as personalized data or frequently changing information.&lt;/p&gt;

&lt;p&gt;How does Astro handle SSR?&lt;/p&gt;

&lt;p&gt;As I said, Astro handles SSR by configuring it to generate HTML for each page on the server in response to individual requests.&lt;/p&gt;

&lt;p&gt;To enable SSR in Astro, you’ll need to use an SSR-compatible adapter. Astro offers several official &lt;a href="https://docs.astro.build/en/guides/server-side-rendering/" rel="noopener noreferrer"&gt;on-demand rendering adapters&lt;/a&gt;, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;: @astrojs/vercel&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;: @astrojs/netlify&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;Node&lt;/a&gt;: @astrojs/node&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.cloudflare.com/" rel="noopener noreferrer"&gt;Cloudflare&lt;/a&gt;: @astrojs/cloudflare&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These adapters allow you to deploy your Astro site to a server environment that supports SSR. For detailed information visit &lt;a href="https://docs.astro.build/en/guides/server-side-rendering/" rel="noopener noreferrer"&gt;Astro docs guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In summary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSG (default)&lt;/strong&gt;: Astro generates static HTML by default for high-performance sites.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSR (optional)&lt;/strong&gt;: Astro can also handle SSR, allowing for dynamic content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This flexibility makes Astro versatile, letting you choose the best rendering strategy based on your needs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flexible data fetching&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Astro has a flexible fetch of data from multiple sources during the build process, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;li&gt;GraphQL endpoints&lt;/li&gt;
&lt;li&gt;Markdown files&lt;/li&gt;
&lt;li&gt;Custom data sources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This flexibility supports &lt;a href="https://thebcms.com/blog/structured-content-guide" rel="noopener noreferrer"&gt;structured content&lt;/a&gt; by fetching it in one central location.&lt;/p&gt;

&lt;p&gt;A major benefit of this feature is that Astro provides the freedom to integrate various data sources without restrictions, making it easy to pull data from a headless CMS or other external sources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Image optimization&lt;/strong&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh0t6diyffz1u2lkax5co.jpeg" 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%2Fh0t6diyffz1u2lkax5co.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Astro has built-in support for image optimization through its &lt;a href="https://docs.astro.build/en/guides/images/" rel="noopener noreferrer"&gt;@astrojs/image&lt;/a&gt; package, which improves image loading and performance.&lt;/p&gt;

&lt;p&gt;By using an &lt;code&gt;&amp;lt;Image /&amp;gt;&lt;/code&gt; component when you add an image, Astro resizes, formats, and serves the image automatically, applies lazy loading, and generates responsive sizes.&lt;/p&gt;

&lt;p&gt;This ensures that the appropriate image resolution is loaded for each user's device, resulting in faster loading times and better performance.&lt;/p&gt;

&lt;p&gt;These features make Astro versatile and suitable for both static and dynamic sites, but what about content management systems? How to find the best choice? As I said at the beginning, this can be easier than you think.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the best CMS for Astro?
&lt;/h2&gt;

&lt;p&gt;Before I go any further with the explanation I must tell you one big truth: you can use Astro without a CMS thanks to built-in support for Markdown, which lets you build entire sites.&lt;/p&gt;

&lt;p&gt;For smaller sites or blogs, managing content directly through Markdown files keeps things simple and lightweight, perfect if you prefer keeping everything within the codebase. You can also use JSON, YAML, or fetch content from APIs, giving you control without adding a CMS.&lt;/p&gt;

&lt;h3&gt;
  
  
  But why is it better to use CMS for Astro
&lt;/h3&gt;

&lt;p&gt;For simpler sites or smaller projects, managing content directly within Astro might be sufficient, but as the project grows (and to be honest all online grow these days), a CMS becomes inevitable.&lt;/p&gt;

&lt;p&gt;Here’s when a CMS is most beneficial:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As websites grow, handling content can become difficult if managed directly in Markdown or JSON files. A CMS makes it effortless since it provides a structured environment for managing, editing, and organizing content without requiring direct code changes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Easier for non-tech teams&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don’t forget about marketers and others in the content creation process. Most of them never used Markdown or JSON files to create blogs, articles, etc. Another reason, marketing teams need more &lt;a href="https://thebcms.com/blog/content-modeling-headless-cms" rel="noopener noreferrer"&gt;content types&lt;/a&gt; that Markdown doesn’t support such as images, videos, tables, and on and on.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Different content statuses&lt;/strong&gt;:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjv67ssxopokogns1bsf9.png" 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%2Fjv67ssxopokogns1bsf9.png" alt="Image description" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CMS platforms offer versioning, staging, and publishing workflows. These workflows help content teams review and approve content changes before publishing, track past edits, and roll back changes. They're essential for larger teams or organizations that want to check and balance the published content, especially when updating content frequently.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API integrations and dynamic content:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CMS can serve content via API, making it easy to dynamically load content into Astro pages at build time or on-demand. Also, you can serve content to multiple channels (like web, mobile, and apps) and fetch dynamic data by Astro principles.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What about SEO?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The markdown can be SEO-friendly, particularly when used correctly in the context of static site generators like Astro ( clean HTML output, easy formatting, inclusion of metadata). As for dynamic content, a &lt;a href="https://thebcms.com/blog/the-best-cms-for-seo" rel="noopener noreferrer"&gt;CMS improves SEO&lt;/a&gt; by providing built-in tools to manage structured data, optimize content for search engines, and update content easily.&lt;/p&gt;

&lt;h3&gt;
  
  
  Headless vs Traditional: Which one is the best CMS for Astro
&lt;/h3&gt;

&lt;p&gt;For Astro sites, a &lt;strong&gt;headless CMS&lt;/strong&gt; takes a win over traditional ones. Here’s why:&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%2Fltd60yjwt1mb8eid2bkj.jpeg" 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%2Fltd60yjwt1mb8eid2bkj.jpeg" alt="Image description" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Performance and static site optimization&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Traditional CMS platforms often require dynamic page rendering, where each request pulls data in real-time, which can slow things down.&lt;/p&gt;

&lt;p&gt;On the other side, by pairing Astro with headless, you’ll get a compatible platform that allows Astro to pre-render pages into static HTML, allowing for ultra-fast load times while headless delivers content through APIs, which Astro can fetch at build time, ensuring a faster performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Flexible front-end choices&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This is more than obvious, traditional CMSs prevent Astro from being framework agnostic since requires working within CMS templates and themes.&lt;/p&gt;

&lt;p&gt;Headless on the other hand, improves Astro’s agnosticism by decoupling the content entirely from the front end, giving Astro the freedom to render data in whatever way fits best and for you to choose &lt;a href="https://thebcms.com/blog/front-end-development-tools" rel="noopener noreferrer"&gt;front-end development tools&lt;/a&gt; for your stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Content delivery&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Traditional platforms are typically web-centric, making it challenging to share content beyond the website. Since headless platforms deliver content via API, you can push content to any device, from websites to mobile apps, and even IoT devices.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Smooth development workflow&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Traditional CMS systems often come with extra overhead like plugins, themes, and customization, which can complicate the codebase, (limited to PHP or a monolithic setup), and bring complexities when integrating with Astro’s build process.&lt;/p&gt;

&lt;p&gt;Thanks to webhooks, an API-driven structure that can trigger rebuilds in Astro whenever the content is updated, headless support automatic content deployment.&lt;/p&gt;

&lt;p&gt;For more differences and deep understanding check out: &lt;a href="https://thebcms.com/blog/traditional-vs-headless-cms-full-comparison" rel="noopener noreferrer"&gt;Traditional CMS vs. Headless CMS - Full Comparison&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is BCMS the best CMS for Astro
&lt;/h2&gt;

&lt;p&gt;Besides being headless (obviously) BCMS is the best choice for Astro due to its compatibility with Astro's unique architecture and the following BCMS features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;API-first design:&lt;/strong&gt; BCMS’s API-first approach aligns with Astro's islands architecture, loading data only for interactive components and reducing JavaScript load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible rendering options:&lt;/strong&gt; Works seamlessly with Astro’s static site generation (SSG) and server-side rendering (SSR), providing optimized load times and improved SEO.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://thebcms.com/blog/content-modeling-basics" rel="noopener noreferrer"&gt;Content modeling&lt;/a&gt;:&lt;/strong&gt; Allows the creation of reusable content types that integrate easily with Astro’s component-driven structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsive image handling&lt;/strong&gt;: BCMS optimizes images and uses lazy loading to ensure responsiveness and fast performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User-friendly interface:&lt;/strong&gt; Simple for marketers and non-developers, allowing them to edit and publish content independently.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All in all, &lt;a href="https://thebcms.com/" rel="noopener noreferrer"&gt;BCMS&lt;/a&gt; is a perfect match for Astro. Developers can focus on building great features, while BCMS takes care of the content and performance.&lt;/p&gt;

&lt;p&gt;Speaking about developers' building, you can give a try with BCMS &lt;a href="https://github.com/bcms/starters/tree/master/astro" rel="noopener noreferrer"&gt;Astro code starters&lt;/a&gt;, choose a blog code starter, and follow all the instructions from this tutorial: &lt;a href="https://thebcms.com/blog/astro-blog-tutorial" rel="noopener noreferrer"&gt;Building Astro Blog with BCMS&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>astrojs</category>
      <category>astrojscms</category>
      <category>astro</category>
      <category>astroprojects</category>
    </item>
    <item>
      <title>How to make a resume website in Next.js using headless BCMS</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Tue, 24 Dec 2024 13:53:38 +0000</pubDate>
      <link>https://dev.to/momciloo/how-to-make-a-resume-website-in-nextjs-using-headless-bcms-4003</link>
      <guid>https://dev.to/momciloo/how-to-make-a-resume-website-in-nextjs-using-headless-bcms-4003</guid>
      <description>&lt;p&gt;Creating a resume with React or other &lt;a href="https://thebcms.com/blog/front-end-development-tools" rel="noopener noreferrer"&gt;frontend technologies&lt;/a&gt; is often viewed as a simple task for one to try out his frontend skills. But while this project is simple, it is also very easy to mess up and over-engineer. &lt;/p&gt;

&lt;p&gt;In this step-by-step guide, you will learn &lt;strong&gt;how to make a resume website with Next.js&lt;/strong&gt; with the resume data hosted on BCMS, a headless CMS.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to make a resume website with the headless approach?
&lt;/h2&gt;

&lt;p&gt;Why this approach you may ask? Well, there are a couple of reasons why to use headless CMS as a resume website builder, to name a few:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Easier Content Updates&lt;/strong&gt;: With your resume content hosted separately from your app, you can modify your resume &lt;strong&gt;without touching your codebase.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Real-Time Updates&lt;/strong&gt;: You can make changes on your CMS and they’re instantly reflected on the Next.js website.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Customization and Integration&lt;/strong&gt;: Headless CMSs often have APIs allowing deep customization. If you need to integrate with other services (like job application APIs, and social media like LinkedIn, or GitHub), a CMS can facilitate these integrations more seamlessly than hard-coded data.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These features do not come standard with any CMS, so using a headless CMS with these and other features is essential. That is why BCMS is the best choice for building a professional resume, along with Next.js.&lt;/p&gt;

&lt;p&gt;By the end of this tutorial, you will be able to harness the power of Next.js and the super features that BCMS provides to create a fully functional resume website.&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%2Fidrbjgxjxov7oonvk0ve.png" 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%2Fidrbjgxjxov7oonvk0ve.png" alt="Image description" width="800" height="791"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Table of contents: How to make a resume website with BCMS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Setting up Next.js app&lt;/li&gt;
&lt;li&gt;Setting up BCMS and creating Resume Content&lt;/li&gt;
&lt;li&gt;Fetching resume content from BCMS and rendering on the Next app.&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;li&gt;Next Steps&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setting Up Next.js App
&lt;/h2&gt;

&lt;p&gt;Now let’s set up the Next.js frontend, add styling, and populate resume fields with dummy data.&lt;/p&gt;

&lt;p&gt;To begin, head to &lt;a href="https://thebcms.com/nextjs-cms" rel="noopener noreferrer"&gt;Next CMS&lt;/a&gt;, copy the terminal command and paste it on your terminal to create a simple BCMS Next project using one of the &lt;a href="https://github.com/bcms/starters?tab=readme-ov-file#nextjs-starters" rel="noopener noreferrer"&gt;Next starters&lt;/a&gt; available.&lt;/p&gt;

&lt;p&gt;For this tutorial, I will be using the simple blog website template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx @thebcms/cli create next starter simple-blog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This Command will create a next.js project, clone the simple-blog starter inside of it, and then connect to a BCMS instance (more on this later).&lt;/p&gt;

&lt;p&gt;This is where it requires you to log in, so simply log in when it prompts you to log in using your browser or create a new account if you don’t have a BCMS account yet.&lt;/p&gt;

&lt;p&gt;After logging in, the command will prompt you for the name of the project and then successfully create it, as shown in the image 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkekq5tkgc50oazzsrzwn.png" 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%2Fkekq5tkgc50oazzsrzwn.png" alt="Image description" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the project folder, run the install command and the &lt;code&gt;npm run dev&lt;/code&gt; command, after that, your page will be live at &lt;code&gt;localhost:3000&lt;/code&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftum6933m3brq8sqvzfkc.png" 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%2Ftum6933m3brq8sqvzfkc.png" alt="Image description" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now your Next.js project is ready to go and is linked to a BCMS backend, which is where these blog posts are coming from. You don't need these blog posts, though, because your needs are different. So, let's clean up the page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Page Cleanup
&lt;/h3&gt;

&lt;p&gt;Navigate to the src folder, followed by app, in your newly created Next.js project. There's page.tsx, which is the index page, and that's the only page we'll use for this tutorial because it's a one-page resume with no links to other pages.&lt;/p&gt;

&lt;p&gt;First, I'll remove the BlogCard and Tag templates that I won't be using, as well as the BlogEntry types that were automatically generated for me when I used the bcms CLI command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Delete

import { BlogEntry, BlogEntryMetaItem } from '../../bcms/types/ts';
import BlogCard from '@/components/blog/Card';
import Tag from '@/components/Tag';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that, you can change the page title to any title of your choice.&lt;/p&gt;

&lt;p&gt;Moving on to the HomePage function, remove all functions and clean up the return statement leaving just a div there with a simple “My Resume”.&lt;/p&gt;

&lt;p&gt;The code for the page.tsx should look something like this at this point:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';
import { bcms } from './bcms-client';
import { Metadata } from 'next';

const pageTitle = 'Resume - My Simple Resume';
export const metadata: Metadata = {
    title: pageTitle,
    openGraph: {
        title: pageTitle,
    },
    twitter: {
        title: pageTitle,
    },
};

const HomePage: React.FC = async () =&amp;gt; {
    return &amp;lt;div&amp;gt;My Resume&amp;lt;/div&amp;gt;;
};

export default HomePage;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And on the browser, this is what will be displayed:&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%2F1qx9zqm6jg08tbo8nitp.png" 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%2F1qx9zqm6jg08tbo8nitp.png" alt="Image description" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great, you’ve successfully cleaned up the page. &lt;/p&gt;

&lt;p&gt;But there are still other files in the project that we don’t need, so I’m just gonna safely delete them. They’re :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;src/app/blog&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/components&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Delete every other file in this folder except the layout folder which holds the footer.&lt;/p&gt;

&lt;p&gt;After deleting these folders or the files in them, your application structure should look like this:&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%2Fdeeo6enrg6ux9aotv1bl.png" 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%2Fdeeo6enrg6ux9aotv1bl.png" alt="Image description" width="247" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great, with the project cleaned up, it is time to set up the UI for the resume.&lt;/p&gt;

&lt;h2&gt;
  
  
  Designing Page UI
&lt;/h2&gt;

&lt;p&gt;Now, I will set up the page for the resume, and for now, it will hold dummy hardcoded data.&lt;/p&gt;

&lt;p&gt;This requires creating the page's HTML structure and then styling it with Tailwind CSS. I will not go into detail about the CSS or &lt;a href="https://thebcms.com/blog/why-tailwind-doesnt-suck" rel="noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt; used to style the page because this is not a CSS tutorial; instead, simply copy the page and replace your existing &lt;code&gt;page.tsx&lt;/code&gt; code with it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';
import { bcms } from './bcms-client';
import { Metadata } from 'next';
import Image from 'next/image';

const pageTitle = 'Resume - My Simple Resume';
export const metadata: Metadata = {
    title: pageTitle,
    openGraph: {
        title: pageTitle,
    },
    twitter: {
        title: pageTitle,
    },
};

const HomePage: React.FC = async () =&amp;gt; {
    return (
        &amp;lt;div className="w-8/12 mx-auto mt-6 bg-white px-20 py-12"&amp;gt;
            &amp;lt;header className="flex flex-row justify-between mb-4"&amp;gt;
                &amp;lt;section className="name"&amp;gt;
                    &amp;lt;h1 className="font-bold text-3xl"&amp;gt;Your Name&amp;lt;/h1&amp;gt;
                    &amp;lt;h3 className="text-2xl"&amp;gt;Senior Product Designer&amp;lt;/h3&amp;gt;
                &amp;lt;/section&amp;gt;
                &amp;lt;section className="profile-photo mr-24"&amp;gt;
                    &amp;lt;Image
                        src="/images/avatar.svg"
                        height={90}
                        width={90}
                        alt="resume profile picture"
                    /&amp;gt;
                &amp;lt;/section&amp;gt;
            &amp;lt;/header&amp;gt;
            &amp;lt;main className="details flex justify-between gap-10"&amp;gt;
                &amp;lt;section className="basis-[60%]"&amp;gt;
                    &amp;lt;h4 className="uppercase text-[#73808D] text-sm tracking-widest mb-1"&amp;gt;
                        Experience
                    &amp;lt;/h4&amp;gt;
                    &amp;lt;div className="mb-6"&amp;gt;
                        &amp;lt;h1 className="font-bold mb-1"&amp;gt;
                            Senior UI/UX Product Designer
                        &amp;lt;/h1&amp;gt;
                        &amp;lt;h3 className="mb-1"&amp;gt;Enterprise Name&amp;lt;/h3&amp;gt;
                        &amp;lt;h4 className="text-[#73808D] text-sm"&amp;gt;
                            Aug 2018 - Present - 1 year, Paris
                        &amp;lt;/h4&amp;gt;
                        &amp;lt;p&amp;gt;
                            Directly collaborated with CEO and Product team to
                            prototype, design and deliver the UI and UX
                            experience with a lean design process: research,
                            design, test, and iterate.
                        &amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-6"&amp;gt;
                        &amp;lt;h1 className="font-bold mb-1"&amp;gt;
                            UI/UX Product Designer
                        &amp;lt;/h1&amp;gt;
                        &amp;lt;h3&amp;gt;Enterprise Name&amp;lt;/h3&amp;gt;
                        &amp;lt;h4 className="text-[#73808D] text-sm"&amp;gt;
                            Aug 2013 - Aug 2018 - 5 years, Paris
                        &amp;lt;/h4&amp;gt;
                        &amp;lt;p&amp;gt;
                            Lead the UI design with the accountability of the
                            design system, collaborated with product and
                            development teams on core projects to improve
                            product interfaces and experiences.
                        &amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-6"&amp;gt;
                        &amp;lt;h1 className="font-bold mb-1"&amp;gt;UI Designer&amp;lt;/h1&amp;gt;
                        &amp;lt;h3&amp;gt;Enterprise Name&amp;lt;/h3&amp;gt;
                        &amp;lt;h4 className="text-[#73808D] text-sm"&amp;gt;
                            Aug 2012 - July 2013, Paris
                        &amp;lt;/h4&amp;gt;
                        &amp;lt;p&amp;gt;
                            Designed mobile UI applications for Orange R&amp;amp;D
                            departement, BNP Paribas, La Poste, Le Cned...
                        &amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-6"&amp;gt;
                        &amp;lt;h1 className="font-bold mb-1"&amp;gt;Graphic Designer&amp;lt;/h1&amp;gt;
                        &amp;lt;h3&amp;gt;Enterprise Name&amp;lt;/h3&amp;gt;
                        &amp;lt;h4 className="text-[#73808D] text-sm"&amp;gt;
                            Sept 2010 - jul 2012 - 2 years, Paris
                        &amp;lt;/h4&amp;gt;
                        &amp;lt;p&amp;gt;
                            Designed print and web applications for Pau Brasil,
                            Renault, Le théatre du Mantois, La mairie de Mantes
                            la Ville...
                        &amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;h4 className="uppercase text-[#73808D] text-sm tracking-widest mb-1"&amp;gt;
                        Education
                    &amp;lt;/h4&amp;gt;
                    &amp;lt;div className="mb-6"&amp;gt;
                        &amp;lt;h1 className="font-bold mb-1"&amp;gt;
                            Bachelor European in Graphic Design
                        &amp;lt;/h1&amp;gt;
                        &amp;lt;h3&amp;gt;School Name&amp;lt;/h3&amp;gt;
                        &amp;lt;h4 className="text-[#73808D] text-sm"&amp;gt;
                            2009 - 2010, Bagnolet
                        &amp;lt;/h4&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-6"&amp;gt;
                        &amp;lt;h1 className="font-bold mb-1"&amp;gt;
                            BTS Communication Visuelle option Multimédia
                        &amp;lt;/h1&amp;gt;
                        &amp;lt;h3&amp;gt;School Name&amp;lt;/h3&amp;gt;
                        &amp;lt;h4 className="text-[#73808D] text-sm"&amp;gt;
                            2007 - 2009, Bagnolet
                        &amp;lt;/h4&amp;gt;
                    &amp;lt;/div&amp;gt;
                &amp;lt;/section&amp;gt;
                &amp;lt;section className="text-[#73808D] basis-[30%]"&amp;gt;
                    &amp;lt;div className="contact mb-4"&amp;gt;
                        &amp;lt;p&amp;gt;yourmail@gmail.com&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;+33 6 33 33 33 33&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;Vernouillet&amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-4"&amp;gt;
                        &amp;lt;h3 className="font-bold"&amp;gt;Industry Knowledge&amp;lt;/h3&amp;gt;
                        &amp;lt;p&amp;gt;Industry Knowledge&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;Product Design&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;User Interface&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;User Experience&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;Interaction Design&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-4"&amp;gt;
                        &amp;lt;h3 className="font-bold"&amp;gt;Tools &amp;amp; Technologies&amp;lt;/h3&amp;gt;
                        &amp;lt;p&amp;gt;
                            Figma, Sketch, Protopie, Framer, Invision, Abstract,
                            Zeplin, Google Analytics, Amplitude, Fullstory...
                        &amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-4"&amp;gt;
                        &amp;lt;h3 className="font-bold"&amp;gt;Other Skills&amp;lt;/h3&amp;gt;
                        &amp;lt;p&amp;gt;HTML, CSS, jQuery&amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-4"&amp;gt;
                        &amp;lt;h3 className="font-bold"&amp;gt;Languages&amp;lt;/h3&amp;gt;
                        &amp;lt;p&amp;gt;French (native)&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;English (professionnal)&amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-4"&amp;gt;
                        &amp;lt;h3 className="font-bold"&amp;gt;Social&amp;lt;/h3&amp;gt;
                        &amp;lt;p&amp;gt;yoursite.com&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;linkedin.com/in/yourname&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;dribbble.com/yourname&amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                &amp;lt;/section&amp;gt;
            &amp;lt;/main&amp;gt;
        &amp;lt;/div&amp;gt;
    );
};

export default HomePage;

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

&lt;/div&gt;



&lt;p&gt;From the code above, you can see that you need a photo, for now, it will be hosted on Next.js Project but it will be changed later, so simply go to the &lt;code&gt;public&lt;/code&gt; folder, create a new folder named &lt;code&gt;images&lt;/code&gt; and save a portrait of your choice to use as a sample profile photo.&lt;/p&gt;

&lt;p&gt;Moving on, go to the &lt;code&gt;layout.tsx&lt;/code&gt; file under the app folder and change the background color so we get a more beautiful feel and focus on the resume section.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;body className={`${inter.className} overflow-x-hidden bg-[#E5E5E5]`}&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that, your page should have come to life:&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%2Fr28hbt16a7pxlr3qytv0.png" 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%2Fr28hbt16a7pxlr3qytv0.png" alt="Image description" width="800" height="734"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great, now it's time to set up BCMS and create the resume data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up BCMS and creating Resume Content
&lt;/h2&gt;

&lt;p&gt;Navigate to &lt;a href="https://app.thebcms.com" rel="noopener noreferrer"&gt;BCMS Cloud&lt;/a&gt; to login to your BCMS account. On the left side of your dashboard, you see a dropdown containing a list of your BCMS instances (also called projects).&lt;/p&gt;

&lt;p&gt;BCMS instance is just like a box or repository containing your application data, so this is the backend for that particular application. You can create different instances for different applications.&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%2F98gv76f0ygqbu2rt4csq.png" 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%2F98gv76f0ygqbu2rt4csq.png" alt="Image description" width="321" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If this is your first time using BCMS, you should see only one instance there.&lt;/p&gt;

&lt;h3&gt;
  
  
  So how do you create data for your application?
&lt;/h3&gt;

&lt;p&gt;The principle behind BCMS data creation is no different from the ones you’ve been using, be it your custom-made backend with either PHP or Nodejs or another CMS if any: You create a data model, this is where you specify the inputs you need, and the property types for that input and then you create data based on those data models.&lt;/p&gt;

&lt;p&gt;On the left side of your BCMS dashboard is an administration panel containing Templates, Widgets, and Groups…., and then further down, you will find entries. &lt;/p&gt;

&lt;p&gt;What does this all mean, and how do they come together?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://thebcms.com/docs/inside-bcms/templates" rel="noopener noreferrer"&gt;Templates&lt;/a&gt;&lt;/strong&gt; - This is your content structure, your building block. Here is where you spell out what fields you need for the section you’re creating a template for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://thebcms.com/docs/inside-bcms/entries" rel="noopener noreferrer"&gt;Entries&lt;/a&gt; -&lt;/strong&gt; An Entry is a simple record of a template, a dynamic piece of content that follows the content structure you defined in your template.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://thebcms.com/docs/inside-bcms/groups" rel="noopener noreferrer"&gt;Groups&lt;/a&gt; -&lt;/strong&gt; Groups in BCMS are reusable building blocks made of multiple &lt;a href="https://thebcms.com/docs/inside-bcms/properties" rel="noopener noreferrer"&gt;properties&lt;/a&gt;. Groups can be included in any template, &lt;a href="https://thebcms.com/docs/inside-bcms/widgets" rel="noopener noreferrer"&gt;widget&lt;/a&gt;, or other group.&lt;/p&gt;

&lt;p&gt;****Let’s see this in action.&lt;/p&gt;

&lt;h3&gt;
  
  
  Modelling Data in BCMS
&lt;/h3&gt;

&lt;p&gt;On your templates tab, you’ll find a blog template that was automatically generated upon the creation of this project using the CLI command up above. Since you’ve gotten rid of all blog-related files on your frontend app, it means the blog template is no longer useful to you. &lt;/p&gt;

&lt;p&gt;So, click on this template, and then click on edit template on the top right of the page, and then safely delete 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frv3bh3u632dnyelmpyb0.png" 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%2Frv3bh3u632dnyelmpyb0.png" alt="Image description" width="662" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let’s model the data I need for the resume.&lt;/p&gt;

&lt;p&gt;First, create a new template named resume. Select a single entry as you will only have just one resume, unlike a blog where you can have multiple blogs.&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%2Fadxkocb8gpmfdc8p5tbv.png" 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%2Fadxkocb8gpmfdc8p5tbv.png" alt="Image description" width="514" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So what is the data needed for this resume? &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name - String - Required&lt;/li&gt;
&lt;li&gt;Title - Automatically created by BCMS&lt;/li&gt;
&lt;li&gt;Profile Picture - Media - Required&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8nqo1zmnxl6r135eocpp.png" 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%2F8nqo1zmnxl6r135eocpp.png" alt="Image description" width="740" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Work Experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This will be a group. Groups in BCMS group &lt;a href="https://thebcms.com/blog/bcms-widgets-reusable-structured-content-tutorial" rel="noopener noreferrer"&gt;reusable pieces&lt;/a&gt; of fields together. To create a group, navigate to the group tab in your dashboard and click on "Create a new group".&lt;/p&gt;

&lt;p&gt;I will name this group "Work Experience" as it will hold information concerning work experience. The information it will hold is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Job Title - String - Required&lt;/li&gt;
&lt;li&gt;Enterprise Name - String - Required&lt;/li&gt;
&lt;li&gt;Work Duration - String - Required&lt;/li&gt;
&lt;li&gt;Work Description - Rich Text - Required&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcea5bicqqji6n0ckjiml.png" 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%2Fcea5bicqqji6n0ckjiml.png" alt="Image description" width="736" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now back to the Resume template, you can successfully link to this group, and it should be an array since it will be holding multiple work experiences.&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%2Ftkbm5hsy867sns0oxgbs.png" 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%2Ftkbm5hsy867sns0oxgbs.png" alt="Image description" width="703" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Education: Like the work experiences, this will also be a group holding similar data.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmvt3f7da0tougvs3z3x.png" 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%2Fxmvt3f7da0tougvs3z3x.png" alt="Image description" width="711" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create the group and link it to the resume template.&lt;/p&gt;

&lt;p&gt;Contact form information - This will be a group holding the contact information&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%2Fzwn8vgwj984snlys9mxj.png" 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%2Fzwn8vgwj984snlys9mxj.png" alt="Image description" width="736" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create the group and link it to the resume template.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Industry Knowledge - String, Array&lt;/li&gt;
&lt;li&gt;Tools and Technologies - Rich Text&lt;/li&gt;
&lt;li&gt;Other Skills - Rich Text&lt;/li&gt;
&lt;li&gt;Languages - String, Array&lt;/li&gt;
&lt;li&gt;Social - String, Array&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Congratulations, your template should look something like this at this point:&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%2F35tq4tnvbag0e50ow54n.png" 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%2F35tq4tnvbag0e50ow54n.png" alt="Image description" width="571" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next up, go to the entries tab and then click on the resume to create an entry, you can now write the actual resume data following the structure that you just defined in the template.&lt;/p&gt;

&lt;p&gt;Simply edit the fields there and after doing that click on the status drop-down on the right side of the page, change it to published, and then update.&lt;/p&gt;

&lt;p&gt;With that, you’ve successfully written your data and you’re ready to have it on your Next.js app.&lt;/p&gt;

&lt;p&gt;But before that, you need to update your API key permissions. Navigate to settings and then the API key, click on edit and you should see permissions for the newly created Resume template.&lt;/p&gt;

&lt;p&gt;Toggle the ones you need on, for this tutorial that will be “can get”. Without this permission, you will not be able to get resume data on your Nextjs frontend.&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%2Foputvkhdsbtu64x7zh3j.png" 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%2Foputvkhdsbtu64x7zh3j.png" alt="Image description" width="290" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fetching resume content from BCMS and rendering on the Next app.
&lt;/h2&gt;

&lt;p&gt;So how do you fetch data from BCMS in your Next.js app?&lt;/p&gt;

&lt;p&gt;Well, you saw a sneak peak, at the start of the project with the blog starter example. Now you’re gonna replicate the same thing but this time, you’re fetching the data for the resume.&lt;/p&gt;

&lt;p&gt;First, I need to create the resume types to let the Typescript know what I am expecting to get when fetching the data. When I first created the data, the BCMS CLI automatically connected to the BCMS instance got the blog entry, and then generated the types for me which is great.&lt;/p&gt;

&lt;p&gt;But that is not all… The CLI continues to generate types for me automatically when I add new templates and entries.&lt;/p&gt;

&lt;p&gt;To get these auto-generated types from BCMS all you have to do is stop the dev server and start it again, and BCMS will pick those new templates and entries and generate types for them.&lt;/p&gt;

&lt;p&gt;This is one of the great features BCMS offers developers to ease their tasks, so you don’t have to manually create types for your data, it is already handled for you. Really cool :).&lt;/p&gt;

&lt;h3&gt;
  
  
  Fetching the data
&lt;/h3&gt;

&lt;p&gt;To fetch BCMS data for your Nextjs application on the page.tsx file, import the types auto-generated for you by BCMS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { ResumeEntry, ResumeEntryMetaItem } from '../../bcms/types/ts';

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

&lt;/div&gt;



&lt;p&gt;And then on your HomePage function, before the return statement, you get the Resume using the bcms client installed for you when you set up the app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    const resume = (await bcms.entry.getAll('resume')) as ResumeEntry[];
    console.log(resume);

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

&lt;/div&gt;



&lt;p&gt;And you should be able to see the returned data in your terminal.&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%2F96ftxa8nys95usnoysua.png" 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%2F96ftxa8nys95usnoysua.png" alt="Image description" width="451" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also log more fields to see what you can get. For example, I’m gonna log the meta-object as it is the object that holds our entry.&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%2F8kz34mdruf3wa5ut33bv.png" 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%2F8kz34mdruf3wa5ut33bv.png" alt="Image description" width="579" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great, now you can use the data in your app. So I'm going to replace the dummy data with that from BCMS. You can copy the finished code below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React, { Fragment } from 'react';
import { bcms } from './bcms-client';
import { ResumeEntry, ResumeEntryMetaItem } from '../../bcms/types/ts';
import { Metadata } from 'next';
import { notFound } from 'next/navigation';
import Image from 'next/image';
import Link from 'next/link';
import { BCMSImage } from '@thebcms/components-react';

const pageTitle = 'Resume - My Simple Resume';
export const metadata: Metadata = {
    title: pageTitle,
    openGraph: {
        title: pageTitle,
    },
    twitter: {
        title: pageTitle,
    },
};

const HomePage: React.FC = async () =&amp;gt; {
    const resume = (await bcms.entry.getAll('resume')) as ResumeEntry[];
    if (!resume) {
        return notFound();
    }

    const data = {
        meta: resume[0].meta.en as ResumeEntryMetaItem,
    };

    const imgObj = resume[0].meta.en?.profile_picture;

    return (
        &amp;lt;div className="w-8/12 mx-auto mt-6 bg-white px-20 py-12"&amp;gt;
            &amp;lt;header className="flex flex-row justify-between mb-4"&amp;gt;
                &amp;lt;section className="name"&amp;gt;
                    &amp;lt;h1 className="font-bold text-3xl"&amp;gt;{data.meta.name}&amp;lt;/h1&amp;gt;
                    &amp;lt;h3 className="text-2xl"&amp;gt;{data.meta.title}&amp;lt;/h3&amp;gt;
                &amp;lt;/section&amp;gt;
                &amp;lt;section className="profile-photo mr-24"&amp;gt;
                    &amp;lt;BCMSImage
                        clientConfig={bcms.getConfig()}
                        media={imgObj}
                        className="object-cover rounded-2xl w-28"
                    /&amp;gt;
                &amp;lt;/section&amp;gt;
            &amp;lt;/header&amp;gt;
            &amp;lt;main className="details flex justify-between gap-10"&amp;gt;
                &amp;lt;section className="basis-[60%]"&amp;gt;
                    &amp;lt;h4 className="uppercase text-[#73808D] text-sm tracking-widest mb-1"&amp;gt;
                        Experience
                    &amp;lt;/h4&amp;gt;
                    {data.meta.work_experience.map((experience, index) =&amp;gt; {
                        return (
                            &amp;lt;div className="mb-6" key={index}&amp;gt;
                                &amp;lt;h1 className="font-bold mb-1"&amp;gt;
                                    {experience.job_title}
                                &amp;lt;/h1&amp;gt;
                                &amp;lt;h3 className="mb-1"&amp;gt;
                                    {experience.enterprise_name}
                                &amp;lt;/h3&amp;gt;
                                &amp;lt;h4 className="text-[#73808D] text-sm"&amp;gt;
                                    {experience.work_duration}
                                &amp;lt;/h4&amp;gt;
                                &amp;lt;p /&amp;gt;
                                &amp;lt;span
                                    dangerouslySetInnerHTML={{
                                        __html: experience.work_description
                                            .nodes[0].value,
                                    }}
                                /&amp;gt;
                            &amp;lt;/div&amp;gt;
                        );
                    })}
                    &amp;lt;h4 className="uppercase text-[#73808D] text-sm tracking-widest mb-1"&amp;gt;
                        Education
                    &amp;lt;/h4&amp;gt;
                    {data.meta.education.map((degree, index) =&amp;gt; {
                        return (
                            &amp;lt;div className="mb-6" key={index}&amp;gt;
                                &amp;lt;h1 className="font-bold mb-1"&amp;gt;
                                    {degree.degree_name}
                                &amp;lt;/h1&amp;gt;
                                &amp;lt;h3&amp;gt;{degree.school_name}&amp;lt;/h3&amp;gt;
                                &amp;lt;h4 className="text-[#73808D] text-sm"&amp;gt;
                                    {degree.duration_and_location}
                                &amp;lt;/h4&amp;gt;
                            &amp;lt;/div&amp;gt;
                        );
                    })}
                &amp;lt;/section&amp;gt;
                &amp;lt;section className="text-[#73808D] basis-[30%]"&amp;gt;
                    &amp;lt;div className="contact mb-4"&amp;gt;
                        &amp;lt;p&amp;gt;{data.meta.contact_information.email}&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;{data.meta.contact_information.phone_number}&amp;lt;/p&amp;gt;
                        &amp;lt;p&amp;gt;{data.meta.contact_information.location}&amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-4"&amp;gt;
                        &amp;lt;h3 className="font-bold"&amp;gt;Industry Knowledge&amp;lt;/h3&amp;gt;
                        {data.meta.industry_knowledge.map(
                            (knowledge, index) =&amp;gt; {
                                return &amp;lt;p key={index}&amp;gt;{knowledge}&amp;lt;/p&amp;gt;;
                            },
                        )}
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-4"&amp;gt;
                        &amp;lt;h3 className="font-bold"&amp;gt;Tools &amp;amp; Technologies&amp;lt;/h3&amp;gt;
                        &amp;lt;span
                            dangerouslySetInnerHTML={{
                                __html: data.meta.tools_and_technologies
                                    .nodes[0].value,
                            }}
                        /&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-4"&amp;gt;
                        &amp;lt;h3 className="font-bold"&amp;gt;Other Skills&amp;lt;/h3&amp;gt;
                        &amp;lt;span
                            dangerouslySetInnerHTML={{
                                __html: data.meta.other_skills.nodes[0].value,
                            }}
                        /&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-4"&amp;gt;
                        &amp;lt;h3 className="font-bold"&amp;gt;Languages&amp;lt;/h3&amp;gt;
                        {data.meta.languages.map((language, index) =&amp;gt; {
                            return &amp;lt;p key={index}&amp;gt;{language}&amp;lt;/p&amp;gt;;
                        })}
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div className="mb-4 flex flex-col"&amp;gt;
                        &amp;lt;h3 className="font-bold"&amp;gt;Social&amp;lt;/h3&amp;gt;
                        {data.meta.social.map((social, index) =&amp;gt; {
                            return (
                                &amp;lt;Link key={index} href={social}&amp;gt;
                                    {social}
                                &amp;lt;/Link&amp;gt;
                            );
                        })}
                    &amp;lt;/div&amp;gt;
                &amp;lt;/section&amp;gt;
            &amp;lt;/main&amp;gt;
        &amp;lt;/div&amp;gt;
    );
};

export default HomePage;

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

&lt;/div&gt;



&lt;p&gt;With that, you’ve successfully queried data from the BCMS backend and rendered it on your website. If you check your browser now, you will see the content being displayed.&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%2Ffq0wabb0rgjb77h1q51b.png" 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%2Ffq0wabb0rgjb77h1q51b.png" alt="Image description" width="800" height="791"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment
&lt;/h2&gt;

&lt;p&gt;To deploy your Next.js app, you need to use a service called Vercel. It's a straightforward way to make your website live on the internet. Follow &lt;a href="https://nextjs.org/learn-pages-router/basics/deploying-nextjs-app/deploy" rel="noopener noreferrer"&gt;this tutorial&lt;/a&gt; to learn how to use Vercel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;To sum it up, creating a resume using NextJS headless CMS is simple and powerful. BCMS headless CMS helps you manage your resume’s content, while Next.js makes sure your website works well. &lt;/p&gt;

&lt;p&gt;The resume you've created is not just for show – it's a starting point for you to explore what BCMS can do. With BCMS, you can easily adapt your website to different needs and connect it with other tools.&lt;/p&gt;

&lt;p&gt;You have created this one-page resume but can take it further by making it multiple. That means in the resume template, you can make it a non-single entry to create multiple resumes for different needs. For example, you could create a Java resume and then a UI design resume that you show to different recruiters.&lt;/p&gt;

&lt;p&gt;BCMS makes this process really simple, by just toggling off a single entry in the template, you will be able to create multiple resumes, and then on your Nextjs app, you get those different resumes and display them on different URLs just like a blog works.&lt;/p&gt;

&lt;p&gt;Well, with that, I will say happy coding, and let’s see what you can achieve with Nextjs and BCMS.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Mythbusting: Gatsby isn’t that bad. Maybe your expectations are.</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Fri, 20 Dec 2024 15:52:02 +0000</pubDate>
      <link>https://dev.to/momciloo/mythbusting-gatsby-isnt-that-bad-maybe-your-expectations-are-1d6k</link>
      <guid>https://dev.to/momciloo/mythbusting-gatsby-isnt-that-bad-maybe-your-expectations-are-1d6k</guid>
      <description>&lt;p&gt;It’s easy to hate &lt;a href="https://thebcms.com/blog/why-developers-hate-gatsby" rel="noopener noreferrer"&gt;Gatsby.js.&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you hang around developer communities long enough, you’ll hear the same complaints repeated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"The builds are too slow."&lt;/li&gt;
&lt;li&gt;"GraphQL is a nightmare."&lt;/li&gt;
&lt;li&gt;"It’s over-engineered."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But let’s take a step back and look at these gripes with a fresh perspective.&lt;/p&gt;

&lt;p&gt;Maybe, just maybe, the problem isn’t Gatsby. Maybe it’s the developers who are quick to throw in the towel.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most common reasons developers think Gatsby is bad
&lt;/h2&gt;

&lt;p&gt;Here’s why Gatsby isn’t as bad as some people make it out to be, and why you might need to rethink your approach before hopping on the hate train.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. GraphQL: Not your enemy
&lt;/h3&gt;

&lt;p&gt;One of the loudest complaints about Gatsby is its reliance on GraphQL. Developers say it’s overkill for fetching simple data, too complicated for beginners, and unnecessary.&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%2Fxlypb51m6b3qcan2c4it.jpeg" 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%2Fxlypb51m6b3qcan2c4it.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But here’s the thing: GraphQL is incredibly powerful once you get the hang of it. Sure, it takes a little bit of learning, but once you get comfortable with it, you realize how flexible and efficient it can be.&lt;/p&gt;

&lt;p&gt;GraphQL’s real power shows up when your site has complex, multi-source data requirements. Instead of fighting with multiple REST APIs or awkwardly looping through JSON files, you get a structured query language that retrieves exactly the data you need- nothing more, nothing less.&lt;/p&gt;

&lt;p&gt;With GraphQL, you can pull exactly the data you need and no more, reducing over-fetching and improving performance. For complex content-heavy sites, this becomes a lifesaver, and let’s not forget that many modern apps are moving toward GraphQL anyway. So why not embrace 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ustdgin2n3pz54gzdhn.jpeg" 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%2F2ustdgin2n3pz54gzdhn.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Precision&lt;/strong&gt;: You avoid over-fetching, and this reduces payload size.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility&lt;/strong&gt;: Whether your data comes from Markdown, CMS, or external APIs, GraphQL abstracts it into a single data layer.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Learning curve&lt;/strong&gt;: Admittedly, if you’ve never touched GraphQL, it’s a headache at first. It's like learning SQL from scratch but in JSON format.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Stop trying to avoid it. Gatsby’s whole ecosystem thrives on GraphQL because it’s built to handle complex data structures. If you’re building a small, flat-file blog and complaining about GraphQL, maybe Gatsby isn’t the right choice. But if you’re building something content-heavy, it’s indispensable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip&lt;/strong&gt;: Start small. Learn the basics of querying with Gatsby’s starter examples, then expand your knowledge. It’s worth it in the long run.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Build times: It’s called optimizing
&lt;/h3&gt;

&lt;p&gt;Yes, Gatsby builds can get slow on larger sites. But most developers aren’t optimizing their builds properly before complaining. Out-of-the-box Gatsby provides &lt;em&gt;a lot&lt;/em&gt; of optimizations: image optimization, code splitting, lazy loading—but it also expects you to take some responsibility for fine-tuning things.&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%2Fuch8o6wtppovcumn4ln4.jpeg" 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%2Fuch8o6wtppovcumn4ln4.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are ways to speed up those long builds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Incremental builds&lt;/strong&gt;: By leveraging &lt;a href="https://www.gatsbyjs.com/docs/reference/cloud/" rel="noopener noreferrer"&gt;Gatsby Cloud&lt;/a&gt; or configuring your infrastructure, you can take advantage of incremental builds that only rebuild what’s changed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selective plugins&lt;/strong&gt;: Use only the truly necessary plugins, and keep an eye on what’s slowing things down. Many developers blindly install plugins and then wonder why things aren’t running smoothly.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67jualelxnn85tlhowjv.jpeg" 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%2F67jualelxnn85tlhowjv.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Take control. Use &lt;strong&gt;Incremental builds&lt;/strong&gt; in Gatsby Cloud or manually configure your build process to optimize only the sections that change. Get smarter with your queries—don’t pull in everything from GraphQL if you don’t need it. &lt;/p&gt;

&lt;p&gt;Remember, Gatsby offers &lt;strong&gt;Selective plugins&lt;/strong&gt;, so make sure you aren’t blindly installing packages that slow everything down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip&lt;/strong&gt;: Use tools like Gatsby’s Build Analysis to track where your build time goes. You might be surprised that it’s not Gatsby itself, but a plugin or heavy content.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.&lt;/strong&gt; Gatsby plugins: Not the problem, your choices are
&lt;/h3&gt;

&lt;p&gt;Another common complaint is Gatsby’s plugin ecosystem. Developers claim it’s bloated, confusing, and prone to breakage.&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%2Faqlej02upal570fp5zwf.jpeg" 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%2Faqlej02upal570fp5zwf.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s a harsh truth: &lt;strong&gt;Most plugins don’t break Gatsby&lt;/strong&gt;. They break your site because you installed them without properly vetting them.&lt;/p&gt;

&lt;p&gt;But let’s be honest: most of these issues arise from poor plugin choices or installing a plugin for something you don’t fully understand.&lt;/p&gt;

&lt;p&gt;If you’re facing conflicts, breaking changes, or bugs from plugins, it might be time to reconsider how you’re using them.&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%2F0mbysru86rbndf45btfu.jpeg" 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%2F0mbysru86rbndf45btfu.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Read the docs. Vet your plugins properly before installing them into a production environment. Make sure they’re actively maintained and compatible with the version of Gatsby you’re running.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip&lt;/strong&gt;: Don’t go plugin-crazy. Just because a plugin exists doesn’t mean you need it. Keep your plugin ecosystem lean, and only install what’s truly necessary.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4.&lt;/strong&gt; Steep learning curve? Sounds more like laziness
&lt;/h3&gt;

&lt;p&gt;A lot of developers complain that Gatsby has a steep learning curve, especially for those unfamiliar with React or GraphQL.&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%2F0s1tzyv1zz3ovknom0yc.jpeg" 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%2F0s1tzyv1zz3ovknom0yc.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s a reality check: if you’re in development, you’re constantly learning. Frameworks evolve. Tools change. If you’re stuck in a mindset where everything has to be easy, you’re going to hit a wall with any modern tool. Gatsby is no different.&lt;/p&gt;

&lt;p&gt;Learning Gatsby does take effort, especially if you’re new to React or GraphQL. But let’s not act like other frameworks don’t have learning curves, too. &lt;/p&gt;

&lt;p&gt;If you think Gatsby’s too hard, wait until you try integrating multiple data sources in Next.js or dealing with the more complex server-side rendering in Nuxt.&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%2Fn8zh14lam9rvmpj5dz06.jpeg" 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%2Fn8zh14lam9rvmpj5dz06.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gatsby teaches you more than just Gatsby. &lt;/p&gt;

&lt;p&gt;By learning Gatsby, you improve your skills in React, GraphQL, and static site generation—three crucial areas for modern web dev.&lt;/p&gt;

&lt;p&gt;Accept that development is a learning process. If you aren’t willing to invest the time to learn Gatsby, then maybe you’re not cut out for complex web projects. Frameworks evolve, and if you’re not evolving with them, that’s not Gatsby’s fault.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Alternatives are great—but that doesn’t make Gatsby bad&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Yes, there are alternatives to Gatsby. Next.js, Nuxt, and SvelteKit—all offer different strengths and approaches. But let’s not pretend that using one of these tools automatically makes Gatsby bad.&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%2Fvsk5fch79lamhk1vyo42.jpeg" 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%2Fvsk5fch79lamhk1vyo42.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gatsby excels at what it was designed for &lt;a href="https://thebcms.com/blog/gatsby-starters-templates" rel="noopener noreferrer"&gt;blazing-fast static sites&lt;/a&gt; with built-in performance and SEO optimizations.&lt;/p&gt;

&lt;p&gt;The fact that other tools exist doesn’t mean Gatsby is doing something wrong. Different tools for different jobs, right?&lt;/p&gt;

&lt;p&gt;Use the right tool for the right job. Gatsby excels at content-heavy sites where SEO and performance are key. If you’re building an app with constant data refreshes, Gatsby probably isn’t the best choice, and that’s fine.&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%2Fhf3ksttpv5lbj0p8fa12.jpeg" 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%2Fhf3ksttpv5lbj0p8fa12.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Learn more: &lt;a href="https://thebcms.com/blog/gatsby-vs-next-vs-nuxt-key-features" rel="noopener noreferrer"&gt;Gatsby vs Next vs Nuxt: Key Features and Differences&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;6&lt;/strong&gt;. SEO: Gatsby’s strength, not weakness
&lt;/h3&gt;

&lt;p&gt;One of Gatsby’s biggest selling points is its SEO-friendliness. As a static site generator, it handles things like pre-rendering and meta tags out of the box, ensuring that your pages load fast and rank well. Yet, some developers claim that adding dynamic content and third-party integrations makes SEO a hassle.&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%2Fwq8sdobphux33xb4ghgp.jpeg" 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%2Fwq8sdobphux33xb4ghgp.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s the thing: that’s true of any static site generator. The moment you bring in client-side rendering or complex dynamic features, you have to put in extra work to ensure your SEO doesn’t tank. &lt;/p&gt;

&lt;p&gt;Gatsby provides tools and guides to help you navigate this—it’s just a matter of understanding how to use them properly.&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%2F99m3wpxgcytqfjd0xiwo.jpeg" 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%2F99m3wpxgcytqfjd0xiwo.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Gatsby is perfect for complex content-heavy sites
&lt;/h3&gt;

&lt;p&gt;Developers often criticize Gatsby for being unsuitable for content-heavy sites due to several common concerns, which stem from issues around performance, scalability, and data management. &lt;/p&gt;

&lt;p&gt;Here’s a breakdown of why many developers think Gatsby isn’t good for content-heavy sites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slow build times as content grows&lt;/li&gt;
&lt;li&gt;GraphQL dependence&lt;/li&gt;
&lt;li&gt;Slow image processing&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fant02p94tfbzxkjnzk62.jpeg" 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%2Fant02p94tfbzxkjnzk62.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re working on a site with a ton of content, Gatsby is actually one of the best tools you can use. Gatsby site can pull data from multiple sources (APIs, Content management systems, Markdown, etc.) and stitch them together seamlessly is a godsend. &lt;/p&gt;

&lt;p&gt;For developers dealing with large-scale content projects, Gatsby’s data layer and GraphQL integration make it easier to manage and query that content.&lt;/p&gt;

&lt;p&gt;Instead of patching together REST APIs and traditional databases, Gatsby simplifies the process. It’s &lt;em&gt;because&lt;/em&gt; of this flexibility that it’s favored by content-heavy sites like blogs, news platforms, and e-commerce stores.&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%2Fjpcbw3rrjn9b57cgzayo.jpeg" 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%2Fjpcbw3rrjn9b57cgzayo.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Solution: Be strategic with your data fetching. Start with smaller queries and add complexity only when necessary. Gatsby gives you the tools to handle large-scale data elegantly, but it’s on you to &lt;strong&gt;optimize those queries&lt;/strong&gt; and ensure you’re not pulling in more data than you need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip&lt;/strong&gt;: Use tools like &lt;a href="https://www.gatsbyjs.com/docs/how-to/querying-data/running-queries-with-graphiql/" rel="noopener noreferrer"&gt;Gatsby’s GraphiQL&lt;/a&gt; interface to test and refine your queries. This will save you from pulling unnecessary data, which can dramatically improve both performance and build times.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;8.&lt;/strong&gt; Developer experience: better than you think
&lt;/h3&gt;

&lt;p&gt;Developers love to talk about DX (developer experience) and how it should be seamless and painless.&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%2F3p7i6872102e0s5kyde2.jpeg" 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%2F3p7i6872102e0s5kyde2.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gatsby isn’t perfect, but let’s not ignore the fact that it comes with some fantastic DX features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hot reloading&lt;/strong&gt;: Update your content and see it instantly without refreshing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensive documentation&lt;/strong&gt;: Gatsby’s docs are pretty solid, covering everything from installation to troubleshooting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in performance optimizations&lt;/strong&gt;: You don’t have to reinvent the wheel to make your site fast. Gatsby’s default performance tooling takes care of that.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The occasional hiccup doesn’t mean Gatsby’s DX is bad—it just means it’s complex. If you’re willing to understand how it works, it makes life easier in the long run.&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%2F2h3qkelnnuwo1tinr5fg.jpeg" 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%2F2h3qkelnnuwo1tinr5fg.jpeg" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  So, maybe It’s not Gatsby after all
&lt;/h2&gt;

&lt;p&gt;At the end of the day, Gatsby isn’t the monster some developers make it out to be. It’s a powerful, flexible, framework that helps you build fast, scalable, and optimized static sites. If you’re having a hard time with it, it’s worth considering whether the problem is the tool or how you’re using it.&lt;/p&gt;

&lt;p&gt;Maybe the hate stems from frustration, but that doesn’t mean Gatsby is inherently bad. Like any tool, it requires learning, patience, and effort. And in many cases, the so-called “downsides” of Gatsby are solvable problems that might require you to adapt, learn, and improve.&lt;/p&gt;

&lt;p&gt;Want to give a Gatsby a chance? Try headless BCMS as your &lt;a href="https://thebcms.com/gatsby-cms" rel="noopener noreferrer"&gt;Gatsby CMS&lt;/a&gt; or use free code starters to start your new open-source project. Find codes at our &lt;a href="https://github.com/bcms/starters/tree/master/gatsby" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why developers love to hate Gatsby.js instead of using it</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Wed, 18 Dec 2024 15:16:27 +0000</pubDate>
      <link>https://dev.to/momciloo/why-developers-love-to-hate-gatsbyjs-instead-of-using-it-12pf</link>
      <guid>https://dev.to/momciloo/why-developers-love-to-hate-gatsbyjs-instead-of-using-it-12pf</guid>
      <description>&lt;p&gt;Let’s be honest: sometimes, it’s easier to hate on something than to give it a fair shot. Hate Gatsby.js seems to be one of those tools in the development world that people either swear by or go out of their way to bash. But why does it attract so much shade?&lt;/p&gt;

&lt;p&gt;The truth is, Gatsby makes it easy for developers to hate on it, and that says more about devs than it does about the framework itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is it easy to hate Gatsby.js
&lt;/h2&gt;

&lt;p&gt;Here’s why it's easier to jump on the hate train instead of giving Gatsby the credit it probably deserves.&lt;/p&gt;

&lt;h3&gt;
  
  
  It's got "Overkill" written all over it
&lt;/h3&gt;

&lt;p&gt;First, Gatsby is often seen as a massive over-engineering project wrapped in a trendy package. It’s the kind of tool that feels like it’s trying too hard to be “everything you’ll ever need.”&lt;/p&gt;

&lt;p&gt;For simple static sites, Gatsby can be like showing up to a casual backyard BBQ wearing a tuxedo. Do we need GraphQL just to fetch some Markdown files? Probably not. But Gatsby insists on it anyway.&lt;/p&gt;

&lt;p&gt;Gatsby treats GraphQL like a hammer for every nail. Need to pull in some data? Cool, here’s GraphQL—now go write a query even if a simple REST fetch would do. Sure, it’s “powerful,” but it’s also complete overkill for small projects. Most devs don’t need GraphQL for &lt;strong&gt;99% of use cases&lt;/strong&gt;. What they need is simplicity. But Gatsby insists on complexity like it’s a badge of honor. &lt;/p&gt;

&lt;p&gt;It’s almost as if someone sat down and thought, “&lt;em&gt;How can we make this more painful than it needs to be?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And they did. &lt;/p&gt;

&lt;p&gt;You thought Gatsby was a straightforward React framework? Think again. Between its &lt;strong&gt;convoluted &lt;a href="https://www.gatsbyjs.com/docs/how-to/custom-configuration/add-custom-webpack-config/" rel="noopener noreferrer"&gt;Webpack config&lt;/a&gt;&lt;/strong&gt;, &lt;a href="https://www.notion.so/Why-do-developers-hate-WordPress-and-why-are-they-so-wrong-15e9c9f2061c4e4399ab8891cdd14ffb?pvs=21" rel="noopener noreferrer"&gt;&lt;strong&gt;Babel setup&lt;/strong&gt;&lt;/a&gt;, and custom GraphQL layer, you’ll spend more time configuring than coding. &lt;/p&gt;

&lt;p&gt;Gatsby is supposed to help devs build faster, but it feels more like it’s designed to make sure you stay buried under layers of tooling forever.&lt;/p&gt;

&lt;p&gt;For many devs, the thought of wrestling with GraphQL and configuring a complex build pipeline for what should be a straightforward static site feels like a punishment, not a feature.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Plugin hell
&lt;/h3&gt;

&lt;p&gt;“Just install a plugin” — every Gatsby fan ever. Sure, Gatsby's plugin ecosystem looks great from the outside, but here’s the reality: &lt;strong&gt;you’re going to end up in dependency hell&lt;/strong&gt; sooner or later. And by sooner, I mean on day one.&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%2Figpgdslizzg67nurkkf0.png" 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%2Figpgdslizzg67nurkkf0.png" alt="Image description" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Installing plugins becomes a necessity rather than a choice, and before you know it, your project is bloated with dependencies you barely understand. And let’s not even talk about when these plugins break, which they often do, leaving you to sift through GitHub issues and Stack Overflow for some solution.&lt;/p&gt;

&lt;p&gt;You want to build a simple blog, but suddenly, you’re stuck solving plugin version conflicts. You’ve got one plugin needing &lt;code&gt;gatsby-plugin-sharp&lt;/code&gt; at version X and another plugin that breaks if you’re not on version Y. &lt;/p&gt;

&lt;p&gt;Congratulations, your simple build now feels like you’re &lt;strong&gt;diffusing a bomb&lt;/strong&gt;. Why are we doing this again?&lt;/p&gt;

&lt;p&gt;It's like being trapped in IKEA with a complex piece of furniture that has missing screws and instructions in Swedish—yes, you’ll probably figure it out, but was it worth the headache?&lt;/p&gt;

&lt;h3&gt;
  
  
  Build time slog
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://thebcms.com/blog/static-site-generation-vs-server-side-rendering" rel="noopener noreferrer"&gt;Static site generation&lt;/a&gt; is supposed to make your life easier, right? Well, with Gatsby, that’s true... until it isn’t.&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%2Fqbxhdgh88n1rih0kvzof.gif" 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%2Fqbxhdgh88n1rih0kvzof.gif" alt="Image description" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gatsby loves to brag about its blazing speed—until you actually build something of substance. The more data you add, the more you’ll be wondering if Gatsby is secretly mining crypto while you wait. &lt;/p&gt;

&lt;p&gt;A few blog posts? Fine, 10-second builds. &lt;/p&gt;

&lt;p&gt;But the second you introduce real-world complexity like dynamic data or multiple data sources, the build times skyrocket. What’s that? &lt;strong&gt;Incremental builds&lt;/strong&gt;? Sure, if they actually worked reliably.&lt;/p&gt;

&lt;p&gt;As if local builds weren’t bad enough, Gatsby’s build times murder your CI/CD pipelines. Need to deploy updates frequently? Not with Gatsby. Unless your company is willing to wait 30 minutes every time you push a change, you might as well grab a deck of cards while your pipeline runs.&lt;/p&gt;

&lt;p&gt;You can keep playing your fav card game because Gatsby doesn’t allow you to optimize the build process.&lt;/p&gt;

&lt;p&gt;Gatsby has its own way of doing things, and if you don’t like it, tough luck. You’re stuck waiting through long build processes while Gatsby churns through every single page, even the ones that haven’t changed.&lt;/p&gt;

&lt;p&gt;Why put up with this when you could be using a framework that doesn’t make you want to take up knitting while your builds process?&lt;/p&gt;

&lt;h3&gt;
  
  
  "Better" Alternatives
&lt;/h3&gt;

&lt;p&gt;Next.js exists. Nuxt.js exists. SvelteKit exists. Heck, even Jekyll still exists. These are all frameworks that do a lot of what Gatsby does but without the overwhelming baggage.&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%2F3wp6hp0cmffx5qtfsng4.jpeg" 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%2F3wp6hp0cmffx5qtfsng4.jpeg" alt="Image description" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They don’t force you into the same rigid structure. They don’t bog you down with unnecessary complexity for simple tasks. The moment you realize there’s something better—or at least more intuitive—for your specific use case, the Gatsby appeal quickly fades.&lt;/p&gt;

&lt;p&gt;Gatsby’s not bad at what it does, but it's not exactly irreplaceable, either.&lt;/p&gt;

&lt;p&gt;Read about all the differences: &lt;a href="https://thebcms.com/blog/gatsby-vs-next-vs-nuxt-key-features" rel="noopener noreferrer"&gt;Gatsby vs Next vs Nuxt: Key Features and Differences&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Developer Experience is not as smooth as promised
&lt;/h3&gt;

&lt;p&gt;Let’s talk DX (developer experience), the buzzword we’re all sick of hearing but still care about.&lt;/p&gt;

&lt;p&gt;Gatsby claims to provide a great developer experience with hot-reloading, local dev servers, and plenty of plugins to speed up common tasks. But then reality kicks in: hot-reloading doesn’t always work, the dev server crashes occasionally, and some plugins cause more headaches than they solve.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hot-reloading failure: Hot-reloading is a lie Gatsby tells to keep you on the hook. &lt;strong&gt;You’ll spend more time waiting for hot-reloads than actually coding&lt;/strong&gt;. And when it stops working (which it frequently does), you’ll be forced to restart your entire dev server, completely killing your flow.&lt;/li&gt;
&lt;li&gt;Weird, random build errors: Ever been blindsided by Gatsby throwing an error for no clear reason? “Error in plugin 'gatsby-transformer-remark'. Please see your config.” But the config is fine. You didn’t change anything! The framework just decided it had enough of your project and now refuses to cooperate. You’ll spend &lt;strong&gt;hours debugging nonsense&lt;/strong&gt; like this instead of building features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a framework promises you a seamless experience and then delivers something half-baked, as a developer, nothing's worse than a framework that promises a smooth experience but &lt;strong&gt;delivers frustration&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenging serverless and dynamic integrations
&lt;/h3&gt;

&lt;p&gt;Gatsby shines when it's building out static sites, but things get murky when you need serverless functions, authentication, or dynamic data that updates in real time. Sure, you &lt;em&gt;can&lt;/em&gt; get these things to work, but Gatsby often feels like it's working against you when you try to push it beyond static content.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Static first, dynamic last&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Gatsby is built on the philosophy of &lt;strong&gt;static site generation&lt;/strong&gt;, which means it’s designed to pre-build everything during the build process. That’s awesome for performance, but it’s terrible when you need dynamic functionality like user authentication, serverless functions, or live data fetching.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Real-time updates? Not happening.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since Gatsby generates your site at build time, &lt;strong&gt;any data that changes after the build won’t be reflected until the next build&lt;/strong&gt;. This means you’re stuck rebuilding your site every time you want to update content. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Server-rendering support… Maybe not the best feature&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gatsby &lt;em&gt;tries&lt;/em&gt; to offer server-side rendering (SSR), but if you need dynamic routing, session-based data, or real-time user interaction, you’ll end up wrestling with Gatsby’s limitations or turning to Next.js, which handles SSR much more gracefully. Gatsby’s "SSR" support is more of a workaround compared to Next.js, where it’s been baked in from the beginning.&lt;/p&gt;

&lt;p&gt;Why Gatsby's SSR is bad? &lt;/p&gt;

&lt;p&gt;While Gatsby introduced SSR support with version 4, it’s still primarily optimized for static site generation (SSG). Here’s why Gatsby's SSR implementation is not up to par:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt;: Gatsby’s SSR introduces additional server-side processing time. Static pages built ahead of time are fast, but SSR pages are rendered dynamically, which leads to slower response times and poor performance, especially for larger sites.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cold start delays&lt;/strong&gt;: Gatsby’s SSR can suffer from cold start delays, particularly on serverless platforms. These delays mean the first request to a page can take noticeably longer, which is a significant drawback for sites with real-time data or frequent content updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugins&lt;/strong&gt;: Most of Gatsby’s plugins and tools are designed around static content. This means that many plugins don’t work as intended when using SSR, causing compatibility issues and headaches for developers trying to mix &lt;a href="https://thebcms.com/blog/static-site-generation-vs-server-side-rendering" rel="noopener noreferrer"&gt;SSG and SSR&lt;/a&gt; workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data fetching&lt;/strong&gt;: When switching to SSR, you have to move away from the well-documented &lt;code&gt;graphql&lt;/code&gt; queries and use the more complex &lt;code&gt;getServerData&lt;/code&gt; API. This introduces another layer of complexity when dealing with data fetching, especially if some pages are static and others are server-rendered.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As you can see it’s not impossible to handle dynamic content in Gatsby—but it sure doesn’t feel like it was designed for it.&lt;/p&gt;

&lt;h3&gt;
  
  
  SEO, but at what cost?
&lt;/h3&gt;

&lt;p&gt;Gatsby is supposed to be a dream for SEO, especially since it’s built as a static site generator. &lt;/p&gt;

&lt;p&gt;And sure, &lt;strong&gt;on paper&lt;/strong&gt;, a fully pre-rendered static site should be an SEO dream: fast load times, pre-built HTML, and minimal JavaScript execution. But when you start adding dynamic content and third-party scripts without messing up your SEO becomes a challenge.&lt;/p&gt;

&lt;p&gt;Here are the challenges: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Static-first SEO doesn’t play well with dynamic content&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gatsby’s static site generation is fantastic for SEO &lt;strong&gt;if&lt;/strong&gt; your content never changes. But as soon as you start working with &lt;strong&gt;dynamic content&lt;/strong&gt;, Gatsby’s SEO benefits become a lot harder to manage.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic content loaded client-side&lt;/strong&gt;: Because Gatsby generates everything statically at build time, &lt;strong&gt;any content that’s fetched or rendered client-side isn’t available to search engine crawlers&lt;/strong&gt;. This means that if your site depends on API data that’s pulled in via client-side JavaScript, search engines like Google won’t see it—leading to &lt;strong&gt;huge SEO blind spots&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Late-loading content&lt;/strong&gt;: You might think, “Well, I’ll just load dynamic content on the client and use JavaScript for SEO tags.” Sure, but here’s the problem: &lt;strong&gt;crawlers aren’t guaranteed to execute JavaScript&lt;/strong&gt;, or they might execute it late. By the time your client-side data has loaded, the crawler has already moved on, and your page ranks lower because the content it needs to index simply isn’t there. It’s a big gamble, and in many cases, a losing one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static tags in a dynamic world&lt;/strong&gt;: With static content, your meta tags are easy to manage. You build your pages and generate your tags at build time. But when you add dynamic content—especially when pulling data from APIs—you need to generate these tags dynamically based on the data. Unfortunately, Gatsby isn’t built to &lt;strong&gt;regenerate these SEO tags&lt;/strong&gt; after the initial build. This means you’ll have to add custom code or implement hacks using React Helmet or similar libraries to manually manage your dynamic SEO tags—adding another layer of complexity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO for user-generated content&lt;/strong&gt;: Let’s say you’re pulling in dynamic content, like blog posts or comments, from an API. You need each page to have &lt;strong&gt;unique meta descriptions&lt;/strong&gt; and &lt;strong&gt;canonical URLs&lt;/strong&gt; for proper indexing. With Gatsby, achieving this dynamically can be a pain, because the framework is designed to handle SEO at build-time, not at run-time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lazy-loading affecting SEO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gatsby heavily relies on &lt;strong&gt;lazy-loading&lt;/strong&gt; assets like images and JavaScript, which is great for performance but can &lt;strong&gt;hurt your SEO&lt;/strong&gt; if not done correctly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Images and JavaScript&lt;/strong&gt;: Google cares about how quickly content loads, especially images. While Gatsby’s image plugin does offer optimized images with lazy-loading and responsive formats, &lt;strong&gt;these images may not load in time for search engine crawlers to index them properly&lt;/strong&gt;. If Google sees placeholders instead of actual content, it can assume your page is incomplete or poorly optimized, &lt;strong&gt;harming your rankings&lt;/strong&gt;. This is especially a problem with slower network connections or heavily dynamic pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many developers spend more time tweaking their Gatsby configuration to handle SEO edge cases (lazy loading images, proper schema tags, etc.) than they would on any other platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does all this hate Gatsbyjs make it dead
&lt;/h3&gt;

&lt;p&gt;The hate towards Gatsby isn’t because it’s inherently a bad tool. It’s because developers love efficiency, and Gatsby often feels less efficient.&lt;/p&gt;

&lt;p&gt;Sure, it’s easy to hate Gatsby for its shortcomings, but we need to acknowledge its &lt;strong&gt;strengths&lt;/strong&gt; too—because yes, it has plenty:&lt;/p&gt;

&lt;h3&gt;
  
  
  Incredible static performance
&lt;/h3&gt;

&lt;p&gt;When it comes to &lt;strong&gt;pure static site generation&lt;/strong&gt;, &lt;strong&gt;Gatsby is a beast&lt;/strong&gt;. Gatsby’s ability to pre-render everything at build time means that it delivers lightning-fast sites straight out of the gate. Once the build process is over (yes, it can be slow), &lt;strong&gt;Gatsby’s performance is hard to beat&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plugin ecosystem—when it works
&lt;/h3&gt;

&lt;p&gt;We’ve ranted about plugin hell, but let’s not forget that &lt;strong&gt;Gatsby’s plugin ecosystem&lt;/strong&gt; is also one of its greatest strengths. If you’re building a standard static site, &lt;strong&gt;Gatsby has a plugin for nearly everything&lt;/strong&gt;. From handling image optimization to adding SEO metadata, Gatsby's plugins can make development easier and faster, especially for developers who are less inclined to reinvent the wheel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Extremely secure
&lt;/h3&gt;

&lt;p&gt;Gatsby is arguably one of the &lt;strong&gt;safest frameworks&lt;/strong&gt; you can choose, especially when it comes to deploying static sites. Since Gatsby generates &lt;strong&gt;static HTML&lt;/strong&gt;, there’s no database or server-side processing, which means &lt;strong&gt;less surface area for security vulnerabilities&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No server, no problem&lt;/strong&gt;: Traditional CMSs like WordPress are notorious for being hacked due to outdated plugins, brute-force attacks, and server exploits. Gatsby, on the other hand, &lt;strong&gt;doesn’t have a server to attack&lt;/strong&gt;. Once the site is built and deployed, there’s practically no risk of common attack vectors like SQL injections or DDoS attacks because everything is already pre-rendered and cached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Out-of-the-box SSL and encryption&lt;/strong&gt;: Gatsby’s integration with platforms like &lt;strong&gt;Netlify&lt;/strong&gt; and &lt;strong&gt;Vercel&lt;/strong&gt; means you can &lt;strong&gt;automatically deploy your site with HTTPS encryption&lt;/strong&gt;, which is crucial for SEO and user trust. This is one less thing to worry about when it comes to securing your site.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, is Gatsby Dead?&lt;/p&gt;

&lt;p&gt;Absolutely not. Gatsby is still alive and well, especially in niche markets where static site generation, performance optimizations, and complex data integrations are prioritized. When used for the right type of project, Gatsby is an incredibly powerful tool that can deliver results few other frameworks can match.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why developers still choose Gatsby:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Performance beast for static sites: If you’re building a marketing site, a blog, or an eCommerce store with relatively static content, Gatsby’s performance is still hard to beat.&lt;/li&gt;
&lt;li&gt;Extensive ecosystem: The plugin ecosystem is second to none, allowing developers to easily add advanced features like image optimization, SEO improvements, and integrations with CMS platforms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unified data layer with GraphQL:&lt;/strong&gt; For complex projects with multiple data sources, Gatsby’s GraphQL layer can be a massive asset, simplifying the process of pulling data from different APIs, markdown files, and CMSs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Find out: &lt;a href="https://thebcms.com/blog/15-gatsbyjs-developers-to-follow" rel="noopener noreferrer"&gt;Why do these 15 devs still choose Gatsby.js over Next.js?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maybe the real problem isn’t Gatsby. Maybe it’s because developers have grown accustomed to things being simpler, more intuitive, and less demanding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Is it hate or is it frustration?
&lt;/h2&gt;

&lt;p&gt;Maybe the hate isn’t really about the framework itself, but about the expectations Gatsby fails to meet for many developers. It’s not a bad framework, but it’s also not a universally loved one, and that’s okay. Not every tool is for everyone, and Gatsby might just be one of those things that’s easier to criticize than to fully embrace.&lt;/p&gt;

&lt;p&gt;In the end, hating Gatsby is easy because the alternative—learning it, mastering its quirks, and making it work for you—feels unnecessarily hard. And when you have other options, why wouldn’t you take the path of least resistance?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Your Custom CMS is a big mistake that needs fixing</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Mon, 16 Dec 2024 13:30:22 +0000</pubDate>
      <link>https://dev.to/momciloo/your-custom-cms-is-a-big-mistake-that-needs-fixing-4ahd</link>
      <guid>https://dev.to/momciloo/your-custom-cms-is-a-big-mistake-that-needs-fixing-4ahd</guid>
      <description>&lt;p&gt;Building a custom CMS is the most reliable way to waste $100K - $200k in tech. I've watched dozens of companies do this. "Our needs are unique," they say. Two years later, their content team is stuck with a broken image uploader and their developers hate their lives. I know this intimately - as a co-founder of BCMS, I help companies escape their custom CMS nightmares every month.&lt;/p&gt;

&lt;p&gt;Look, I love indie software. I've built and sold several products. But a custom CMS isn't scrappy engineering - it's organizational masochism.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why you'll fail
&lt;/h2&gt;

&lt;p&gt;Every custom CMS dies the same way:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You think you're special&lt;/li&gt;
&lt;li&gt;You build something that can't handle file uploads properly
3.Your content team can't paste from Google Docs
4.Your developers are stuck maintaining garbage instead of building your product&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I just talked to a CTO who spent $80K building a CMS that couldn't handle “draft” posts - a feature his marketing team needed on day one. Another built one where uploading a 10MB video would crash the server. Guess what? They're both switching to headless CMSs now.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real cost of Custom CMS
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Custom CMS&lt;/strong&gt; costs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initial development (4 months): $40K&lt;/li&gt;
&lt;li&gt;Part-time maintenance: $60K/year&lt;/li&gt;
&lt;li&gt;Infrastructure: $3K/year&lt;/li&gt;
&lt;li&gt;Unexpected fixes: $20K/year Total: $123K first year, $83K/year after&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Headless CMS&lt;/strong&gt; costs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;50 users × $10/month = $6K/year&lt;/li&gt;
&lt;li&gt;Two weeks of integration: $15K (one-time) Total: $21K first year, $6K/year after&lt;/li&gt;
&lt;li&gt;But money isn't the real cost. The real cost is time spent not building your actual product.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When a custom CMS makes sense
&lt;/h2&gt;

&lt;p&gt;Only three reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You have HIPAA requirements no existing CMS can handle (rare)&lt;/li&gt;
&lt;li&gt;You're dealing with classified documents (very rare)&lt;/li&gt;
&lt;li&gt;You're building a CMS product to sell (good luck competing with the dozens already out there, BCMS included)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How this ends
&lt;/h2&gt;

&lt;p&gt;If you ignore this advice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Month 3: "Just need to add image uploading"&lt;/li&gt;
&lt;li&gt;Month 6: "Just need user roles"&lt;/li&gt;
&lt;li&gt;Month 12: "Need to rebuild the editor"&lt;/li&gt;
&lt;li&gt;Month 18: "Maybe we should look at existing solutions..."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've seen this movie. It always ends the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do instead
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Accept you're needs are not so special&lt;/li&gt;
&lt;li&gt;Pick a headless CMS (BCMS, for example)&lt;/li&gt;
&lt;li&gt;Integrate it in a week&lt;/li&gt;
&lt;li&gt;Build your actual product&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://thebcms.com/headless-cms" rel="noopener noreferrer"&gt;The best CMS&lt;/a&gt; is the one your team forgets exists. The worst is the one you're still debugging two years later.&lt;/p&gt;

&lt;p&gt;Every hour spent building a custom CMS is an hour your competitors spend building features their customers want. Choose wisely.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why Tailwind Doesn't Suck</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Tue, 19 Nov 2024 10:04:59 +0000</pubDate>
      <link>https://dev.to/momciloo/why-tailwind-doesnt-suck-6fo</link>
      <guid>https://dev.to/momciloo/why-tailwind-doesnt-suck-6fo</guid>
      <description>&lt;p&gt;&lt;em&gt;This is my response to &lt;a href="https://www.reddit.com/r/webdev/comments/1gt12ae/am_i_the_only_one_who_thinks_tailwind_sucks/" rel="noopener noreferrer"&gt;this Reddit thread&lt;/a&gt; that blew up recently. After 15 years of building web apps at scale, here's my take:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;CSS is broken.&lt;/p&gt;

&lt;p&gt;That's it. I have nothing else to say.&lt;/p&gt;

&lt;p&gt;Okay, here a few more toughts:&lt;/p&gt;

&lt;p&gt;Not "needs improvement" broken. Not "could be better" broken. Fundamentally, irreparably broken.&lt;/p&gt;

&lt;p&gt;After fifteen years of building large-scale web apps, I can say this with certainty: CSS is the only technology that actively punishes you for using it correctly. The more you follow its rules, the harder it becomes to maintain.&lt;/p&gt;

&lt;p&gt;This is why Tailwind exists.&lt;/p&gt;

&lt;p&gt;Tailwind isn't good. It's ugly. Its class names look like keyboard shortcuts. Its utility-first approach offends everyone who cares about clean markup. It violates twenty years of web development best practices.&lt;/p&gt;

&lt;p&gt;And yet, it's winning.&lt;/p&gt;

&lt;p&gt;Why? Because Tailwind's ugliness is honest. It's right there in your face. CSS hides its ugliness in a thousand stylesheets, waiting to explode when you deploy to production.&lt;/p&gt;

&lt;p&gt;Here's what nobody admits: every large CSS codebase is a disaster. I've seen codebases at top tech companies. They all share the same problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nobody dares to delete old CSS&lt;/li&gt;
&lt;li&gt;New styles are always added, never modified&lt;/li&gt;
&lt;li&gt;!important is everywhere&lt;/li&gt;
&lt;li&gt;Specificity wars everywhere&lt;/li&gt;
&lt;li&gt;File size only grows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "clean" solution is to write better CSS, enforce strict conventions, and maintain perfect discipline across dozens of developers and thousands of components.&lt;/p&gt;

&lt;p&gt;This has never worked. Not once. Not in any large team I've seen in fifteen years.&lt;/p&gt;

&lt;p&gt;Tailwind skips the pretense. Instead of promising beauty, it promises predictability. Instead of global styles, it gives you local ones. Instead of cascading problems, it gives you contained ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"But it's just inline styles!"&lt;/strong&gt; critics cry.&lt;br&gt;
No. Inline styles are random. Tailwind styles are systematic. Big difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"But you're repeating yourself!"&lt;/strong&gt;&lt;br&gt;
Wrong. You're just seeing the repetition instead of hiding it in stylesheets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"But it's harder to read!"&lt;/strong&gt;&lt;br&gt;
Harder than what? Then the ten CSS files you need to understand how a component is styled?&lt;/p&gt;

&lt;p&gt;Here's the truth: in big apps, you don't write Tailwind classes directly. You write components. The ugly class names hide inside those components. What you end up with is more maintainable than any CSS system I've used.&lt;/p&gt;

&lt;p&gt;Is Tailwind perfect? Hell no.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's too permissive&lt;/li&gt;
&lt;li&gt;Its class names are terrible&lt;/li&gt;
&lt;li&gt;It pushes the complexity into markup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Its learning curve is steep (it still takes me 4-10 seconds to remember the name of line-height and letter-spacing utility class, every time I need it)&lt;/p&gt;

&lt;p&gt;Its constraints are weak&lt;/p&gt;

&lt;p&gt;But these flaws are fixable. CSS's flaws are not.&lt;/p&gt;

&lt;p&gt;The best argument for Tailwind isn't Tailwind itself. It's what happens when you try to scale CSS. CSS is the only part of modern web development that gets exponentially worse as your project grows.&lt;/p&gt;

&lt;p&gt;Every other part of our stack has solved scalability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript has modules&lt;/li&gt;
&lt;li&gt;Databases have transactions&lt;/li&gt;
&lt;li&gt;Servers have containers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CSS has... hopes and prayers 🙏.&lt;/p&gt;

&lt;p&gt;Tailwind is a hack. But it's a hack that admits it's a hack. That's more honest than CSS has ever been.&lt;/p&gt;

&lt;p&gt;If you're building a small site, use CSS. It'll work fine. But if you're building something big, something that needs to scale, something that multiple teams need to maintain...&lt;/p&gt;

&lt;p&gt;Well, you can either have clean code that doesn't work, or ugly code that does.&lt;/p&gt;

&lt;p&gt;Choose wisely.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>You can stop complaining about WordPress and start using BCMS 🎉</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Thu, 24 Oct 2024 10:59:28 +0000</pubDate>
      <link>https://dev.to/momciloo/you-can-stop-complaining-about-wordpress-and-start-using-bcms-55i8</link>
      <guid>https://dev.to/momciloo/you-can-stop-complaining-about-wordpress-and-start-using-bcms-55i8</guid>
      <description>&lt;p&gt;BCMS makes it easy to build modern websites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built-in content modern builder (aka Advanced Custom Fields)&lt;/li&gt;
&lt;li&gt;Super fast, well designed interface&lt;/li&gt;
&lt;li&gt;Full control over every line of code of your website&lt;/li&gt;
&lt;li&gt;Easy media management with folders&lt;/li&gt;
&lt;li&gt;Built-in multilingual support&lt;/li&gt;
&lt;li&gt;Full control with a flexible API&lt;/li&gt;
&lt;li&gt;Official Next, Gatsby, Nuxt code starters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s built to be fast, scalable, and give you fewer headaches. It's powerful like WordPress with 70 plugins installed, but fast, stable and intuitive. 😅&lt;/p&gt;

&lt;p&gt;Also coming soon... more code starters for Svelte, Astro, more integrations that will make building for web even more powerful.&lt;/p&gt;

&lt;p&gt;Get started here: &lt;a href="https://app.thebcms.com" rel="noopener noreferrer"&gt;https://app.thebcms.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>nextjs</category>
      <category>gatsby</category>
    </item>
  </channel>
</rss>
