<?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.us-east-2.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>9 Next.js Alternatives in 2026 (And When to Actually Switch)</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Thu, 30 Jul 2026 14:00:36 +0000</pubDate>
      <link>https://dev.to/momciloo/9-nextjs-alternatives-in-2026-and-when-to-actually-switch-loa</link>
      <guid>https://dev.to/momciloo/9-nextjs-alternatives-in-2026-and-when-to-actually-switch-loa</guid>
      <description>&lt;p&gt;Next.js is a strong default for React teams. It is not the right default for every site. If your bottleneck is JS weight, edge latency, Vue preference, or e-commerce plumbing, a Next.js alternative can be the sane move.&lt;br&gt;
Here is a practical shortlist for 2026 - not a hype ranking, a "pick by problem" map.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to evaluate before switching
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rendering needs&lt;/strong&gt; - SSR, SSG, islands, resumability- &lt;strong&gt;Performance budget&lt;/strong&gt; - TTFB, hydration cost, Lighthouse reality- &lt;strong&gt;DX&lt;/strong&gt; - docs quality, boilerplate, how painful data loading feels- &lt;strong&gt;Ecosystem fit&lt;/strong&gt; - CMS APIs, hosting, team skills- &lt;strong&gt;Scale story&lt;/strong&gt; - what breaks at 10k concurrent users or 100k pages## Alternatives worth knowing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remix&lt;/strong&gt; - cleaner nested data loading; strong on the edge- &lt;strong&gt;SvelteKit&lt;/strong&gt; - smaller bundles; great when hydration tax hurts- &lt;strong&gt;Astro&lt;/strong&gt; - zero JS by default; islands when needed; excellent for content sites- &lt;strong&gt;Qwik&lt;/strong&gt; - resumability; heavy interactive apps without classic hydration pain- &lt;strong&gt;Fresh (Deno)&lt;/strong&gt; - edge-first, simpler runtime story for some teams- &lt;strong&gt;Nuxt&lt;/strong&gt; - the Vue-native answer to Next-style SSR/SSG- &lt;strong&gt;SolidStart&lt;/strong&gt; - React-like mental model with fine-grained reactivity- &lt;strong&gt;Blitz&lt;/strong&gt; - full-stack conventions for shipping SaaS faster- &lt;strong&gt;Shopify Hydrogen&lt;/strong&gt; - when the store is the product and Shopify is already home## Use-case shortcuts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blog / portfolio&lt;/strong&gt; - Astro or SvelteKit usually beat a hydrated Next app- &lt;strong&gt;Shopify storefront&lt;/strong&gt; - Hydrogen beats a Frankenstack of Next + plugins- &lt;strong&gt;Dense dashboards&lt;/strong&gt; - Qwik or SolidStart when hydration becomes the bottleneck- &lt;strong&gt;Vue team&lt;/strong&gt; - Nuxt, not "learn React because the blog said so"## Keep the CMS portable
Frameworks change. Content should not. A headless CMS (BCMS included) keeps entries, media, and models behind an API so you can move from Next to Astro or Nuxt without rebuilding the editorial layer.
## Related reading&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://thebcms.com/blog/nextjs-advantages" rel="noopener noreferrer"&gt;Next.js advantages that actually matter&lt;/a&gt;- &lt;a href="https://thebcms.com/blog/astro-server-islands-tutorial" rel="noopener noreferrer"&gt;Astro Server Islands tutorial&lt;/a&gt;- &lt;a href="https://thebcms.com/blog/best-cms-for-svelte" rel="noopener noreferrer"&gt;Best CMS for Svelte&lt;/a&gt;&lt;strong&gt;Want deeper comparisons, install snippets, and the full decision checklist?&lt;/strong&gt; Read the complete guide: &lt;a href="https://thebcms.com/blog/nextjs-alternatives" rel="noopener noreferrer"&gt;9 Best Next.js Alternatives for 2026&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>nextjs</category>
      <category>webdev</category>
      <category>programming</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Next.js Advantages That Actually Matter for Real Projects</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Tue, 28 Jul 2026 14:01:11 +0000</pubDate>
      <link>https://dev.to/momciloo/nextjs-advantages-that-actually-matter-for-real-projects-5gl8</link>
      <guid>https://dev.to/momciloo/nextjs-advantages-that-actually-matter-for-real-projects-5gl8</guid>
      <description>&lt;p&gt;Next.js stays popular because it solves boring production problems: rendering strategy, SEO-friendly HTML, routing, and a path to full-stack features without bolting five tools together on day one.&lt;br&gt;
If you are building content sites, storefronts, or dashboards in React, the useful question is not "is Next.js cool?" It is "which Next.js advantages pay rent on this project?"&lt;/p&gt;

&lt;h2&gt;
  
  
  Flexible rendering (the real killer feature)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSR&lt;/strong&gt; - HTML per request for personalized or frequently changing pages- &lt;strong&gt;SSG&lt;/strong&gt; - prebuilt pages for blogs and marketing, served from the edge/CDN- &lt;strong&gt;ISR&lt;/strong&gt; - static pages that can refresh on a schedule without a full rebuildYou can mix strategies page by page. That is the advantage people underestimate until they try to force one rendering mode on every route.
## SEO and performance defaults
Pre-rendered HTML is easier for crawlers than a blank client shell. On top of that, Next.js gives you:&lt;/li&gt;
&lt;li&gt;Automatic code splitting per route- next/image for resizing, formats, and lazy loading- Fast Refresh during developmentNone of that replaces good content modeling or caching strategy - but it removes a lot of DIY glue.
## Full-stack without a second repo (sometimes)
API routes (and modern route handlers) let you handle forms, webhooks, and light backend work next to the UI. For many products that is enough. For heavy domains you will still split services - and that is fine.
## When Next.js is a strong fit&lt;/li&gt;
&lt;li&gt;SEO-heavy marketing and editorial sites- E-commerce catalogs that need both speed and freshness- SaaS dashboards with mixed static and dynamic data- Teams already deep in React## When to look elsewhere&lt;/li&gt;
&lt;li&gt;Mostly static content with almost no interactivity - Astro or similar can ship less JS- Ultra-minimal sites where framework weight hurts more than it helps- Teams that want Vue-first DX - Nuxt may feel more natural## Content + Next.js
Next.js is the delivery layer. For blogs and product content, keep copy in a headless CMS so editors are not filing PRs for every headline change. BCMS pairs well here: fetch entries in server components, render structured fields, keep the frontend free to evolve.
## Related reading&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://thebcms.com/blog/the-best-cms-for-nextjs" rel="noopener noreferrer"&gt;Why BCMS works well as a Next.js CMS&lt;/a&gt;- &lt;a href="https://thebcms.com/blog/optimize-nextjs-guide" rel="noopener noreferrer"&gt;How to optimize Next.js projects&lt;/a&gt;- &lt;a href="https://thebcms.com/blog/nextjs-alternatives" rel="noopener noreferrer"&gt;9 Next.js alternatives for 2026&lt;/a&gt;&lt;strong&gt;Want code samples for SSR/SSG/ISR, e-commerce patterns, and a fuller comparison table?&lt;/strong&gt; Read the complete article: &lt;a href="https://thebcms.com/blog/nextjs-advantages" rel="noopener noreferrer"&gt;Next.js advantages for your project&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>nextjs</category>
      <category>webdev</category>
      <category>react</category>
      <category>cms</category>
    </item>
    <item>
      <title>Spec-Driven Development in 2026: Stop Vibe Coding, Ship What You Specced</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Thu, 23 Jul 2026 14:01:10 +0000</pubDate>
      <link>https://dev.to/momciloo/spec-driven-development-in-2026-stop-vibe-coding-ship-what-you-specced-3ipd</link>
      <guid>https://dev.to/momciloo/spec-driven-development-in-2026-stop-vibe-coding-ship-what-you-specced-3ipd</guid>
      <description>&lt;p&gt;Spec-driven development (SDD) treats a versioned specification - not the code - as the source of truth. You write what the system should do, plan how, break work into tasks, then implement. When requirements change, you edit the spec first and regenerate or update the code against it.&lt;br&gt;
That sounds old-school until you watch AI agents vibe-code a feature that almost matches intent, invents APIs, and quietly contradicts yesterday's decisions. In 2026, SDD is the bridge between powerful agents and reliable shipping.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why SDD showed up now
&lt;/h2&gt;

&lt;p&gt;LLM coding agents fail in three predictable ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intent drift&lt;/strong&gt; - "add login" is too vague; the model invents defaults- &lt;strong&gt;Context decay&lt;/strong&gt; - past the context window, older decisions get ignored- &lt;strong&gt;Unverifiable output&lt;/strong&gt; - without acceptance criteria, review never endsA precise spec fixes all three. The phrase you keep seeing: the spec is the prompt.
## The four phases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specify&lt;/strong&gt; - user stories, acceptance criteria, NFRs, out of scope- &lt;strong&gt;Plan&lt;/strong&gt; - architecture, data model, APIs, constraints from a project constitution- &lt;strong&gt;Tasks&lt;/strong&gt; - atomic checklist items a junior (or agent) can execute- &lt;strong&gt;Implement&lt;/strong&gt; - code against the tasks, verify against the criteriaHuman checkpoints at each boundary matter. Skipping them is vibe coding in a costume.
## EARS notation (the part agents actually follow)
EARS (Easy Approach to Requirements Syntax) gives five patterns that collapse fuzzy asks into testable claims:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ubiquitous&lt;/strong&gt; - The system shall log every authentication attempt.- &lt;strong&gt;Event-driven&lt;/strong&gt; - WHEN a user submits login THE system SHALL validate credentials.- &lt;strong&gt;State-driven&lt;/strong&gt; - WHILE sync is in progress THE system SHALL show a progress indicator.- &lt;strong&gt;Unwanted&lt;/strong&gt; - IF login fails three times in 60s THEN THE system SHALL lock the account.- &lt;strong&gt;Optional&lt;/strong&gt; - WHERE MFA is enabled THE system SHALL require a TOTP code.If it is not EARS-clear, an agent will guess. Guessing is expensive.
## Tooling landscape (quick map)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Spec Kit&lt;/strong&gt; - open, model-agnostic reference path- &lt;strong&gt;AWS Kiro&lt;/strong&gt; - agentic IDE with hooks after each action- &lt;strong&gt;Claude Code + skills&lt;/strong&gt; - terminal SDD loop- &lt;strong&gt;Cursor Plan Mode + AGENTS.md&lt;/strong&gt; - IDE-first constitution + plan- &lt;strong&gt;OpenSpec / BMAD / Tessl&lt;/strong&gt; - lighter or compliance-focused variantsPick based on where you already work. Portability usually means Spec Kit. AWS shops often pick Kiro. Cursor teams lean on Plan Mode plus a constitution file.
## SDD vs vibe coding vs TDD
Vibe coding is great for spikes. SDD is for anything that ships. TDD says write the test first. SDD says write the whole intent first - behavior, constraints, edge cases - then generate code and tests from that. They complement each other; they are not rivals.
## Pitfalls to avoid&lt;/li&gt;
&lt;li&gt;Over-speccing implementation details- Under-speccing behavior ("make it nice")- Skipping a project constitution- Keeping specs in Notion while code lives in git- Letting agents merge without phase reviews## Related reading&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://thebcms.com/blog/bmad-method-website-content" rel="noopener noreferrer"&gt;BMAD method for website content&lt;/a&gt;- &lt;a href="https://thebcms.com/blog/bcms-mcp-and-chatgpt" rel="noopener noreferrer"&gt;Connect BCMS MCP to ChatGPT&lt;/a&gt;- &lt;a href="https://thebcms.com/blog/ai-structured-content" rel="noopener noreferrer"&gt;Why AI depends on structured content&lt;/a&gt;&lt;strong&gt;Want the full tool comparison, Claude/Copilot/Cursor workflows, and a worked example?&lt;/strong&gt; Read the complete guide: &lt;a href="https://thebcms.com/blog/spec-driven-development" rel="noopener noreferrer"&gt;Spec-Driven Development (SDD): The Definitive 2026 Guide&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>softwareengineering</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Astro Server Islands: Keep Pages Fast Without Giving Up Interactivity</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Tue, 21 Jul 2026 14:00:48 +0000</pubDate>
      <link>https://dev.to/momciloo/astro-server-islands-keep-pages-fast-without-giving-up-interactivity-144j</link>
      <guid>https://dev.to/momciloo/astro-server-islands-keep-pages-fast-without-giving-up-interactivity-144j</guid>
      <description>&lt;p&gt;Most content sites do not need a full SPA. They need fast HTML first, then a small amount of JavaScript for carousels, comments, or filters. That is exactly what Astro Server Islands are for.&lt;br&gt;
Astro ships static HTML by default. Interactive pieces become islands that hydrate only when you ask for it. The rest of the page stays light, which helps LCP, FCP, and Core Web Vitals.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Server Islands work
&lt;/h2&gt;

&lt;p&gt;Think of the page as mostly static zones plus a few interactive components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static content is rendered on the server and delivered as HTML- Each island is an isolated interactive component- JavaScript loads only for those islands- Hydration timing is controlled with client directivesUseful directives:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;client:load&lt;/strong&gt; - hydrate after the page loads (chat, share, like)- &lt;strong&gt;client:idle&lt;/strong&gt; - hydrate when the browser is idle- &lt;strong&gt;client:visible&lt;/strong&gt; - hydrate when the component enters the viewport (carousels, below-the-fold widgets)- &lt;strong&gt;client:only&lt;/strong&gt; - render only on the clientRule of thumb: use &lt;strong&gt;client:load&lt;/strong&gt; for above-the-fold UI that must work immediately. Use &lt;strong&gt;client:visible&lt;/strong&gt; for everything else.
## Pair Astro with a headless CMS
Astro is great at delivery. A headless CMS is great at content ops. With BCMS you get templates (content types), entries (posts), media, and typed content your frontend can fetch without stuffing Markdown into the repo for every edit.
That split matters: editors update content in a dashboard. Developers keep framework freedom. The site still ships mostly static HTML.
## Practical setup
Start from a BCMS Astro starter:
npx @thebcms/cli create astro starter simple-blog
After login and project naming:
cd your-project &amp;amp;&amp;amp; npm install &amp;amp;&amp;amp; npm run dev
In BCMS:&lt;/li&gt;
&lt;li&gt;Templates define the shape of a blog post- Entries are the actual posts- Restart the Astro app after content model changes so types and data refresh## Add an island: image carousel
A common pattern:&lt;/li&gt;
&lt;li&gt;Install a Vue carousel (Astro starters often already include Vue)- Add a media field on the Blog template in BCMS- Build a Vue component that accepts a media collection prop- Render it in the blog page with client:load or client:visibleConditionally fall back to a cover image when the carousel field is empty. That keeps the page useful even when editors skip optional media.
## Production mindset
Use npm run build, then serve the dist output. Visitors get HTML without waiting on a database round trip for every page view. You keep interactivity where it earns its keep.
## Related reading&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://thebcms.com/blog/best-cms-for-astro" rel="noopener noreferrer"&gt;Best CMS for Astro in 2026&lt;/a&gt;- &lt;a href="https://thebcms.com/blog/astro-examples" rel="noopener noreferrer"&gt;20 Astro website examples&lt;/a&gt;- &lt;a href="https://thebcms.com/blog/jamstack-frameworks" rel="noopener noreferrer"&gt;Jamstack frameworks compared&lt;/a&gt;&lt;strong&gt;Want the full walkthrough&lt;/strong&gt; (screenshots, carousel code, production notes)? Read the complete guide on the BCMS blog: &lt;a href="https://thebcms.com/blog/astro-server-islands-tutorial" rel="noopener noreferrer"&gt;Astro Server Islands tutorial&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>astro</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>cms</category>
    </item>
    <item>
      <title>I convert videos to printed flipbooks for a living: here's how the pipeline works (FFmpeg print bind)</title>
      <dc:creator>Momcilo</dc:creator>
      <pubDate>Fri, 17 Jul 2026 13:59:20 +0000</pubDate>
      <link>https://dev.to/momciloo/i-convert-videos-to-printed-flipbooks-for-a-living-heres-how-the-pipeline-works-ffmpeg-print--4p8f</link>
      <guid>https://dev.to/momciloo/i-convert-videos-to-printed-flipbooks-for-a-living-heres-how-the-pipeline-works-ffmpeg-print--4p8f</guid>
      <description>&lt;p&gt;I spent years shipping software. Now part of my week is printing, binding, and shipping small books.&lt;/p&gt;

&lt;p&gt;In 2018 we built a side project that turned short videos into flipbooks. It sat idle for years. In late 2024 we relaunched it as &lt;a href="https://www.videotoflip.com" rel="noopener noreferrer"&gt;VideoToFlip&lt;/a&gt; - a family workshop in Serbia. Upload a clip, preview the frames, we print and bind a pocket-sized book, ship it worldwide.&lt;/p&gt;

&lt;p&gt;Stack: Next.js, FFmpeg, ImageMagick, a printer, and our hands. No AI pipeline. It pays bills.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Upload + validation
&lt;/h3&gt;

&lt;p&gt;Customers upload MP4 / MOV / AVI, usually under 30 seconds and 100 MB. Before FFmpeg we check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;duration&lt;/li&gt;
&lt;li&gt;file size&lt;/li&gt;
&lt;li&gt;orientation&lt;/li&gt;
&lt;li&gt;that the file is actually a video&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most support tickets come from skipping this step.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Frame extraction with FFmpeg
&lt;/h3&gt;

&lt;p&gt;The product is 72 pages, so we extract 72 frames.&lt;/p&gt;

&lt;p&gt;Even sampling across the clip is the obvious approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# conceptual - evenly spaced frames&lt;/span&gt;
ffmpeg &lt;span class="nt"&gt;-i&lt;/span&gt; input.mp4 &lt;span class="nt"&gt;-vf&lt;/span&gt; &lt;span class="s2"&gt;"fps=..."&lt;/span&gt; frame_%03d.jpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It looks correct and often feels wrong. People care about the peak moment (kiss, jump, laugh), not the lead-in. We bias sampling toward motion so the flip matches what they remember.&lt;/p&gt;

&lt;p&gt;ImageMagick handles sizing and crop for print.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Preview before checkout
&lt;/h3&gt;

&lt;p&gt;We show the exact frames that will print - not a mockup.&lt;/p&gt;

&lt;p&gt;That converted better than any copy change. Gift buyers want to know they aren't ordering the wrong second of the video.&lt;/p&gt;

&lt;p&gt;If you sell custom physical goods: preview the artifact, not the promise.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Print, bind, finish in-house
&lt;/h3&gt;

&lt;p&gt;We started with local print shops. Quality was inconsistent and turnaround was slow - a problem when wedding favors need to look identical across dozens of books.&lt;/p&gt;

&lt;p&gt;So we bought machines and learned printing, binding, and finishing ourselves. The physical object is the product. Outsourcing it was a mistake.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Shipping + customs
&lt;/h3&gt;

&lt;p&gt;We ship DHL from Serbia. Tracking matters. Clear customs/VAT messaging matters more. International buyers hate surprise fees on a gift.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Even frame sampling&lt;/strong&gt; - correct in code, wrong in hand. Optimize for how the flip feels.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical video in a landscape book&lt;/strong&gt; - validate orientation early.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outsourcing quality&lt;/strong&gt; - fine for stickers, bad when the object is the brand.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Not another SaaS story
&lt;/h2&gt;

&lt;p&gt;The web app is real: uploads, preview, checkout. The output leaves the screen. A short clip becomes paper.&lt;/p&gt;

&lt;p&gt;People order for gifts, weddings, and family moments. That demand is why this still exists.&lt;/p&gt;

&lt;p&gt;DIY version (extract frames, print at home, bind yourself):&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://www.videotoflip.com/blog/diy-flipbook-guide" rel="noopener noreferrer"&gt;DIY flipbook guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Workshop / origin:&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://www.videotoflip.com/about" rel="noopener noreferrer"&gt;About VideoToFlip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Questions about FFmpeg sampling, binding, or shipping paper internationally - ask in the comments.&lt;/p&gt;

</description>
      <category>sideprojects</category>
      <category>ffmpeg</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <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;{
&amp;nbsp;&amp;nbsp;"articles": [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"title": "AI in Healthcare: The Future of Medicine",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"body": "AI is changing the healthcare industry by enabling..."
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"title": "The Rise of AI in Business Operations",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"body": "AI is increasingly becoming important in business decision-making..."
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;]
}
&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;{
&amp;nbsp;&amp;nbsp;"title": "How AI is Revolutionizing the Future of Work",
&amp;nbsp;&amp;nbsp;"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;{
&amp;nbsp;&amp;nbsp;"product_name": "Dashing Smartwatch",
&amp;nbsp;&amp;nbsp;"features": ["Heart Rate Monitor", "GPS Tracking", "Water-Resistant"],
&amp;nbsp;&amp;nbsp;"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.&amp;nbsp; 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;&amp;nbsp;- 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;&amp;nbsp;-&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;&amp;nbsp;-&lt;/strong&gt; Groups in BCMS are reusable building blocks made of multiple&amp;nbsp;&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,&amp;nbsp;&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>
  </channel>
</rss>
