<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Bob Walsh</title>
    <description>The latest articles on Forem by Bob Walsh (@bobwalsh47hats).</description>
    <link>https://forem.com/bobwalsh47hats</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%2F205228%2F759079a5-88e0-44d5-ba93-4a15544ee514.png</url>
      <title>Forem: Bob Walsh</title>
      <link>https://forem.com/bobwalsh47hats</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/bobwalsh47hats"/>
    <language>en</language>
    <item>
      <title>When starting 2 apps at the same time makes sense.</title>
      <dc:creator>Bob Walsh</dc:creator>
      <pubDate>Mon, 26 Apr 2021 23:11:04 +0000</pubDate>
      <link>https://forem.com/bobwalsh47hats/when-starting-2-apps-at-the-same-time-makes-sense-1mb2</link>
      <guid>https://forem.com/bobwalsh47hats/when-starting-2-apps-at-the-same-time-makes-sense-1mb2</guid>
      <description>&lt;h3&gt;
  
  
  Am I crazy? I hope not. Time will tell.
&lt;/h3&gt;

&lt;p&gt;So I thought it was time to come clean and admit it: I'm building 2 different SaaS apps at the same time. As a Solopreneur/Developer, workforce of 1 person and 2 cats, it sounds crazy to try and build 2 different apps and get them both to market, but the right toolchain and the right approach can I hope make this work.&lt;/p&gt;

&lt;p&gt;So far, working on two apps at the same time has resulted in &lt;strong&gt;less stress&lt;/strong&gt;, &lt;strong&gt;more ideas&lt;/strong&gt;, and &lt;strong&gt;better code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The problem with building one app is it both takes over you life and can become incredibly stressful. Developers tend to hyper-focus on the problem at hand, yet taking a break and working on something else can unlock your creative powers when you most need them.&lt;/p&gt;

&lt;p&gt;So by working on two apps at the same time I hope to avoid burnout and fatigue and launch 2 solid apps.&lt;/p&gt;

&lt;p&gt;Neither app would be possible without the headstart provided by &lt;a href="https://jumpstartrails.com/"&gt;Jumpstart Pro&lt;/a&gt;. This awesome paid environment makes building a production-ready Rails app a snap.&lt;/p&gt;

&lt;p&gt;The first app is &lt;a href="https://freelancercashflow.com"&gt;FreelancerCashFlow&lt;/a&gt; . Having been a freelancer for most of my life, I've experienced the financial pain, limitations and headaches of Freelancer Feast or Famine. There has to be a better way: managing by cashflow is that way. But first you have to see your cashflow before you can start experimenting by shifting payment dates, savings toward specific purposes and seeing your financial future alternatives.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2ED98ty9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nyawzi0e5j3glz9ecjxk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2ED98ty9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nyawzi0e5j3glz9ecjxk.png" alt="FreelancerCashFlow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second app is &lt;a href="https://freelancercontacts.com/"&gt;FreelancerContacts&lt;/a&gt;, a referral marketing system for all kinds of freelancers. Certain industries, like real estate agents, have had this down to a science for years: how to ask past and current clients for referrals. Done right, and you go from chasing every posted contract to actually having a waiting list of people who want your services. Since developers hate marketing, building a solid referral system makes sense.&lt;/p&gt;

&lt;p&gt;While development of both apps is moving along, I've bought into the Validate Your Idea concept and only have a simple landing page up to gauge interest. I figure if you're willing to provide your email, you're a potential customer.&lt;/p&gt;

&lt;p&gt;Anyway, I think the 2 App approach has merit - what do you think?&lt;/p&gt;

</description>
      <category>freelancer</category>
    </item>
    <item>
      <title>Remote or Else</title>
      <dc:creator>Bob Walsh</dc:creator>
      <pubDate>Mon, 06 Apr 2020 19:29:59 +0000</pubDate>
      <link>https://forem.com/bobwalsh47hats/remote-or-else-1ckg</link>
      <guid>https://forem.com/bobwalsh47hats/remote-or-else-1ckg</guid>
      <description>&lt;p&gt;I've been working remotely for about a decade and decided that I could do my part best by curating/writing about the best practices for working remotely at &lt;a href="https://remoteorelse.com"&gt;Remote or Else&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you're interested in doing a guest post or just think that there's a post on some aspect of living socially apart worth sharing, please drop me a line at &lt;a href="//mailto:bob@remoteorelse.com"&gt;bob@remoteorelse.com&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;A Gridsome blog site with 3 dedicated channels for posts, news and templates. &lt;/p&gt;

&lt;h2&gt;
  
  
  Demo Link
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://remoteorelse.com"&gt;https://remoteorelse.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Link to Code
&lt;/h2&gt;

&lt;p&gt;Started with this Gridsome Starter: &lt;a href="https://gridsome.org/starters/gridsome-casper-v3-starter/"&gt;https://gridsome.org/starters/gridsome-casper-v3-starter/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I built it (what's the stack? did I run into issues or discover something new along the way?)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Gridsome deserves more developer attention!&lt;/li&gt;
&lt;li&gt;Graphql is not easy to grasp: I would love to see someone build a site of example queries.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>remote</category>
      <category>graphql</category>
      <category>vue</category>
      <category>remotework</category>
    </item>
    <item>
      <title>Gather, study &amp; learn digitally with Readwise</title>
      <dc:creator>Bob Walsh</dc:creator>
      <pubDate>Tue, 11 Feb 2020 23:42:53 +0000</pubDate>
      <link>https://forem.com/bobwalsh47hats/gather-study-learn-digitally-with-readwise-4kb8</link>
      <guid>https://forem.com/bobwalsh47hats/gather-study-learn-digitally-with-readwise-4kb8</guid>
      <description>&lt;p&gt;Back when books were [exclusively] made of paper, I would consume technical and business books by the backpack load, marking them up with yellow, green and other color highlights. If I really wanted to learn the book, I'd do a second pass, only reading the highlights and highlighting over the first color with another color.&lt;/p&gt;

&lt;p&gt;For years I've searched for a simple way to gather my Kindle bookmarks and actually get some value out of them. I missed being able to do something with my highlights. Today, thanks to a chance online encounter with &lt;a href="https://dev.to/theianjones/roam-research-to-explore-ideas-5cge/comments"&gt;Ian Jones&lt;/a&gt; over on Dev.to, I learned about an awesome SaaS tool: &lt;a href="https://readwise.io/i/bob67"&gt;Readwise&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Readwise makes it easy to gather your Kindle bookmarks. And your bookmarks from Instapaper, iBooks, Pocket and the web. And through a simple hack, you can start actually getting the use out of all those expensive technical PDFs you've bought from developers and designers, like the excellent &lt;a href="https://refactoringui.com/book/"&gt;Refactoring UI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So Readwise gathers all your highlights. Then what?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;browse the highlights by book or article,&lt;/li&gt;
&lt;li&gt;see a selection of highlights in a daily email,&lt;/li&gt;
&lt;li&gt;tag highlights so you can pull together material across source,&lt;/li&gt;
&lt;li&gt;share with friends/coworkers,&lt;/li&gt;
&lt;li&gt;browse, review and learn highlights with spaced repetition built-in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This last feature is a &lt;strong&gt;gamechanger&lt;/strong&gt;. Let's say you're trying to absorb how serverless functions work. You have bookmarks scattered all over the place: web pages and [highlights(&lt;a href="https://help.getpocket.com/article/1144-highlighting-in-pocket)"&gt;https://help.getpocket.com/article/1144-highlighting-in-pocket)&lt;/a&gt;] in Pocket in Firefox or Chrome, Kindle books like &lt;a href="https://smile.amazon.com/AWS-Lambda-Quick-Start-Guide-ebook/dp/B07F713C6G"&gt;this one&lt;/a&gt;, pdfs that came in epub format as well or that you &lt;a href="https://www.zamzar.com/"&gt;converted over&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;With Readwise, you can turn all those highlights into flashcards, and drill on them until you know the material. (&lt;em&gt;short rant: if you're not spending 25% or more of your worktime learning new things, you'll find yourself out of work in a year or two - been there, done that, it sucked.&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;There are other features in Readwise I'll let you discover/explore &lt;a href="https://readwise.io/i/bob67"&gt;during your free 30-day trial&lt;/a&gt;, but really, Readwise had me sold the moment I saw my highlights from both Kindle and PDFs available together. A max of $8.99/month.&lt;/p&gt;

</description>
      <category>learning</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Creating a deployable Rails 6 app + TailwindCSS, Stimulus.js, and a custom font.</title>
      <dc:creator>Bob Walsh</dc:creator>
      <pubDate>Fri, 07 Feb 2020 23:38:21 +0000</pubDate>
      <link>https://forem.com/bobwalsh47hats/creating-a-deployable-rails-6-app-tailwindcss-stimulus-js-and-a-custom-font-3472</link>
      <guid>https://forem.com/bobwalsh47hats/creating-a-deployable-rails-6-app-tailwindcss-stimulus-js-and-a-custom-font-3472</guid>
      <description>&lt;p&gt;This post covers how to set up a new Rails 6 app to use &lt;a href="https://tailwindcss.com/"&gt;Tailwind CSS&lt;/a&gt;, and then set up a custom body font, and get the whole thing actually working when deployed to &lt;a href="https://www.heroku.com/"&gt;Heroku&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you haven't upgraded your Rails skills to 6, be prepared to be shocked: Rails 6 fully works with modern JS frameworks the way they expect to be worked with. While there's still the asset pipeline, it's deprecated for the javascript hotness.&lt;/p&gt;

&lt;p&gt;The first and most important step is don't pick the wrong tutorials to follow, or your path will be one of frustration and pain. I initially wanted to run Vue.js from within Rails 6, and I figured that was going to be the most difficult integration. I started by Googling "Rails 6 Vue js" and found this &lt;a href="https://medium.com/swlh/how-to-integrate-vue-js-with-rails-6-5bd4c6263b18"&gt;How to Integrate Vue.js with Rails 6&lt;br&gt;
&lt;/a&gt; and through trial and much error, integrated Tailwind with it.&lt;/p&gt;

&lt;p&gt;So there I was with Rails6, Vue, and Tailwind sitting in a tree. Unfortunately, I kept getting a compile error on Heroku that was not happening on localhost. Damn!&lt;/p&gt;

&lt;p&gt;So after several days for fruitlessly trying to debug this issue and rethinking things a bit, I realized I was better off sticking with what I know and coloring within the lines that the people who wrote Rails have laid down: Rails for the main thing, and &lt;a href="https://stimulusjs.org/"&gt;Stimulus.js&lt;/a&gt; to handle the "jQuery-like" simple but essential stuff like triggering dropdowns. &lt;/p&gt;
&lt;h3&gt;
  
  
  Enough talk, show me the code!
&lt;/h3&gt;

&lt;p&gt;Ok, here we go.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;with the current rails/ruby in your present working directory, &lt;code&gt;rails new &amp;lt;appname&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The install Stimulus with &lt;code&gt;rails webpacker:install:stimulus&lt;/code&gt; (see this GoRails video: &lt;a href="https://gorails.com/episodes/webpacker-javascript-in-rails-6?autoplay=1%5D"&gt;How to use Javascript via webpacker in Rails 6 (and Flatpickr)&lt;/a&gt; for an excellent tutorial.)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;app/javascript/packs/application.js is very much like the old asset pipeline; add this code:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import "controllers"
import flatpickr from "flatpickr"

require("flatpickr/dist/flatpickr.css")
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The first line sets up stimulus controllers, then the next lines set up flatpickr. then this code:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;document.addEventListener("turbolinks:load", () =&amp;gt; {
  flatpickr("[data-behavior='flatpickr']", {
    altInput: true,
    altFormat: "F j, Y",
    dateFormat: "Y-m-d",
  })
})
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;configures what HTML tags should be inited with flatpickr and what the input and display date formats in flatpickr should be.&lt;br&gt;
And don't forget to add flatpickr to your rails project: &lt;code&gt;yarn add flatpickr&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;[A small digression: pick either yarn or npm and stick to that. Otherwise, you end up with a &lt;code&gt;yarn.lock&lt;/code&gt; and a &lt;code&gt;package-lock.json&lt;/code&gt; file in contention for control of your &lt;code&gt;package.json&lt;/code&gt;. Bad idea. For this project I went with yarn, and recommend this cheatsheet for translating npm into yarn: &lt;a href="https://shift.infinite.red/npm-vs-yarn-cheat-sheet-8755b092e5cc"&gt;NPM vs Yarn Cheat Sheet&lt;/a&gt;.]&lt;/p&gt;

&lt;p&gt;Next, it's time to see flatpickr at work in a view. Scaffold a view and then replace a &lt;code&gt;form.date_select&lt;/code&gt; with a &lt;code&gt;form.text_field :publish)date, date, { behavior: "flatpickr"}&lt;/code&gt; you should now in have a much nicer view working:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X_u-kVKS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mhrih9kdbpyb4xcuiswu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X_u-kVKS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mhrih9kdbpyb4xcuiswu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By the way, it seems Rails 6 is using a whole new form syntax: cleaner than the old one, hopefully easier to deal with when it comes time to add Tailwind classes.&lt;/p&gt;

&lt;p&gt;Now would be a good time to stick your project up on Heroku. Unless you know you are going to deploy via AWS, Heroku makes it easy to deploy and manage. Read this post, &lt;a href="https://devcenter.heroku.com/articles/getting-started-with-rails6"&gt;Getting Started on Heroku with Rails 6.x&lt;/a&gt;. if you need to brush up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementing TailwindCSS
&lt;/h3&gt;


&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You'll do a &lt;code&gt;yarn add tailwindcss@latest&lt;/code&gt;. Why latest? Because you want the &lt;a href="https://www.npmjs.com/package/tailwindcss"&gt;latest stable build of TailwindCSS&lt;/a&gt;. Now you have TailwindCSS in your project, but not yet integrated. You should pull up the &lt;a href="https://tailwindcss.com/docs/installation/"&gt;Tailwind Install instructions&lt;/a&gt;, keeping in mind you need to get Tailwind working in your Rails 6 project. Check out GoRails &lt;a href="https://gorails.com/episodes/tailwindcss-1-0-with-rails-6"&gt;How to install TailwindCSS 1.0 with Rails 6&lt;/a&gt; if you want the full context, but here are the steps:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After doing &lt;code&gt;yarn add tailwindcss&lt;/code&gt;, you need to create a new &lt;code&gt;stylesheets&lt;/code&gt; directory in your &lt;code&gt;javascript&lt;/code&gt; folder, and in that directory create an &lt;code&gt;application.scss&lt;/code&gt; file to hold Tailwind's configuration:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;In &lt;code&gt;postcss.config.js&lt;/code&gt;, you need to &lt;code&gt;require('tailwindcss')&lt;/code&gt; and on the next line, &lt;code&gt;require('authoprefixer')&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;One more step: telling webpack about this new &lt;code&gt;application.scss&lt;/code&gt;. Do that in &lt;code&gt;application.js&lt;/code&gt; with a &lt;code&gt;require("stylesheets/application.scss")&lt;/code&gt; declaration.&lt;/li&gt;
&lt;li&gt;Now you need to employ some tailwindCSS. For an easy way to do this, copy a navbar &lt;a href="https://tailwindcss.com/components/navigation"&gt;here&lt;/a&gt; and add it to  &lt;code&gt;/layout/application.html.erb&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You should have everything working in your Rails Project: do a quick test by having webpack compile by running from your CLI &lt;code&gt;bin/webpack&lt;/code&gt;, and then try running it in localhost.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Installing a custom font into a Rails 6 app
&lt;/h3&gt;

&lt;p&gt;As the final step I want to capture in this tutorial, here are the steps needed to use a custom font. Gone is declaring a CDN in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; tag, or shoehorning a set of fonts into your asset pipeline. There's a much cleaner way, the Javascript way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find the font as an npm module at &lt;a href="https://www.npmjs.com/package/typeface-inter"&gt;npmjs.com&lt;/a&gt;. most font npm modules are going to start with &lt;code&gt;interface-&lt;/code&gt; so pick one you like &lt;a href="https://www.npmjs.com/package/typeface-roboto"&gt;Roboto&lt;/a&gt;, or &lt;a href="https://www.npmjs.com/package/typeface-nunito"&gt;Nunito&lt;/a&gt;, or the awesome &lt;a href="https://www.npmjs.com/package/typeface-inter"&gt;Inter&lt;/a&gt; font. Then add it to your project. For example &lt;code&gt;yarn add 'typeface-inter'&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Now you need to tell Tailwind about this font in three places. First, edit your &lt;code&gt;application.js&lt;/code&gt; file to include the npm module:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;require("channels")
require('typeface-inter')

require("stylesheets/application.scss")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Next, generate a &lt;code&gt;tailwind.config.js&lt;/code&gt; file in the &lt;a href="https://tailwindcss.com/docs/installation/#3-create-your-tailwind-config-file-optional"&gt;root of your project&lt;/a&gt; (npx unlike npm does not generate a &lt;code&gt;package-lock.json&lt;/code&gt; file, so use that.)&lt;/li&gt;
&lt;li&gt; Modify &lt;code&gt;tailwind.config.js&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module.exports = {
  theme: {
    fontFamily: {
      body: ['inter']
    },
    extend: {},
  },
  variants: {},
  plugins: [],
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Finally, go into your application.scss file and &lt;a href="https://tailwindcss.com/docs/adding-base-styles/"&gt;apply the font to the html tag&lt;/a&gt;, so &lt;code&gt;fontFamily{body{['inter'}}}&lt;/code&gt; gets applied:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@import "tailwindcss/base";
html {
  @apply font-body;
}
@import "tailwindcss/components";
@import "tailwindcss/utilities";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Thanks to &lt;strong&gt;Scott Watermasysk&lt;/strong&gt; and &lt;a href="https://scottw.com/blog/google-font-tailwind/"&gt;"Using Google Fonts Tailwind CSS"&lt;/a&gt; who graciously clarified for me &lt;a href="https://twitter.com/scottw/status/1225192133621092353"&gt;where some of these bits need to go&lt;/a&gt;. Thanks Scott! (BTW, check out his &lt;a href="https://howivscode.com/"&gt;How I VSCode&lt;/a&gt; project.)&lt;/p&gt;

&lt;h3&gt;
  
  
  Takeaways
&lt;/h3&gt;

&lt;p&gt;Once again Rails has reinvented itself, this time as an excellent server application and as a container for all the javascript npm modules and frameworks large and small you might want to use. &lt;/p&gt;

&lt;p&gt;That means all you Rails developers who know jQuery but are flummoxed by npm modules and all that javascript running loose need to bite the bullet, learn Rails 6, and get on board with it.&lt;/p&gt;

&lt;p&gt;Once you make the mental switch to how webpacker works to integrate js into your rails app, it all starts making sense, and you can pretty much forget all those painful little workarounds in the asset pipeline.&lt;/p&gt;

&lt;p&gt;And as &lt;a href="https://dev.to/ahoy/messages/OVf3bMolD6es50mfanytNuYcl6weueh2/click?signature=a62c0cdc73256ab058989692e04e10ca9d74c718&amp;amp;url=https%3A%2F%2Fdev.to%2Fsmitjel%3Futm_source%3Dnotify_mailer%26utm_medium%3Demail%26utm_campaign%3Dnew_reply_email"&gt;Lee Smith&lt;/a&gt; just pointed out, while TailwindCSS starts out being a large package, larger than Bootstrap, you can easily add &lt;a href="https://tailwindcss.com/docs/controlling-file-size/"&gt;&lt;code&gt;purgeCSS&lt;/code&gt;&lt;/a&gt; to your project so that when you push to production all those unused TailwindCSS classes get axed. The result? An ultrasmall and ultrasleek css file.&lt;/p&gt;

&lt;p&gt;A final takeaway: The shelf life of developer information is now even shorter. Any tutorial, video, or post older than 6 months is suspect; older than a year, not trustworthy.  That's a huge unmet need looking for a cool SaaS to solve it, in case you want to build the next Big Thing.&lt;/p&gt;

</description>
      <category>rails</category>
      <category>tailwindcss</category>
      <category>javascript</category>
    </item>
    <item>
      <title>WordPress to gridsome via markdown in 2019 explained.</title>
      <dc:creator>Bob Walsh</dc:creator>
      <pubDate>Wed, 23 Oct 2019 21:27:15 +0000</pubDate>
      <link>https://forem.com/bobwalsh47hats/wordpress-to-gridsome-via-markdown-in-2019-explained-2pe</link>
      <guid>https://forem.com/bobwalsh47hats/wordpress-to-gridsome-via-markdown-in-2019-explained-2pe</guid>
      <description>&lt;h2&gt;
  
  
  Table Of Contents:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Where I started from&lt;/li&gt;
&lt;li&gt;Overview of the Challenges&lt;/li&gt;
&lt;li&gt;Creating the gridsome site&lt;/li&gt;
&lt;li&gt;Hosting on Netlify&lt;/li&gt;
&lt;li&gt;Converting to markdown, Part 1&lt;/li&gt;
&lt;li&gt;Converting to markdown, Part 2&lt;/li&gt;
&lt;li&gt;The Result: my blog in gridsome&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where I started from&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;So in this post, I'm going to outline the process of moving a large WordPress blog to &lt;a href="https://gridsome.org/" rel="noopener noreferrer"&gt;gridsome&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://47hats.com" rel="noopener noreferrer"&gt;47hats&lt;/a&gt; has some 700+ posts and about as many images, going back to 2006: this is not some demo WordPress site!&lt;/p&gt;

&lt;p&gt;While it's debatable that anyone in their right mind would go back and read my posts from say, 2010, Google likes seeing that a site is a body of work, not just a few marketing posts thrown up to try and produce SEO magic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview of the Challenges&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;I faced (at least) 4 questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Could I get all my content out of WordPress and free from the clutches of at least 3 "helpful" WP page editors, including WP's latest Gutenberg?&lt;/li&gt;
&lt;li&gt;Once I got that content free, could I convert it to markdown, preserving links, links to images, tags, and the like?&lt;/li&gt;
&lt;li&gt;Assuming I could do 1 and 2, should I then import these files into a headlessCMS to make it easier to edit and maintain them, or, stick with markdown?&lt;/li&gt;
&lt;li&gt;Which Static Site Generator should I go with? I'd worked with Jekyll and added a blog to my Ruby on Rails project  LearnShortcuts, had played around with Hugo, and was in the process of teaching myself Vue. I decided to stick with Vue because I hope to retool myself as a Vue developer. I considered &lt;a href="https://www.gatsbyjs.org/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt; but did not want to mix learning Vue with (relearning) React.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So once I decided on Vue, which Vue framework should I use? There's at least 3 worth consideration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://vuepress.vuejs.org/" rel="noopener noreferrer"&gt;VuePress&lt;/a&gt; - the "official" Vue documentation SSG was a strong contender. It offers out of the box: a number of markdown extensions, a framework ready for markdown files, and an extendable plugin system. But, in working through the demos I was stymied trying to go with anything but the default theme. If I knew more Vue, perhaps the documentation would have been adequate, but for me, this was a showstopper.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nuxtjs.org/" rel="noopener noreferrer"&gt;Nuxt.js&lt;/a&gt; - I like Nuxt, it reminds me of the good parts of Ruby on Rails. Convention over configuration and a complete framework plus its 1st-class support of static site generation. Nuxt comes with excellent docs (which I supplemented with an extremely excellent Udemy class by &lt;a href="https://www.udemy.com/share/102092CEIdeVs=/" rel="noopener noreferrer"&gt;Maximilian Schwarzmüller&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But Nuxt is a comprehensive framework - lots to learn, lots to go wrong for a [vue] newbie. This was complicated when I went down another rabbit hole: &lt;a href="https://vuetifyjs.com/en/" rel="noopener noreferrer"&gt;Vuetify&lt;/a&gt;. After all, I want my site to look good, and Vuetify seemed to deliver. But attempting to bolt on Vuetify to either of this great Nuxt templates, &lt;strong&gt;&lt;a href="https://github.com/danielkellyio/awake-template" rel="noopener noreferrer"&gt;awake-template&lt;/a&gt;&lt;/strong&gt;  or &lt;strong&gt;&lt;a href="https://github.com/marinaaisa/nuxt-markdown-blog-starter" rel="noopener noreferrer"&gt;nuxt-markdown-blog-starter&lt;/a&gt;&lt;/strong&gt;, did not work for me. &lt;/p&gt;

&lt;p&gt;Again - my bad, or at least my lack of knowledge. Still, I'd committed to leaving WP and time was a-wasting! Was there a solution? Or would I have to settle for something less than I wanted or (gasp!) build this in gatsby or React proper?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Then I found &lt;a href="https://gridsome.org/" rel="noopener noreferrer"&gt;gridsome&lt;/a&gt;. This was the first Vue framework that really paid attention to SEO in its design, not just as a npm package addon. "Gridsome sites loads as static HTML before it hydrates into a fully Vue.js-powered SPA. This makes it possible for search engines able to crawl content and give better SEO ranking, and still have all the power of Vue.js." It's documentation was excellent, there were &lt;a href="https://gridsome.org/starters/" rel="noopener noreferrer"&gt;starter kits&lt;/a&gt; using a variety of themes and GraphQL meant that to me that in the future I could add content sources, and place a bet on GraphQL to supplant RESTful routing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Creating the gridsome site&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Building a site in gridsome is almost absurdly easy. Start with a Starter Kit. Follow directions. Done!:&lt;/p&gt;

&lt;p&gt;I picked the &lt;code&gt;gridsome-starter-blog&lt;/code&gt; starter kit, because a) along the way, I had decided against a headless CMS, b) I wanted a good looking site from the get-go, and this starter kit offered one, c) I liked the dark mode widget, and dark mode in general, and while my assistant code-writing cat helper prefers white backgrounds, I'm finding a lot less eyestrain in a Dark Mode digital world.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F11978ii0znr1kahv5ad6.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F11978ii0znr1kahv5ad6.jpg" alt="Audrey tanning"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--global&lt;/span&gt; @gridsome/cli

gridsome create my-gridsome-site https://github.com/gridsome/gridsome-starter-blog.git 
//&lt;span class="o"&gt;(&lt;/span&gt;my-gridsome-site is your new site.&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;cd &lt;/span&gt;my-gridsome-site

gridsome develop //&lt;span class="o"&gt;(&lt;/span&gt;to start &lt;span class="nb"&gt;local &lt;/span&gt;dev server at http://localhost:8080&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boom. that's it, and I had at least the bare-bones version of my 2019 47hats site running on localhost. it looked like this: &lt;a href="https://gridsome-starter-blog.netlify.com/" rel="noopener noreferrer"&gt;https://gridsome-starter-blog.netlify.com/&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hosting on Netlify&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;I've gotten somewhat proficient using &lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt; to host SSGs, and found only 2 gotchas worth talking about when it came time to set up Netlify as my host for 47hats.com:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;With this SSG, you want to let Netlify digest your entire repo, then rebuild the site. So that means the Build Command is &lt;code&gt;gridsome build&lt;/code&gt; and the Publish directory: &lt;code&gt;dist&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connecting your domain with a Netlify domain. The key gotcha here is if you are using a URL that is not the Netlify-generated URL, Netlify is going to take over hosting your site's DNS. You're going to want to a) copy all of the DNS records, including &lt;strong&gt;MX records that govern email&lt;/strong&gt;, before you make the switch, and then &lt;a href="https://docs.netlify.com/domains-https/netlify-dns/dns-records/#supported-record-types" rel="noopener noreferrer"&gt;add those records back into Netlify's DNS&lt;/a&gt;. Otherwise, you will be shedding a lot more than just whatever service you were using for your WordPress site.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Converting to markdown, Part 1&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Running my site on Netlify was the easy part: now to deal with those 700+ posts. &lt;/p&gt;

&lt;p&gt;The first step is to export from WordPress your content. Sign into your WordPress instance, go to Tools, then Export. Chose "All Content", and watch a .zip file get downloaded. This will export in the quaint format XML all of your posts, pages, comments, categories, and tags.&lt;/p&gt;

&lt;p&gt;The zip file contains two objects: the XML file containing all of the text of your posts and metadata about those posts and a folder of all graphic files referenced by your posts: cover art and featured art.&lt;/p&gt;

&lt;p&gt;After much googling and a fair amount of trial and error, I found this repo that got most of the hard work done: &lt;a href="https://github.com/lonekorean/wordpress-export-to-markdown" rel="noopener noreferrer"&gt;wordpress-export-to-markdown&lt;/a&gt;. I'd recommend forking it right now, then clone your repo. This is a keeper - it works.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But wait, it doesn't say a word about Vue! &lt;strong&gt;markdown is markdown&lt;/strong&gt; whether it's created for Jekyll, Huge or gridsome. They all share the convention of a &lt;code&gt;frontmatter&lt;/code&gt; block at the top of the file, then the contents itself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I found (through some more trial and error) that the best processing of my XML file came from using these three flags: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;--postfolders=false&lt;/strong&gt; This will save and reference all the images to a single folder, /images. This matches what gridsome expects. This means all those URLs pointing to an image on your old service get magically changed to a relative URL and you won't go blind doing manual edits for the next year.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;--addcontentimages=true&lt;/strong&gt; Super useful! This will scrape your posts for external images and attempt to download and reference as many of them as it can. That content may no longer be on the web, but if it is, this script will get it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;--prefixdate=true&lt;/strong&gt; This will prefix each post's filename with the date it was posted. Extremely handy for the next step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One last thing about this great repo by &lt;a href="https://github.com/lonekorean" rel="noopener noreferrer"&gt;LoneKorean&lt;/a&gt;, AKA Will Boyd. You either need to change line 27 of &lt;code&gt;index.js&lt;/code&gt; to the name of your XML file or change the filename to the default, &lt;code&gt;export.xml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;(Update Tuesday; January 21, 2020: LoneKorean has a V2 version of his script. You can just start the script with no command line arguments and it'll show you a wizard to guide you through the options. Nice!)&lt;/p&gt;

&lt;h3&gt;
  
  
  Converting to markdown, Part 2&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;After the conversion had run its course, there were still 3 inconsistencies between the format of my markdown files and what gridsome expected. I imagine that at some point in my Vue learning journey, I could hack away these inconsistences, but I found it easier to just &lt;a href="http://www.macdrifter.com/2012/08/bbedit-multi-file-find-and-replace.html" rel="noopener noreferrer"&gt;power edit&lt;/a&gt; all files back to 2017 to start.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;"true" vs true. gridsome expects in the frontmatter date: datevalue&lt;code&gt;, not&lt;/code&gt;date: "datevalue". Posts with date in quotes will silently fail to render and disappear from your blog. So using &lt;a href="https://www.barebones.com/products/bbedit/" rel="noopener noreferrer"&gt;BBEdit&lt;/a&gt;, I stripped the double quotes from the frontmatter entirely.&lt;/li&gt;
&lt;li&gt;Where's my cover-image? &lt;a href="https://github.com/lonekorean/wordpress-export-to-markdown" rel="noopener noreferrer"&gt;wordpress-export-to-markdown&lt;/a&gt; exports &lt;code&gt;coverImage: "tab-groups-4.gif"&lt;/code&gt;, but gridsome expects &lt;code&gt;cover-image: ./images/tab-groups-4.gif&lt;/code&gt;. Again, BBEdit to the rescue, replacing "coverImage" with "cover_image", adding ".images/" to each filepath and then getting rid of double quotes entirely.&lt;/li&gt;
&lt;li&gt;For whatever reason, several posts got "null" for dates. These were easy enough to manually fix, or just outright delete.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Result: my blog in gridsome&lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;I converted the last 15 posts, just to make sure my BBEdit process worked. It did! I plan to do the rest this weekend, and add some features like search, visible tags to pick, and building out my Hire Me and Books page. (I've already enabled pagination). Converting a site is never done, but I'm fully confident that this is easy to do.&lt;/p&gt;

&lt;p&gt;I've shared this before, but it still blows my mind: &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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F3ec5nwnso2wurog97xv4.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F3ec5nwnso2wurog97xv4.png" alt="47hats now"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now I have:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;A highly performant blog where once I had a bloated monster,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;My content in a format that is device, framework, and app independent: for example, I'm writing this post in &lt;a href="https://typora.io" rel="noopener noreferrer"&gt;Typora&lt;/a&gt;, my current preferred markdown editor. If I decide to go back to MacDown, or onto some other markdown editor (Maybe Bear), I can do that without changing anything.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thanks for reading this rather long post: please tell me how it goes for you in comments here at &lt;a href="https://dev.to"&gt;dev.to&lt;/a&gt;, or reach out to me developer-to-developer at &lt;a href="//mailto::bob.walsh@47hats.com"&gt;bob.walsh@47hats.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>gridsome</category>
      <category>markdown</category>
    </item>
    <item>
      <title>Push goals are bad for you</title>
      <dc:creator>Bob Walsh</dc:creator>
      <pubDate>Fri, 18 Oct 2019 18:56:20 +0000</pubDate>
      <link>https://forem.com/bobwalsh47hats/push-goals-are-bad-for-you-369l</link>
      <guid>https://forem.com/bobwalsh47hats/push-goals-are-bad-for-you-369l</guid>
      <description>&lt;p&gt;Ever wonder why it's easy, and fun, to contribute to Open Source, but most times hard and painful to meet deadlines your manager sets? It's because of how your brain is wired (assuming you are a human).&lt;/p&gt;

&lt;p&gt;Just going through the backlog of &lt;a href="https://nesslabs.com/push-pull-goals"&gt;Anne-Laure Le Cunff&lt;/a&gt; excellent posts at her brand, Ness Labs. You really ought to consider following her: she's smart, got science and writes well!&lt;/p&gt;

&lt;p&gt;In this post, &lt;a href="https://nesslabs.com/push-pull-goals"&gt;Push vs pull goals&lt;/a&gt;, Anne-Laure explains the difference between external push goals and internal pull goals. They may get you to the same place, but the experience is wildly different, whatever you are trying to create: code, words, art.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Igkie6Ot--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/vgfhknujbdcinvqyc0fv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Igkie6Ot--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/vgfhknujbdcinvqyc0fv.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Understanding what kind of goal you are trying to achieve and how to convert from a professional life of push goals to a satisfying life of pull goals is an awesome mental tool for becoming more productive. Highly recommended reading.&lt;/p&gt;

</description>
      <category>development</category>
      <category>management</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Goodbye WordPress, Hello JAMstack!</title>
      <dc:creator>Bob Walsh</dc:creator>
      <pubDate>Thu, 17 Oct 2019 18:19:32 +0000</pubDate>
      <link>https://forem.com/bobwalsh47hats/goodbye-wordpress-hello-jamstack-1kl3</link>
      <guid>https://forem.com/bobwalsh47hats/goodbye-wordpress-hello-jamstack-1kl3</guid>
      <description>&lt;p&gt;I've been running my "personal brand" blog at &lt;a href="https://47hats.com"&gt;47hats&lt;/a&gt; since 2005 on one platform or another; for the past decade in WordPress.&lt;/p&gt;

&lt;p&gt;I &lt;em&gt;hate&lt;/em&gt; WordPress. &lt;/p&gt;

&lt;p&gt;I'm convinced that all that never-ending messing with plugins, theme configurations, broken wp installs and the like took all the joy out of blogging for the first generation of bloggers.&lt;/p&gt;

&lt;p&gt;And performance &lt;strong&gt;sucked&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YO7k4KcE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/vh4czkv431wwtjmqpbte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YO7k4KcE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/vh4czkv431wwtjmqpbte.png" alt="This score sucked"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But the imperatives for blogging haven't gone away: we still need a public way to connect to people, to show what we are (mostly) good at, to register as a "thought leader" in whatever we are passionate about.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting on the JAMstack movement
&lt;/h3&gt;

&lt;p&gt;I've seen a lot of various movements come and mostly go in the tech industry: Windows OS (don't judge) at one time was revolutionary. Then, for me, there was Ruby on Rails. Then .js everything, React, Vue, and on and on. The difference between a tool (like webpack, gulp, etc.) and a movement is two things: people and affordances.&lt;/p&gt;

&lt;p&gt;About a year ago after listening to &lt;a href="https://syntax.fm/"&gt;Wes Bos and Scott Tolinski&lt;/a&gt; raving about &lt;a href="https://www.netlify.com/"&gt;netlify&lt;/a&gt;, I decided to give it a try with a demo Jekyll example blog. I sat there gobsmacked for 10 minutes because I had never, ever, seen such an easy deploy resulting in such a performant site.&lt;/p&gt;

&lt;p&gt;I started noticing how many interesting people were moving over to the JAMstack and how many startups were springing up in the space: this is a movement, not a shiny new object.&lt;/p&gt;

&lt;h3&gt;
  
  
  Making the switch, get to the punchline
&lt;/h3&gt;

&lt;p&gt;So last month I decided instead of hosting my WP site in WordPress on Siteground (the best of the WP hosts, IMO) for another year, I'd see if I could stand up my blog in Vue on Netlify. &lt;/p&gt;

&lt;p&gt;I rapidly descended down several rabbit holes: first Nuxt, then VuePress, then Vuetify, then &lt;a href="https://gridsome.org/"&gt;gridsome&lt;/a&gt;. Gridsome is an awesome framework for someone who needs a home for their blog, with a few pages and wants to get it done &lt;strong&gt;now&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Last night I threw the [dns] switch, and today my site looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7sIWofAo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/t28zolwsx6p60fnss4i5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7sIWofAo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/t28zolwsx6p60fnss4i5.png" alt="47hats not sucking"&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My JAMstack journey is in its early days; HubSpot and Rails still pay the bills. But there are some amazing opportunities to create value that's performant, fun to build and looks good everywhere: I hope to find my place in the JAMstack Revolution.&lt;/p&gt;

</description>
      <category>vue</category>
      <category>wordpress</category>
      <category>serverless</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I need a better code journaling app than Evernote.</title>
      <dc:creator>Bob Walsh</dc:creator>
      <pubDate>Fri, 27 Sep 2019 18:00:45 +0000</pubDate>
      <link>https://forem.com/bobwalsh47hats/i-need-a-better-code-journaling-app-than-evernote-2cc1</link>
      <guid>https://forem.com/bobwalsh47hats/i-need-a-better-code-journaling-app-than-evernote-2cc1</guid>
      <description>&lt;p&gt;Thanks to a series here &lt;a href="https://dev.to/jacquibo/why-you-should-keep-a-code-journal-code-journaling-pt-1-of-4-k35"&gt;Why you should keep a Code Journal | Code Journaling pt 1 of 4 - DEV Community 👩‍💻👨‍💻&lt;/a&gt; I've been seriously reconsidering how I work.&lt;/p&gt;

&lt;p&gt;I start the day with a new note in Evernote. As the day progresses, I enter little tidbits of knowledge I took me way to long to google (ex. Netlify, the build command for a nuxt project has to be &lt;code&gt;nuxt generate&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;But Evernote is a &lt;strong&gt;horrible&lt;/strong&gt; notetaking/journaling environment for a developer.&lt;/p&gt;

&lt;p&gt;So, any recommendations for a good digital notetaking Saas?&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
