<?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: Francois Lanthier Nadeau</title>
    <description>The latest articles on DEV Community by Francois Lanthier Nadeau (@the_fln).</description>
    <link>https://dev.to/the_fln</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%2F3435%2Fa63bfe41-5fed-4c64-a551-2b37d0eebe4c.png</url>
      <title>DEV Community: Francois Lanthier Nadeau</title>
      <link>https://dev.to/the_fln</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/the_fln"/>
    <language>en</language>
    <item>
      <title>18 Hand-Picked JavaScript Podcasts in 2021</title>
      <dc:creator>Francois Lanthier Nadeau</dc:creator>
      <pubDate>Thu, 01 Apr 2021 18:34:12 +0000</pubDate>
      <link>https://dev.to/the_fln/18-hand-picked-javascript-podcasts-in-2021-1ji0</link>
      <guid>https://dev.to/the_fln/18-hand-picked-javascript-podcasts-in-2021-1ji0</guid>
      <description>&lt;p&gt;If you're a frontend developer, you're always looking to learn and stay updated with web dev news.&lt;/p&gt;

&lt;p&gt;The fast-paced industry makes it essential, &lt;a href="https://snipcart.com/blog/learn-vanilla-javascript-before-using-js-frameworks" rel="noopener noreferrer"&gt;especially when it comes to JavaScript&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Spending all day (and/or night) in front of a screen sometimes calls for a break. But stepping away from your computer doesn’t mean you can’t keep learning - if you're in a learning mood!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It’s 2021, and top-notch podcasts are always a few taps or a shout to voice assistant away!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The medium has probably reached peak mainstream appeal, thus multiplying listening options in the last few years. Even &lt;a href="https://newsroom.spotify.com/2021-02-22/president-barack-obama-and-bruce-springsteen-join-forces-in-the-new-podcast-renegades-born-in-the-usa/" rel="noopener noreferrer"&gt;Barack Obama launched his own podcast&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Plus, podcast audio format lets you optimize time spent exercising, commuting, or cleaning up.&lt;/p&gt;

&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%2F205741%2Fexercisetv.gif" 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%2F205741%2Fexercisetv.gif" alt="Exercising while listening to a javascript podcast"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now the tricky part is, you guessed it, finding the right ones.&lt;/p&gt;

&lt;p&gt;This article was first published in 2020, and the good news is that I made a brand new curated list of the best JavaScript podcasts for 2021.&lt;/p&gt;

&lt;p&gt;Not much has changed since last year, except maybe that &lt;a href="https://podcasters.spotify.com/" rel="noopener noreferrer"&gt;Spotify&lt;/a&gt; is arguably becoming the &lt;a href="https://www.theverge.com/21265005/spotify-joe-rogan-experience-podcast-deal-apple-gimlet-media-ringer" rel="noopener noreferrer"&gt;biggest player in the podcasting world&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, I discarded all of the dead or sunsetted ones, then hand-picked and sorted through the rest.&lt;/p&gt;

&lt;p&gt;The result? A fresh list of JavaScript-related podcasts you’ll draw value from.&lt;/p&gt;

&lt;p&gt;Let’s get to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How these podcasts were selected
&lt;/h2&gt;

&lt;p&gt;You’ll find all our best JavaScript podcasts for 2021 below. But first, here's how I built this list.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Podcast selection&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Podcast must be still running (at least one new episode in 2021).&lt;/li&gt;
&lt;li&gt;Podcast doesn’t have to be &lt;strong&gt;strictly&lt;/strong&gt; JS-related but should cover JavaScript &lt;strong&gt;regularly&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Podcast must have social proof (Google/Apple Podcasts rankings, featured in publications, personally recommended by seasoned developers).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;List methodology&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ratings and stars are fetched from Apple Podcasts directly.&lt;/li&gt;
&lt;li&gt;Description is fetched either from Apple Podcasts or the official site.&lt;/li&gt;
&lt;li&gt;Featured episode must talk about JavaScript and be relevant to web development.&lt;/li&gt;
&lt;li&gt;Podcast platforms linked to, when available, are Spotify, Apple Podcasts, and Google Podcasts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Contribution: The more the merrier! We are happy to take requests to add new relevant shows or podcast platforms. Just add a comment below.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript podcasts for web developers
&lt;/h2&gt;

&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%2F205742%2Fjspodcasts.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%2F205742%2Fjspodcasts.png" alt="Javascript Podcasts 2021"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;a href="https://fullstackradio.com/" rel="noopener noreferrer"&gt;Full Stack Radio&lt;/a&gt; 5.0⭐️ - 30 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/7G5O2wWmch1ciYDPZS4a4O" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A podcast for developers interested in building great software products. Every episode, Adam Wathan is joined by a guest to talk about everything from product design and user experience to unit testing and system administration.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/0Ddvex5OtYOvhyyK6ckG3A?si=3eGxyJijQ46BuwuCshDmOg&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/full-stack-radio/id931714873" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy50cmFuc2lzdG9yLmZtL2Z1bGwtc3RhY2stcmFkaW8" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. &lt;a href="http://frontendhappyhour.com/" rel="noopener noreferrer"&gt;Front End Happy Hour&lt;/a&gt; 5.0⭐️ - 20 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/2DFCksvsEUsZI3r0Bfufgf" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt; A podcast featuring panelists of engineers from Netflix, Twitch, &amp;amp; Atlassian talking over drinks about all things Front End development.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/0Giuw6eNbTzP9CDZODDrA2?si=_4jEgF9fQbGgYdAaerkdhQ&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/front-end-happy-hour/id1089047924" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy50cmFuc2lzdG9yLmZtL2Z1bGwtc3RhY2stcmFkaW8" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3. &lt;a href="https://www.ladybug.dev/" rel="noopener noreferrer"&gt;Ladybug Podcast&lt;/a&gt;. 5.0⭐️ - 16 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/6B6pM7DUN83OkSsCRKAC2Y" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We're Emma Bostian, Sidney Buckner, Kelly Vaughn, and Ali Spittel - four seasoned software developers working in different sectors. Since there's a major lack of technical podcasts out there, we've decided to start one. Just kidding -- there's already a ton! But, we wanted to add our voices to the space and share our experiences and advice. We'll have great discussions around how to start coding, the hot technologies right now, how to get your first developer job, and more!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/1KBO1tSnm0XRlEILmqt7Em?si=00XAtZ-mQ62DS5is0h9wBg&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/ladybug-podcast/id1469229625" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9waW5lY2FzdC5jb20vZmVlZC9sYWR5YnVnLXBvZGNhc3Q" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4. &lt;a href="https://developers.google.com/web/shows/http203/podcast" rel="noopener noreferrer"&gt;HTTP 203&lt;/a&gt; 5.0⭐️ - 1 rating
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/47sTVpuHMwdz6lQES4uZQE" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Surma and Jake talk about whatever's going on in the world of web development.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/28kMTCei5XHtQodSKEMr6h?si=XOASazDiRrSPQVZEiFKArg&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/http-203/id1042283903" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9odHRwMjAzLmxpYnN5bi5jb20vcnNz" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  5. &lt;a href="https://anchor.fm/purrfect-dev" rel="noopener noreferrer"&gt;Purrfect.dev&lt;/a&gt; 5.0⭐️ - 1 rating
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/5mrXe0wPHc84li5d1ZvVYd" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Purrfect.dev is a development podcast made by developers for developers. Learning how to be a developer is hard, Purrfect.dev will show you how to grow as a developer bit by bit.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/2kiOI0PCB2jXMU0cdqUy4z?si=eE4DRyFlRTCHXNa9EfCPgw&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/purrfect-dev/id1491655542" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9hbmNob3IuZm0vcy8xMTViMjAzYy9wb2RjYXN0L3Jzcw" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  6. &lt;a href="https://thatsmyjamstack.com/" rel="noopener noreferrer"&gt;That's my JAMstac‪k&lt;/a&gt; 5.0⭐️ - 1 rating
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/04HCNpXp27O550TttkLP4n" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That's My JAMstack! is an interview podcast outlining various developers' methods of utilizing the JAMstack.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/7G3H4MP5mLKlhMKBpSwWSL?si=NGL9FF9LT6SQOttfobPKfw&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/thats-my-jamstack/id1472756044" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9waW5lY2FzdC5jb20vZmVlZC90aGF0cy1teS1qYW1zdGFjaw" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  7. &lt;a href="https://vanillajspodcast.com/" rel="noopener noreferrer"&gt;The Vanilla JS Podcast&lt;/a&gt; 5.0⭐️ - 1 rating
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/5txuxt9ysQNUvDjRGSjNcT" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A show about JavaScript for people who hate the complexity of modern front‑end web development.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/2jfWVEgKGZMazgou1hXH1R?si=sqyvhFkZQKuXJktCL9fA4g&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/the-vanilla-js-podcast/id1364574460" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9nb21ha2V0aGluZ3MuY29tL3BvZGNhc3QvZmVlZC5yc3M" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  8. &lt;a href="https://shoptalkshow.com/" rel="noopener noreferrer"&gt;ShopTalk&lt;/a&gt; 4.9⭐️ - 478 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/0W9m87rjNAUijLrjcJV9j5" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A live podcast about front end web design and UX.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/2PUoQB330ft0sTzSNoCPrH?si=i3rZijrPS3GQQoibo0k-Rg&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/us/podcast/shoptalk/id493890455" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9zaG9wdGFsa3Nob3cuY29tL2ZlZWQvcG9kY2FzdC8" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  9. &lt;a href="https://webrush.simplecast.com/" rel="noopener noreferrer"&gt;Web Rush&lt;/a&gt; 4.9⭐️ - 37 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/09or1CPtpON148MSd6wluP" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Dive into JavaScript and Web development stories with hosts John Papa, Ward Bell, Craig Shoemaker, and Dan Wahlin.&lt;/p&gt;

&lt;p&gt; A weekly podcast where we tackle the challenges facing Web developers today and invite expert guests on the show to share their experience solving concrete problems while building real Web applications. Listen for practical insights and honest talk about the topics you are facing today, with Web Rush. Sponsored by AG Grid and Nrwl.io&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/2fpykNR5dya5c4V8WTPldw?si=sz_hRLliTsCaBPl9f0ttyQ&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/us/podcast/web-rush/id1437407176?mt=2" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5zaW1wbGVjYXN0LmNvbS90T2pOWGVjNQ" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  10. &lt;a href="https://iteration.simplecast.com/" rel="noopener noreferrer"&gt;iteration&lt;/a&gt; 4.9⭐️ - 15 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/4jH6nzzVGyqzP7WZBcvUOX" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A podcast about development and design. We do our best to be code-agnostic but we talk a lot about Rails, JavaScript, React, React Native, design, business and startups.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/4yw0xZLBNlgtibNITY99K1?si=SPzJWpF-ToSmwQofAF2yrA&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/iteration/id1321529167" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5zaW1wbGVjYXN0LmNvbS9ZbXZIMWF5Qw" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  11. &lt;a href="https://devchat.tv/show/javascript-jabber/" rel="noopener noreferrer"&gt;JavaScript Jabber&lt;/a&gt; 4.9⭐️ - 7 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/4erKBDIdFndKHKbJMA3YdT" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Weekly podcast discussion about Javascript on the front and back ends. Also discuss programming practices, coding environments, and the communities related to the technology.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/6xpiit8aJmwDHk1rKdxmri?si=q7FWwj-wSRiTX4jl2h7iPA" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/us/podcast/javascript-jabber/id1237401284" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5mZWVkd3JlbmNoLmNvbS9KYXZhU2NyaXB0SmFiYmVyLnJzcw" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  12. &lt;a href="http://syntax.fm" rel="noopener noreferrer"&gt;Syntax - Tasty Web Development Treats&lt;/a&gt; 4.8⭐️ - 107 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/3X6l45vUykSOTL5IyReBUT" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Full Stack Developers Wes Bos and Scott Tolinski dive deep into web development topics, explaining how they work and talking about their own experiences. They cover from JavaScript frameworks like React, to the latest advancements in CSS to simplifying web tooling.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/4kYCRYJ3yK5DQbP5tbfZby?si=bOe7-kl6RnOHapMsVnFWgw" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/syntax-tasty-web-development-treats/id12531866" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkLnN5bnRheC5mbS9yc3M" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  13. &lt;a href="https://www.heavybit.com/library/podcasts/jamstack-radio/" rel="noopener noreferrer"&gt;Jamstack Radio&lt;/a&gt; 4.8⭐️ - 13 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/6kHAUfVsFl9yVNa4SBwoq6" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A show all about the JAMstack, a new way to build fast &amp;amp; secure apps or websites.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/08neivnJH1hLnYD79HUkfr?si=f42PgZTSQBCQ7uHXHPtx7g&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/us/podcast/jamstack-radio/id1148797643" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly93d3cuaGVhdnliaXQuY29tL2NhdGVnb3J5L2xpYnJhcnkvcG9kY2FzdHMvamFtc3RhY2stcmFkaW8vZmVlZC8" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  14. &lt;a href="https://www.codenewbie.org/podcast/" rel="noopener noreferrer"&gt;CodeNewbie&lt;/a&gt; 4.5⭐️ - 27 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/42iqJgCzasHuGwQoMBDHJH" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Stories and interviews from people on their coding journey.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/3rwr9GdoHxMWF8yZhsBzHn?si=5jB6vXPKR4CJab1Av6jH2A&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/codenewbie/id919219256" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5wb2R0cmFjLmNvbS9xOHM4YmE5WXRNNnI" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  15. &lt;a href="https://changelog.com/jsparty" rel="noopener noreferrer"&gt;JS Party: JavaScript &amp;amp; Web Dev&lt;/a&gt; 4.5⭐️ - 6 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/0fJZHgy8SOqaPkMsoD7q5G" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your weekly celebration of JavaScript and the web. This show records LIVE on Thursdays at 1pm US/Eastern time. Panelists include Jerod Santo, Feross Aboukhadijeh, Kevin Ball, Emma Bostian, Nick Nisi, Divya Sasidharan, Mikeal Rogers, Chris Hiller, and Amal Hussein.&lt;/p&gt;

&lt;p&gt;Topics discussed include the web platform (Chrome, Safari, Edge, Firefox, Brave, etc), front-end frameworks (React, Ember, Angular, Vue, etc), Node.js, web animation, SVG, robotics, IoT, and much more. If JavaScript and/or the web touch your life, this show’s for you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/2ySVrxGkN6n6frMTo9Nsrt?si=JTaxatHPTJ-BjOtYo-l0Ag&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/js-party-javascript-web-dev/id1209616598" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9jaGFuZ2Vsb2cuY29tL2pzcGFydHkvZmVlZA" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  16. &lt;a href="https://softwareengineeringdaily.com/category/all-episodes/exclusive-content/Podcast/" rel="noopener noreferrer"&gt;Software Engineering Dail‪y&lt;/a&gt; 4.5⭐️ - 2 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/6ZhMyPgtEkJPskfBjl2WFA" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Technical interviews about software topics.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/6UCtBYL29hwhw4YbTdX83N?si=yGoTsTQXTdOBAxoSklzDpw&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/javascript-software-engineering-daily/id1232093829" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9zb2Z0d2FyZWVuZ2luZWVyaW5nZGFpbHkuY29tL2NhdGVnb3J5L2phdmFzY3JpcHQvZmVlZC8?sa=X&amp;amp;ved=0CAYQ27cFahgKEwjg0uCwqdjvAhUAAAAAHQAAAAAQ4AM" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*Note: Currated list of JavaScript related episodes in Apple Podcasts, and Google Podcasts&lt;/p&gt;
&lt;h3&gt;
  
  
  17. &lt;a href="https://www.thisdot.co/modern-web" rel="noopener noreferrer"&gt;Modern Web&lt;/a&gt; ⭐️ - No ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/77v9kIJE1pIahkVdmgZvLP" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Modern Web is a podcast that covers the latest news on topics such as EmberJS, ReactJS, AngularJS, ES2015, RxJS, Functional Reactive Programming, and more.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/5FGA58foRFkJ6IgJbCFYgm?si=3_WmCv9RRxy8VWZgTMtiSg&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/modern-web/id1084236187" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkLnBvZGJlYW4uY29tL21vZGVybndlYi9mZWVkLnhtbA" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  18. &lt;a href="https://js-talks.netlify.app/" rel="noopener noreferrer"&gt;JavaScript Talks&lt;/a&gt; ⭐️ - No ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/5TtUQO9iCiYezeA2IJZygN" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;JavaScript Talks / Conferences as Podcasts.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/0R46Q4lsN14bWIAIZm07D1?si=r38Re7RzT7CRkVehq_9FPQ&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/javascript-talks/id1497098326" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9qcy10YWxrcy5uZXRsaWZ5LmFwcC9yc3MueG1s" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Bonus: Framework specific podcasts
&lt;/h2&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://devchat.tv/show/react-round-up/" rel="noopener noreferrer"&gt;React Round Up&lt;/a&gt; 5.0⭐️ - 6 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/39bOHpeDbHkiBHQE1GUdy4" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A weekly discussion among React developers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/3SV6RRWsJ1d6lDZDqREEdt?si=z3M83qMzR_WpxkSV8QnkUg&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/us/podcast/react-round-up/id1364741140" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5mZWVkd3JlbmNoLmNvbS9yZWFjdC1yb3VuZC11cC5yc3M" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://devchat.tv/show/views-on-vue/" rel="noopener noreferrer"&gt;Views on Vue&lt;/a&gt; 4.8⭐️ - 23 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/5YkdMlD8opql7vVafhUldg" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A weekly discussion among Vue developers about Vue and its ecosystem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/5ewAN7ghB7GTTRz0Ohm7Ks?si=BkXmpthvScy-1Epcaxc-wA&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/us/podcast/views-on-vue/id1364741105" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5mZWVkd3JlbmNoLmNvbS92aWV3cy1vbi12dWUucnNz" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://news.vuejs.org/" rel="noopener noreferrer"&gt;The Official Vue New‪s&lt;/a&gt; 4.0⭐️ - 4 ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/4eBGED2hyChN65QoNUbSGX" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We cover the latest Vue news and tutorials in about 5 minutes. Our goal is to give you the information you need to stay on top of your game as a Vue developer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/5vtKGHKvU9q5uR0HKOOigj?si=E25rGlroTPyO0_-4Si5t4A" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/the-official-vue-news/id1329151772?mt=2" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5mZWVkd3JlbmNoLmNvbS92aWV3cy1vbi12dWUucnNz" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Honorable mentions
&lt;/h2&gt;

&lt;p&gt;Let's finish this list with a few honorable mentions.&lt;/p&gt;

&lt;p&gt;The first one has not been active since September 2020 (and probably sunsetted). Hence it didn't make the above list, but it's still valuable.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://dev.toLINK"&gt;My JavaScript Story&lt;/a&gt; ⭐️ - No ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/6MSGvbUeWJGiT69hDqqvqt" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A weekly exploration into the people who make JavaScript what it is.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/6cilAHXUTrrcvjcom6bIwz?si=GFDPtWnGR5yxyMmffoeD-w&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/my-javascript-story/id1237399540" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5mZWVkd3JlbmNoLmNvbS9KYXZhU2NyaXB0SmFiYmVyLnJzcw" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second one is a new show from 2021. Might be too early to say it makes the cut as one of the best JavaScript podcast, but it doesn't make that not worthy of a listen.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://www.moovweb.com/" rel="noopener noreferrer"&gt;JavaScript Jam&lt;/a&gt; ⭐️ - No ratings
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/0B92FtTQqgcpZku9oNg9jR" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ishan Anand and Mark Brocato host JavaScript Jam, a podcast for frontend and full-stack developers. Tune in for conversations about site speed, web performance, Jamstack and the future of the Web.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/2Trp19anFRKAAsc1GxyX44?si=PwIjqyA6Ss-axkynmqf14g&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/javascript-jam/id1554188218" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy50cmFuc2lzdG9yLmZtL21vb3Z3ZWIteGRuLWphbXN0YWNrLWZvci1lLWNvbW1lcmNl" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The last one on this honorable mentions list is a podcast from the Stack Overflow team. Not focused on Javascript, but it's a great resource for everything dev-oriented.&lt;/p&gt;
&lt;h3&gt;
  
  
  NO. &lt;a href="https://stackoverflow.blog/podcast/" rel="noopener noreferrer"&gt;The Stack Overflow Podcast&lt;/a&gt; 5.0⭐️ - 1 rating
&lt;/h3&gt;

&lt;p&gt;&lt;iframe src="https://open.spotify.com/embed/episode/4vxTVoOUlR0nV6YZzS4DCQ" width="100%" height="232px"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Stack Overflow podcast is a weekly conversation about working in software development, learning to code, and the art and culture of computer programming. Hosted by Sara Chipps, Paul Ford, and Ben Popper, the series will feature questions from our community, interviews with fascinating guests, and hot takes on what’s happening in tech.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;→ &lt;a href="https://open.spotify.com/show/0e5eoM6w7eW9Wu7wMA04Tr?si=8pnedh7VS_qngQWnQdHIjQ&amp;amp;nd=1" rel="noopener noreferrer"&gt;Listen on Spotify&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.apple.com/ca/podcast/the-stack-overflow-podcast/id1483510527" rel="noopener noreferrer"&gt;Listen on Apple Podcasts&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5zaW1wbGVjYXN0LmNvbS9YQV84NTFrMw" rel="noopener noreferrer"&gt;Listen on Google Podcasts&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;I hope you find both value and entertainment in the JavaScript podcasts listed above.&lt;/p&gt;

&lt;p&gt;Maybe it will even make your next commute (with this world pandemic, probably from your desk to you kitchen) more enjoyable, and educative.&lt;/p&gt;

&lt;p&gt;Oh, and if you’re new to the JavaScript world, I highly recommend you check out the following posts:&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://snipcart.com/blog/javascript-beginner-intro-exercises" rel="noopener noreferrer"&gt;JavaScript Beginner? Start Here (Exercises Included)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://snipcart.com/blog/why-javascript-benefits" rel="noopener noreferrer"&gt;Reasons Why JavaScript is Omnipresent in Modern Development&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://snipcart.com/blog/learn-vanilla-javascript-before-using-js-frameworks" rel="noopener noreferrer"&gt;You SHOULD Learn Vanilla JavaScript Before JS Frameworks&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://github.com/snipcart/learn-vanilla-js" rel="noopener noreferrer"&gt;Open source list of resources to learn vanilla JavaScript - GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy listening/reading/coding! ✌️&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you've enjoyed this post, please take a second to share it on Twitter.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>The Bootstrap Jamstack: How Indie Players Compete</title>
      <dc:creator>Francois Lanthier Nadeau</dc:creator>
      <pubDate>Thu, 17 Dec 2020 15:06:14 +0000</pubDate>
      <link>https://dev.to/the_fln/the-bootstrap-jamstack-how-indie-players-compete-adb</link>
      <guid>https://dev.to/the_fln/the-bootstrap-jamstack-how-indie-players-compete-adb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Jump to video version of this post. 🎥&lt;/p&gt;
&lt;/blockquote&gt;

&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%2F205586%2Fthe-bootstrap-jamstack.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%2F205586%2Fthe-bootstrap-jamstack.png" alt="The Bootstrap Jamstack"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hey, &lt;a href="https://twitter.com/the_fln" rel="noopener noreferrer"&gt;I’m Franck&lt;/a&gt;. 👋&lt;/p&gt;

&lt;p&gt;I run a developer-first e-commerce solution, and I try my best to grow a healthy bootstrapped company. It’s called Snipcart, and we’re based in beautiful Québec.&lt;/p&gt;

&lt;p&gt;Our product is part of the Jamstack ecosystem. If you don’t know what that is, no worries. There’s a cool intro &lt;a href="https://snipcart.com/blog/jamstack" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In a nutshell, “Jamstack” is a modern, frontend-centric way to develop sites and apps. It focuses on decoupling backend from frontend, lowering maintenance and hosting costs, pushing static assets through CDNs, edge computing, and using JavaScript and APIs for everything dynamic. Big players include Netlify, Vercel, Contentful, and many others.&lt;/p&gt;

&lt;p&gt;Some indie companies I look up to in the space are DatoCMS, Fathom analytics and Statamic.&lt;/p&gt;

&lt;p&gt;I’m seeing lots of VC-funded businesses shining, but I’d love to see more bootstrappers alongside us.&lt;/p&gt;

&lt;p&gt;In this piece, I’ll show how independent players can build, compete, and grow in the Jamstack ecosystem. I’ll include real-life examples from the Snipcart team and other cool products.&lt;/p&gt;

&lt;h2&gt;
  
  
  Industry funding overview
&lt;/h2&gt;

&lt;p&gt;When building businesses, there are often two commons paths for your success model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Bootstrapped companies&lt;/strong&gt; focus on lifestyle and profitability.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;VC-backed companies&lt;/strong&gt; focus on growth and valuation.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Things aren’t so black and white anymore. Alternative funding solutions like &lt;a href="https://tinyseed.com/" rel="noopener noreferrer"&gt;TinySeed&lt;/a&gt;, &lt;a href="https://www.indie.vc/" rel="noopener noreferrer"&gt;Indie.vc&lt;/a&gt;, and &lt;a href="https://earnestcapital.com/" rel="noopener noreferrer"&gt;Earnest Capital&lt;/a&gt; are making noise. Their nuanced approach deserves a post in itself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let’s take two categories: e-commerce and headless CMS. I had wondered what the ratio of bootstrapped vs. funded was for these. So I took a look:&lt;/p&gt;

&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%2F205578%2Fjamstack-e-commerce-solutions-funded.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%2F205578%2Fjamstack-e-commerce-solutions-funded.png" alt="E-commerce solutions - funded"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Funding abounds in this Jamstack category. Snipcart is one of the only e-commerce players that made it past five years without funding.&lt;/p&gt;

&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%2F205576%2Fheadless-cms-funded.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%2F205576%2Fheadless-cms-funded.png" alt="Headless CMS - funded"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, the ratio appears more balanced. Why? I think e-commerce, as a product category, involves more inherent complexity.&lt;/p&gt;

&lt;p&gt;Headless CMS must handle APIs, data storage and retrieval, plugins, permissions, integrations, previews, etc. That’s a lot.&lt;/p&gt;

&lt;p&gt;But e-commerce solutions must handle most of the above &lt;strong&gt;plus&lt;/strong&gt; tax management, shipping and fulfillment, emails, payment processing, refunds, security, discounts, multi-currencies, etc.&lt;/p&gt;

&lt;p&gt;E-commerce is also &lt;strong&gt;closer to the money&lt;/strong&gt;. The complexity it addresses touches more critical parts of a user’s life than a CMS: security, identity, revenue, etc.&lt;/p&gt;

&lt;p&gt;Trying to solve for e-commerce might be harder, pushing teams to untie some knots through funding. What do you think?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I quickly put together &lt;a href="https://docs.google.com/spreadsheets/d/19wDME7dDzfcj2DmUeUcIZKFml6gCW_zIxEgP_VzEgdM/edit?usp=sharing" rel="noopener noreferrer"&gt;this Google Sheet&lt;/a&gt;. If you want me to update it, drop a comment, or send me an email. I might spin this into a cuter microsite—not sure yet!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A word on venture capital
&lt;/h2&gt;

&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%2F205587%2Fventure-capital-yifan-wu.jpg" 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%2F205587%2Fventure-capital-yifan-wu.jpg" alt="Venture Capital - Yifan Wu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most of us have seen the loud &lt;a href="https://www.vox.com/2019/1/23/18193685/venture-capital-money-kills-business-basecamp-ceo-jason-fried" rel="noopener noreferrer"&gt;Basecamp/37signals vs. VCs battle&lt;/a&gt; unfold over the past decade. It has, for better or worse, painted a very adversarial picture of the startup ecosystem.&lt;/p&gt;

&lt;p&gt;The boring reality is that venture capitalists aren’t as evil as some factions of the bootstrapped community claim. They are agents inside a flawed system with weird incentives and dynamics.&lt;/p&gt;

&lt;p&gt;Some companies require wide, horizontal adoption across multiple markets—think infrastructure. The more you’re in that position, the more likely you’ll need VC money to succeed. Netlify couldn’t have worked out the way it did without that kind of funding.&lt;/p&gt;

&lt;p&gt;The vital distinction peers helped me realize is that the notion of “winning” differs drastically on the VC and bootstrap path. An entrepreneur’s values and ambition will dictate which kind of success they want to achieve. And that’s fine. Here, I’ll just be spreading the gospel that resonates best with me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why bring Jamstack &amp;amp; bootstrapping together?
&lt;/h2&gt;

&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%2F205585%2Fthe-bootstrap-jamstack-shared-ethos.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%2F205585%2Fthe-bootstrap-jamstack-shared-ethos.png" alt="The Bootstrap Jamstack - shared ethos"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We see indie communities in SaaS popping up all the time: Startups for the rest of us, Indie Hackers, etc. There's a reason for that: some people don't want to build companies inside the VC model's incentive and pressure structure.&lt;/p&gt;

&lt;p&gt;Raising money is a rollercoaster of emotions and intensity. It ultimately offers two paths of success: get acquired or go public. Before that, "success" is exiting a round for investors. You have people putting in money just to leave the company as soon as they can. When you put it like that, it does feel odd, right?&lt;/p&gt;

&lt;p&gt;The Jamstack ethos is filled with values we also see in the bootstrapped community:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Independence 💃&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In Jamstack: freedom from monoliths, giants, incumbents, tools with poor DX.&lt;/li&gt;
&lt;li&gt;In bootstrap: freedom from corporate lifestyle, 9-5, boredom, location.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Keeping things small 🌱&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In Jamstack: no need for big architectures, hefty installs, heavy downloads.&lt;/li&gt;
&lt;li&gt;In bootstrap: no need for hundreds of millions in revenue, hundreds of employees, tens of thousands of customers. No need for excessive spending on vanity marketing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Price consciousness 💸&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In Jamstack: no need to pay for a bunch of plugins, extravagant hosting, and maintenance. You can also rely on many free open source tools.&lt;/li&gt;
&lt;li&gt;In bootstrap: you gotta eat! Budget is limited, so spending wisely is extra essential.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance sensibility 🏎&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In Jamstack: focus on critical &lt;a href="https://web.dev/performance-scoring/" rel="noopener noreferrer"&gt;user-centric metrics&lt;/a&gt; (FCP, TTI, etc.).&lt;/li&gt;
&lt;li&gt;In bootstrap: focus on critical business-centric metrics (profitability, churn, LTV) and human-centric metrics (happiness, sleep, financial comfort, free time, etc.).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How can independent Jamstack players compete?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Cool cool, but I can’t compete with the Netlify, Contentful, Shopify in the space. They raised many millions! Hundreds of people work for them!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yes, you can. Others have done it. &lt;a href="https://www.indiehackers.com/product/snipcart" rel="noopener noreferrer"&gt;We have done it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The trick is in how you go about it!&lt;/p&gt;

&lt;h3&gt;
  
  
  Taming long-tails
&lt;/h3&gt;

&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%2F205584%2Ftaming-long-tails.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%2F205584%2Ftaming-long-tails.png" alt="Taming long-tails"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you’re bootstrapped, your &lt;strong&gt;economic incentives&lt;/strong&gt; are drastically different from VC-funded businesses. They need market shares, steep growth, PR attention, multiple acquisition channels. You only need a small community, one sustainable acquisition channel, and enough customers to breakeven.&lt;/p&gt;

&lt;p&gt;Big players will often go after broad problems: Shopify wants to empower the whole world to sell online. Snipcart only wants to help a few hundred devs build better e-commerce stores.&lt;/p&gt;

&lt;p&gt;You see, the pains you solve with your product can be much more specific than bigger companies.&lt;/p&gt;

&lt;p&gt;I've got a parallel for you. If you're familiar with SEO (Search Engine Optimization), the term "long-tails" will ring a bell. When trying to drive organic traffic to their site, people often target very high volume keywords right away. Think "headless CMS". But the competition is &lt;strong&gt;super strong&lt;/strong&gt; for such &lt;em&gt;head&lt;/em&gt; terms. Big sites with high authority are battling on these SERPs (Search Engine Results Page).&lt;/p&gt;

&lt;p&gt;On the other hand, countless keywords are embodying narrower search intents out there. They have lower search volumes, true. But they are much easier to rank for, PLUS they come with more precise needs to solve—"how to read JSON files inside my Svelte app".&lt;/p&gt;

&lt;h3&gt;
  
  
  Leveraging radical transparency
&lt;/h3&gt;

&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%2F205581%2Fradical-transparency.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%2F205581%2Fradical-transparency.png" alt="Radical transparency"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bootstrappers can’t hide behind corporate structures and policies. &lt;em&gt;They&lt;/em&gt; are the business.&lt;/p&gt;

&lt;p&gt;It may feel scary at first, but you can turn this into an advantage using transparency and humility. People like to do business with &lt;em&gt;people&lt;/em&gt;! That fact hasn’t changed in centuries.&lt;/p&gt;

&lt;p&gt;So embrace your smallness and personality inside your brand. Tell us your life story on your about page. Share the struggles of building your business publicly. Be warm and kind when dealing with customers. Tell jokes. Sometimes, &lt;a href="http://www.pivotmethod.com/podcast/unmistakable" rel="noopener noreferrer"&gt;being the only&lt;/a&gt; is better than being the best.&lt;/p&gt;

&lt;p&gt;All of that will foster proximity with your customers, which in turn will increase loyalty and word-of-mouth.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building an audience first
&lt;/h3&gt;

&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%2F205572%2Faudience-first.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%2F205572%2Faudience-first.png" alt="Audience first"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re intent on creating a business to solve a problem, chances are you know a thing or two about said problem. You can share that knowledge and experience before you even start building.&lt;/p&gt;

&lt;p&gt;Adam Wathan and Steve Schoger have done similar things throughout different projects. They shared &lt;a href="https://twitter.com/i/events/994601867987619840" rel="noopener noreferrer"&gt;design tips on Twitter&lt;/a&gt; years before publishing paid projects like &lt;a href="https://refactoringui.com/book/" rel="noopener noreferrer"&gt;Refactoring UI&lt;/a&gt; or &lt;a href="https://tailwindui.com/" rel="noopener noreferrer"&gt;Tailwind UI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Or take developer &lt;a href="https://twitter.com/swyx" rel="noopener noreferrer"&gt;Shawn Wang&lt;/a&gt;, who has been learning in public and sharing lessons for many months before launching his &lt;a href="https://www.learninpublic.org/" rel="noopener noreferrer"&gt;Coding Career Handbook&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Many bootstrappers also share their early journey through podcasts, like &lt;a href="https://saas.transistor.fm/" rel="noopener noreferrer"&gt;Jon and Justin with Transistor&lt;/a&gt;, or &lt;a href="https://artofproductpodcast.com/" rel="noopener noreferrer"&gt;Ben and Derrick with Tuple and SavvyCal&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cushioning initial risks by launching inside an agency
&lt;/h3&gt;

&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%2F205571%2Fagency-launch.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%2F205571%2Fagency-launch.png" alt="Agency launch"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re already working inside a web dev/design agency, there are cool opportunities to consider.&lt;/p&gt;

&lt;p&gt;One I like: leveraging a client case to build—and pay for—your MVP. That's how we got started with Snipcart. We were upfront with the client about it: we'd make them a custom solution to circumvent their e-commerce challenges but would also re-use some of that code to build something ourselves. We gave them a discount and free usage + priority support for life.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.takeshape.io/" rel="noopener noreferrer"&gt;TakeShape&lt;/a&gt;, the headless CMS, followed a similar path early on.&lt;/p&gt;

&lt;p&gt;Doing initial product work inside the agency also lets you move faster, without administrative red tape. Once traction kicks in and &lt;a href="https://en.wikipedia.org/wiki/Product/market_fit" rel="noopener noreferrer"&gt;product-market fit&lt;/a&gt; is on the horizon, you can slowly branch out. Your “side product” can then become its own company.&lt;/p&gt;

&lt;h3&gt;
  
  
  Picking a fight (if you’re a fighter)
&lt;/h3&gt;

&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%2F205580%2Fpick-a-fight.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%2F205580%2Fpick-a-fight.png" alt="Pick a fight"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ugh, &lt;em&gt;fights&lt;/em&gt;. Feels like they’re all over the Internet these days. We’ve sure had our fair share of it with the recent &lt;a href="https://thenewstack.io/jamstack-vs-wordpress-which-is-the-future-of-web-architecture/" rel="noopener noreferrer"&gt;WordPress vs. Jamstack&lt;/a&gt; one, hehe.&lt;/p&gt;

&lt;p&gt;Still, if you feel like you’ve got that kind of energy, it’s a good way to help grow a bootstrapped business.&lt;/p&gt;

&lt;p&gt;First step is often choosing a nemesis: legacy solutions, category giants, specific competitors, or industry trends. You pick your Goliath, put on your David shoes, and start slingin’!&lt;/p&gt;

&lt;p&gt;The recent &lt;a href="https://www.theverge.com/interface/2020/6/24/21300452/basecamp-apple-feud-hey-email-app-store-policies-appeals" rel="noopener noreferrer"&gt;Basecamp/Hey vs. Apple&lt;/a&gt; fight is a good example here.&lt;/p&gt;

&lt;p&gt;Folks at &lt;a href="https://usefathom.com/" rel="noopener noreferrer"&gt;Fathom analytics&lt;/a&gt; have also done a great job at fighting for a cause: privacy. It appeals to potential customers’ strong values, enabling the creation of more solid bonds between business and audience.&lt;/p&gt;

&lt;p&gt;When you target the bigger guy, you can use their clout and traction (and their known pains) to fuel your growth:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;X is great but s*cks at THIS. We do THIS much better—try us!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Open-sourcing first
&lt;/h3&gt;

&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%2F205579%2Fopen-source.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%2F205579%2Fopen-source.png" alt="Open source first"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s another popular one in the Jamstack space.&lt;/p&gt;

&lt;p&gt;You’ll see many CMS offering a free, open-source version of their software. They build community and traction around this, then offer a paid, hosted version, for instance. &lt;a href="https://ghost.org/pricing/" rel="noopener noreferrer"&gt;Ghost&lt;/a&gt; has done that.&lt;/p&gt;

&lt;p&gt;Other things you can sell around your free offering: support, integrations, plugins, related products.&lt;/p&gt;

&lt;p&gt;You can also invite the community to support you with &lt;a href="https://github.com/sponsors" rel="noopener noreferrer"&gt;sponsorships&lt;/a&gt; and donations. It can, for sure, absorb some of the early expenses you'll face when building your bootstrapped product!&lt;/p&gt;

&lt;h3&gt;
  
  
  Going first
&lt;/h3&gt;

&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%2F205575%2Fgo-first.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%2F205575%2Fgo-first.png" alt="Going first"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Many tools and frameworks aren’t “Jamstack-ready” yet.&lt;/p&gt;

&lt;p&gt;There's an opportunity to go first here. You can build Jamstack-specific products (plugins, APIs, integrations, frameworks, etc.) around or on top of existing tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://gridsome.org/" rel="noopener noreferrer"&gt;Gridsome&lt;/a&gt; lets you create better Jamstack sites with Vue.js&lt;/li&gt;
&lt;li&gt; &lt;a href="https://www.junglejs.org/" rel="noopener noreferrer"&gt;JungleJS&lt;/a&gt; helps you build static sites with Svelte&lt;/li&gt;
&lt;li&gt; &lt;a href="https://www.udesly.com/webflow-to-jamstack/" rel="noopener noreferrer"&gt;Udesly&lt;/a&gt; lets you convert your Webflow site to Jamstack&lt;/li&gt;
&lt;li&gt; &lt;a href="https://www.strattic.com/" rel="noopener noreferrer"&gt;Strattic&lt;/a&gt; enables static generation of WordPress sites&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Betting on integrations
&lt;/h3&gt;

&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%2F205577%2Fintegrations.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%2F205577%2Fintegrations.png" alt="Integrations"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ve been diving into the &lt;a href="https://www.intercom.com/resources/books/intercom-jobs-to-be-done" rel="noopener noreferrer"&gt;Jobs-to-be-done framework&lt;/a&gt; recently. A useful concept that stuck with me is knowing where your product ends and another one begins.&lt;/p&gt;

&lt;p&gt;That mental model is useful when bootstrapping. Ask yourself: what platform do people love &lt;em&gt;except for X,&lt;/em&gt; or &lt;em&gt;but they don’t do Y&lt;/em&gt;. These are opportunities for you to broadcast to an existing user base that your product can start there.&lt;/p&gt;

&lt;p&gt;On the flip side, you can also ask yourself: what tools do X better than my product? If you find compelling answers to this question, you might want to start integrating more tightly with these! Integrations let you profit from overlaps in audiences, plus they augment your feature set.&lt;/p&gt;

&lt;p&gt;In many cases, they also let you offload customer acquisition to existing marketplaces (think themes or plugin repos).&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet successful independent Jamstack players
&lt;/h2&gt;

&lt;p&gt;I hope that profiling these awesome companies will inspire many others. Something these businesses all share:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They’re all players in the Jamstack space (and others)&lt;/li&gt;
&lt;li&gt;They’re all profitable&lt;/li&gt;
&lt;li&gt;They’re all bootstrapped&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s see which ways they chose to compete.&lt;/p&gt;

&lt;h3&gt;
  
  
  DatoCMS
&lt;/h3&gt;

&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%2F205573%2Fdatocms.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%2F205573%2Fdatocms.png" alt="DatoCMS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cool facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 people team—comparable products hire 100+ people.&lt;/li&gt;
&lt;li&gt; over 1M ARR&lt;/li&gt;
&lt;li&gt; over 1500 paid customers worldwide&lt;/li&gt;
&lt;li&gt;Vercel chose DatoCMS to manage content for Next.js conf.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Competing using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Radical transparency&lt;/strong&gt;: product journey &lt;a href="https://www.datocms.com/blog/summer-retrospective-and-plans-for-fall-2020" rel="noopener noreferrer"&gt;retrospectives&lt;/a&gt; and &lt;a href="https://www.datocms.com/company/about" rel="noopener noreferrer"&gt;proximity&lt;/a&gt; w/ agency clients.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agency launch&lt;/strong&gt;: &lt;a href="https://www.leanpanda.com/" rel="noopener noreferrer"&gt;LeanPanda&lt;/a&gt; in Italy birthed what became DatoCMS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Betting on integrations&lt;/strong&gt;: impressive &lt;a href="https://www.datocms.com/marketplace" rel="noopener noreferrer"&gt;marketplace&lt;/a&gt; of integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While researching this post, I spoke with founder &lt;a href="https://twitter.com/steffoz" rel="noopener noreferrer"&gt;Stefano Verna&lt;/a&gt;. Interesting tidbits from our conversation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For us, going bootstrap means being able to give your own definition of success, enjoy the journey, guarantee your customers a long life for your product and focus on a minimal and self-sustaining lifestyle and business.&lt;/p&gt;

&lt;p&gt;Today DatoCMS is made up of 5 people. We are a perfectly oiled machine that produces an absurd amount of value. It is literally impossible for us to believe that products that are absolutely comparable to ours have teams of +100 people. All I can think of is "there must be some inefficiency somewhere" :)&lt;/p&gt;

&lt;p&gt;[…] for those who have a technical team like us, I would suggest working hard on third-party integrations, so that you can lean on the shoulders of the giants and let them do marketing and customer acquisition for you.&lt;/p&gt;

&lt;p&gt;We have 1,600 customers all over the world, big names using us, stable and regular growth of 6% month-over-month, $1M ARR, we release a new, big feature per month. Just a few weeks ago Vercel chose us instead of the other 65 VC-based competitors for its 60,000 registrants Next.js Conf.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Fathom
&lt;/h3&gt;

&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%2F205574%2Ffathom.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%2F205574%2Ffathom.png" alt="Fathom"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cool facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 people team&lt;/li&gt;
&lt;li&gt;580.8% revenue growth in last year&lt;/li&gt;
&lt;li&gt; over 1,000,000,000 page views tracked
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Competing using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Radical transparency&lt;/strong&gt;: the founders (Paul and Jack) are ultra-transparent on their &lt;a href="https://usefathom.com/blog" rel="noopener noreferrer"&gt;blog&lt;/a&gt;, &lt;a href="https://usefathom.com/podcast" rel="noopener noreferrer"&gt;podcast&lt;/a&gt;, social media, and customer support.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Audience first&lt;/strong&gt;: Paul Jarvis had already written &lt;a href="https://ofone.co/" rel="noopener noreferrer"&gt;Company of One&lt;/a&gt;. Jack Ellis had already been &lt;a href="https://serverlesslaravelcourse.com/" rel="noopener noreferrer"&gt;teaching Laravel&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Pick a fight&lt;/strong&gt;: they arguably have &lt;a href="https://usefathom.com/google-analytics-alternative" rel="noopener noreferrer"&gt;The Big G&lt;/a&gt; has a nemesis, and wave the flag of &lt;a href="https://usefathom.com/blog/blackhole" rel="noopener noreferrer"&gt;privacy and open web&lt;/a&gt; super high.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Interesting tidbits from my email exchanges with the founders:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We built it slowly and iteratively, so at the start we spent less time as it was making less money. Now, we are full-time because it makes ample revenue (enough to pay us both a salary and more) - so if we got, say a few million bucks investment, we'd have no use for it.&lt;/p&gt;

&lt;p&gt;[…] we have to consider everything from new features to pricing to infrastructure and ensure the maintenance costs of our growth doesn't make it harder to manage in the way we like.&lt;/p&gt;

&lt;p&gt;And, we are careful/thoughtful with new features so we don't overwhelm our support channel.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Statamic
&lt;/h3&gt;

&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%2F205583%2Fstatamic.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%2F205583%2Fstatamic.png" alt="Statamic"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Competing using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Radical transparency&lt;/strong&gt;: one of the founders shares their journey on &lt;a href="https://fullstackradio.com/146" rel="noopener noreferrer"&gt;this podcast&lt;/a&gt;. Definitely embracing the “not the best but the only” w/ brand and positioning!&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Open source&lt;/strong&gt;: The core product is &lt;a href="https://statamic.com/get-started" rel="noopener noreferrer"&gt;free and open source&lt;/a&gt;. The Pro version is paid.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Going first&lt;/strong&gt;: Statamic was a &lt;a href="https://statamic.com/forum/4320-building-database-free-websites-with-statamic-cms" rel="noopener noreferrer"&gt;flat-file pioneer&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Betting on integrations&lt;/strong&gt;: Huge &lt;a href="https://statamic.com/addons" rel="noopener noreferrer"&gt;marketplace&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Interesting tidbits from my email exchanges with &lt;a href="https://twitter.com/jackmcdade" rel="noopener noreferrer"&gt;Jack McDade&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Bootstrapping let us build the product I wanted, solve the pain points I (and others) had, and do it organically. It certainly is a slower way to grow, but that’s not a bad thing.&lt;/p&gt;

&lt;p&gt;Everything simply took longer. But it also gave us the ability to use the product differently and grow it more organically than if we hired a big team and fired up a few sprints. We could do things that didn’t scale, get to know customers closely, and build something that would last a long time.&lt;/p&gt;

&lt;p&gt;Statamic is used by Der Spiegel, one of the largest media and online publishing companies in Germany. It runs their largest sites. That’s a pretty big win for a small and scrappy bootstrapped company. Also in similar company: OpenTable, Asana, and Freshbooks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Snipcart
&lt;/h3&gt;

&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%2F205582%2Fsnipcart.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%2F205582%2Fsnipcart.png" alt="Snipcart"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cool facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;9 people team&lt;/li&gt;
&lt;li&gt;1M ARR&lt;/li&gt;
&lt;li&gt;over 2300 paid customers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Competing using:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Long-tails&lt;/strong&gt;: focus on smaller audience (devs, no enterprise). Only solving &lt;a href="https://snipcart.com/blog/headless-ecommerce-guide" rel="noopener noreferrer"&gt;parts of e-commerce problem&lt;/a&gt;—not all of it.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Radical transparency&lt;/strong&gt;: &lt;a href="https://medium.com/swlh/our-odd-startup-3-%C2%BD-guys-no-vc-profitability-and-patience-307eb1ad1b0b" rel="noopener noreferrer"&gt;blog posts&lt;/a&gt;, honest, no-BS customer support, &lt;a href="https://www.indiehackers.com/post/francois-lanthier-nadeau-hits-a-million-a-year-with-snipcart-and-learns-patience-33bb7ec9cf" rel="noopener noreferrer"&gt;interviews&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Agency launch&lt;/strong&gt;: client project for MVP. We used à la carte agency resources that we later refunded.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Going first&lt;/strong&gt;: we were arguably the firsts to market stack-agnostic e-commerce directly to developers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;☝️ Tooting our own horn here, but I believe there are things to be learned from our journey to &lt;a href="https://twitter.com/the_fln/status/1329435539133657092" rel="noopener noreferrer"&gt;1M ARR&lt;/a&gt;. The one lesson that hits home, especially as we scale a bit, is this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saying no—and yes—to the right things is hard.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All of the above are examples, not models. You need to scan your reality and come up with growth models that resonate with it. Occasionally, I mentor startups. I often advise leveraging their constraints. If you’re not a fighter, don’t pick a fight. If you don’t have an agency close to you, don’t go out of your way to find one. You get the idea.&lt;/p&gt;

&lt;h2 id="video"&gt;The Bootstrap Jamstack - Video&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/aegc7A9v3OM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;The Jamstack community is one of the more dynamic and positive ones I’ve seen. I’m thankful to be a part of it.&lt;/p&gt;

&lt;p&gt;If you, too, want to join in the fun, I urge you to. You can start by entering a &lt;a href="https://jamstack.org/slack" rel="noopener noreferrer"&gt;Slack&lt;/a&gt;, a &lt;a href="https://www.indiehackers.com/group/jamstack" rel="noopener noreferrer"&gt;group&lt;/a&gt;, or by &lt;a href="https://jamstackhandbook.com/" rel="noopener noreferrer"&gt;learning more&lt;/a&gt;. If you, too, fall in love with the ecosystem, then come back to this post and maybe start to build a new independent product. I’ll be there to help in any way I can.&lt;/p&gt;

&lt;p&gt;I’d like to offer fellow bootstrappers some heuristics I have come to embrace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Most markets aren’t winner-take-all&lt;/strong&gt;. Solve a problem differently, or different parts, and you’ll generate real value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Success models are inspiration, not recipes&lt;/strong&gt;. Lean on your strengths and into your constraints. You’ll create your own authentic growth model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Millions in funding aren’t a pre-requisite to succeed in the Jamstack&lt;/strong&gt;. Sustainable businesses can be built slowly, grown organically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any of you are interested in creating a community for the bootstrap Jamstack, &lt;a href="https://www.flanthiernadeau.com/contact/" rel="noopener noreferrer"&gt;let me know&lt;/a&gt;. I have ideas (and domain names 😅).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;:  I put together &lt;a href="https://bootstrapjamstack.netlify.app/" rel="noopener noreferrer"&gt;this site&lt;/a&gt; real quick, using this &lt;a href="https://www.datocms.com/marketplace/starters/hugo-portfolio" rel="noopener noreferrer"&gt;DatoCMS/Hugo starter&lt;/a&gt;. Needs improvements, but what do you think?&lt;br&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%2F205606%2Fbootstrapjamstack-website-screenshot.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%2F205606%2Fbootstrapjamstack-website-screenshot.png" alt="bootstrapjamstack - Website screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts in the comments or &lt;a href="https://twitter.com/intent/tweet?url=https://snipcart.com/blog/bootstrap-jamstack&amp;amp;text=The%20Bootstrap%20Jamstack:%20How%20Independent%20Players%20Compete,%20by%20@the_fln%20at%20@snipcart" rel="noopener noreferrer"&gt;on Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Cheers! 🙇‍♂️&lt;/p&gt;

</description>
      <category>jamstack</category>
      <category>startup</category>
    </item>
    <item>
      <title>A Developer's Guide to Headless E-Commerce </title>
      <dc:creator>Francois Lanthier Nadeau</dc:creator>
      <pubDate>Thu, 24 Sep 2020 19:00:37 +0000</pubDate>
      <link>https://dev.to/the_fln/a-developer-s-guide-to-headless-e-commerce-o48</link>
      <guid>https://dev.to/the_fln/a-developer-s-guide-to-headless-e-commerce-o48</guid>
      <description>&lt;p&gt;Let’s talk about modern e-commerce.&lt;/p&gt;

&lt;p&gt;Many call it &lt;a href="https://dev.to/colbyfayock/what-is-the-jamstack-and-how-do-i-get-started-4175"&gt;&lt;em&gt;Jamstack&lt;/em&gt;&lt;/a&gt; or &lt;em&gt;headless&lt;/em&gt; commerce. They’re umbrella terms—helpful yet confusing.&lt;/p&gt;

&lt;p&gt;I try my best not to indulge in cynicism, so I won’t label them buzzwords.&lt;/p&gt;

&lt;p&gt;This post will unpack these concepts. It will also contrast traditional approaches with modern ones.&lt;/p&gt;

&lt;p&gt;My goal is to help you better navigate e-commerce as a developer in 2020.&lt;/p&gt;

&lt;p&gt;By the end of this post, you’ll be able to make better decisions when it comes to picking an e-commerce stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full disclaimer&lt;/strong&gt;: I’m the CEO at Snipcart, an e-commerce solution &lt;a href="https://snipcart.com/ecommerce-for-developers" rel="noopener noreferrer"&gt;for developers&lt;/a&gt;. I’ll talk about all platforms, including ours. If your next online store ends up being powered by Snipcart, great. If not, no biggie. We’re independent and profitable, so we have the luxury of recommending other solutions. I do it all the time. ✌️&lt;/p&gt;

&lt;h2&gt;
  
  
  What is headless e-commerce?
&lt;/h2&gt;

&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%2F205460%2Fheadless-e-commerce-graph.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%2F205460%2Fheadless-e-commerce-graph.png" alt="What is headless e-commerce? [graph]"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The classic definition:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Headless e-commerce is the separation between the frontend and backend of an e-commerce application.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yet I’ve seen some pretty weird definitions on the Internet, like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One hallmark of headless [e-commerce] is the use of APIs, experience managers, and tools such as &lt;strong&gt;Heroku&lt;/strong&gt; and &lt;strong&gt;Mulesoft&lt;/strong&gt; as well as the importance of IT partners.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m appalled at Google for ranking such un-sexy, inaccurate definitions at the top of the search results.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The adopters of headless commerce are typically bigger enterprises with larger development and IT teams along with a DIY attitude.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;DIY attitude, maybe. The rest? Not necessarily.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This makes sense, as the custom programming needed to produce and build a separate front end and back end reliably can take a major investment of development hours. These businesses often have months-long development queues and ambitious creative and marketing teams that are eager to rapidly test new designs, copy, and templates on the front end.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For larger enterprises with legacy codebases, of course, this can be time-consuming. But it’s important not to “gate” headless commerce platforms for the enterprise. Resources to get started quickly with a decoupled e-commerce approach &lt;a href="https://headlesscommerce.org/" rel="noopener noreferrer"&gt;abound&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On a side note, let’s recognize that e-commerce &lt;em&gt;needs&lt;/em&gt; a head: product views, shopping cart, checkout experience. And a good-looking one at that! When we say “headless e-commerce,” we really mean:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Separating the product and order management from &lt;em&gt;any&lt;/em&gt; customer-facing frontend.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But, granted, “headless” has become an umbrella term (like Jamstack), where we try to separate concerns, focus on fast frontends, and make e-commerce data “portable.”&lt;/p&gt;

&lt;p&gt;In other words, making sure your key e-commerce &lt;em&gt;data&lt;/em&gt; is decoupled from a single frontend touchpoint so that it can be displayed on &lt;em&gt;any&lt;/em&gt; frontend touchpoint. An ambitious headless e-commerce project could be pushing product data anywhere: social, mobile, IoT, POS, smart screens, etc. Cue the &lt;a href="https://www.shopify.com/enterprise/omni-channel-vs-multi-channel" rel="noopener noreferrer"&gt;&lt;em&gt;omnichannel&lt;/em&gt;&lt;/a&gt; concept, yadda yadda yadda.&lt;/p&gt;

&lt;p&gt;For now, JSON seems to be the most universal format to send information over the web, regardless of the arrival point. So you’ll see a lot of it in the space.&lt;/p&gt;

&lt;p&gt;Definitions aside, “Am I doing headless e-commerce or not?” is the wrong question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The right question to ask&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;“What are my business and technical requirements for this e-commerce project, and which solution answers them best?”&lt;/p&gt;

&lt;p&gt;For instance, maybe you won’t need to push your e-commerce data on all of these customer-facing touchpoints. A later section of this post, titled, “How to choose an e-commerce solution?” will help you answer that question.&lt;/p&gt;

&lt;h2&gt;
  
  
  And why go headless?
&lt;/h2&gt;

&lt;p&gt;Because SPEED, my friends. Jokes aside, separating your backend from your frontend gives you control. Control over web perf, yes. But there’s more. Let's see why the headless path can be better than some traditional e-commerce routes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;High degree of customization &amp;amp; flexibility for developers.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can create custom experiences to match your brand, not generic, template-ish ones. Is it impossible to customize your Shopify/Magento/BigCommerce store? Absolutely not. But you'll never get the same freedom to build thoughtful UX as with modern frontend frameworks. And I'm guessing you want your store to stand out in this dense digital jungle, heh?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Portable backends, data, and data structure.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No dependence on massive, restricting infrastructures. This allows you to stay competitive with your frontend without being locked inside turnkey or coupled solutions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Better multi-platform shopping experiences.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mobile, desktop apps, IoT, web, name it. Using a headless CMS allows you to pick the best frontend tooling for every platform/device. Adapting and scaling your business is much easier when your backend can output whatever you want, wherever you want.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Develop with the Jamstack.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Faster, more secure, and cheaper websites &amp;amp; apps are the central promises of the Jamstack. But in reality, the Jamstack’s sexiest offering is this: a deliberate, creative, and strategic development experience for modern developers.&lt;/p&gt;




&lt;p&gt;Okay, so… what did people do before headless? They developed with traditional, monolithic architecture. Monoliths. Giants. All-in-one. You get it.&lt;/p&gt;

&lt;p&gt;Here, a single solution handles everything: not only the e-commerce side but the site-building too. From backend (product &amp;amp; order management, customer accounts, etc.) to frontend features (store templating, mobile development, etc.), everything you do is dictated by what the software allows. It can still be a powerful tool—no debate here—providing merchants a complete, end-to-end e-commerce experience.&lt;/p&gt;

&lt;p&gt;We’ll get into some examples a bit further down.&lt;/p&gt;

&lt;h2&gt;
  
  
  E-commerce in 2020
&lt;/h2&gt;

&lt;p&gt;It’s a beautiful mess. There are a &lt;strong&gt;lot&lt;/strong&gt; of solutions and use cases.&lt;/p&gt;

&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%2F205456%2Fmodern-e-commerce-solutions-features.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%2F205456%2Fmodern-e-commerce-solutions-features.png" alt="Modern e-commerce solutions features"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ve left out “payment processing” on purpose, as all e-commerce solutions depend on external payment gateways to do so. Yes, even Shopify.&lt;/p&gt;

&lt;p&gt;If you’re not dwelling in this space on the regular, it can get real confusing.&lt;/p&gt;

&lt;h3&gt;
  
  
  What can modern e-commerce solutions do for you?
&lt;/h3&gt;

&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%2F205457%2Fmodern-e-commerce-solutions-features-hierarchy.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%2F205457%2Fmodern-e-commerce-solutions-features-hierarchy.png" alt="Modern e-commerce solutions - features hierarchy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are roughly five types of feature set when it comes to e-commerce tools. I’ve listed them from general to specific. Further down, I’ll map all feature sets to types of solutions. We built a simple web app with filters to do so.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Website design&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Picking a website theme&lt;/li&gt;
&lt;li&gt;Choosing its colors&lt;/li&gt;
&lt;li&gt;Injecting branding&lt;/li&gt;
&lt;li&gt;Drag and dropping sections&lt;/li&gt;
&lt;li&gt;Customizing CSS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Content management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating and managing a blog&lt;/li&gt;
&lt;li&gt;Publishing some pages&lt;/li&gt;
&lt;li&gt;Uploading and editing media (images, video)&lt;/li&gt;
&lt;li&gt;Updating content across the site&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Product management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating products (physical, digital, recurring)&lt;/li&gt;
&lt;li&gt;Defining product options&lt;/li&gt;
&lt;li&gt;Managing SKUs and inventory&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cart &amp;amp; checkout&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding items to cart&lt;/li&gt;
&lt;li&gt;Selecting quantities and options&lt;/li&gt;
&lt;li&gt;Applying discounts to orders&lt;/li&gt;
&lt;li&gt;Defining order custom fields&lt;/li&gt;
&lt;li&gt;Collecting billing, shipping, payment info&lt;/li&gt;
&lt;li&gt;Processing orders online&lt;/li&gt;
&lt;li&gt;Confirming orders and follow-ups&lt;/li&gt;
&lt;li&gt;Designing cart &amp;amp; checkout&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Store management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managing and tracking orders&lt;/li&gt;
&lt;li&gt;Analyzing and updating customers&lt;/li&gt;
&lt;li&gt;Setting up shipping rates&lt;/li&gt;
&lt;li&gt;Setting up tax rates&lt;/li&gt;
&lt;li&gt;Creating discounts and promotions&lt;/li&gt;
&lt;li&gt;Retrieving abandoned carts&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What types of e-commerce solutions exist today?
&lt;/h3&gt;

&lt;p&gt;I tried to put some names on “categories” of solutions. I think it helps frame them inside a project’s narrative. If you don’t like the terms, leave a comment below, or tell me about it &lt;a href="https://twitter.com/the_fln" rel="noopener noreferrer"&gt;on Twitter&lt;/a&gt;.&lt;/p&gt;

&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%2F205458%2Ftypes-of-e-commerce-solutions-w_-examples.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%2F205458%2Ftypes-of-e-commerce-solutions-w_-examples.png" alt="Types of headless e-commerce platforms with examples"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s see what your main options are here. I’ll also throw in some headless e-commerce examples. If you want actionable tutorials, we have &lt;a href="https://docs.snipcart.com/v3/tutorials#jamstack" rel="noopener noreferrer"&gt;dozens&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Monolith (all in one)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ All-in-one, turnkey solutions to build and run online stores.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content management&lt;/li&gt;
&lt;li&gt;Product management&lt;/li&gt;
&lt;li&gt;Store management&lt;/li&gt;
&lt;li&gt;Cart &amp;amp; checkout experience&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Website design&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: &lt;strong&gt;Shopify&lt;/strong&gt; (coupled)&lt;/li&gt;
&lt;li&gt;Example: &lt;strong&gt;BigCommerce&lt;/strong&gt; (coupled)&lt;/li&gt;
&lt;li&gt;Example: &lt;strong&gt;Magento&lt;/strong&gt; (coupled)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Your grandma could spin up a store with these platforms. And I mean that as a compliment to both the tools and your grandma. They’re very quick to get started, but somewhat limited when it comes to customization or fine-tuning. They often come with a gazillion ready-made integrations, which is nice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Add-On&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ Cart and checkout layer to enable sales on existing sites. Includes back-office for store management.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product management&lt;/li&gt;
&lt;li&gt;Store management&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cart &amp;amp; checkout experience&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: &lt;strong&gt;WooCommerce&lt;/strong&gt; + WordPress (coupled)&lt;/li&gt;
&lt;li&gt;Example: &lt;strong&gt;Snipcart&lt;/strong&gt; + Nuxt.js + Sanity (headless)&lt;/li&gt;
&lt;li&gt;Example: &lt;strong&gt;Shopify buy button&lt;/strong&gt; + Gatsby + Strapi (headless)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;If you’re a big WP fan, the first example might be all you need. Simple + “free” (paid addons). &lt;em&gt;Resisting the urge to comment on WordPress&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I’ve added a headless CMS to the stack examples for the other two. Useful if you have e-commerce managers who are not coders working on the site. Snipcart has a standalone JS SDK &lt;em&gt;coming soon&lt;/em&gt; that could earn it a dual spot in the “API” category. Will update the post later I guess, hehe (I hope our product owner is reading this).&lt;/p&gt;

&lt;p&gt;FWIW, Snipcart and others are also often used in coupled sites. Say a classic Craft CMS site, for instance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Storefront&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ Frontend-centric tooling to design fast &amp;amp; performant &lt;em&gt;storefronts&lt;/em&gt;. Often &lt;a href="https://snipcart.com/blog/pwa-example-ecommerce-gatsby" rel="noopener noreferrer"&gt;PWA-centric&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cart &amp;amp; checkout experience&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Website design&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: &lt;strong&gt;Shogun&lt;/strong&gt; + BigCommerce backend (headless)&lt;/li&gt;
&lt;li&gt;Example: &lt;strong&gt;Vue Storefront&lt;/strong&gt; + Shopify backend (headless)&lt;/li&gt;
&lt;li&gt;Example: &lt;strong&gt;Front Commerce&lt;/strong&gt; + Magento backend (headless)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;These fine folks have decided to focus on the whole frontend, customer-facing part of your e-commerce projects. If, say, you already have a complete Shopify setup but your storefront s*cks when it comes to web perf, well, you might consider hooking it up to one of these bad boys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ Headless commerce API building blocks to create custom online stores. More code involved, more data portability.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product management&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Order/customer management&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: &lt;strong&gt;Commerce.js&lt;/strong&gt; + Next.js + Sanity (headless)&lt;/li&gt;
&lt;li&gt;Example: &lt;strong&gt;Commerce Layer&lt;/strong&gt; + Nuxt.js + Contentful (headless)&lt;/li&gt;
&lt;li&gt;Example: &lt;strong&gt;Nacelle&lt;/strong&gt; + Vue.js + Strapi + Shopify backend (headless)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;These are the more developer-first solutions. They enable more textbook “headless e-commerce,” according to our initial definitions. Let it be known that many of them offer pre-made “heads” in the forms of starters and whatnot. Also, someone in Australia really wanted me to say &lt;strong&gt;Saleor&lt;/strong&gt; is a cool product in this category too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Custom&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ For adventurous developers with unlimited budget. You’re building everything.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;N/A&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: Next.js e-commerce app connected to Stripe.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;I can’t imagine the freaking headaches you’re going to go through, building all of this on your own. But more power to you, you crazy artisan of the web.&lt;/p&gt;

&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%2F205459%2Ftypes-of-e-commerce-solutions-by-features.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%2F205459%2Ftypes-of-e-commerce-solutions-by-features.png" alt="Types of headless e-commerce platforms by features"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  There’s an app for [headless &amp;amp; coupled e-commerce solutions]
&lt;/h2&gt;

&lt;p&gt;My friend Max and I created a small web app to filter modern e-commerce solutions by type and features. It’s available here:&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://headlesscommerce.netlify.app/" rel="noopener noreferrer"&gt;https://headlesscommerce.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re interested, &lt;a href="https://snipcart.com/blog/tailwind-vue-tutorial" rel="noopener noreferrer"&gt;here is how we built it&lt;/a&gt;, using Vue 3 and Tailwind CSS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: you can submit edits or other solutions by cloning &lt;a href="https://github.com/snipcart/headlesscommerce" rel="noopener noreferrer"&gt;the repo&lt;/a&gt; and opening a PR.&lt;/p&gt;

&lt;p&gt;I kept logos out of it on purpose. I want this to be an agnostic filtering system. There’s no hierarchy in the tiles - order shuffles at every page load. If you feel like it could be improved, please tell me in the comments or via the repo.&lt;/p&gt;

&lt;p&gt;I have a raw file where I try to keep track of pricing for different sales levels per solution. If that’s a factor you’d like to see presented in the app, again, let me know. We’ll consider adding it!&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose a modern e-commerce solution?
&lt;/h2&gt;

&lt;p&gt;With a thoughtful reflection. Sure, execution is critical. Still, a bit of planning will go a long way here.&lt;/p&gt;

&lt;p&gt;Here's what developers should keep in mind when choosing a headless (or not) e-commerce stack.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Which touchpoints do you really need to sell on?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selling on many customer touchpoints (IoT, voice, smarts screens, mobile native, social, chat) is very cool. It can add a load of complexity to your project, but some modern API solutions will help you manage it just fine.&lt;/li&gt;
&lt;li&gt;However, you need to think about your audience and your business more than about technology here. How familiar and active are they on a given channel?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;How many e-commerce parts are you willing to offload to a third party?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AKA “what I DON’T want to code.”&lt;/li&gt;
&lt;li&gt;All of it? Don't even bother with headless—use Shopify, coupled.&lt;/li&gt;
&lt;li&gt;Only the frontend store design? Use something like Vue Storefront or Front Commerce.&lt;/li&gt;
&lt;li&gt;Only the cart and checkout? Use something like Snipcart, Commerce.js, or Stripe checkout.&lt;/li&gt;
&lt;li&gt;Most e-commerce back-office "operations"? Add-ons and APIs like Snipcart and Commerce Layer can take care of that.&lt;/li&gt;
&lt;li&gt;None? Let's hope your client has a big budget. Stop reading this and get coding!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;How much time and money will you save offloading logic to X solution?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Of course, you should consider the solution’s price. However, remember that a custom e-commerce store costs zero dollars in solution, but thousands in development. Find the right balance for your budget.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;What are the content/store management needs?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the headless CMS or e-commerce solution picked answer them?

&lt;ul&gt;
&lt;li&gt;Think roles, permissions, blog post creation/editing, manual SEO optimization, product management, product variants.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;How important is SEO for the merchant?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make sure your frontend is easy to index, optimize, and crawl. Consider pre-rendering and server-side rendering &lt;a href="https://snipcart.com/spa-seo" rel="noopener noreferrer"&gt;if using JS frameworks&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Who's going to work on the project after you?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are the tools you're choosing going to scale well and be easily used by other developers?

&lt;ul&gt;
&lt;li&gt;How risky or well-documented is this tech?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It’s okay to take the time needed to answer these questions.&lt;/p&gt;

&lt;p&gt;Once you've done so, you should be good to go and start your headless (or not) e-commerce project. If you've only worked with traditional e-commerce platforms up until now, it might look scary, but in the long run, you'll find that the freedom is worth it.&lt;/p&gt;

&lt;p&gt;As for your clients? Here's how to sell the &lt;a href="https://snipcart.com/blog/jamstack" rel="noopener noreferrer"&gt;Jamstack&lt;/a&gt; and headless e-commerce to non-technical merchants.&lt;/p&gt;

&lt;p&gt;We also discuss picking tech stacks further in &lt;a href="https://snipcart.com/blog/guide-choosing-tech-stack-client-work" rel="noopener noreferrer"&gt;this post&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  100 words on Snipcart
&lt;/h3&gt;

&lt;p&gt;I will allow myself precisely 100 words to talk about us:&lt;/p&gt;

&lt;p&gt;Snipcart is a low-footprint e-commerce solution for developers. It is made by a &lt;a href="https://snipcart.com/team" rel="noopener noreferrer"&gt;friendly bunch of (8) nerds&lt;/a&gt; in Québec City.&lt;/p&gt;

&lt;p&gt;It provides a small part of the head: cart and checkout. They live in your frontend; &lt;a href="https://docs.snipcart.com/v3/setup/installation" rel="noopener noreferrer"&gt;cart via JS&lt;/a&gt;, &lt;a href="https://docs.snipcart.com/v3/setup/products" rel="noopener noreferrer"&gt;products in the HTML&lt;/a&gt;. The rest of your frontend? Up to you.&lt;/p&gt;

&lt;p&gt;First, you integrate Snipcart into your site. Next, you hand it off to merchants via a hosted dashboard to manage: orders, shipping, taxes, discounts, abandoned carts, inventory, emails, multi-currency, etc.&lt;/p&gt;

&lt;p&gt;We offer APIs &amp;amp; webhooks to extend functionality.&lt;/p&gt;

&lt;p&gt;Details in &lt;a href="https://www.youtube.com/watch?v=9WB8OXZnH4k" rel="noopener noreferrer"&gt;this ⚡️ talk&lt;/a&gt; (when/when NOT to use Snipcart). /&lt;a href="https://share.getcloudapp.com/Jru6dmy1" rel="noopener noreferrer"&gt;100&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;The key takeaway here?&lt;/p&gt;

&lt;p&gt;Headless e-commerce lets you separate concerns better. It increases your responsibility in that it forces you to choose the right tools to bundle together.&lt;/p&gt;

&lt;p&gt;It can make your e-commerce data portable and thus your online store more future-proof.&lt;/p&gt;

&lt;p&gt;Very similar to the Jamstack.&lt;/p&gt;

&lt;p&gt;I will reiterate the invitation:&lt;/p&gt;

&lt;p&gt;If you’re confused as to which solution you should pick, reach out. I’m &lt;a href="https://twitter.com/the_fln" rel="noopener noreferrer"&gt;on Twitter&lt;/a&gt;, and my email is &lt;a href="mailto:francois@snipcart.com"&gt;francois@snipcart.com&lt;/a&gt;. We’ll chat, and I promise not to sell you on Snipcart if I think it isn’t a great fit for your project.&lt;/p&gt;

&lt;p&gt;Here’s hoping this guide helped you in one way or another.&lt;/p&gt;

&lt;p&gt;If it did, could you please share it on Twitter? I’m told that’s where the cool kids hang out these days.&lt;/p&gt;

&lt;p&gt;🙇‍♂️&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>headless</category>
      <category>jamstack</category>
    </item>
    <item>
      <title>A Nuxt PWA to Improve Québec Citizens' Lives </title>
      <dc:creator>Francois Lanthier Nadeau</dc:creator>
      <pubDate>Thu, 16 Jul 2020 20:55:30 +0000</pubDate>
      <link>https://dev.to/the_fln/a-nuxt-pwa-to-improve-quebec-citizens-lives-fek</link>
      <guid>https://dev.to/the_fln/a-nuxt-pwa-to-improve-quebec-citizens-lives-fek</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GqPSSswE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204913/que-bec-city.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GqPSSswE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204913/que-bec-city.jpg" alt="Québec City"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the best feelings working in tech?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using new tools to solve old problems&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When my colleague &lt;a href="https://twitter.com/kvlt_grobert"&gt;Gabriel&lt;/a&gt; told me how he built a city-wide application with &lt;a href="https://nuxtjs.org/"&gt;Nuxt.js&lt;/a&gt;, I knew I had to write this up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://311.ville.quebec.qc.ca/"&gt;311&lt;/a&gt;&lt;/strong&gt; is Québec City’s official communication channel between over 530K citizens and city officials.&lt;/p&gt;

&lt;p&gt;Need garbagemen to pick up oversized trash? Hit 311.&lt;/p&gt;

&lt;p&gt;Flagging broken street lights and potholes? 311.&lt;/p&gt;

&lt;p&gt;You get the idea.&lt;/p&gt;

&lt;p&gt;311 receives north of 400K citizen requests per year, and only a small percentage of those are transmitted over the Internet.&lt;/p&gt;

&lt;p&gt;Historically available via dedicated phone numbers, the platform has slowly made its way to the web. But like many other public instances, it’s been plagued with inefficiencies.&lt;/p&gt;

&lt;p&gt;“Recent” advances in web development opened heaps of new possibilities, which eventually exacerbated said inefficiencies on the current platform:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For citizen users&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No mobile version&lt;/li&gt;
&lt;li&gt;Lack of mobile-first functionalities—camera + geolocalization&lt;/li&gt;
&lt;li&gt;Painful latency on mobile connexions&lt;/li&gt;
&lt;li&gt;Difficulty uploading files (images, videos)&lt;/li&gt;
&lt;li&gt;Tiring user experience—click fest&lt;/li&gt;
&lt;li&gt;No offline capabilities—distant areas, intermittent connexions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;For city officials&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lack of cross-platform support&lt;/li&gt;
&lt;li&gt;Tech stack lock-in&lt;/li&gt;
&lt;li&gt;Difficulty maintaining current solution&lt;/li&gt;
&lt;li&gt;Overhead for multi-lingual content management&lt;/li&gt;
&lt;li&gt;No push notifications for warnings &amp;amp; follow-ups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://spektrummedia.com/en/"&gt;Spektrum&lt;/a&gt; (Snipcart’s mother agency) was tasked with improving the 311 experience of both citizens and city officials.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Nuxt?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IvJrKvfQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204914/why-nuxt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IvJrKvfQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204914/why-nuxt.png" alt="Why Nuxt?"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Good question.&lt;/p&gt;

&lt;p&gt;Well, why the need for statically generated content in the first place?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-platform support.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s Gab with details:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To limit client costs and offer a solid mobile UX, I needed to be able to embed 100% of this app in &lt;a href="https://cordova.apache.org/"&gt;Cordova&lt;/a&gt;. Traditional web apps in .NET, Ruby, or Python require a server to deliver their content. But a static website lives on its own.&lt;br&gt;
I must admit, though, that picking the right static generator was a bit… stressful? I mean, there are literally hundreds of them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rgkPAvdt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://snipcart.com/media/204915/morty.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rgkPAvdt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://snipcart.com/media/204915/morty.gif" alt="Morty"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;That moment when you need to pick a tech stack for your whole city.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;At Snipcart, our team has tried &lt;a href="https://snipcart.com/blog/choose-best-static-site-generator"&gt;dozens of static site generators&lt;/a&gt;. I remember Gab playing around with Gatsby in early 2016, before the cool kids got into it.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;311&lt;/strong&gt;, he experimented with VuePress, Jekyll, and Hugo. When I asked him why any of these didn’t make the cut, he told me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Most of these SSGs (Static Site Generators) are kick*ss programs.  But I needed dynamic and SEO-friendly features they were lacking. As a more extensive “framework”, Nuxt had everything I wanted.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So why Nuxt over &lt;a href="https://nextjs.org/"&gt;Next&lt;/a&gt;, you ask? Simple: both Spektrum and Snipcart &lt;a href="https://snipcart.com/blog/redux-vue"&gt;are now working with Vue&lt;/a&gt;, a lot.&lt;/p&gt;

&lt;p&gt;It was only natural for Gab to keep using the tools he loved.&lt;/p&gt;

&lt;p&gt;Vue is also a grassroots, &lt;a href="https://github.com/vuejs/vue"&gt;independent initiative&lt;/a&gt; we prefer supporting.&lt;/p&gt;

&lt;p&gt;If you want more info, Gregg Pollack breaks down the &lt;em&gt;why&lt;/em&gt; of Nuxt wonderfully &lt;a href="https://www.vuemastery.com/courses/scaling-vue-with-nuxt-js/why-use-nuxt"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For now let’s have a closer look at how Nuxt specifically helped for this project.&lt;/p&gt;

&lt;p&gt;We’ll cycle through project goals and past-pains to do so:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Supporting cross-platform&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ad6UJqN9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204916/311-nuxt-cross-platform.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ad6UJqN9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204916/311-nuxt-cross-platform.png" alt="311/Nuxt cross-platform"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pains to solve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lack of cross-platform support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cross-platform development can be (too) expensive. To limit tech and $ overhead, Gab worked with &lt;a href="https://cordova.apache.org/"&gt;Cordova&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;By allowing us to generate the app statically, Nuxt makes it easy to use simple HTML/JS/CSS files and push them through Cordova. The latter then allows us to easily push native-like versions of the mobile browsers to both app stores (Android/Apple).&lt;/p&gt;

&lt;p&gt;That way, we avoid making the City (and let’s be frank: its citizens) pay for one whole web app and two native mobile apps.&lt;/p&gt;

&lt;p&gt;Building the two mobile apps with Cordova is rather simple. All of the app data is located inside a &lt;code&gt;config.xml&lt;/code&gt; file. It contains all configurations the native app projects will be re-using. At its core, the file looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version='1.0' encoding='utf-8'?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;widget&lt;/span&gt; &lt;span class="na"&gt;android-versionCode=&lt;/span&gt;&lt;span class="s"&gt;"30000"&lt;/span&gt; 
    &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"ca.qc.quebec.ville.espacecitoyen"&lt;/span&gt; 
    &lt;span class="na"&gt;ios-CFBundleVersion=&lt;/span&gt;&lt;span class="s"&gt;"0.3.0"&lt;/span&gt; 
    &lt;span class="na"&gt;version=&lt;/span&gt;&lt;span class="s"&gt;"0.3.0"&lt;/span&gt;
    &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;"http://www.w3.org/ns/widgets"&lt;/span&gt;
    &lt;span class="na"&gt;xmlns:android=&lt;/span&gt;&lt;span class="s"&gt;"http://schemas.android.com/apk/res/android"&lt;/span&gt;
    &lt;span class="na"&gt;xmlns:cdv=&lt;/span&gt;&lt;span class="s"&gt;"http://cordova.apache.org/ns/1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;name&lt;/span&gt; &lt;span class="na"&gt;short=&lt;/span&gt;&lt;span class="s"&gt;"311"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        311 Ville de Quebec
    &lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;author&lt;/span&gt; &lt;span class="na"&gt;email=&lt;/span&gt;&lt;span class="s"&gt;"311@ville.quebec.qc.ca"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://www.ville.quebec.qc.ca"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Ville de Québec
    &lt;span class="nt"&gt;&amp;lt;/author&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;content&lt;/span&gt;  &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://311.ville.quebec.qc.ca/"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;allow-intent&lt;/span&gt;  &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"tel:*"&lt;/span&gt;  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;allow-intent&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"sms:*"&lt;/span&gt;  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;allow-intent&lt;/span&gt;  &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"mailto:*"&lt;/span&gt;  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;allow-intent&lt;/span&gt;  &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"geo:*"&lt;/span&gt;  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;preference&lt;/span&gt;  &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Orientation"&lt;/span&gt;  &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"default"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;preference&lt;/span&gt;  &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"Fullscreen"&lt;/span&gt;  &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;  &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/widget&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The most interesting properties here are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;id="ca.qc.quebec.ville.espacecitoyen"&lt;/code&gt;—unique identifier on Google Play and App Store.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ios-CFBundleVersion="0.3.0"&lt;/code&gt; / &lt;code&gt;version="0.3.0"&lt;/code&gt; / &lt;code&gt;android-versionCode="30000"&lt;/code&gt;—the app’s current versions.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;content src="https://311.ville.quebec.qc.ca/" /&amp;gt;&lt;/code&gt;—the real PWA &amp;amp; Nuxt magic. Here we order loading of this page’s files, and then make them available offline. Without this line, we’d have an empty app &amp;amp; white page when offline. When the app is online, it re-fetch files on the server &lt;strong&gt;only when they’re needed&lt;/strong&gt;. When the app is offline, it loads cached files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, apps that can be compiled by Android Studio &amp;amp; XCode must be generated. For Android, these terminal lines do the trick:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;cordova platform add android
&lt;span class="nv"&gt;$ &lt;/span&gt;cordova build android
&lt;span class="nv"&gt;$ &lt;/span&gt;cordova prepare android
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Very similar for iOS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; ios-deploy &lt;span class="nt"&gt;--unsafe-perm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;cordova platform add ios
&lt;span class="nv"&gt;$ &lt;/span&gt;cordova build ios
&lt;span class="nv"&gt;$ &lt;/span&gt;cordova prepare ios
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the City now has two mobile applications to submit to Google/Apple app stores!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Creating a mobile-friendly experience&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pains to solve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No mobile or responsive versions&lt;/li&gt;
&lt;li&gt;Lack of mobile-first functionalities—camera + geolocalization&lt;/li&gt;
&lt;li&gt;Painful latency on mobile connections&lt;/li&gt;
&lt;li&gt;Difficulty to upload files (images, videos)&lt;/li&gt;
&lt;li&gt;No offline capabilities—distant areas, intermittent connexions&lt;/li&gt;
&lt;li&gt;No push notifications for warnings &amp;amp; follow-ups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lack of mobile-first functionalities—camera + geolocalization&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"youtube-embed"&lt;/span&gt; &lt;span class="na"&gt;data-video=&lt;/span&gt;&lt;span class="s"&gt;"https://youtu.be/7kHJ4ytnxyI"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;VideoObject&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Nuxt PWA mobile experience (311)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A quick video showing off some of the available functionalities on this Nuxt Progressive Web App (PWA).&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;thumbnailUrl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://i3.ytimg.com/vi/7kHJ4ytnxyI/maxresdefault.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://i3.ytimg.com/vi/7kHJ4ytnxyI/hqdefault.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
   &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;uploadDate&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2020-07-13&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;duration&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PT0M52S&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;embedUrl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.youtube.com/embed/7kHJ4ytnxyI&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With JavaScript powering it, Nuxt makes it easy to access camera functionalities through Cordova’s wrapping. After detecting a native mobile usage of the app, we send a direct call to the device camera, bypassing browser prompts.&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="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getPicture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;cameraSuccess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;imageUri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// send image to server&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;cameraError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// notifiy error....&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;quality&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;destinationType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DestinationType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DATA_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;sourceType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PictureSourceType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CAMERA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;encodingType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EncodingType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PNG&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;mediaType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MediaType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ALLMEDIA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;allowEdit&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;correctOrientation&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="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;These native functionalities enable a better photo taking experience. You get more settings to improve photo quality for example. Such parameters aren’t available when using cameras through browsers like Chrome and Firefox.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No offline capabilities—distant areas, intermittent connexions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fRqV5fX1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204925/add-to-home-screen-nuxt-pwa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fRqV5fX1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204925/add-to-home-screen-nuxt-pwa.png" alt="The famous “Add to Home screen” process of PWAs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pwa.nuxtjs.org/"&gt;A dedicated PWA module&lt;/a&gt; for Nuxt makes managing browser caching really effective. Leveraged smartly, these configurations make way for performant offline applications. Here we use Nuxt PWA to create &lt;strong&gt;service workers&lt;/strong&gt; and &lt;code&gt;manifest.json&lt;/code&gt;. Basic configs are as simple as:&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;manifest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;311 - Ville de Québec&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;lang&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fr&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;    
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;No push notifications for warnings &amp;amp; follow-ups&lt;/strong&gt;&lt;br&gt;
  &lt;em&gt;&lt;strong&gt;Note&lt;/strong&gt;: this feature is in the codebase, but isn’t publicly available yet.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We handle push notifications with a library injected in the Cordova wrapper. Notifications are thus unavailable to citizens using the app on browsers.&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="c1"&gt;// Library initialization&lt;/span&gt;

&lt;span class="nx"&gt;pushRegistration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;PushNotification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;android&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;senderID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;---HIDDEN---&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="na"&gt;ios&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;badge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;sound&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;pushRegistration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;registration&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="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="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Trigger event to store device identifier&lt;/span&gt;

  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dispatchEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;CustomEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;store-device&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;detail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;id&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;registrationId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;device&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;platform&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;iOS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Apple&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Google&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;PushNotification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isEnabled&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// Trigger device registration&lt;/span&gt;

      &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dispatchEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;CustomEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;register-device&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;pushRegistration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;notification&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="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;d2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Notify user using alert function.&lt;/span&gt;

  &lt;span class="c1"&gt;// If the application is closed, it will send native notification.&lt;/span&gt;

  &lt;span class="nx"&gt;alert&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;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Creating an easily portable &amp;amp; maintainable app&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pains to solve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tech stack lock-in&lt;/li&gt;
&lt;li&gt;Difficulty maintaining current solution&lt;/li&gt;
&lt;li&gt;Overhead for multi-lingual content management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The City handles tech projects like many other public organizations: it publishes a call for tenders with specs &amp;amp; parameters. Providers craft and submit quotes including costs, tech stacks, and timeline estimates. City officials, after evaluating and debating, settle on one provider.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MNsnI2c7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://snipcart.com/media/204920/show-me-what-you-got.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MNsnI2c7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://snipcart.com/media/204920/show-me-what-you-got.gif" alt="Show me what you got"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the average provider’s POV, maintainability isn’t mandatory. They build quotes around technologies they master—not ones they know to be scalable and maintainable. From the City’s POV, though, the latter are key: projects often go through a round 2 of development, i.e. a new call for tenders.&lt;/p&gt;

&lt;p&gt;So what happens if the former provider is the only one fluent in the City’s project stack? Lock-in. With a technology, but also with a provider. Not good—if said provider jacks up prices, the City has its hands tied, and citizens get the bill.&lt;/p&gt;

&lt;p&gt;Now the new Nuxt app stack is quite simple: JavaScript (TypeScript), HTML, and SCSS.&lt;/p&gt;

&lt;p&gt;These allow the 311 team to improve and maintain the solution without having to learn new languages. And since these are only used for the app’s frontend, changing the backend later on will be easy. The only remaining link between the app and the City’s backend infrastructure is a REST API. Keeping its resources interface will enable simple stack modifications.&lt;/p&gt;

&lt;p&gt;Nuxt effectively decouples your files from any type of server-side logic and apps, making it easy to take these statically generated files, and migrate them to another solution later on. So, for the City, hosting the application sources becomes way simpler: they can move all of their static files to any server they’d like (IIS, nginx, Apache, etc.). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonjour/Hi! Welcome to Québec&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Québec is a bilingual city in a bilingual country.&lt;/p&gt;

&lt;p&gt;Hence the need for multilingual support inside the app—in its content management layer, more specifically.&lt;/p&gt;

&lt;p&gt;To make sure the Nuxt-driven app could eventually support this, Gab used &lt;a href="https://poeditor.com/"&gt;POEditor&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;POEditor is a developer-friendly translation tool. &lt;/p&gt;

&lt;p&gt;It works with any type of localization file (JSON,RESX, PO, XML, etc.). &lt;/p&gt;

&lt;p&gt;It also uses a language file as source code (JSON, RESX, PO, XML, etc.). Such files are located in a Git repo—hence its appeal here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EIEUHXHR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204922/poeditor-workflow.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EIEUHXHR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204922/poeditor-workflow.jpg" alt="POEditor workflow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once a translation is ready for deployment, the user hits a button, which triggers a commit to the Git repo. The latter sets off a hook starting a build to the CI (Appveyor, GitLab CI, Travis, etc.). Unit, integration, and acceptation tests roll to make sure translation changes haven’t affected the product’s quality. After that thorough, automated process, translations are deployed live on the platform.&lt;/p&gt;

&lt;p&gt;POEditor specifics are out of scope here, but I’ll still leave you with these gorgeous UI screenshots:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3B6l68bU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204923/poeditor-ui-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3B6l68bU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204923/poeditor-ui-1.png" alt="POEditor UI 1"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Jamstack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Public organizations like governments, cities, and NGOs operate under logistical constraints when picking service providers: successive call for tenders, rigid decisional guidelines around specs, budgets, deadlines, etc.&lt;/p&gt;

&lt;p&gt;The Jamstack, with its focus on API-driven modularity and static frontends, brings much needed flexibility to this rigid system. The decoupling of building/hosting, of backend data/frontend files, makes it way easier to migrate code from one provider to another, from one stack to another.&lt;/p&gt;

&lt;p&gt;I encourage developers and agencies to consider this development paradigm more seriously.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://snipcart.com/blog/jamstack"&gt;Here&lt;/a&gt; is a primer on the Jamstack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nuxt.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After meeting the founders in Toronto and chatting with my team, I think it’s safe to say &lt;strong&gt;Nuxt is going places&lt;/strong&gt;. &lt;a href="https://nuxtjs.org/blog/seed-round"&gt;That funding announcement&lt;/a&gt; will help! Some cool stuff to expect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript as first-class citizen&lt;/li&gt;
&lt;li&gt;Better community modules &amp;amp; sample apps (e.g. auth-module could be improved)&lt;/li&gt;
&lt;li&gt;Stronger, larger community&lt;/li&gt;
&lt;li&gt;Becoming the “go-to framework” for complex Vue.js applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For those interested in getting started with Nuxt and PWAs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nuxtjs.org/"&gt;Nuxt.js official site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.vuemastery.com/nuxt-cheat-sheet"&gt;Nuxt.js cheat sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pwa.nuxtjs.org/"&gt;Nuxt.js PWA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://snipcart.com/blog/pwa-example-ecommerce-gatsby"&gt;Intro to PWAs for e-commerce&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy coding! 🙇‍♂️&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Making Peace with Process: A Bittersweet (Ongoing!) Release</title>
      <dc:creator>Francois Lanthier Nadeau</dc:creator>
      <pubDate>Tue, 22 Oct 2019 21:55:15 +0000</pubDate>
      <link>https://dev.to/the_fln/making-peace-with-process-a-bittersweet-ongoing-release-28l9</link>
      <guid>https://dev.to/the_fln/making-peace-with-process-a-bittersweet-ongoing-release-28l9</guid>
      <description>&lt;p&gt;We released Snipcart’s v3.0 today. 🚀&lt;/p&gt;

&lt;p&gt;The Product has officially been Hunted:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://www.producthunt.com/posts/snipcart-3-0"&gt;https://www.producthunt.com/posts/snipcart-3-0&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m proud of our team, but it’s a bittersweet release.&lt;/p&gt;

&lt;p&gt;This train of thought started as &lt;a href="https://twitter.com/the_fln/status/1186676111020871686"&gt;a Twitter thread&lt;/a&gt;, but I decided to turn it into a blog post for posterity.&lt;/p&gt;

&lt;p&gt;We first started talking about the v3.0 in late 2017. Back then, we boldly claimed we’d ship it by the end of 2018. Clearly, that didn’t happen.&lt;/p&gt;

&lt;p&gt;Let’s explore why.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/kGFrtbFuJyctOEDgZD/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/kGFrtbFuJyctOEDgZD/giphy.gif" alt="post-mortem"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For those who don’t know us, it’s worth noting that we are a bootstrapped business. There is a particular twist to our &lt;a href="https://medium.com/swlh/our-odd-startup-3-%C2%BD-guys-no-vc-profitability-and-patience-307eb1ad1b0b"&gt;foundation story&lt;/a&gt;—we launched inside an agency. It de-risked our first year and gave us plenty of “pay later” dev and design hours. Still, no VC millions ever landed in our bank account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cowboy days
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oAL0b7XX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204715/0_6xn9yhdpzrjtxfqf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oAL0b7XX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://snipcart.com/media/204715/0_6xn9yhdpzrjtxfqf.jpg" alt="cowboy-days"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During the first years, our operations team consisted of roughly two developers and myself. They wrote code. &lt;a href="https://www.indiehackers.com/interview/making-6-figures-helping-developers-add-e-commerce-to-their-sites-1f900acad7"&gt;I did marketing stuff&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;We worked side by side, every day. Often on weekends. Communication and decision-making were super easy: when you don’t have a lot of bandwidth, you can’t start dozens of features. You try to crunch through the essential.&lt;/p&gt;

&lt;p&gt;From 2018 to 2019, we went from three to eight team members. We had a rough rule of thumb: every +5K MRR or so; we’d try to hire a new person. We didn’t quite respect that rule for our last two hires, but anyway.&lt;/p&gt;

&lt;p&gt;I naively thought that doubling our size would more than double our output and revenues. Boy, was I wrong. 🤦‍♀️&lt;/p&gt;

&lt;p&gt;See, in startup absolutes, 3 → 8 doesn’t seem like a big deal. Hell, Shopify hired like a thousand employees this year.&lt;/p&gt;

&lt;p&gt;But in our micro, relative context, &lt;strong&gt;3 → 8 is a pretty big deal&lt;/strong&gt;. It represents a 166.6% 😈 increase in HUMANS—the most lovable and volatile variable in any equation.&lt;/p&gt;

&lt;p&gt;We weren’t three tight-knit cowboys anymore. We had parents &lt;em&gt;and&lt;/em&gt; freshly graduated students. Senior &lt;em&gt;and&lt;/em&gt; junior team members. Distinct personalities and work styles. Different alarm clocks.&lt;/p&gt;

&lt;p&gt;We were becoming a… business?&lt;/p&gt;

&lt;h2&gt;
  
  
  Mamma Management and Poppa Process
&lt;/h2&gt;

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

&lt;p&gt;As a “cool” indie startup, we were always process and management-averse. I know I was. I always had a problem with authority. &lt;/p&gt;

&lt;p&gt;Anyway, we did NOT include Mamma Management and Poppa Process in our new, bigger family. Looking back now, this was a mistake. But it took us months to figure it out.&lt;/p&gt;

&lt;p&gt;Wasting eight people’s time and energy costs a lot more than doing so with three people. &lt;a href="https://www.youtube.com/watch?v=X09oxyIeGuY"&gt;Quick maths&lt;/a&gt;. Operations issues started creeping in. Next thing we knew? We got hit in the face with a few curveballs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scattered communications&lt;/li&gt;
&lt;li&gt;Unstructured support schedule&lt;/li&gt;
&lt;li&gt;Ad-hoc meetings&lt;/li&gt;
&lt;li&gt;On-the-fly documentation&lt;/li&gt;
&lt;li&gt;Unplanned issues&lt;/li&gt;
&lt;li&gt;“Priority” interruptions (I SEE YOU GDPR; HI PSD2)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the hardest-hitting curveball was an &lt;strong&gt;unclear decision-making process&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Being rational human beings with a minimum of awareness, we eventually realized things weren’t great. We were not shipping as much as we’d like to. And that lack of decision-making structure stalled us big time:&lt;/p&gt;

&lt;p&gt;No one was calling the shots; there were no clear balls to be dropped.&lt;/p&gt;

&lt;p&gt;I call it the shrug emoji period. ¯_(ツ)_/¯&lt;/p&gt;

&lt;p&gt;Eventually, we got our shit together. We realized that the layer of process and management we were avoiding could, in fact, act as a protection from these hazards—a shield for business curveballs.&lt;/p&gt;

&lt;p&gt;More concretely, we: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Appointed a CEO (me).&lt;/li&gt;
&lt;li&gt;Designated + trained a product owner (also me—listen, it’s a small startup).

&lt;ul&gt;
&lt;li&gt;Did the whole Scrum exam thing.&lt;/li&gt;
&lt;li&gt;Working on backlog refinement as I write this.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Seriously committed to sprint plannings &amp;amp; reviews.&lt;/li&gt;
&lt;li&gt;Structured and planned customer support efforts.&lt;/li&gt;
&lt;li&gt;Cut down nice-to-haves for marketing &amp;amp; product.&lt;/li&gt;
&lt;li&gt;Set revenue goals and marketing budgets.&lt;/li&gt;
&lt;li&gt;Structured vacation + training processes.

&lt;ul&gt;
&lt;li&gt;Can’t have most of the team offline at the same time for days.&lt;/li&gt;
&lt;li&gt;Can’t be repeating and freestyling the same stuff every time we hire.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gotta do what you gotta do!&lt;/p&gt;

&lt;h2&gt;
  
  
  Product and profits and people and… that’s it.
&lt;/h2&gt;

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

&lt;p&gt;Slowly, we’re re-focusing the team on product experience.&lt;/p&gt;

&lt;p&gt;Over the years, we’ve helped thousands of developers enable e-commerce on all sorts of sites. We became &lt;a href="https://snipcart.com/blog/jamstack"&gt;JAMstack champions&lt;/a&gt;. We shipped &lt;a href="https://snipcart.com/blog"&gt;great marketing work&lt;/a&gt;. We generated lots of traffic and sign-ups. And that’s all good and well.&lt;/p&gt;

&lt;p&gt;But as we start maturing as a company, so must our product. Today, we all agree on a focus that resonates with this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improving product experience to boost activation and reduce churn.&lt;/strong&gt; That’s it.&lt;/p&gt;

&lt;p&gt;The “better product” goal is not only better margins but better mornings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Our customers will prefer waking up with 10x more order notifications from their store.&lt;/li&gt;
&lt;li&gt;We’ll prefer waking up with positive product feedback in our inboxes and fun, challenging features to tackle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So we do it for our customers and ourselves. For the people! 💃&lt;/p&gt;

&lt;h2&gt;
  
  
  About that Snipcart v3.0 release
&lt;/h2&gt;

&lt;p&gt;All of the above starts with our shopping cart's v3.0. It’s the tip of the spear for Snipcart—offering an awesome, customizable checkout experience.&lt;/p&gt;

&lt;p&gt;Here, we even tried our hand at producing a video for this one:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/3XyFwc7sUCw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Now for the “bitter” part: the v3.0 currently lacks a few features to get to v2.0 parity. They’re listed in &lt;a href="https://docs.snipcart.com/v3/"&gt;our new documentation&lt;/a&gt;. We’re actively working on these, one sprint at a time. 🏃‍♂️&lt;/p&gt;

&lt;p&gt;Why release without these features, you ask?&lt;/p&gt;

&lt;p&gt;Because we’re proud of what we built, it works just fine! We solved tricky backend puzzles and fun frontend challenges. We stepped our design game up.&lt;/p&gt;

&lt;p&gt;At the end of the day, our users deserve a better version of our cart. Releasing it motivates us to improve upon it and harness our new processes to do so. That’s precisely what we’re going to do.&lt;/p&gt;

&lt;p&gt;Now let me tip my hat to my wonderful teammates. Your skills and jokes make my work life 10x better, easy:&lt;/p&gt;

&lt;p&gt;❤ &lt;a href="https://twitter.com/couellet"&gt;@couellet&lt;/a&gt;&lt;br&gt;
❤ &lt;a href="https://twitter.com/thatfrankdev"&gt;@thatfrankdev&lt;/a&gt;&lt;br&gt;
❤ &lt;a href="https://twitter.com/JeanSebTr"&gt;@JeanSebTr&lt;/a&gt;&lt;br&gt;
❤ &lt;a href="https://twitter.com/MathDy24"&gt;@MathDy24&lt;/a&gt;&lt;br&gt;
❤ &lt;a href="https://twitter.com/josscuette"&gt;@josscuette&lt;/a&gt;&lt;br&gt;
❤ &lt;a href="https://twitter.com/geosaa"&gt;@geosaa&lt;/a&gt;&lt;br&gt;
❤ &lt;a href="https://twitter.com/VincentGirard"&gt;@VincentGirard&lt;/a&gt;&lt;br&gt;
❤ and &lt;strong&gt;Michael&lt;/strong&gt;, who stubbornly refuses to create a Twitter account&lt;/p&gt;

&lt;p&gt;Next up on the broader roadmap is the merchant dashboard; chunky piece, can’t wait to get started. Best believe I won’t commit to an ETA here, though! 😅&lt;/p&gt;

&lt;h2&gt;
  
  
  “Insert inspiring conclusion from new CEO”
&lt;/h2&gt;

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

&lt;p&gt;It has been a wild ride since we launched in 2013. We helped devs &amp;amp; merchants, worked on a nice SaaS, survived the e-commerce industry.&lt;/p&gt;

&lt;p&gt;We made it past the 5 years startup gap of death.&lt;/p&gt;

&lt;p&gt;Now, &lt;a href="https://signalvnoise.com/posts/997-start-a-business-not-a-startup"&gt;as Jason Fried would say&lt;/a&gt;, it’s time to build a business, not a startup.&lt;/p&gt;

&lt;p&gt;Got work to do. Franck out. 🙇‍♂️&lt;/p&gt;




&lt;p&gt;&lt;em&gt;You can check out Snipcart v3.0 &lt;a href="https://www.producthunt.com/posts/snipcart-3-0"&gt;on Product Hunt&lt;/a&gt;, or simply &lt;a href="https://app.snipcart.com/register"&gt;sign up&lt;/a&gt;. It’s forever free in Test mode.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>jamstack</category>
      <category>ecommerce</category>
      <category>startup</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How We Tried to Chatbot Our Way out of a Support Crisis</title>
      <dc:creator>Francois Lanthier Nadeau</dc:creator>
      <pubDate>Sun, 17 Sep 2017 20:34:51 +0000</pubDate>
      <link>https://dev.to/the_fln/how-we-tried-to-chatbot-our-way-out-of-a-support-crisis</link>
      <guid>https://dev.to/the_fln/how-we-tried-to-chatbot-our-way-out-of-a-support-crisis</guid>
      <description>&lt;p&gt;Has your customer support ever felt like a re-enactment of &lt;a href="https://en.wikipedia.org/wiki/Sisyphus" rel="noopener noreferrer"&gt;the Sisyphus myth&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;40 opened tickets.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You breathe in, roll up your sleeves: “Hold my coffee mug, I’m going in!”&lt;/p&gt;

&lt;p&gt;&lt;em&gt;5 hours later&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;15 opened tickets.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You self-five yourself for all the issues solved amidst your ad-hoc to-dos. Content, you log out, grab a snack, and go to bed.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Next morning.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;40 opened tickets.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;“What the #$@&amp;amp;%*!”&lt;/p&gt;




&lt;p&gt;A few months ago, support at our SaaS became this shared Sisyphean reality. However hard we worked at it, tickets just… kept stacking up.&lt;/p&gt;

&lt;p&gt;I had read about “big startup support horror stories before.&lt;/p&gt;

&lt;p&gt;“Jeez, we’re lucky support isn’t such a pain at Snipcart! I remember thinking in 2013.&lt;/p&gt;

&lt;p&gt;I used to be convinced it would never be an issue for our small, humble SaaS.&lt;/p&gt;

&lt;p&gt;But &lt;a href="https://medium.com/swlh/our-odd-startup-3-%C2%BD-guys-no-vc-profitability-and-patience-307eb1ad1b0b" rel="noopener noreferrer"&gt;that humble SaaS scaled a bit&lt;/a&gt;. As support intensified, things started to change.&lt;/p&gt;

&lt;p&gt;Development velocity plummeted. Marketing initiatives slowed down. Morale dropped a notch. I started understanding why entire products &amp;amp; &lt;a href="https://www.helpscout.net/blog/" rel="noopener noreferrer"&gt;blogs&lt;/a&gt; were built around support.&lt;/p&gt;

&lt;p&gt;We had to do &lt;em&gt;something&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;After rounds of fruitless investigations, we came up with an idea: &lt;strong&gt;build a support chatbot&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context &amp;amp; expectations
&lt;/h2&gt;

&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%2F171935%2Fsupport-chatbot-experiment-expectations.jpeg" 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%2F171935%2Fsupport-chatbot-experiment-expectations.jpeg" alt="support-chatbot-experiment-expectations"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our gut feeling was that most answers users wantedâ€Š–â€Šespecially technical onesâ€Š–â€Šwere already in our documentation. It was like people weren’t actually reading through it. Now, we knew it needed a little love, but we subconsciously overlooked that fact.&lt;/p&gt;

&lt;p&gt;“Why oh why aren’t our supposedly tech-savvy users reading all that info we’ve written for them! did we chant in harmony.&lt;/p&gt;

&lt;p&gt;To top it off, we were still hooked on a grandfathered UserVoice plan with sluggish UX.&lt;/p&gt;

&lt;p&gt;So our plan was simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Switch to Intercom.&lt;/li&gt;
&lt;li&gt;Build a chatbot using their API to redirect users to the documentation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Our expectations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use automation and a new system to reduce support efforts and regain development velocity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, we knew chatbots weren’t mature enough to replace our whole support infrastructure. With that in mind, we didn’t try to reinvent the chatbot wheel or inject hardcore machine learning in our chatbot. We just went for the lowest hanging fruit and built what we fondly call “our dumb bot.”&lt;/p&gt;

&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%2F175830%2Fdumb-bot-intercom-chatbot.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%2F175830%2Fdumb-bot-intercom-chatbot.png" alt="dumb-bot-intercom-chatbot"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Beep bop beep bop, I’m a bot!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;First, we tagged our documentation (a Node.js app) entries with relevant keywords.&lt;/p&gt;

&lt;p&gt;Then, we built the botâ€Š–â€Ša webhook handler in Node/Express. Its function was simple: run semantic analysis on the Intercom tickets, match them with relevant entries, and serve them in Intercom.&lt;/p&gt;

&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%2F175828%2Fchatbot-conversation1.gif" 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%2F175828%2Fchatbot-conversation1.gif" alt="chatbot-conversation1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the bot didn’t find matching entries, it’d simply greet the user and inform him of an incoming human response.&lt;/p&gt;

&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%2F171931%2Fchatbot-conversation2.gif" 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%2F171931%2Fchatbot-conversation2.gif" alt="chatbot-conversation2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, we were doing the typical &lt;a href="https://blog.sendsonar.com/2016/12/19/how-to-nail-the-bot-to-human-handoff/" rel="noopener noreferrer"&gt;bot to human handoff&lt;/a&gt;. If our dumb bot couldn’t answer, we’d take over. In other words, we simply &lt;strong&gt;applied a layer of automation on top of support to improve both ours and our customers’ lives&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Injecting these answers inside the channel we thought customers often used without consulting the documentation was key for us. First, it answered expectations of “good and fast service with valuable answers and not just “please wait placeholders. Second, it actualized the help potential in lingering our static documentation.&lt;/p&gt;

&lt;p&gt;You’re probably thinking: “sure, cool stuff, but did it &lt;em&gt;work&lt;/em&gt;?”&lt;/p&gt;

&lt;p&gt;Well, it kind of did, actually!&lt;/p&gt;

&lt;h2&gt;
  
  
  Results: making sense of numbers &amp;amp; words
&lt;/h2&gt;

&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%2F175829%2Fchatbot-experiment-results.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%2F175829%2Fchatbot-experiment-results.png" alt="chatbot-experiment-results"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We tracked the following results over a four months period.&lt;/p&gt;

&lt;h3&gt;
  
  
  Support metrics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;6.5% tickets were fully answered by the bot (only human input = friendly goodbye, closing ticket)&lt;/li&gt;
&lt;li&gt;10% tickets were partially answered by the bot (quick human follow-up)&lt;/li&gt;
&lt;li&gt;83.5% tickets weren’t answered by the bot (human solved issue)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Merging the first two points, we see that our dumb bot got us a 16.5% reduction in support efforts. Which, for the time we spent on it, is great!&lt;/p&gt;

&lt;h3&gt;
  
  
  Engagement metrics
&lt;/h3&gt;

&lt;p&gt;We tracked behaviour and results in Google Analytics with simple &lt;a href="https://support.google.com/analytics/answer/1033867?hl=en" rel="noopener noreferrer"&gt;UTM parameters&lt;/a&gt; on our bot-suggested links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5% of leads not engaged with product yet converted into active users following a bot conversation (&amp;gt;2x our usual conversion rate)&lt;/li&gt;
&lt;li&gt;Bounce rate on site sessions triggered by bot links was low, around 48%&lt;/li&gt;
&lt;li&gt;Users consulted 3.5 pages/session &amp;amp; spent over 5 minutes on site&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More importantly, this data tells us that one of our assumptionsâ€Š–â€Šthe “laziness of usersâ€Š–â€Šwas wrong. They either found an answer and kept looking, or looked without finding one. Considering a majority got back to us on Intercom, the latter seems to have happened more often. The insight here? Bot redirections weren’t solving a majority of user issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qualitative results
&lt;/h3&gt;

&lt;p&gt;After focusing on hard metrics, we turned to softer data: conversations. We analyzed over 100 individual threads with users and noted our observations.&lt;/p&gt;

&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%2F171932%2Fchatbot-conversation3.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%2F171932%2Fchatbot-conversation3.png" alt="chatbot-conversation3"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A question successfully answered by the bot&lt;/em&gt;&lt;/p&gt;

&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%2F175828%2Fchatbot-conversation4.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%2F175828%2Fchatbot-conversation4.png" alt="chatbot-conversation4"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A question partially answered by the bot&lt;/em&gt;&lt;/p&gt;

&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%2F171933%2Fchatbot-conversation5.gif" 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%2F171933%2Fchatbot-conversation5.gif" alt="chatbot-conversation5"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Idem&lt;/em&gt;&lt;/p&gt;

&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%2F175829%2Fchatbot-conversation6.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%2F175829%2Fchatbot-conversation6.png" alt="chatbot-conversation6"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A question needing a recipe or cookbook we didn’t have&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;While this qualitative approach was indeed time-consuming, it was well worth it. It drove us to three conclusions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Users, more often than not, did try to find answers on their own in the documentation. Many times, the answers they were looking for simply weren’t there, or weren’t easy to find.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;There was a clear lack of “structured content in our documentation (cookbooks, recipes, workflows).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The developer-first, flexible approach to e-commerce we champion inevitably increases the complexity and diversity of support questions. And it doesn’t refrain merchants for asking direct questions themselves!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Wrapping up: what happened exactly?
&lt;/h2&gt;

&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%2F175831%2Fsupport-chatbot-experiment-analysis.gif" 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%2F175831%2Fsupport-chatbot-experiment-analysis.gif" alt="support-chatbot-experiment-analysis"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Influenced by the droves of chatbot articles sweeping the web, we opted for an impulsive, trendy shortcut to solve a deep problem. While we often praise focusing on &lt;a href="https://snipcart.com/blog/learn-vanilla-javascript-before-using-js-frameworks" rel="noopener noreferrer"&gt;the basics&lt;/a&gt;, we did the opposite. That being said, our bot did help us out (and still does). However, this whole episode was a clear reminder to &lt;a href="https://snipcart.com/blog/documentation-the-ultimate-marketing-tool-for-developer-first-products" rel="noopener noreferrer"&gt;practice what we preach&lt;/a&gt; and give a whole lotta love to our documentation.&lt;/p&gt;

&lt;p&gt;I like to think our bot, while not having all the conversations we would’ve wanted it to have with customers, at least had a very useful one for us:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;DUMB-BOT&lt;/strong&gt;: Guys, you’re not giving me enough well-articulated information to feed your users. You need to refactor your docs.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;&lt;strong&gt;SNIPCART TEAM&lt;/strong&gt;: You’re right, dumb bot. We’ll get on it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;All in all, I’d say we sort of led a half-experiment with this support crisis. A full one would’ve been to refactor our help content (docs) too. But I’m glad we drank the chatbot Kool-Aid a little on this one. Because our chatbot experiment, while it did help with support a bit, also reminded us that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There are content gaps and architectural issues to address in our docs.&lt;/li&gt;
&lt;li&gt;With a product as flexible as ours, some conversations will inevitably needâ€Š–â€Šand benefit fromâ€Š–â€Špersonalized, “human input.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Focusing on these will allow us to better serve interested and active users.&lt;br&gt;
And these people are just &lt;strong&gt;vital&lt;/strong&gt; to a SaaS’ success. They’re way down your conversion funnelâ€Š–â€Šthey’ve taken action, signaled interest, and often started using your product. Either their money’s out in their hand, or already in your pocket. As a SaaS business, you can’t afford to not give these users the care they deserve.&lt;/p&gt;

&lt;h2&gt;
  
  
  So should you build a chatbot for your SaaS support?
&lt;/h2&gt;

&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%2F171934%2Fchatbot-saas-support-ascii.jpeg" 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%2F171934%2Fchatbot-saas-support-ascii.jpeg" alt="chatbot-saas-support-ascii"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well… maybe?&lt;/p&gt;

&lt;p&gt;I think it’s important to state that 16.5% (our numbers) reduction in tickets can mean a &lt;strong&gt;lot of time and money saved&lt;/strong&gt;. Especially for mid to big-sized SaaS. So a chatbot experiment might be well worth your time, especially if your product usage is more streamlined than ours!&lt;/p&gt;

&lt;p&gt;Also if, like us, you host most of your help content, building a bot and analyzing its interactions might help leverage this content and improve it. There are cool platform-specific bots on the market, like &lt;a href="https://www.intercom.com/operator-bot" rel="noopener noreferrer"&gt;Intercom’s Operator&lt;/a&gt;, but they require help content to be hosted on the platform’s third party. A few reasons why we prefer hosting it ourselves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Control branding &amp;amp; visual experience&lt;/li&gt;
&lt;li&gt;Control depth and format of content&lt;/li&gt;
&lt;li&gt;Improve SEO (bigger site architecture, more thematic authority on-site, inbound links pointing to own domain, technical KW targeting, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyhow, I’d love to hear other thoughts and experiences on leveraging bots for your SaaS or business!&lt;/p&gt;

&lt;p&gt;I’ll be following the comments section closely, should you want to participate. :)&lt;/p&gt;

&lt;p&gt;If you’ve enjoyed this piece, go ahead, give it a reaction! You can also share it somewhere online. That’d be cool.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This post originally appeared &lt;a href="https://chatbotsmagazine.com/how-we-tried-to-chatbot-our-way-out-of-a-support-crisis-b6b97621299b" rel="noopener noreferrer"&gt;on Chatbots Magazine&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>startup</category>
      <category>devtips</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
