<?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>Forem: Charles Ouellet</title>
    <description>The latest articles on Forem by Charles Ouellet (@couellet).</description>
    <link>https://forem.com/couellet</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%2F16463%2F7a8ed329-a968-4103-abb6-5e0bdc2cf010.jpg</url>
      <title>Forem: Charles Ouellet</title>
      <link>https://forem.com/couellet</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/couellet"/>
    <language>en</language>
    <item>
      <title>Statamic Headless Tied to a Gatsby Blog [Tutorial &amp; Live Demo]</title>
      <dc:creator>Charles Ouellet</dc:creator>
      <pubDate>Thu, 10 Dec 2020 09:15:54 +0000</pubDate>
      <link>https://forem.com/couellet/statamic-headless-tied-to-a-gatsby-blog-tutorial-live-demo-bk1</link>
      <guid>https://forem.com/couellet/statamic-headless-tied-to-a-gatsby-blog-tutorial-live-demo-bk1</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qm2K4FBD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/205516/statamic-headless-gatsby-blog-tutorial.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qm2K4FBD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/205516/statamic-headless-gatsby-blog-tutorial.png" alt="Statamic Headless Tied to a Gatsby Blog [Tutorial &amp;amp; Live Demo]"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s hard to mention any other languages than JavaScript when writing about the Jamstack. &lt;/p&gt;

&lt;p&gt;As with most modern web trends, &lt;a href="https://snipcart.com/blog/why-javascript-benefits"&gt;JavaScript is &lt;em&gt;everywhere&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, it would be false to say that this paradigm can’t open its arms to “traditional” programming language like, say, PHP.&lt;/p&gt;

&lt;p&gt;Case in point: the Laravel-powered CMS, Statamic. Changes made in its latest version now allow developers to use it as a headless CMS, making it a perfect fit for &lt;a href="https://snipcart.com/blog/jamstack"&gt;Jamstack&lt;/a&gt; projects.&lt;/p&gt;

&lt;p&gt;And that’s exactly what I’m going to do today. &lt;strong&gt;In this tutorial, I’ll use Statamic headless to manage and feed data to a Gatsby frontend&lt;/strong&gt;, resulting in a neat little blog.&lt;/p&gt;

&lt;p&gt;Here’s what I’ll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installing Statamic as headless&lt;/li&gt;
&lt;li&gt;Creating a new Gatsby project&lt;/li&gt;
&lt;li&gt;Setting up the Statamic GUI&lt;/li&gt;
&lt;li&gt;Adding new collections&lt;/li&gt;
&lt;li&gt;Using Statamic to feed the Gatsby blog&lt;/li&gt;
&lt;li&gt;Handling Statamic’s data&lt;/li&gt;
&lt;li&gt;Creating a blog post layout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m no PHP expert, so I’ll certainly learn a thing or two along the way as well. Let’s dive right in!&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uqdMtOoZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/205517/statamic-tutorial.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uqdMtOoZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/205517/statamic-tutorial.png" alt="statamic-tutorial"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Statamic (and its latest version, v3) is many things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's a Content Management System (CMS) where data can be pulled via an API endpoint. You &lt;em&gt;can&lt;/em&gt; use it as &lt;a href="https://jamstack.org/headless-cms/"&gt;a headless CMS&lt;/a&gt; (as I’ll do in the tutorial below.)&lt;/li&gt;
&lt;li&gt;It's a Static Site Generator (SSG) that can be deployed to any Content Delivery Network (CDN) known to man. &lt;/li&gt;
&lt;li&gt;It's a content creation tool, enabling content creators to write posts and store and distribute videos. &lt;/li&gt;
&lt;li&gt;It's an open-source, PHP-based, Laravel package designed to scale and be used as both a front and backend.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Phew, that was a lot of joy to be throwing Statamic’s way. As a first time user, I found the experience of setting it up and grabbing data rather painless. Of course, I stumbled a few times; we’ll go over those together so that you don't have to do it alone. &lt;/p&gt;

&lt;p&gt;But all in all, I'd have to say that I'm mightily impressed! Also, the site and docs are just super cool to look at. Reading the copy feels like chatting with a mate down at the pub on a Sunday.&lt;/p&gt;

&lt;p&gt;With the release of v3, Statamic introduced a formal way of grabbing the data stored and making it headless: the &lt;a href="https://statamic.dev/content-api"&gt;content API&lt;/a&gt;. In v2, there was the possibility to use an addon called &lt;a href="https://statamic.com/addons/aryeh-raber/fetch"&gt;Fetch&lt;/a&gt;, which would supply JSON endpoints, but with the introduction of the content API, getting your hands on that lovely data has become a first-class citizen. It's now fully supported with a read-only endpoint. &lt;/p&gt;

&lt;p&gt;→ Read the full post &lt;a href="https://snipcart.com/blog/statamic-headless-gatsby-blog-tutorial"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>php</category>
    </item>
    <item>
      <title>11ty Tutorial: Cranking Your Jamstack Blog Up to 11!</title>
      <dc:creator>Charles Ouellet</dc:creator>
      <pubDate>Thu, 12 Nov 2020 18:45:42 +0000</pubDate>
      <link>https://forem.com/couellet/11ty-tutorial-cranking-your-jamstack-blog-up-to-11-5d58</link>
      <guid>https://forem.com/couellet/11ty-tutorial-cranking-your-jamstack-blog-up-to-11-5d58</guid>
      <description>&lt;p&gt;We first wrote an 11ty tutorial on this blog back in 2018.&lt;/p&gt;

&lt;p&gt;At the time, there was a brewing hype about this JavaScript-powered static site generator, but it was still relatively unknown.&lt;/p&gt;

&lt;p&gt;Things change, though. &lt;em&gt;Rapidly&lt;/em&gt;. As web developers, we all know too well about that. &lt;/p&gt;

&lt;p&gt;Today, Eleventy is one of the &lt;a href="https://snipcart.com/blog/choose-best-static-site-generator"&gt;most beloved SSG&lt;/a&gt; in the Jamstack community. The old version of this post didn’t do it justice anymore.&lt;/p&gt;

&lt;p&gt;So we invited our friend Raymond Camden, who already had &lt;a href="https://www.raymondcamden.com/"&gt;personal experiences&lt;/a&gt; with 11ty, to refresh this piece.&lt;/p&gt;

&lt;p&gt;Following is Raymond’s tutorial to build a functional 11ty blog. Here’s what he’ll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installing 11ty&lt;/li&gt;
&lt;li&gt;Building a homepage&lt;/li&gt;
&lt;li&gt;Generating blog posts&lt;/li&gt;
&lt;li&gt;Dating posts&lt;/li&gt;
&lt;li&gt;Making the 11ty blog good-looking&lt;/li&gt;
&lt;li&gt;Adding page archives&lt;/li&gt;
&lt;li&gt;Sprinkling in some data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alright, the mic is yours, Mr. Camden.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Eleventy (or 11ty)?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bXnvh_GO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/205531/11ty-blog-tutorial.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bXnvh_GO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/205531/11ty-blog-tutorial.png" alt="11ty-blog-tutorial"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Put bluntly, &lt;strong&gt;&lt;a href="https://www.11ty.dev/"&gt;11ty&lt;/a&gt; is a simple static site generator written in JavaScript&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;How does this little wonder work? Simply by transforming a directory of templates of varying types into HTML. Eleventy doesn't take the words "varying types" lightly—one of its main features is its templating system's flexibility. I’ll discuss this more in the tutorial below.&lt;/p&gt;

&lt;p&gt;You can think of it as an alternative to something like &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt;. Personally, I really like Jekyll, but one aspect I found troublesome was its use of Ruby. &lt;/p&gt;

&lt;p&gt;I'm primarily a Windows user (although I'm normally using Ubuntu with WSL) and in the past, getting it up and running was problematic. The first few times I did it, I can remember it taking a few hours. It was always quite dreadful. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eleventy is based on Node&lt;/strong&gt;, a platform I'm much more comfortable with. It makes the configuration part way smoother.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Want to learn more about Jekyll? The Snipcart team crafted &lt;a href="https://snipcart.com/blog/jekyll-ecommerce-tutorial"&gt;this tutorial&lt;/a&gt; for it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've been a proponent of the &lt;a href="https://snipcart.com/blog/jamstack"&gt;Jamstack&lt;/a&gt; for a few years now, going back before it was even a term and was just basically "static sites". In that time, I've gone through multiple &lt;em&gt;favorite&lt;/em&gt; SSGs, but I've never fallen quite in love with another one as much as I have with Eleventy. &lt;/p&gt;

&lt;p&gt;It's flexible, easy to use, and powerful. I'm totally ready to recommend it to both new and seasoned Jamstack developers. &lt;/p&gt;

&lt;h2 id="tutorial"&gt; 11ty tutorial: cranking your Jamstack blog up to 11! &lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qZ9DNUgO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://snipcart.com/media/205532/let-s-have-a-laugh-before-getting-technical.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qZ9DNUgO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://snipcart.com/media/205532/let-s-have-a-laugh-before-getting-technical.gif" alt="These go to eleven"&gt;&lt;/a&gt;&lt;/p&gt; &lt;a href="https://www.youtube.com/watch?v=4xgx4k83zzc&amp;amp;ab_channel=goto11tv"&gt;&lt;em&gt;Let’s have a laugh before getting technical&lt;/em&gt;&lt;/a&gt; 

&lt;p&gt;I'm going to give you a quick introduction to the product and walk you through creating a blog. &lt;/p&gt;

&lt;p&gt;And not just any blog, mind you, but a Super Awesome Cat blog!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YRtB9_-r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/205524/11ty-blog-tutorial.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YRtB9_-r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/205524/11ty-blog-tutorial.png" alt="Cat Blog"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ok, that's not the prettiest blog, but you can fix that later on. &lt;/p&gt;

&lt;p&gt;Let's get started!&lt;/p&gt;

&lt;p&gt;→ Read the full tutorial &lt;a href="https://snipcart.com/blog/11ty-tutorial"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>node</category>
    </item>
    <item>
      <title>Craft Better Looking Vue Apps Using Tailwind CSS</title>
      <dc:creator>Charles Ouellet</dc:creator>
      <pubDate>Fri, 11 Sep 2020 08:43:01 +0000</pubDate>
      <link>https://forem.com/couellet/craft-better-looking-vue-apps-using-tailwind-css-1anl</link>
      <guid>https://forem.com/couellet/craft-better-looking-vue-apps-using-tailwind-css-1anl</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y_bJrxzh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/205227/tailwind-vue.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y_bJrxzh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/205227/tailwind-vue.png" alt="Craft Better Looking Vue Apps Using Tailwind CSS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How do you feel about CSS?&lt;/p&gt;

&lt;p&gt;It has always been a love-hate relationship for me. &lt;/p&gt;

&lt;p&gt;I mean, I like to experiment with it. However, my teammates at Snipcart have laughed at my demos’ design more than once (not that I agree with them.)&lt;/p&gt;

&lt;p&gt;That’s why I’m so glad that we now have tools like Tailwind CSS to smooth devs’ relations with CSS.&lt;/p&gt;

&lt;p&gt;On the other hand, I can confidently say that &lt;a href="https://snipcart.com/blog/wordpress-vue-headless"&gt;Vue.js&lt;/a&gt; is more part of my expertise. Today, let’s bundle these two tools while learning &lt;strong&gt;how to set up Tailwind CSS with &lt;a href="https://snipcart.com/blog/vuejs-debugging"&gt;Vue&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s what this tutorial includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating a Vue 3 app&lt;/li&gt;
&lt;li&gt;Setting up Tailwind CSS&lt;/li&gt;
&lt;li&gt;Defining data to play with Tailwind&lt;/li&gt;
&lt;li&gt;Pushing the configuration further&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ll also cover the naming convention in Tailwind at the end of the tutorial. It should be fun. Let’s go!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Tailwind CSS?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mtD-Uhp5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/205228/tailwindcss-tutorial.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mtD-Uhp5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/205228/tailwindcss-tutorial.png" alt="tailwind-css-tutorial"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a nutshell, &lt;strong&gt;&lt;a href="https://tailwindcss.com/"&gt;Tailwind CSS&lt;/a&gt; is a utility-first CSS framework for rapidly building custom designs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don’t worry if you’re not familiar with it. I’ll debunk that definition in a moment. &lt;/p&gt;

&lt;p&gt;But let’s start at the beginning.&lt;/p&gt;

&lt;p&gt;Tailwind came on the scene as an answer to CSS frameworks that “were doing too much”. The most popular of these frameworks that came before it being &lt;a href="https://getbootstrap.com/"&gt;Bootstrap&lt;/a&gt;, I’ll use it as a point of comparison here.&lt;/p&gt;

&lt;p&gt;Bootstrap came with a bunch of predefined styles for components such as buttons, icons, or cards. While it enabled fast shipping times, it didn’t do much in terms of offering &lt;em&gt;custom&lt;/em&gt; designs. With time, the problem is that you can start to easily identify Bootstrap projects because they have similar looks. &lt;/p&gt;

&lt;p&gt;That’s not how Tailwind CSS works. Instead of giving you pre-styled components, it “provides low-level utility classes that let you build completely custom designs without ever leaving your HTML.”&lt;/p&gt;

&lt;p&gt;That’s what &lt;strong&gt;utility-first&lt;/strong&gt; means in that first definition. If it still sounds nebulous to you, the tutorial below will make it more concrete.&lt;/p&gt;

&lt;p&gt;→ Read the full tutorial &lt;a href="https://snipcart.com/blog/tailwind-vue-tutorial"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>css</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Gridsome Tutorial: Go Live with E-Commerce Fast</title>
      <dc:creator>Charles Ouellet</dc:creator>
      <pubDate>Thu, 27 Aug 2020 10:24:28 +0000</pubDate>
      <link>https://forem.com/couellet/gridsome-tutorial-go-live-with-e-commerce-fast-2l3d</link>
      <guid>https://forem.com/couellet/gridsome-tutorial-go-live-with-e-commerce-fast-2l3d</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nOtvf9F0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204974/gridsome-ecommerce-tutorial.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nOtvf9F0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204974/gridsome-ecommerce-tutorial.png" alt="Using Gridsome for E-Commerce [Tutorial &amp;amp; Live Demo]"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the latest dev hire for Snipcart, I was put to the test quickly.&lt;/p&gt;

&lt;p&gt;My mission? Craft an e-commerce side-project using our shopping cart with an imposed technology, in a limited amount of time.&lt;/p&gt;

&lt;p&gt;The technology in question? Gridsome, the &lt;a href="https://snipcart.com/blog/jamstack"&gt;Jamstack&lt;/a&gt; framework for Vue.js.&lt;/p&gt;

&lt;p&gt;So, I rolled up my sleeves and got to work. &lt;/p&gt;

&lt;p&gt;My efforts resulted in a Gridsome e-commerce demo. I documented my process in a step-by-step tutorial ready for you to follow along.&lt;/p&gt;

&lt;p&gt;This tutorial explores how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a Gridsome project&lt;/li&gt;
&lt;li&gt;Enable e-commerce functionalities with Snipcart&lt;/li&gt;
&lt;li&gt;Craft product listings &amp;amp; pages&lt;/li&gt;
&lt;li&gt;Configure the template routing&lt;/li&gt;
&lt;li&gt;Leverage GraphQL with Gridsome&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I &lt;em&gt;think&lt;/em&gt; I did a decent job. Let’s see, shall we?&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s up with Gridsome?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wTMS1e2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204973/gridsome-tutorial.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wTMS1e2_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204973/gridsome-tutorial.png" alt="gridsome-tutorial"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In case you don’t know about it, &lt;strong&gt;&lt;a href="https://gridsome.org/"&gt;Gridsome&lt;/a&gt; is a modern website generator for Vue.js&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What does “modern” mean here? As a tool, it falls under the trending Jamstack umbrella and can be used to generate static websites, progressive web apps (PWA), or single-page apps (SPA). Whatever the type of frontend platform you want to create, Gridsome makes it easy to connect to any CMS or data source using &lt;a href="https://graphql.org/"&gt;GraphQL&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://snipcart.com/blog/vuejs-graphql-airtable-example"&gt;This first post&lt;/a&gt; we wrote about Gridsome explained how to use the GraphQL API to fetch data from an Airtable database.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Familiar with the React-powered Gatsby? Well, Gridsome can be considered the equivalent for Vue.&lt;/p&gt;

&lt;p&gt;→ Read the full tutorial &lt;a href="https://snipcart.com/blog/gridsome-ecommerce-tutorial"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>vue</category>
    </item>
    <item>
      <title>Bundling Strapi &amp; Nuxt: E-Commerce Tutorial with Snipcart</title>
      <dc:creator>Charles Ouellet</dc:creator>
      <pubDate>Thu, 13 Aug 2020 15:35:27 +0000</pubDate>
      <link>https://forem.com/couellet/bundling-strapi-nuxt-e-commerce-tutorial-with-snipcart-5o8</link>
      <guid>https://forem.com/couellet/bundling-strapi-nuxt-e-commerce-tutorial-with-snipcart-5o8</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B93G-hua--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204926/strapi-nuxt-ecommerce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B93G-hua--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204926/strapi-nuxt-ecommerce.png" alt="Bundling Strapi &amp;amp; Nuxt: E-Commerce Tutorial with Snipcart"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It feels like we haven’t explored a &lt;a href="https://snipcart.com/blog/headless-ecommerce-guide"&gt;headless CMS&lt;/a&gt; for ages on the blog.&lt;/p&gt;

&lt;p&gt;Strapi sounds like an excellent choice to come back to it 👌&lt;/p&gt;

&lt;p&gt;It was already a solid product when we first wrote about it &lt;a href="https://snipcart.com/blog/node-js-react-strapi-tutorial"&gt;back in 2018&lt;/a&gt;. However, the team at Strapi didn’t stop the great work there. I can’t wait to see what it has to offer as of today.&lt;/p&gt;

&lt;p&gt;In this tutorial, I’ll mix it up with two other powerful tools from the Jamstack ecosystem. The result? A Strapi-powered e-commerce website.&lt;/p&gt;

&lt;p&gt;The frontend will be built using the neat Vue framework that is Nuxt.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://snipcart.com/blog/ecommerce-checklist"&gt;e-commerce&lt;/a&gt; functionalities will be provided by Snipcart, our JS/HTML shopping cart.&lt;/p&gt;

&lt;p&gt;Here are the specific steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating a Strapi app &amp;amp; creating products&lt;/li&gt;
&lt;li&gt;Consuming products with Nuxt.js&lt;/li&gt;
&lt;li&gt;Adding e-commerce functionalities with Snipcart&lt;/li&gt;
&lt;li&gt;Handling custom fields in the cart&lt;/li&gt;
&lt;li&gt;Integrating a GraphQL plugin&lt;/li&gt;
&lt;li&gt;Deploying the Strapi &amp;amp; Nuxt e-commerce app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s start by meeting our players.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s up with Strapi?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kb55AB0v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204940/strapi-tutorial.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kb55AB0v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204940/strapi-tutorial.png" alt="strapi-tutorial"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://strapi.io/"&gt;Strapi&lt;/a&gt; is an open-source Node.js-based headless CMS. It’s 100% JavaScript, fully-customizable and developer-first.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It has made its way to the top of &lt;a href="https://headlesscms.org/"&gt;the most popular headless CMSs&lt;/a&gt; thanks to the flexibility it gives to devs to work with any tools they love.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Using Vue, React, or plain JS on the frontend?&lt;/em&gt; It doesn’t matter. &lt;em&gt;Consuming the API with REST or GraphQL?&lt;/em&gt; Both options work seamlessly. &lt;em&gt;Connecting PostgreSQL, MongoDB, SQLite, MySQL as database?&lt;/em&gt; All the same to Strapi.&lt;/p&gt;

&lt;p&gt;In our last Strapi post, we highlighted another huge benefit a Node.js headless CMS brings: &lt;strong&gt;building apps that are entirely JavaScript&lt;/strong&gt;—on the frontend and the backend alike. Welcome code universality, performance &amp;amp; easy npm install at every level!&lt;/p&gt;

&lt;p&gt;This tutorial will showcase both the flexibility of Strapi and the power of &lt;a href="https://en.wikipedia.org/wiki/Isomorphic_JavaScript"&gt;Universal JS&lt;/a&gt; apps.&lt;/p&gt;

&lt;p&gt;On another note, we’re big fans of the whole redesign the Strapi team did for their branding and marketing website lately. Looking sharp!&lt;/p&gt;

&lt;p&gt;→ Read the full tutorial &lt;a href="https://snipcart.com/blog/strapi-nuxt-ecommerce-tutorial"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>vue</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Introducing TinaCMS: Inline Content Editing for React</title>
      <dc:creator>Charles Ouellet</dc:creator>
      <pubDate>Thu, 30 Jul 2020 11:11:56 +0000</pubDate>
      <link>https://forem.com/couellet/introducing-tinacms-inline-content-editing-for-react-3hoc</link>
      <guid>https://forem.com/couellet/introducing-tinacms-inline-content-editing-for-react-3hoc</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UrRukAEj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204930/tinacms-nextjs-tutorial.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UrRukAEj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204930/tinacms-nextjs-tutorial.png" alt="Introducing TinaCMS: Inline Content Editing for React"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;“Jamstack is great for developers, but it’s too tech-savvy to get my clients on board.”&lt;/p&gt;

&lt;p&gt;I can’t count the number of times we’ve heard this comment from devs.&lt;/p&gt;

&lt;p&gt;In all fairness, it was true of the Jamstack in 2015. However, many solutions to get around this issue have popped up since then.&lt;/p&gt;

&lt;p&gt;Take the multiple competent &lt;a href="https://snipcart.com/blog/headless-ecommerce-guide"&gt;headless CMSs&lt;/a&gt; or &lt;a href="https://snipcart.com/blog/stackbit"&gt;static site builders&lt;/a&gt; such as Stackbit, for instance. They’ve paved the way for a user-friendly modern web development experience.&lt;/p&gt;

&lt;p&gt;Another relatively new player, TinaCMS, is pushing static website editing to a whole new accessibility level.&lt;/p&gt;

&lt;p&gt;In this post, I’ll try out this editing toolkit by integrating it on a Next.js app and showcasing its main features.&lt;/p&gt;

&lt;p&gt;The steps to build the live demo are as follow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating a Next.js project&lt;/li&gt;
&lt;li&gt;Adding markdown content&lt;/li&gt;
&lt;li&gt;Generating markdown helpers&lt;/li&gt;
&lt;li&gt;Integrating TinaCMS &amp;amp; the inline editing feature&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ready to do this?&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--af7INOD9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204931/tinacms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--af7INOD9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204931/tinacms.png" alt="tinacms"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The team at &lt;a href="https://tinacms.org/"&gt;Tina&lt;/a&gt; has made it pretty clear that &lt;em&gt;it isn’t a CMS.&lt;/em&gt; Not in the traditional sense anyway.&lt;/p&gt;

&lt;p&gt;What is it then? The definition you’ll find on their site is that &lt;strong&gt;Tina is an open-source site editing toolkit for React-based sites.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It allows users to manage content directly on their website instead of working from another platform. It exposes an editing interface to handle and update content in real-time.&lt;/p&gt;

&lt;p&gt;Once installed, users get an edit icon that reveals the editing screen containing the CMS fields. The content you input in there is then written to external data sources such as Markdown or JSON files.&lt;/p&gt;

&lt;p&gt;TinaCMS opens the Jamstack door to teams who need non-technical folks to work on content &amp;amp; site editing seamlessly. &lt;/p&gt;

&lt;p&gt;→ Read the full post &lt;a href="https://snipcart.com/blog/tinacms-nextjs-cms"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Getting Started with WordPress Static Site Generators</title>
      <dc:creator>Charles Ouellet</dc:creator>
      <pubDate>Thu, 02 Jul 2020 11:03:04 +0000</pubDate>
      <link>https://forem.com/couellet/getting-started-with-wordpress-static-site-generators-1kg6</link>
      <guid>https://forem.com/couellet/getting-started-with-wordpress-static-site-generators-1kg6</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s-znUM1i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204912/wordpress-jamstack.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s-znUM1i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204912/wordpress-jamstack.png" alt="Getting Started with WordPress Static Site Generators"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You’ve heard the saying: “opposites attract.”&lt;/p&gt;

&lt;p&gt;It certainly is true of the two concepts explored in this post. &lt;/p&gt;

&lt;p&gt;On one side, WordPress. On the other, &lt;a href="https://snipcart.com/blog/choose-best-static-site-generator"&gt;static sites&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The first represents the old guard of monolithic CMS; the second, the new frontend wave.&lt;/p&gt;

&lt;p&gt;Despite their apparent differences, we hear more and more about WordPress static websites, WordPress static site generators, and so on.&lt;/p&gt;

&lt;p&gt;It might sound counterintuitive, but when you think about it, why wouldn’t you want the best of both worlds?&lt;/p&gt;

&lt;p&gt;That’s exactly the question I’ll explore today. More precisely, I’ll have a look at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why you should use WordPress to generate static sites&lt;/li&gt;
&lt;li&gt;The benefits &amp;amp; limits of this approach&lt;/li&gt;
&lt;li&gt;The many existing WP static site generators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rising interest for Jamstack in the WordPress community is quite exciting to observe. &lt;/p&gt;

&lt;p&gt;Let’s jump into it right away!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use WordPress to generate static sites?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s-znUM1i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204912/wordpress-jamstack.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s-znUM1i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204912/wordpress-jamstack.png" alt="wordpress-jamstack"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pairing WP and static sites doesn’t strip away power from the site editors. WordPress users can still use the popular CMS to create and edit content. &lt;/p&gt;

&lt;p&gt;So where does the process differ? After an editor hits “Publish”, the site content is exported to HTML, pre-compiled static files ready to be served, instead of the usual PHP-generated views.&lt;/p&gt;

&lt;p&gt;There are many available tools &amp;amp; plugins to accomplish this. I’ll list them later on.&lt;/p&gt;

&lt;p&gt;However, if terms like &lt;a href="https://snipcart.com/blog/jamstack"&gt;Jamstack&lt;/a&gt;, static websites, or headless CMS are unfamiliar to you, there are a few things we need to clarify before going further.&lt;/p&gt;

&lt;p&gt;This section will lay out the differences with a standard WordPress setup and a Jamtack-inspired one. I’ll then highlight the benefits &amp;amp; limitations of the latter.&lt;/p&gt;

&lt;p&gt;→ Read the full post &lt;a href="https://snipcart.com/blog/wordpress-static-site-generator"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>html</category>
      <category>wordpress</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Gatsby E-Commerce Recipe: Integrate a Cart in a Few Steps</title>
      <dc:creator>Charles Ouellet</dc:creator>
      <pubDate>Fri, 19 Jun 2020 09:56:23 +0000</pubDate>
      <link>https://forem.com/couellet/gatsby-e-commerce-recipe-integrate-a-cart-in-a-few-steps-3263</link>
      <guid>https://forem.com/couellet/gatsby-e-commerce-recipe-integrate-a-cart-in-a-few-steps-3263</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wKy9mMfK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204904/gatsby-snipcart-ecommerce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wKy9mMfK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204904/gatsby-snipcart-ecommerce.png" alt="Gatsby E-Commerce Recipe: Integrate a Cart in a Few Steps"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No tool in the &lt;a href="https://snipcart.com/blog/jamstack"&gt;Jamstack ecosystem&lt;/a&gt; has made more steps towards an optimal developer experience than Gatsby.&lt;/p&gt;

&lt;p&gt;What started as a simple, albeit performant, static site generator is today so much more than that.&lt;/p&gt;

&lt;p&gt;One recent example of this ongoing progress was the release of Gatsby Recipes, which allow even more automation in the site-building process.&lt;/p&gt;

&lt;p&gt;When we stumbled upon this, we automatically thought: “Here’s the perfect occasion to ease up an e-commerce integration for Gatsby projects!”&lt;/p&gt;

&lt;p&gt;So today, we’re glad to present to you our new Gatsby e-commerce recipe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This post will explain how we’ve built it and how you can use it for your own Gatsby e-commerce website.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s start by clearing up what are Gatsby recipes exactly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Gatsby recipes?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cFhDSr1t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204903/gatsby-recipes.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cFhDSr1t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204903/gatsby-recipes.png" alt="gatsby-recipes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A &lt;a href="https://www.gatsbyjs.org/blog/2020-04-15-announcing-gatsby-recipes/"&gt;Gatsby recipe&lt;/a&gt; is scripted as a series of steps taken to configure your site to the desired state, or to quickly add new things to your site.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;It enables the automation of multiple tasks such as creating pages and layouts, setting up TypeScript, run npm installs, adding data to GraphQL, etc. Or, in our case, installing and setting up a plugin.&lt;/p&gt;

&lt;p&gt;Oh, and Recipes are run directly from Gatsby’s CLI!&lt;/p&gt;

&lt;p&gt;Under the hood, these “steps” are defined in a single &lt;a href="https://www.gatsbyjs.org/docs/mdx/"&gt;MDX&lt;/a&gt; file—a combination of Markdown and React components. Using Markdown allows the steps to complete a task to be listed in a human-readable way. That will undoubtedly simplify the process for many users.&lt;/p&gt;

&lt;p&gt;Out of the box, Gatsby offers many official recipes. Find out which tasks you can already use recipes for by running &lt;code&gt;gatsby recipes&lt;/code&gt; in your terminal.&lt;/p&gt;

&lt;p&gt;If you don’t find something you’d like to automate for your Gatsby projects, it’s quite easy to create your own recipe. The tutorial below will show you how to do so. Our example allows the installation of a Snipcart plugin that enables e-commerce on Gatsby websites quickly.&lt;/p&gt;

&lt;p&gt;→ Read the full post &lt;a href="https://snipcart.com/blog/gatsby-recipes-ecommerce"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>react</category>
      <category>gatsby</category>
    </item>
    <item>
      <title>Stackbit: Friendly Jamstack Websites &amp; CMS Management</title>
      <dc:creator>Charles Ouellet</dc:creator>
      <pubDate>Wed, 13 May 2020 10:38:45 +0000</pubDate>
      <link>https://forem.com/couellet/stackbit-friendly-jamstack-websites-cms-management-ij1</link>
      <guid>https://forem.com/couellet/stackbit-friendly-jamstack-websites-cms-management-ij1</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nk0p5Wek--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204876/text-highlighting.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nk0p5Wek--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204876/text-highlighting.png" alt="Stackbit: Friendly Jamstack Websites &amp;amp; CMS Management"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the most significant challenges the Jamstack faces going forward is gaining a wider adoption and boosting accessibility.&lt;/p&gt;

&lt;p&gt;Many indicators suggest that &lt;a href="https://snipcart.com/blog/jamstack"&gt;2020 is the year&lt;/a&gt; where the community reaches this goal.&lt;/p&gt;

&lt;p&gt;Take, for example, what &lt;a href="https://www.stackbit.com/"&gt;Stackbit&lt;/a&gt; is currently developing to bring the management of Jamstack websites built with a static site generator and CMS to a whole new level. &lt;/p&gt;

&lt;p&gt;In this post, I want to highlight the new features the Stackbit team has been rolling out lately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inline editing&lt;/li&gt;
&lt;li&gt;Viewing &amp;amp; sharing site previews&lt;/li&gt;
&lt;li&gt;Realtime site status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If it sounds like what’s been missing in your Jamstack setup and CMS, the following demo should be helpful.&lt;/p&gt;

&lt;p&gt;Oh, and for team collaboration, these are game-changers. Jamstack projects that are user-friendly for developers and non-technical folks alike? Bring it on!&lt;/p&gt;

&lt;p&gt;Let’s see what it’s all about.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sRQHbnCI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204864/stackbit-jamstack-websites.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sRQHbnCI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204864/stackbit-jamstack-websites.png" alt="stackbit-jamstack-websites"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re an avid reader of our blog, you might be asking yourself: “Haven’t you already introduced &lt;a href="https://snipcart.com/blog/stackbit"&gt;Stackbit as a building tool&lt;/a&gt; for Jamstack websites?”&lt;/p&gt;

&lt;p&gt;You would be absolutely right.&lt;/p&gt;

&lt;p&gt;The site builder still is up and running. However, the team behind Stackbit has been focusing on new features for its product in the last few months. The end goal of easing the access to the Jamstack to non-technical users still persists, though.&lt;/p&gt;

&lt;p&gt;Going the Jamstack route and using a headless CMS offers many benefits in aspects like security and performance. However, the decoupled architecture means that users often struggle with simple tasks like updating text on pages or previewing edits they’re making.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stackbit solves this by offering them a quick and easy means of editing content directly on the page and the ability to preview and share edits being made.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This kind of offering is pretty unique in the Jamstack space. For the moment, at least. Alternatively, &lt;a href="https://tinacms.org/"&gt;TinaCMS&lt;/a&gt; is building something similar for the on-page editing experience. &lt;/p&gt;

&lt;p&gt;On a broader scope, though, Stackbit sees itself competing more with the likes of &lt;a href="https://webflow.com/"&gt;Webflow&lt;/a&gt; or &lt;a href="https://www.squarespace.com/"&gt;Squarespace&lt;/a&gt;. Even there, Stackbit distinguishes itself by integrating with the variety of services and open source tools that comprise the Jamstack rather than being a walled garden.&lt;/p&gt;

&lt;p&gt;→ Read the full post &lt;a href="https://snipcart.com/blog/manage-jamstack-websites-stackbit"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Snipcart vs. Gumroad Review: Comparing E-Commerce Alternatives</title>
      <dc:creator>Charles Ouellet</dc:creator>
      <pubDate>Thu, 23 Apr 2020 12:32:37 +0000</pubDate>
      <link>https://forem.com/couellet/snipcart-vs-gumroad-review-comparing-e-commerce-alternatives-5265</link>
      <guid>https://forem.com/couellet/snipcart-vs-gumroad-review-comparing-e-commerce-alternatives-5265</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TtvPt3A8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/203637/cartsm-2x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TtvPt3A8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/203637/cartsm-2x.png" alt="Snipcart vs. Gumroad Review: Comparing E-Commerce Alternatives"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gumroad has been around for almost ten years, serving creators around the world. Initially focused on selling digital goods, it has now evolved and improved.&lt;/p&gt;

&lt;p&gt;Since there is a significant overlap in features when it comes to our own product, we decided to craft this Snipcart vs. Gumroad review.&lt;/p&gt;

&lt;p&gt;We’ve explored both solutions’ pricing, features, and benefits to see if Snipcart is a decent Gumroad alternative.&lt;/p&gt;

&lt;p&gt;We did our best to review both products and highlight their best sides fairly. Hopefully, it should settle which one of the two is best for your next e-commerce venture.&lt;/p&gt;

&lt;p&gt;Let’s start by introducing our options.&lt;/p&gt;

&lt;p&gt;→ Read the full post &lt;a href="https://snipcart.com/blog/snipcart-gumroad-review"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>discuss</category>
      <category>showdev</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>Scully Tutorial: A Static Site Generator for Angular Websites</title>
      <dc:creator>Charles Ouellet</dc:creator>
      <pubDate>Thu, 09 Apr 2020 11:22:47 +0000</pubDate>
      <link>https://forem.com/couellet/scully-tutorial-a-static-site-generator-for-angular-websites-32p8</link>
      <guid>https://forem.com/couellet/scully-tutorial-a-static-site-generator-for-angular-websites-32p8</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsnipcart.com%2Fmedia%2F204858%2Fangular-static-website.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsnipcart.com%2Fmedia%2F204858%2Fangular-static-website.png" alt="Scully Tutorial: A Static Site Generator for Angular Websites"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No matter how many content pieces I’ve written &lt;a href="https://snipcart.com/blog/categories/jamstack" rel="noopener noreferrer"&gt;on the subject&lt;/a&gt;, not often have I mentioned the words &lt;em&gt;JAMstack&lt;/em&gt; and &lt;em&gt;Angular&lt;/em&gt; next to each other.&lt;/p&gt;

&lt;p&gt;That’s kind of shocking, yet understandable.&lt;/p&gt;

&lt;p&gt;I mean, when it comes to the &lt;a href="https://snipcart.com/blog/jamstack" rel="noopener noreferrer"&gt;JAMstack&lt;/a&gt;, Angular’s community is undeniably late to the party. But hey, there’s still well enough cake for everyone to enjoy!&lt;/p&gt;

&lt;p&gt;Good news is devs have started to build the tools necessary to bridge the empty gap between Angular and static websites.&lt;/p&gt;

&lt;p&gt;Case in point: &lt;a href="https://scully.io/" rel="noopener noreferrer"&gt;Scully.io&lt;/a&gt;, the first Angular static site generator.&lt;/p&gt;

&lt;p&gt;In this tutorial, &lt;strong&gt;I’m going to use Scully to craft an Angular static website&lt;/strong&gt;. While I’m at it, I’ll push the demo further by integrating our shopping cart, thus creating a simple e-commerce app in no time.&lt;/p&gt;

&lt;p&gt;Tutorial steps 🛠&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new Angular app&lt;/li&gt;
&lt;li&gt;Install external dependencies&lt;/li&gt;
&lt;li&gt;Write an Angular service&lt;/li&gt;
&lt;li&gt;Create the necessary components&lt;/li&gt;
&lt;li&gt;Add Scully to generate an Angular static website&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First, let’s see what Scully is and what new opportunities it brings to the Angular community.&lt;/p&gt;

&lt;p&gt;→ Read the full post &lt;a href="https://snipcart.com/blog/angular-static-site-generator-scully" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>angular</category>
    </item>
    <item>
      <title>How Vue Components Work (&amp; How They Simplify Frontend Dev)</title>
      <dc:creator>Charles Ouellet</dc:creator>
      <pubDate>Thu, 28 Nov 2019 12:42:55 +0000</pubDate>
      <link>https://forem.com/couellet/how-vue-components-work-how-they-simplify-frontend-dev-44jl</link>
      <guid>https://forem.com/couellet/how-vue-components-work-how-they-simplify-frontend-dev-44jl</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cPoSzXyb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/203638/devdensm-2x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cPoSzXyb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/203638/devdensm-2x.png" alt="How Vue Components Work (&amp;amp; How They Simplify Web Development)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the latest version of our shopping cart built on top of &lt;a href="https://snipcart.com/blog/vuejs-debugging"&gt;Vue.js&lt;/a&gt;, I think it’s fair to say we’ve mastered this framework in the last few months.&lt;/p&gt;

&lt;p&gt;And we still love it as much as the first day.&lt;/p&gt;

&lt;p&gt;But we had to work our asses off to learn the ins and outs of Vue. Not that it’s a very complex beast. The learning curve is actually quite smooth. It’s simply that doing things the right way &lt;em&gt;takes time.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/4y0hL2EY2aUIE/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/4y0hL2EY2aUIE/giphy.gif" alt="got-time"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s why we pride ourselves in crafting content that might help devs going down the same road we did.&lt;/p&gt;

&lt;p&gt;We’ve written about &lt;a href="https://snipcart.com/blog/redux-vue"&gt;state management&lt;/a&gt;, &lt;a href="https://snipcart.com/blog/vue-render-functions"&gt;render functions&lt;/a&gt;, and &lt;a href="https://snipcart.com/blog/vue-pwa"&gt;PWA development&lt;/a&gt; (amongst other Vue-related matters).&lt;/p&gt;

&lt;p&gt;Today, it’s all about Vue components. Starting from the basics, here’s what I’ll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is a component?&lt;/li&gt;
&lt;li&gt;What are the building blocks of a Vue component?&lt;/li&gt;
&lt;li&gt;How to use them?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;And I’ll finish it off with examples of Vue components in the wild!&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;No more time to waste, let’s dive right in!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Vue component?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A component is a self-contained, reusable, most often single-responsibility, piece of UI logic.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8gzsIheI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204746/vue-js-component.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8gzsIheI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204746/vue-js-component.png" alt="vue-js-component"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even though I’m using the wording “Vue component” here, it’s important to know that components aren’t specific to &lt;em&gt;Vue&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Yes, Vue.js is what we call a “component framework”. But so is React, as well as the new kid on the block, &lt;a href="https://snipcart.com/blog/svelte-js-framework-tutorial"&gt;Svelte&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The “component” approach is a way of structuring frontend development in a way that doesn't bloat the development experience. Most component frameworks have reactivity at their core, which benefits user experience, without sacrificing ease of use by developers.&lt;/p&gt;

&lt;p&gt;Each component can have its own state, markup and style. The real magic lies in the fact that you can reuse a component as many times as you want. It then allows developers to build app organized into a tree of nested components:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fUNHPX1n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204744/vue-component-example.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fUNHPX1n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204744/vue-component-example.png" alt="vue-component-example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Image taken from &lt;a href="%E2%80%9Dhttps://vuejs.org/v2/guide/components.html%E2%80%9D"&gt; Vue.js official docs &lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You can probably imagine the amount of time saved by using this approach.&lt;/p&gt;

&lt;p&gt;There are already hundreds of existent components out there that you can quickly import to your projects to perform simple to more complex tasks. You can find a comprehensive list on &lt;a href="https://vuecomponents.com/"&gt;vuecomponents.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I’m over-simplifying the concept for now. You need to know that there are different types of components, which we’ll explore with examples further down. &lt;/p&gt;

&lt;p&gt;First, let’s see what’s hiding inside these components.&lt;/p&gt;

&lt;h2&gt;
  
  
  The building blocks of a Vue.js component
&lt;/h2&gt;

&lt;p&gt;When coding a component in a &lt;code&gt;.vue&lt;/code&gt; file at the most basic level, you’ll find three sections available to put code in:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jE97Eaux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204745/vue-component-structure.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jE97Eaux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204745/vue-component-structure.png" alt="vue-component-structure"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Template&lt;/strong&gt;. Written in an augmented version of the templated language (HTML), it serves as a directive to the framework on how to produce the final markup of the component based on its internal state. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Script.&lt;/strong&gt; Where the logic of the app resides. In that section are input low-level concepts such as:&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Properties:&lt;/em&gt; A set of input variables used to configure a component's behavior. Properties are provided by the host application, or by a parent component. They can be data filters, sort orders, labels, visibility switches, etc. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;State&lt;/em&gt;: This one’s optional, but often present. This is a data structure that provides the state of a component at a given time. The state of a component will change over time based on occurring events (clicks, scroll, DOM mutations).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Style.&lt;/strong&gt; Where the CSS is placed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pretty simple right? A component in itself is indeed very straightforward. However, components then become building blocks for your whole app themselves. That’s where it can get a bit more complicated.&lt;/p&gt;

&lt;p&gt;But don’t worry, I’ve got you covered.&lt;/p&gt;

&lt;p&gt;→ Read the full post &lt;a href="https://snipcart.com/blog/vue-component-example-tutorial"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>vue</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
