<?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: Joel Varty</title>
    <description>The latest articles on DEV Community by Joel Varty (@joelvarty).</description>
    <link>https://dev.to/joelvarty</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F216132%2Fa51bf172-41c9-4813-b0a2-a1abc3b169a7.JPG</url>
      <title>DEV Community: Joel Varty</title>
      <link>https://dev.to/joelvarty</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joelvarty"/>
    <language>en</language>
    <item>
      <title>Learning Next.js? Want to up your career with Headless CMS? Start here.</title>
      <dc:creator>Joel Varty</dc:creator>
      <pubDate>Mon, 03 Feb 2025 21:50:58 +0000</pubDate>
      <link>https://dev.to/joelvarty/learning-nextjs-want-to-up-your-career-with-headless-cms-start-here-4jld</link>
      <guid>https://dev.to/joelvarty/learning-nextjs-want-to-up-your-career-with-headless-cms-start-here-4jld</guid>
      <description>&lt;p&gt;If you're looking to learn Next.js and how to integrate with Headless CMS, check out my new video series.  First video dropped today!&lt;/p&gt;

&lt;p&gt;Future videos will tackle Component creation, preview mode, redirects, search, AI, and more!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/UGoA-Jt52_c?start=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>headless</category>
    </item>
    <item>
      <title>Eleventy + Agility CMS Starter Blog</title>
      <dc:creator>Joel Varty</dc:creator>
      <pubDate>Tue, 10 Nov 2020 19:38:47 +0000</pubDate>
      <link>https://dev.to/joelvarty/eleventy-agility-cms-starter-blog-34g1</link>
      <guid>https://dev.to/joelvarty/eleventy-agility-cms-starter-blog-34g1</guid>
      <description>&lt;p&gt;I recently built a sample Eleventy starter site that uses Agility CMS and aims to be a foundation for building fully static sites using 11ty and Agility CMS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Agility CMS Account
&lt;/h3&gt;

&lt;p&gt;The first thing you need is a free Agility CMS account. &lt;a href="https://manager.agilitycms.com/org/subscriptions/instance-setup?template=blog-with-nextjs&amp;amp;plan=agility-free" rel="noopener noreferrer"&gt;You can get that here 👋&lt;/a&gt;.&lt;br&gt;
Since this 11ty starter is so ✨new✨, we don't have an Official Starter package for it, so for now, we're linking to our NextJS starter, which happens to have the right demo content for this 🧐.&lt;/p&gt;
&lt;h3&gt;
  
  
  Clone the Repo
&lt;/h3&gt;

&lt;p&gt;Now that you've got the &lt;strong&gt;content&lt;/strong&gt;, &lt;em&gt;you need the &lt;code&gt;code&lt;/code&gt;!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Go ahead and clone the repo from github: 👇&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;https://github.com/agility/agilitycms-eleventy-starter-2020.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install Dependencies
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;npm install&lt;/code&gt; or &lt;code&gt;yarn install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Normally, this will create 9,999,999,999 files in your &lt;code&gt;node_modules&lt;/code&gt; folder.  Luckily, we're only gonna create 9,999,999 for this small demo.&lt;/p&gt;

&lt;p&gt;YAY! 👏👏👏&lt;/p&gt;

&lt;h3&gt;
  
  
  Environment Variables
&lt;/h3&gt;

&lt;p&gt;You care about the environment don't you? 🌲🌳🌴🎋&lt;/p&gt;

&lt;p&gt;Either way, you're gonna need to grab a few variables from your Agility CMS account.  Head over to the &lt;a href="https://manager.agilitycms.com/settings/apikeys" rel="noopener noreferrer"&gt;API Keys page&lt;/a&gt; in Agility CMS (&lt;a href="https://manager.agilitycms.com/settings/apikeys" rel="noopener noreferrer"&gt;https://manager.agilitycms.com/settings/apikeys&lt;/a&gt;) and grab your GUID, and API Keys for Preview and Fetch.&lt;/p&gt;

&lt;p&gt;🗄🗄🗄 Copy those into your &lt;code&gt;.env&lt;/code&gt; file (rename it from &lt;code&gt;.env.example&lt;/code&gt;)&lt;/p&gt;

&lt;h3&gt;
  
  
  Take Command of the &lt;code&gt;cmd&lt;/code&gt; line
&lt;/h3&gt;

&lt;p&gt;We've hooked up some neat commands to make your life easy.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔥 Local 🔥 Development 🔥
&lt;/h4&gt;

&lt;p&gt;If you want to run the project &lt;strong&gt;locally in preview mode&lt;/strong&gt;, with a  hot-reloading server, do this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm start&lt;/code&gt; or &lt;code&gt;yarn start&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Build It and They Will Browse
&lt;/h3&gt;

&lt;p&gt;This is the entire reason for being for 11ty.&lt;/p&gt;

&lt;h4&gt;
  
  
  Preview Mode
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;npm run dev&lt;/code&gt; or &lt;code&gt;yarn dev&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Live or Production Mode
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;npm run build&lt;/code&gt; or &lt;code&gt;yarn build&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Wipe The Content 🧽
&lt;/h3&gt;

&lt;p&gt;This example is using the Agility CMS Sync SDK.  That content is cached in the node_modules folder. If you want to clear all that out, use this.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run cms-clear&lt;/code&gt; or &lt;code&gt;yarn run cms-clear&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The next time you run the project, the content will be pulled down again.&lt;/p&gt;

&lt;h2&gt;
  
  
  How this thing works 🤓
&lt;/h2&gt;

&lt;p&gt;This projects uses nunjucks templates, and all the magic happens in the &lt;code&gt;pages&lt;/code&gt; folder.&lt;br&gt;
Open that thing up and take a peek.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pages Pages Pages
&lt;/h3&gt;

&lt;p&gt;Agility CMS has the concept of &lt;strong&gt;pages&lt;/strong&gt; and a &lt;strong&gt;sitemap&lt;/strong&gt;.  Those obejects are made available in the &lt;code&gt;_data/pages.js&lt;/code&gt; data array.&lt;/p&gt;

&lt;p&gt;Each page is rendered via the &lt;code&gt;index.njk&lt;/code&gt; file, which just splits each page object into its own, er... page :).  It also sets the &lt;code&gt;permalink&lt;/code&gt; property to the path of the page object.  Voila! Our Agility CMS pages are magically routed and rendered.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layout -&amp;gt; Template -&amp;gt; Modules
&lt;/h3&gt;

&lt;p&gt;Now let's take a look at how the templating works.&lt;/p&gt;

&lt;p&gt;Each page uses the &lt;code&gt;layout.njk&lt;/code&gt; template for the main html output.&lt;/p&gt;

&lt;p&gt;Then, based on the &lt;code&gt;page.templateFileName&lt;/code&gt; property, we load a &lt;code&gt;.njk&lt;/code&gt; template file dynamically.  In this case we only have the &lt;code&gt;main-template.njk&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;In that template, we set the zoneName parameter and render the modules in the &lt;code&gt;MainContentZone&lt;/code&gt; zone.&lt;/p&gt;

&lt;p&gt;Each module zone has one or more modules in there, which are in turn rendered by a &lt;code&gt;.njk&lt;/code&gt; file.  I've put them in the &lt;code&gt;/modules&lt;/code&gt; folder, and we've only got a few that are configured in this Agility CMS instance.&lt;/p&gt;

&lt;p&gt;Hopefully, you can use the examples in this project to create your own modules.&lt;/p&gt;

&lt;p&gt;A well-thought-out project with useful modules can empower your content editors with a set of building blocks for creating and updates the pages of your website.&lt;/p&gt;

&lt;h3&gt;
  
  
  Collections
&lt;/h3&gt;

&lt;p&gt;This project is a blog template, so we have set of pages that are rendered based on the &lt;code&gt;Posts&lt;/code&gt; list.  Most of that is configured as a Dynamic Page in Agility CMS, so you don't have to do much to implement it, but you'll notice on the &lt;code&gt;modules/postdetails.njk&lt;/code&gt; file that we use a property called &lt;code&gt;page.dynamicPageItem&lt;/code&gt;.  That object represents the Blog Post that we are currently rendering.&lt;/p&gt;

&lt;h2&gt;
  
  
  CSS + JavaScript
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tailwind CSS
&lt;/h3&gt;

&lt;p&gt;To keep things super simple, this project makes use of free and amazing &lt;a href="https://tailwindui.com/components" rel="noopener noreferrer"&gt;TailwindUI&lt;/a&gt; components, and it's all used via a dead simple &lt;a href="https://cdn.jsdelivr.net/npm/@tailwindcss/ui@latest/dist/tailwind-ui.min.css" rel="noopener noreferrer"&gt;https://cdn.jsdelivr.net/npm/@tailwindcss/ui@latest/dist/tailwind-ui.min.css&lt;/a&gt; file referenced in the header.  No post-css or anything, at least not yet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alpine.js
&lt;/h3&gt;

&lt;p&gt;We've pulled in a global reference to Alpine.js in the layout template, too.&lt;br&gt;
It's being used in a couple places to hide/show the mobile menu and the preview bar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Want to learn more?
&lt;/h2&gt;

&lt;p&gt;Amazing that you've gotten this far!  Keep learning with me (&lt;a href="https://twitter.com/joelvarty" rel="noopener noreferrer"&gt;Joel Varty&lt;/a&gt;) or the rest of the Agility CMS team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://join.slack.com/t/agilitycommunity/shared_invite/enQtNzI2NDc3MzU4Njc2LWI2OTNjZTI3ZGY1NWRiNTYzNmEyNmI0MGZlZTRkYzI3NmRjNzkxYmI5YTZjNTg2ZTk4NGUzNjg5NzY3OWViZGI" rel="noopener noreferrer"&gt;Join us on Slack&lt;/a&gt; to answer questions and provide feedback directly to the team.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>11ty</category>
      <category>cms</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Previewing Content in Agility CMS</title>
      <dc:creator>Joel Varty</dc:creator>
      <pubDate>Tue, 27 Oct 2020 14:28:34 +0000</pubDate>
      <link>https://dev.to/agilitycms/previewing-content-in-agility-cms-1l7i</link>
      <guid>https://dev.to/agilitycms/previewing-content-in-agility-cms-1l7i</guid>
      <description>&lt;p&gt;If there’s a universal truth about building websites, it’s that you can’t trust things will look right at the first try. Even the most meticulous developer can make a mistake. Now imagine what could happen if you enter non-technical content editors into the equation. The chances of something breaking can suddenly increase. &lt;/p&gt;

&lt;p&gt;That’s where content preview comes to the rescue, giving editors an instance where they can preview their work before it’s live. It’s the editors’ safety net; it provides them with the visibility they need to fix issues before visitors spot them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agilitycms.com/resources/guide/agilitycms-content-preview" rel="noopener noreferrer"&gt;Keep reading!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cms</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How Agility CMS Modules Work</title>
      <dc:creator>Joel Varty</dc:creator>
      <pubDate>Tue, 27 Oct 2020 14:26:59 +0000</pubDate>
      <link>https://dev.to/agilitycms/how-agility-cms-modules-work-22lp</link>
      <guid>https://dev.to/agilitycms/how-agility-cms-modules-work-22lp</guid>
      <description>&lt;p&gt;‘Module’ is one of those words that can have different meanings in the software world. In the content management system space, a module is a collection of code files that enables developers to add features to your website. &lt;/p&gt;

&lt;p&gt;Modules allow developers to install extra capabilities to the digital experiences you create, augmenting the functionality of your installation. They also allow you to customize your deployment and give your website or app. &lt;/p&gt;

&lt;p&gt;Modules are a fundamental part of creating a digital experience in Agility CMS. In this series of Agility Sneak Peeks, we will show some of our features and explain how you can use them. &lt;/p&gt;

&lt;p&gt;Let’s take a closer look at how modules work and learn how developers and marketers can leverage their functionality to create memorable digital experiences.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://agilitycms.com/resources/guide/agility-cms-modules" rel="noopener noreferrer"&gt;Keep reading!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cms</category>
      <category>learn</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Which is Better: a Hybrid, Traditional, or Headless CMS</title>
      <dc:creator>Joel Varty</dc:creator>
      <pubDate>Fri, 09 Oct 2020 13:27:23 +0000</pubDate>
      <link>https://dev.to/agilitycms/which-is-better-a-hybrid-traditional-or-headless-cms-4d94</link>
      <guid>https://dev.to/agilitycms/which-is-better-a-hybrid-traditional-or-headless-cms-4d94</guid>
      <description>&lt;h2&gt;
  
  
  Which type of CMS is best for your company?
&lt;/h2&gt;

&lt;p&gt;It’s no secret that choosing the right CMS is critical to maximizing your bottom line and staying current. Still, according to &lt;a href="https://w3techs.com/technologies/overview/content_management" rel="noopener noreferrer"&gt;W3 Techs&lt;/a&gt;, 40% of the websites out there aren’t leveraging the power of a top-of-the-line CMS, and while not every business needs a CMS, most companies looking to scale will need one eventually. &lt;/p&gt;

&lt;p&gt;When it comes to choosing a content management system, it’s a true balancing act between solving your biggest business challenges and catering to the multiple stakeholders who create your content. The decision-making process can feel confusing and overwhelming, especially since a silver bullet solution doesn’t actually exist.&lt;/p&gt;

&lt;p&gt;Each CMS has its own benefits and disadvantages, and what might work for one company might not work for yours, which poses the question “what is the right CMS for my business?”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agilitycms.com/resources/posts/traditional-headless-or-hybrid-which-cms-is-right-for-you" rel="noopener noreferrer"&gt;Keep reading over at the Agility CMS blog&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cms</category>
      <category>discuss</category>
      <category>healthydebate</category>
    </item>
    <item>
      <title>Launching a JAMstack Website With NEXT.JS + Vercel</title>
      <dc:creator>Joel Varty</dc:creator>
      <pubDate>Tue, 15 Sep 2020 20:37:49 +0000</pubDate>
      <link>https://dev.to/agilitycms/launching-a-jamstack-website-with-next-js-vercel-3pph</link>
      <guid>https://dev.to/agilitycms/launching-a-jamstack-website-with-next-js-vercel-3pph</guid>
      <description>&lt;p&gt;Vercel, one of our partners, makes it easy for JAMstack developers to build static websites in Agility CMS. In this article, we’ll recap one of our latest webinars and explain how Vercel and Next.js give extra agility to Agility CMS.&lt;/p&gt;

&lt;p&gt;What's really amazing is that you can do this and launch your site for free with Agility CMS and Vercel!&lt;/p&gt;

&lt;p&gt;Keep reading over at the &lt;a href="https://agilitycms.com/resources/posts/jamstack-nextjs-vercel" rel="noopener noreferrer"&gt;Agility CMS blog&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>nextjs</category>
      <category>cms</category>
    </item>
    <item>
      <title>JAMstack-Ready CMS: The Roadblocks</title>
      <dc:creator>Joel Varty</dc:creator>
      <pubDate>Mon, 31 Aug 2020 14:28:49 +0000</pubDate>
      <link>https://dev.to/agilitycms/jamstack-ready-cms-the-roadblocks-39n1</link>
      <guid>https://dev.to/agilitycms/jamstack-ready-cms-the-roadblocks-39n1</guid>
      <description>&lt;p&gt;In my experience, developers find JAMstack development easy to understand and implement. JAMstack sites are faster than most traditional server-rendered sites because they’re static and delivered from a CDN. They’re also more secure because there’s nothing to compromise and development can be optimized. &lt;/p&gt;

&lt;p&gt;The JAMstack also enables developers to stay nimble. In the JAMstack ecosystem, each tool, framework, and API works in sync with the other, which means that you don’t have to focus on juggling multiple technologies when building a site. Also, JAMstack bridges the gap between static and dynamic websites while keeping the advantages of static websites.&lt;/p&gt;

&lt;p&gt;However, it seems that despite the advantages JAMstack brings, some CMS platforms, whether they be traditional, hybrid, or headless, still aren’t ready to adopt the JAMstack way.&lt;/p&gt;

&lt;p&gt;Let’s see the roadblocks CMS platforms face when it comes to implementing JAMstack.&lt;/p&gt;

&lt;p&gt;Keep reading over at the Agility CMS blog: &lt;a href="https://agilitycms.com/resources/posts/jamstack-ready-cms" rel="noopener noreferrer"&gt;https://agilitycms.com/resources/posts/jamstack-ready-cms&lt;/a&gt;&lt;/p&gt;

</description>
      <category>jamstack</category>
      <category>javascript</category>
      <category>cms</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Meteoric Rise of Jamstack</title>
      <dc:creator>Joel Varty</dc:creator>
      <pubDate>Thu, 13 Aug 2020 13:03:44 +0000</pubDate>
      <link>https://dev.to/agilitycms/the-meteoric-rise-of-jamstack-2do0</link>
      <guid>https://dev.to/agilitycms/the-meteoric-rise-of-jamstack-2do0</guid>
      <description>&lt;p&gt;Stacking technologies isn’t new. Still, in the world of software development, stacking has become a necessity to shorten times and standardize development because when you mix the right set of technologies, you get the best outcome possible.  For web developers, that usually means faster websites with better user experiences.&lt;/p&gt;

&lt;p&gt;Here’s where the Jamstack approach can help developers. Jamstack represents a new way of developing software based on build-time and client-side rendering, that doesn’t depend on web servers for outputting websites and apps.&lt;/p&gt;

&lt;p&gt;Interested? &lt;a href="https://agilitycms.com/resources/posts/the-meteoric-rise-of-jamstack" rel="noopener noreferrer"&gt;Keep reading over at the Agility CMS blog&lt;/a&gt;&lt;/p&gt;

</description>
      <category>jamstack</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Genius of NextJS and Gatsby as Static Site Generators</title>
      <dc:creator>Joel Varty</dc:creator>
      <pubDate>Thu, 30 Jul 2020 19:32:20 +0000</pubDate>
      <link>https://dev.to/joelvarty/the-genius-of-nextjs-and-gatsby-as-static-site-generators-i9p</link>
      <guid>https://dev.to/joelvarty/the-genius-of-nextjs-and-gatsby-as-static-site-generators-i9p</guid>
      <description>&lt;p&gt;At Agility CMS we've chosen to create starter sites for both NextJS and Gatsby.  Both are static site generators built on top of React, but they take a very different approach to how they actually generate the static html/js/css for a website.&lt;br&gt;
Or do they?&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/agility" rel="noopener noreferrer"&gt;
        agility
      &lt;/a&gt; / &lt;a href="https://github.com/agility/agilitycms-nextjs-starter-2020" rel="noopener noreferrer"&gt;
        agilitycms-nextjs-starter-2020
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A starter NextJS website using Agility CMS, Tailwinds CSS, and several pre-built components.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/agility" rel="noopener noreferrer"&gt;
        agility
      &lt;/a&gt; / &lt;a href="https://github.com/agility/agility-gatsby-starter" rel="noopener noreferrer"&gt;
        agility-gatsby-starter
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A sample GatsbyJS website using the Agility CMS Gatsby source plugin
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;They both actually do one thing in a very similar way, and I think it's just genius: they give you a "hook" to specify the JSON data that will be used to generate the output for the site.  This ends up being the "props" variable that gets passed to your React components.  This data is used both during the build process on the server and also ON THE CLIENT SIDE.&lt;/p&gt;

&lt;p&gt;That's right - your React code is executed during BUILD time and also in the BROWSER, so the execution of your code can happen in 2 different contexts.  That's a little weird, at first, but if you're smart about it, you can make this work for you.&lt;/p&gt;

&lt;p&gt;First of all, having that JSON data available is what makes NextJS and Gatsby pretty magical. It means that, as a framework on top of React, they can route pages after the first page-load without doing a full page reload - all that's needed is that extra JSON and whatever extra dependencies are on the new page.&lt;/p&gt;

&lt;p&gt;You can see this on pretty much any Gatsby or NextJS site - if the developers have used the &lt;code&gt;&amp;lt;Link&amp;gt;&lt;/code&gt; component correctly.&lt;/p&gt;

&lt;p&gt;One area where I saw a huge performance improvement was on a listing page.  Check out the blog listing page here:  &lt;a href="https://agilitycms.com/resources/posts" rel="noopener noreferrer"&gt;https://agilitycms.com/resources/posts&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Originally, this page was rendered on the front-end using &lt;a href="https://github.com/agility/Agility-AspNetCore-ReactSampleSite/blob/master/Website/wwwroot/src/components/post-listing.jsx" rel="noopener noreferrer"&gt;this module&lt;/a&gt;:  which had to do calls back to the server every time more posts needed to be loaded.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;loadMore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;skip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;take&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`/Listing/Posts?skip=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;skip&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;take=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;take&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;

        &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

                &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;noMore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="nx"&gt;noMore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;

                &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prevState&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
                    &lt;span class="na"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;prevState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                    &lt;span class="na"&gt;loadingMore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="na"&gt;skip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;skip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="na"&gt;take&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;take&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="na"&gt;noMoreData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;noMore&lt;/span&gt;
                &lt;span class="p"&gt;}));&lt;/span&gt;


            &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;warn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;An error occurred while loading more data...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prevState&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
                    &lt;span class="na"&gt;loadingMore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="na"&gt;noMoreData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
                &lt;span class="p"&gt;}));&lt;/span&gt;
            &lt;span class="p"&gt;});&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Gatsby
&lt;/h2&gt;

&lt;p&gt;With Gatsby, we were able to get all the data we needed for loading posts at BUILD time with a &lt;code&gt;&amp;lt;StaticQuery&amp;gt;&lt;/code&gt; and then use an &lt;code&gt;&amp;lt;InfiniteScroll&amp;gt;&lt;/code&gt; component to render that on the client-side.  &lt;/p&gt;

&lt;p&gt;The big win here? No calls back to the server! &lt;/p&gt;

&lt;p&gt;Here's the main component that loads the list of posts:  &lt;a href="https://github.com/agility/agility-website-gatsby/blob/master/src/modules/PostListing.js" rel="noopener noreferrer"&gt;https://github.com/agility/agility-website-gatsby/blob/master/src/modules/PostListing.js&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;StaticQuery&lt;/span&gt;
        &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;graphql&lt;/span&gt;&lt;span class="s2"&gt;`
        query PostListingQuery {
            allAgilityBlogPost(filter: {properties: {referenceName: {eq: "blogposts"}}}, sort: {fields: customFields___date, order: DESC}) {
              nodes {
                contentID
                customFields {
                  date(formatString: "MMMM D, YYYY")
                  excerpt
                  title
                  uRL
                  postImage {
                    url
                    label
                  }
                }

              }
            }
          }
        `&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;queryData&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;queryData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;allAgilityBlogPost&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;viewModel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ReusablePostListing&lt;/span&gt; &lt;span class="p"&gt;{...&lt;/span&gt;&lt;span class="nx"&gt;viewModel&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}}&lt;/span&gt;
    &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's the reusable component that actually renders out the posts with the InfiniteScroll component:  &lt;a href="https://github.com/agility/agility-website-gatsby/blob/master/src/components/reusable-post-listing.jsx" rel="noopener noreferrer"&gt;https://github.com/agility/agility-website-gatsby/blob/master/src/components/reusable-post-listing.jsx&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;loadMorePosts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;skip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;take&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;noMore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;thesePosts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;skip&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;allPosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;noMore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;thesePosts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;allPosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;skip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;skip&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;take&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prevState&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;prevState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;thesePosts&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="na"&gt;loadingMore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;skip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;skip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;noMoreData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;noMore&lt;/span&gt;
        &lt;span class="p"&gt;}));&lt;/span&gt;        
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  NextJS
&lt;/h2&gt;

&lt;p&gt;The same logic holds for NextJS websites built with Agility CMS.  &lt;/p&gt;

&lt;p&gt;Check out this Post Listing example from the starter site.  &lt;a href="https://github.com/agility/agilitycms-nextjs-starter-2020/blob/master/components/agility-modules/PostsListing.js" rel="noopener noreferrer"&gt;https://github.com/agility/agilitycms-nextjs-starter-2020/blob/master/components/agility-modules/PostsListing.js&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While Gatsby has a  component that renders data from GraphQL, the Agility CMS NextJS project uses a "getCustomInitialProps" method that allows you to do any data fetches at BUILD time, and then NextJS provides that JSON data to the component at render time and on the client for use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PostsListing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getCustomInitialProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;agility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;channelName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;languageCode&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;agility&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;//get our posts&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;rawPosts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getContentList&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;referenceName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;posts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;languageCode&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;posts&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note the use of the  component in both examples.&lt;/p&gt;

&lt;p&gt;This is all made possible by 2 amazing static site generation frameworks that are making it easier to make a faster web.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started Now
&lt;/h2&gt;

&lt;p&gt;Get started on a free Agility CMS account today to test out Gatsby or NextJS with starter solutions pre-configured and ready to go.  &lt;a href="https://agilitycmsc.com/free" rel="noopener noreferrer"&gt;Sign up here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>gatsby</category>
      <category>nextjs</category>
      <category>react</category>
    </item>
    <item>
      <title>It's time to give some love to your ex</title>
      <dc:creator>Joel Varty</dc:creator>
      <pubDate>Mon, 13 Jul 2020 18:11:52 +0000</pubDate>
      <link>https://dev.to/agilitycms/it-s-time-to-give-some-love-to-your-ex-345g</link>
      <guid>https://dev.to/agilitycms/it-s-time-to-give-some-love-to-your-ex-345g</guid>
      <description>&lt;p&gt;I'm talking EXPERIENCE, btw, for both developers and editors. What did you think we were talking about? ;)&lt;/p&gt;

&lt;p&gt;Join our very own &lt;a href="https://twitter.com/jameskvidler" rel="noopener noreferrer"&gt;James Vidler&lt;/a&gt; + &lt;a href="https://twitter.com/JoshWComeau" rel="noopener noreferrer"&gt;Josh Comeau&lt;/a&gt; from &lt;a href="https://gatsbyjs.org" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt; in this live webinar!&lt;/p&gt;

&lt;h3&gt;
  
  
  WHAT WILL YOU LEARN?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Why the Editor Experience is important&lt;/li&gt;
&lt;li&gt;What Editors don't like&lt;/li&gt;
&lt;li&gt;How to address Editor issues&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  WHO SHOULD ATTEND:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You are into JAMstack, but wary of how this changes the Editor Experience&lt;/li&gt;
&lt;li&gt;You are using Gatsby and you want to learn about Gatsby Cloud/Preview&lt;/li&gt;
&lt;li&gt;You want to learn about the power of Agility CMS Page Management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Host&lt;/strong&gt;: James Vidler, VP of Product Agility CMS. VR game enthusiast. Dog person.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;: Josh Comeau. Staff software engineer at Gatsby Inc. Instructor at Concordia Bootcamps. Beat Saberer. Cat person. :) &lt;/p&gt;

&lt;p&gt;Check out &lt;a href="https://joshwcomeau.com/" rel="noopener noreferrer"&gt;Josh's blog here&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agilitycms.com/resources/events/develop-faster-give-love-to-your-ex?source=top-bar-site" rel="noopener noreferrer"&gt;REGISTER HERE&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>gatsby</category>
      <category>react</category>
      <category>cms</category>
    </item>
    <item>
      <title>What is a Headless CMS</title>
      <dc:creator>Joel Varty</dc:creator>
      <pubDate>Thu, 09 Jul 2020 16:57:56 +0000</pubDate>
      <link>https://dev.to/agilitycms/what-is-a-headless-cms-3knd</link>
      <guid>https://dev.to/agilitycms/what-is-a-headless-cms-3knd</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/h4msiMN9ke8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Every forward-thinking brand, both large and small, is seeking out a headless CMS. Or a decoupled CMS. Or a hybrid CMS. Or, simply a CMS with APIs. But they’re all the same, right? &lt;/p&gt;

&lt;p&gt;Wrong. &lt;/p&gt;

&lt;p&gt;As we venture into the 2020s, brands need to ensure that their next CMS choice is the right one. Consumers are bouncing from device to device, channel to channel, brand to brand. &lt;a href="https://themarketinghelpline.com/content-marketing-stats/" rel="noopener noreferrer"&gt;92% of marketers report that their company views content as a business asset&lt;/a&gt; – and let’s face it, when you’ve got good content that drives traffic, it is definitely something your business cannot afford to lose. &lt;/p&gt;

&lt;p&gt;By the time you’re finished reading this guide, you will be able to understand what a headless CMS is, its benefits, the different types of &lt;a href="https://agilitycms.com/resources/guide/why-agility-includes-page-management-with-its-headless-apis" rel="noopener noreferrer"&gt;architectures&lt;/a&gt;, and plenty more.&lt;/p&gt;



&lt;h2&gt;Headless CMS Explained in 1 Minute&lt;/h2&gt;

&lt;p&gt;With a plethora of definitions out there, let’s first start by defining the term headless CMS.&lt;/p&gt;

&lt;p&gt;Contrary to a &lt;a href="https://agilitycms.com/resources/guide/why-you-should-choose-headless-over-traditional-cms" rel="noopener noreferrer"&gt;traditional CMS&lt;/a&gt;, a headless CMS is entirely decoupled from the presentation layer or frontend, which referred to as the “head”, while the backend is your content repository and content management system, known as the “body”.&lt;/p&gt;

&lt;p&gt;When you separate your content repository “body” from its presentation layer “head,” it becomes a headless CMS. What truly makes a headless CMS better than a traditional CMS is its content-first approach with full APIs to access and display content in any way desired. With this approach, a headless CMS enables you to author your content through the RESTful API and deliver that content wherever you need it — not just to a templated website or application.&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%2Fstatic.agilitycms.com%2Fheadless-in-1-minute-2.jpg" class="article-body-image-wrapper"&gt;&lt;img alt="What is a headless cms?" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.agilitycms.com%2Fheadless-in-1-minute-2.jpg" width="800" height="2000"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;Going Deeper (And Going Decoupled)&lt;/h3&gt;

&lt;p&gt;In its simplest form, a headless CMS is a content repository which can deliver content to any front-end or device via APIs. If you want to display your content on a web page, a native mobile app or in some other digital format a headless CMS doesn’t restrict you the way that a traditional CMS might. Thus in a broader sense, a headless CMS facilitates an omnichannel experience. &lt;/p&gt;

&lt;p&gt;An omnichannel experience provides customers with an integrated and aligned approach to marketing, customer service and sales. When a customer interacts with a brand through one digital medium such as via a mobile device, they want that same experience in another digital medium such as via a desktop, tablet or another smart device. Headless CMSs provide the backend necessary for omnichannel content management. It provides the admin user interface where content is created, edited and published and a RESTFUL API so that the content can be delivered where necessary, something that is crucial for the multi-touchpoint customer journeys of today. &lt;/p&gt;



&lt;p&gt;A headless CMS also removes other restrictions such as the technology stack that developers must learn. Rather than needing to familiarize themselves with the stack for a new CMS, developers can focus on the existing frontend. Headless CMSes can integrate with current technology stacks, making them easier to incorporate when compared to other types of CMSes. Content is treated as data in a headless CMS, so it reduces the need for page rendering. For brands dealing with multiple channels, this is especially useful as it means that content only needs to be added once and can be sent to required channels through the CMS. &lt;/p&gt;

&lt;p&gt;Non-developers especially find headless CMS platforms to be useful. Rather than requiring a developer to make sure that content is displayed appropriately across channels, marketers, editors and less technical personnel can create and manage content independently.&lt;/p&gt;



&lt;h2&gt;Traditional CMS vs Pure Headless CMS vs Decoupled CMS (A.K.A., Hybrid CMS)&lt;/h2&gt;

&lt;p&gt;The traditional CMS allows users to create, edit and publish content. It provides both the backend for managing and storing data and content as well as the front-end, usually with a WYSIWYG format for displaying the content. Traditional CMS platforms had the goal of posting content on one platform, such as a web page. &lt;/p&gt;

&lt;p&gt;A traditional CMS tightly couples your frontend with your backend (and all your content and assets). Content is created, managed, and stored—along with all of your digital assets—on the site’s back end. The back end is also where website design and customization applications are stored. The content management back end and database are bound within the same system that delivers and presents content to devices and end-users (front end). Basically, your editors are writing and publishing on the back end of the same system your website visitors are viewing.&lt;/p&gt;

&lt;p&gt;However, with the omnichannel experiences that consumers now crave, these CMSes can seem outdated for both developers and marketers. &lt;/p&gt;

&lt;p&gt;A pure headless CMS doesn’t generate any front-end code, which is why a headless CMS is sometimes referred to as “Content-as-a-Service” (CaaS). This process results in the best available digital experience for the end-users of a particular device. Front-end developers can continue developing new functionality for any channel, independent of the core/backend CMS. &lt;/p&gt;

&lt;p&gt;Decoupled or hybrid CMSes, provide the capabilities of a headless CMS configuration (i.e., a separate backend with APIs enabling any channel to pull content from it as well as front-end capabilities (e.g., coding and templates for presentation) where content can be pushed into a channel with limited presentation intelligence. &lt;/p&gt;

&lt;p&gt;A decoupled CMS offers the front-end delivery that a headless CMS lacks with preloaded templates and other front-end options typically available. However, where a pure headless CMS currently wins out is that it provides more control over how content is displayed. Headless CMS platforms are mostly future proof as since they connect to &lt;a href="https://agilitycms.com/resources/posts/apis-vs-sdks-what-s-the-difference" rel="noopener noreferrer"&gt;APIs&lt;/a&gt;; they can adapt to both current and future technologies. For teams intent on offering the best digital experiences for their customers, this is a bonus that cannot be overlooked as &lt;a href="https://agilitycms.com/resources/posts/top-10-web-development-trends-technologies-for-2020" rel="noopener noreferrer"&gt;technology continues to advance&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;&lt;a href="https://agilitycms.com/download/50-point-checklist-headless-cms?source=ourblog" rel="noopener noreferrer"&gt;&lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.agilitycms.com%2Fq3.jpg" width="800" height="524"&gt;&lt;/a&gt;&lt;/h2&gt;

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

&lt;h2&gt;The 5 Benefits of a Headless CMS Architecture&lt;/h2&gt;

&lt;p&gt;There are several benefits to using a headless CMS architecture. If you’re looking for a solution that caters specifically to the needs and wants of your developers, provides you with maximum control and flexibility, enhances your platform security, and ultimately future-proofs your CMS, then a headless CMS architecture should be on your radar. Below, I highlight and explain the top four benefits.&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;1. Faster Development, Faster Time-to-Market&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;A headless CMS is a dream come true for developers. Developers can continue to build websites or mobile applications using any programming language with their favourite tools, frameworks, and own development processes while still allowing full control over the application lifecycle without having to interfere with any CMS code. They can &lt;a href="https://agilitycms.com/resources/posts/top-jamstack-pioneers" rel="noopener noreferrer"&gt;use JAMstacks tools &lt;/a&gt;and &lt;span&gt;deliver better performance, higher security, lower cost of scaling, and a better developer experience.&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;Not just that, but developers and editors can also work better together. Editors no longer have to rely heavily on developers to build pages with a custom layout. This promotes an agile way of working which for projects can mean being finished a lot faster! The result is that not only will the time-to-market be diminished but also a single content item can be reused and combined with a number of different presentations. Developers and editors will be able to work much better together as well rather than in a silo.&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;2. Easy Integration&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;A headless CMS allows easy and secure integrations with any of your existing systems. A developer can code in any preferred language while allowing to use the programming language of the other platform that is being integrated into the CMS. Not having a fixed structure to develop or code in allows your developers to build any code for any type of integration. Allowing this type of flexibility makes it easier not just from a resourcing side but to integrate with systems that are more complex to integrate with. &lt;a href="https://help.agilitycms.com/hc/en-us/articles/115003042412-About-Integrations" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://help.agilitycms.com/hc/en-us/articles/115003042412-About-Integrations" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://help.agilitycms.com/hc/en-us/articles/115003042412-About-Integrations" rel="noopener noreferrer"&gt;Webhooks&lt;/a&gt; is another common way to have action triggered events. A webhook is user-defined by an HTTP callback (or small code snippets linked to a web application) which are triggered by specific events. For example, Stripe has a webhook that will automatically send an email to a customer whenever a subscription payment fails to go through.&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;3. Better Content Architecture &amp;amp; Ease of Use&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;The ability to architect and manage your content without worrying about its delivery is a huge bonus with a headless CMS. Its ease of use allows developers to build out your content and interface for your front-end users without the complexities that come with it. Content editors can relate their content types in different ways, but the interface usability also allows them to manage their content however they’d like.&lt;/p&gt;

&lt;p&gt;Also, because most headless systems are multi-tenant (which I’ll explain in more detail below), it’s always kept up to date with the most current trends, allowing organizations to be up to speed on the latest and greatest front-end experiences. With a headless API, you can specify content types and fragments that you want to push to the device or touchpoint of your choice allowing omnichannel readiness through any digital touchpoint and at any given time. This means a headless CMS can provide content for display and use on any number and type of channels.&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;4. Greater Scalability&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Architecting a content-first approach makes your system cleaner, more scalable and provides you with full control with how and where your content appears. You can host content anywhere, and this includes the use of static site generators (like using &lt;a href="https://www.gatsbyjs.org/packages/@agility/gatsby-source-agilitycms/?=agility" rel="noopener noreferrer"&gt;Gatsby JS&lt;/a&gt; for example) and other multi-server environments. Future-proofing is another significant benefit because you can easily integrate with new technology and innovations, especially when the industry is changing as often as it is.&lt;/p&gt;

&lt;p&gt;Since the back-end and front-end are separated, if the back-end CMS platform has any performance issues or, simply, needs maintenance, it won’t create any downtime to your website. In addition to this, cloud scalability, higher security, performance, and low operating costs is another big advantage.&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;5. Headless CMS costs less&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;With little technical involvement required in a headless CMS, it’s a lot quicker for your business teams to create new functionality. For example, if a marketing department wishes to create a new series of product mini-sites, they can go straight into the CMS and start creating immediately without having to wait for developers to build CMS-based templates. Your up-front cost is diminished as well because you can start with smaller solutions and then build your way up versus starting with one BIG install. It’s best to start small and then scale up as you need to.&lt;/p&gt;

&lt;h2&gt;Why a Multi-Tenant Architecture is Perfect for a Decoupled CMS&lt;/h2&gt;

&lt;p&gt;There are three types of headless CMS architectures. Below I outline the advantages of these types of architectures and why cloud multi-tenant is the best choice when choosing a headless CMS.&lt;/p&gt;

&lt;p&gt;Install Based: An install-based architecture is exactly how it sounds; you install the platform locally and host it on your own environment. This means you need to manage everything end to end and often still pay for a maintenance package to your provider to cover the platform updates.&lt;/p&gt;

&lt;p&gt;Cloud Install:  A cloud install architecture is very similar to install based except your provider installs the platform in their cloud. You normally pay your provider for hosting, management, and upgrades which can be extra or included, depending on your provider’s terms and conditions. Bear in mind that this can get extremely complicated because there can be different versions of your platform out there especially if you are constantly making updates and fixes. With this approach, you can quickly get behind in platform versioning if you are updating multiple sites.&lt;/p&gt;

&lt;p&gt;Cloud Multi-Tenant: This means your CMS itself is fully managed and upgraded automatically for you. I highly recommend this architecture because of its easy upgrades and security benefits. Here are some other top reasons why I recommend a true headless multi-tenant system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The “head” can be built anywhere, and you have unlimited options.&lt;/li&gt;
&lt;li&gt;You don’t have to deploy the CMS or manage it at all!&lt;/li&gt;
&lt;li&gt;Better support: A vendor only has to support one version and therefore you can concentrate all your efforts, documentation and time to just one solution.&lt;/li&gt;
&lt;li&gt;Often times bugs are fixed even before you get the chance to report it because the entire user base is reporting on the SAME version.&lt;/li&gt;
&lt;li&gt;SaaS-based so the cost is always spread out.&lt;/li&gt;
&lt;li&gt;You don’t need to manage ANY hardware or software, you just deploy your OWN code to your environment, this means more control without the hosting "&lt;a href="http://softwaretestingfundamentals.com/black-box-testing" rel="noopener noreferrer"&gt;black box&lt;/a&gt;" software method.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;The Headless CMS Industry Shift&lt;/h2&gt;

&lt;p&gt;First off, let’s dive into the effects of digital transformation. A survey found that &lt;a href="https://www.zdnet.com/article/survey-despite-steady-growth-in-digital-transformation-initiatives-companies-face-budget-and-buy-in/" rel="noopener noreferrer"&gt;70%&lt;/a&gt; of companies either have a digital transformation strategy in place or are working on one. This means that adopting technology and therefore using technology to interact with one’s customer is critical. Technology is moving faster than ever and in order to keep up with our customers and partners through all the digital channels available, a headless CMS can offset this for you.&lt;/p&gt;

&lt;p&gt;To keep up with the digital transformation, you need to move fast, fail fast, and get up and try again. Organizations need to develop faster, get to market faster and then tweak and change as they move along. They need to integrate with all the systems that each business now needs. I get it, as you get busy and go through digital transformation, you add additional technology to your stack and therefore need a system that can easily integrate and work with all your systems. A headless CMS promises all of these touchpoints to you!&lt;/p&gt;

&lt;p&gt;Second, it should come as no surprise that consumers today shop across multiple devices and channels. With new channels cropping up all the time, enterprises must look beyond a handful of digital touchpoints. An omnichannel approach offers the ability to create, orchestrate, and deliver delightful, fresh and iconic personalized customer experiences at a global scale across all touchpoints and all stages of the customer journey. This approach enables companies to stay in front of the rapidly changing digital landscape.&lt;/p&gt;

&lt;p&gt;On average, brands that employ a strong &lt;a href="https://www.v12data.com/blog/25-amazing-omnichannel-statistics-every-marketer-should-know/" rel="noopener noreferrer"&gt;omnichanne&lt;/a&gt;l strategy retain 89% of their customers compared to 33% of those with weak omnichannel engagement. You need to be able to scale your platform to support all these channels, but you also need a team that can handle all this work. Having an easier to use interface that is content first, allows you to focus on your content, publish and push your content to all your digital channels. This is why a headless CMS is so critical. It can provide content for display and even better, distribute that content to any type of channel. This saves resources, reduces the amount of duplicate content and also helps when you need to change things fast and deploy even faster.&lt;/p&gt;

&lt;p&gt;This omnichannel approach offers the means to engage prospects, customers, and partners wherever they stand. By empowering businesses to seamlessly create, manage and share content cross-channel, this approach can better support today’s complex customer journeys.&lt;/p&gt;

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

&lt;h2&gt;Headless CMS Use Cases&lt;/h2&gt;

&lt;p&gt;Okay, so a headless or decoupled CMS can store content and delivery anywhere via APIs, unlike a traditional CMS, which was built to send content to one or two specific types of front end. But what does that actually look like in practice?&lt;/p&gt;

&lt;h3&gt;Visit Orlando&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%2Fstatic.agilitycms.com%2Fvisit-orlando.png" class="article-body-image-wrapper"&gt;&lt;img alt="How Visit Orlando uses a Headless CMS" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.agilitycms.com%2Fvisit-orlando.png" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.visitorlando.com/en" rel="noopener noreferrer"&gt;Visit Orlando&lt;/a&gt;, the official tourism association for Orlando, Florida - home to Disney World and one of the most visited tourist destinations in the US - wanted to increase their engagement, conversion rate metrics and ticket sales. To achieve this goal they wanted to manage their content across various channels and personalize marketing campaigns for a targeted audience. &lt;/p&gt;

&lt;p&gt;Visit Orlando was severely hampered by an inefficient ticket management system and process and needed to revamp their entire digital strategy and bring everything under one umbrella. Through Agility’s Headless CMS they now have a multi-site, multi-channel content management system and a new ticket sales and POS solution. Their team is now able to focus on adding new properties onto the platform, both as new website instances or as digital channels. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;Learn more:&lt;br&gt;&lt;a href="https://agilitycms.com/resources/case-studies/visit-orlando" rel="noopener noreferrer"&gt;Visit Orlando Case Study&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Cineplex&lt;/h3&gt;



&lt;p&gt;&lt;br&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.agilitycms.com%2Fcineplex.png" class="article-body-image-wrapper"&gt;&lt;img alt="How Ciniplex uses a Headless CMS" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.agilitycms.com%2Fcineplex.png" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cineplex.com/" rel="noopener noreferrer"&gt;&lt;span&gt;Cineplex&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, a leading name in the Film Entertainment and Content, Amusement and Leisure, and Media sectors, accommodates over 70 million guests per year on its digital platforms. The initial challenges Cineplex faced was a system that didn’t allow freedom of design and was extremely limiting in terms of performance, scalability, usability and multilingual capabilities. They needed to improve the overall customer experience across various channels and improve conversation rates. &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;Agility’s CMS has allowed Cineplex to increase the scalability of the site and to optimize their hosting resources. The latest iteration utilizes a new hosting environment across load-balanced servers for optimal site speed and performance. The site is now handling more traffic with less CPU load than in previous years. &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;br&gt;&lt;/span&gt;Learn more: &lt;br&gt;&lt;a href="https://agilitycms.com/resources/case-studies/cineplex" rel="noopener noreferrer"&gt;Cineplex Case Study&lt;/a&gt;&lt;/p&gt;



&lt;h2&gt;Headless CMS: Go Content-first to Future-proof your Brand&lt;/h2&gt;

&lt;p&gt;Consumers are making use of more devices and channels than ever before, and brands have to meet them there to provide quality omnichannel experiences. Going headless, whether that’s through a pure headless CMS or a decoupled CMS, is the simplest way to achieve that.&lt;/p&gt;

&lt;p&gt;By adopting a content-first approach, which seeks to make your content the focal point of your digital presence, while your many front-ends and their frameworks can be evolved and expanded, is the most logical way to ensure that your brand and its content can meet consumers wherever they end up going. Whether that’s smart speakers, digital signage, VR headsets, or something else exciting&lt;/p&gt;

&lt;p&gt;With features such as page management, user-generated content and more, find out why &lt;a href="https://agilitycms.com/product/why-agility" rel="noopener noreferrer"&gt;Pepsico, Visit Orlando, and Pret a Manger chose Agility CMS&lt;/a&gt; as their headless CMS of choice.&lt;/p&gt;

&lt;h3&gt;
&lt;br&gt;Keep Reading  &lt;/h3&gt;

&lt;p&gt;If you want to learn more about Headless CMS, make sure you read these articles:&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a href="https://agilitycms.com/resources/posts/traditional-cms-vs-headless-cms-explained" rel="noopener noreferrer"&gt; &lt;span&gt;Traditional CMS vs Headless CMS – Explained&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://agilitycms.com/resources/guide/how-to-choose-the-best-headless-cms-for-your-brand-2020-edition" rel="noopener noreferrer"&gt;How To Choose The Best Headless CMS For Your Brand (2020 Edition) &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://agilitycms.com/resources/posts/wordpress-vs-agility-cms" rel="noopener noreferrer"&gt;WordPress vs Headless CMS: A Comparison &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;

</description>
      <category>headlesscms</category>
      <category>webdev</category>
      <category>learning</category>
    </item>
    <item>
      <title>Content Architecture: The Key to Organizing and Managing Your Content and Team</title>
      <dc:creator>Joel Varty</dc:creator>
      <pubDate>Mon, 29 Jun 2020 13:50:20 +0000</pubDate>
      <link>https://dev.to/agilitycms/content-architecture-the-key-to-organizing-and-managing-your-content-and-team-34bi</link>
      <guid>https://dev.to/agilitycms/content-architecture-the-key-to-organizing-and-managing-your-content-and-team-34bi</guid>
      <description>&lt;p&gt;&lt;a href="https://themarketinghelpline.com/content-marketing-stats/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.siegemedia.com/strategy/content-marketing-statistics#ch1" rel="noopener noreferrer"&gt;38% of content marketers rate their content marketing strategy as average&lt;/a&gt;, and just 9% believe their strategy is excellent. &lt;/p&gt;

&lt;p&gt;Strategizing and structuring your content is one of the most important steps of building a digital presence and integrating and transferring your content to multiple systems, and yet it is often overlooked. The final product of successful content strategy is a solid future proof content architecture. Your content architecture refers to the way all your content is organized, structured laid out, labelled and inter-connected.&lt;/p&gt;

&lt;p&gt;A well-designed content architecture is key for two things: your visitors’ web experience and your content editors’ content management experience. Your content editors will be able to build, edit and manage content more intuitively and, as a result, your visitors will have a better user experience too! This is the secret sauce of Content Before Design approach, or &lt;a href="https://agilitycms.com/resources/guide/how-to-design-a-content-first-strategy-using-agility-cms" rel="noopener noreferrer"&gt;Content First&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;The benefits of a well-planned content architecture&lt;/h2&gt;

&lt;p&gt;Back end experience is equally as important as end-user experience, if not more. And yet the majority of companies are primarily concerned with end-user experience. However, how your back-end is organized can have a huge impact on your front-end experience. Ideally both experiences should be optimized and in a way mirror each other.&lt;/p&gt;

&lt;p&gt;This is where content architecture comes in. Content architecture is all about backend; how you manage content, interact with it and distribute it between all your systems. A well set-up content architecture will lead to more efficient and seamless connections between content across systems, allowing your content team to work more efficiently and according to their own workflows.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Learn More:&lt;/em&gt;&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://agilitycms.com/resources/posts/why-is-a-headless-cms-architecture-so-popular" rel="noopener noreferrer"&gt;Why is a Headless CMS Architecture so Popular?&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h2&gt;Overall, a good content architecture will improve frontend by:&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Increasing agility of your content team&lt;/li&gt;
&lt;li&gt;Providing them with a clean backend, which will ripple through to the frontend&lt;/li&gt;
&lt;li&gt;Enabling your team to more easily grow the frontend of your website over time and remain more flexible&lt;/li&gt;
&lt;li&gt;Empowering your content team to rely less on developers&lt;/li&gt;
&lt;li&gt;Increasing your CMS flexibility, enabling the easy expansion of your website and of new system integrations&lt;/li&gt;
&lt;li&gt;Perfectly positioning your platform for the benefits of new personalization initiatives, which are sweeping the Marketing world.&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%2Fstatic.agilitycms.com%2Fcontent-architecture.png" class="article-body-image-wrapper"&gt;&lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.agilitycms.com%2Fcontent-architecture.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So how exactly does content architecture impact frontend and, as a consequence, end user experience? There are many ways. To start off, the easier it is for things to be optimized and managed in the frontend, the more efficient your internal workflows will be, and the more time your content editors will have to create better experiences for your customers.&lt;/p&gt;

&lt;p&gt;Having a smooth and intuitive content architecture will also make it easier for your editors to build new pages, edit content and avoid content bugs. And it will enable editors to be more reactive to issues with customer journeys and to build better ones.&lt;/p&gt;

&lt;p&gt;A well-planned content architecture avoids putting editors in situations where they might have to hard-code content because the backend is too complex, and allows them to rely less on developers when a change is needed, leading to faster and more efficient updates.&lt;/p&gt;

&lt;p&gt;Good content architecture is also tremendously beneficial when it comes to expanding a website. By thinking ahead of what integrations you may need in the mid- to long-term you can ensure that these will be easier to implement and that the integration process will run more smoothly. No more complete restructurings of your website every time you need a new integration!&lt;/p&gt;

&lt;p&gt;Finally, with personalization becoming a key player in the future of content management, a well-planned content architecture will best position you to assign personalization tags and categories across all your content.&lt;/p&gt;

&lt;p&gt;Ultimately, optimized internal workflows will give you great benefits in the long run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provide a better user experience and flow for your customers and content editors alike&lt;/li&gt;
&lt;li&gt;Increase the efficiency of your content management and editing process&lt;/li&gt;
&lt;li&gt;Ensure that information and products are delivered as quickly as possible&lt;/li&gt;
&lt;li&gt;Cut down unexpected costs and development time&lt;/li&gt;
&lt;li&gt;Ensure future expandability and flexibility as future requirements come along, from design and content changes to enhanced features&lt;/li&gt;
&lt;li&gt;Deliver better personalized content to your users, increasing conversions and sales&lt;/li&gt;
&lt;li&gt;Ensure any website reskinning process runs efficiently and smoothly&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;em&gt;Learn More:&lt;/em&gt;&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://agilitycms.com/resources/posts/how-content-architecture-helps-your-bottom-line" rel="noopener noreferrer"&gt;How Content Architecture Helps Your Bottom Line&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h2&gt;So what are the steps you can take to ensure your content architecture is effective&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%2Fstatic.agilitycms.com%2Fcontent-architecture-1.png" class="article-body-image-wrapper"&gt;&lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.agilitycms.com%2Fcontent-architecture-1.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;1. Set your goals and objectives&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Thinking about your goals and objectives as you begin to structure your content architecture will have a huge impact on how intuitive and effective your internal workflows will be. Think of your key goals and ensure that your next step always keeps them in mind and supports them.&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;2. Map out your internal workflows&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;The next step will be looking at every relevant aspect of your content, from workflows that take place daily and areas that require a lot of updates and optimizations, to integrations that you might require in the future security requirements. Literally anything that could have an impact on your content management.&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;3. Configure your CMS&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Finally, implement all these requirements &lt;a href="https://agilitycms.com/resources/guide/why-content-architecture-is-essential-to-the-success-of-any-cms-implementation" rel="noopener noreferrer"&gt;during the CMS configuration process&lt;/a&gt;, so that it always supports your internal workflows. This is an important but complex process that will require a CMS that is highly configurable, so that it can adjust to your exact needs.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Learn More:&lt;/em&gt;&lt;/p&gt;





&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://agilitycms.com/resources/guide/how-to-design-a-content-first-strategy-using-agility-cms" rel="noopener noreferrer"&gt;How to Design A Content-First Strategy using Agility CMS&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://agilitycms.com/resources/posts/three-steps-to-planning-your-content-architecture" rel="noopener noreferrer"&gt;Three Steps To Planning Your Content Architecture&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;a href="https://agilitycms.com/resources/posts/the-ultimate-content-architecture-tutorial" rel="noopener noreferrer"&gt;The Ultimate CMS Content Architecture Tutorial&lt;/a&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>cms</category>
      <category>team</category>
    </item>
  </channel>
</rss>
