<?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: Nicolò Rebughini</title>
    <description>The latest articles on DEV Community by Nicolò Rebughini (@nirebu).</description>
    <link>https://dev.to/nirebu</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%2F157106%2F2ea4716e-a91e-45d7-bbe1-d8be09f85a0a.jpg</url>
      <title>DEV Community: Nicolò Rebughini</title>
      <link>https://dev.to/nirebu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nirebu"/>
    <language>en</language>
    <item>
      <title>How I started contributing to opensource by opening my first pull request</title>
      <dc:creator>Nicolò Rebughini</dc:creator>
      <pubDate>Wed, 14 Aug 2019 14:35:08 +0000</pubDate>
      <link>https://dev.to/nirebu/how-i-started-contributing-to-opensource-by-opening-my-first-pull-request-1g28</link>
      <guid>https://dev.to/nirebu/how-i-started-contributing-to-opensource-by-opening-my-first-pull-request-1g28</guid>
      <description>&lt;p&gt;and it was easier than expected. Like, really damn easier than expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;I wanted to build a &lt;em&gt;zero-or-almost-zero-config&lt;/em&gt; documentation system to use at our office to move away from a hell of ODT, PDF files scattered around a file server. You know what I'm talking about 😁&lt;/p&gt;

&lt;p&gt;Long story short, I've settled on &lt;a href="https://v1.vuepress.vuejs.org/"&gt;Vuepress&lt;/a&gt; when I found this &lt;a href="https://github.com/ozum/vuepress-bar"&gt;awesome plugin&lt;/a&gt; to auto generate the sidebar and the navbar based on the directory structure: I think that the approach of &lt;strong&gt;convention over configuration&lt;/strong&gt; is one of the strongest and easiest, especially if you want the team to be able to write docs from the get go.&lt;/p&gt;

&lt;p&gt;During the testing phase I've noticed a strange behaviour when navigating in different sections (in Vuepress lingo: the top bar), as defined by the directories with the &lt;code&gt;nav.directory&lt;/code&gt; name: every link there would result in a 404.&lt;/p&gt;

&lt;p&gt;Have you ever experienced the moment in which you say to yourself&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is it possible that even following the docs/guide/tutorial to the last paragraph, I cannot replicate the awesome result the author presented? &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Been there? I've been there a lot, but this time I thought I could dig into it, and maybe help in fixing a problem so others wouldn't have to go through this hurdle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging Vuepress
&lt;/h2&gt;

&lt;p&gt;The first evidence I found that put me on track was seeing that the link destination for the links in the navbar were malformed or just plain wrong, not prepending the base URL and with the page name missing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# rendered href
https://nav.directory/.html

# desired href
http://localhost:3000/nav.directory/index.html
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I hopped in the awesome &lt;a href="https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd"&gt;Vue Dev Tools&lt;/a&gt; and started digging in the Vue component props created by the dev server and noticed that the &lt;code&gt;$site.themeConfig.navbar&lt;/code&gt; and &lt;code&gt;$site.themeConfig.sidebar&lt;/code&gt; parameters, generated by the &lt;code&gt;vuepress-bar&lt;/code&gt; plugin had malformed values, like:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"sidebar" : {
  "/": {...},
  "\nav.directory\": {...},
  "\nav.directory2\": {...}
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;backslash&lt;/code&gt; characters put me on the right track, because that's what Windows uses as a directory separator by default. To dissipate any shade of doubt I tried the same exact config inside a Linux Docker container and actually it worked as expected.&lt;/p&gt;
&lt;h2&gt;
  
  
  Opening the issue
&lt;/h2&gt;

&lt;p&gt;Identified the possible cause, I went to the &lt;code&gt;vuepress-bar&lt;/code&gt; Github repo and opened this issue.&lt;/p&gt;

&lt;p&gt;The process is pretty straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selected the issues tab&lt;/li&gt;
&lt;li&gt;Made sure that no one else already filed the same problem (not many Windows users these days I guess)&lt;/li&gt;
&lt;li&gt;Clicked the &lt;code&gt;New issue&lt;/code&gt; button&lt;/li&gt;
&lt;li&gt;Tried to be as descriptive as possible but concise at the same time to not waste the developer's time, including examples of the rendered html and the desired result&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/ozum/vuepress-bar/issues/2"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        Wrong directory separator on Windows
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#2&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/nirebu"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--U6HVy8fQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars0.githubusercontent.com/u/1283443%3Fv%3D4" alt="nirebu avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/nirebu"&gt;nirebu&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/ozum/vuepress-bar/issues/2"&gt;&lt;time&gt;Jul 23, 2019&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;I was trying to use your plugin to autobuild the navbar and sidebar, but I found an issue while using the structure &lt;code&gt;nav.foldername&lt;/code&gt; to build the navbar.&lt;/p&gt;
&lt;p&gt;The plugin would build the &lt;code&gt;$themeConfig.nav[].link&lt;/code&gt; as &lt;code&gt;\nav.foldername\&lt;/code&gt;, thus breaking the navigation and sidebar loading.&lt;/p&gt;
&lt;p&gt;I nailed down the cause to being on Windows, because the same config, run through a Linux VM works no problem, generating the parameters right as &lt;code&gt;/nav.foldername/&lt;/code&gt; both in the &lt;code&gt;nav&lt;/code&gt; object and &lt;code&gt;sidebar&lt;/code&gt; groups keys.&lt;/p&gt;
&lt;p&gt;Is there a way to hardcode the correct browser separator to be &lt;code&gt;/&lt;/code&gt; ?&lt;/p&gt;
&lt;p&gt;Thank you very much&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ozum/vuepress-bar/issues/2"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  Finding a possible solution
&lt;/h2&gt;

&lt;p&gt;Digging inside the actual plugin folder in &lt;code&gt;node_modules/vuepress-bar&lt;/code&gt; and after a few minutes of reading someone else's code, who is way more experienced than me, I finally got to the &lt;em&gt;offending&lt;/em&gt; line.&lt;/p&gt;

&lt;p&gt;Three attempts later and testing with a few different configs, I finally settled on a solution, which is probably quick and dirty, but at least appears to fix the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proposing my fix by making the pull request
&lt;/h2&gt;

&lt;p&gt;To propose the author my changes, I needed first to fork the repository by clicking the &lt;code&gt;fork&lt;/code&gt; button at the top of the repo. Next, I cloned it locally via the command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/nirebu/vuepress-bar
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Opened the folder in VS Code and made the same changes I made inside the &lt;code&gt;node_modules&lt;/code&gt; and pushed the change to my forked repo using these commands&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="c"&gt;# to add all the files changed, in this case just one&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Adjusted the nav link separator on Windows"&lt;/span&gt; &lt;span class="c"&gt;# to describe what my change would do if applied&lt;/span&gt;
git push origin master &lt;span class="c"&gt;# to actually upload my changes to my forked repository&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now it was only a matter of opening the actual pull request, to notify the author about my change. To do so, I clicked the &lt;code&gt;Pull requests&lt;/code&gt; button in the repository navigation bar and next the &lt;code&gt;New Pull Request&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To select my repository as a source of changes I needed to select the &lt;code&gt;Compare across forks&lt;/code&gt; link, and then it was as easy as selecting the &lt;code&gt;HEAD&lt;/code&gt; commit (the most up to date) of my forked repository &lt;code&gt;master&lt;/code&gt; branch. The result was this:&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/ozum/vuepress-bar/pull/3"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        Adjusted the nav link separator to work also on Windows
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#3&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/nirebu"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--U6HVy8fQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars0.githubusercontent.com/u/1283443%3Fv%3D4" alt="nirebu avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/nirebu"&gt;nirebu&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/ozum/vuepress-bar/pull/3"&gt;&lt;time&gt;Jul 23, 2019&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;I'm proposing a solution to #2 which I opened. I used a normal replace to fix the Windows separator &lt;code&gt;\&lt;/code&gt; with the &lt;code&gt;/&lt;/code&gt; character in the &lt;code&gt;nav&lt;/code&gt; links.&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ozum/vuepress-bar/pull/3"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Phew, done.&lt;/p&gt;

&lt;p&gt;Now let's wait for the author to review and approve, comment or reject my pull request right away.&lt;/p&gt;

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

&lt;p&gt;Contributing to someone else's project can be a daunting process because, apart from the technical aspects, there are plenty of psychological factors involved like impostor syndrome and fear of rejection.&lt;/p&gt;

&lt;p&gt;I'm sure my proposal isn't the best one or the most elegant, but at least I've overcome the initial wall and tried. When I'll become more proficient in my programming skills I'll make sure to contribute even more to other people's projects: it's a way of giving back to a community that alredy have given me much. &lt;/p&gt;

</description>
      <category>opensource</category>
      <category>github</category>
      <category>beginners</category>
      <category>vue</category>
    </item>
    <item>
      <title>Building a static blog with NuxtJs and Markdown as a beginner</title>
      <dc:creator>Nicolò Rebughini</dc:creator>
      <pubDate>Thu, 02 May 2019 11:26:01 +0000</pubDate>
      <link>https://dev.to/nirebu/building-a-static-blog-with-nuxtjs-and-markdown-as-a-beginner-pkf</link>
      <guid>https://dev.to/nirebu/building-a-static-blog-with-nuxtjs-and-markdown-as-a-beginner-pkf</guid>
      <description>&lt;p&gt;Hi there, this is my first post here... or anywhere since I've never blogged before! I'm &lt;a href="https://nirebu.com/"&gt;Nicolò Rebughini&lt;/a&gt;, a sysadmin trying to get a hold of modern web development pratices. I've specialised in CS at high school, but had been a video post production tech for many years, and came back to the IT world a little more than a year ago wearing the sysadmin hat. Right now I'm updating myself and learning to use tools like &lt;a href="https://ansible.com/"&gt;Ansible&lt;/a&gt; and &lt;a href="https://docker.com/"&gt;Docker&lt;/a&gt; to standardise and streamline the stack of my workplace.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beginning of the journey
&lt;/h2&gt;

&lt;p&gt;I left the development and operations worlds when Bootstrap's first version wasn't even released (Wikipedia says it happened in 2011), after exploring the now infinite options and experimenting for too much time I've finally made it: my &lt;a href="https://jamstack.org/"&gt;JAM Stack&lt;/a&gt; blog is shaping up. You can also explore its source code on &lt;a href="https://github.com/nirebu/nirebu-2019/"&gt;my Github repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As a totally green web developer, I started this website with the tools I already knew, so I cobbled together a single &lt;code&gt;index.html&lt;/code&gt; webpage and tried some new toys that have come a long way since I last went in and written something from scratch. &lt;a href="https://github.com/nirebu/nirebu-personal-website/"&gt;Explore the source&lt;/a&gt; for the 2018 version on Github.&lt;/p&gt;

&lt;p&gt;After being marveled by huge timesavers like hot reloading, the latest innovations in CSS frameworks (welcome &lt;a href="https://bulma.io/"&gt;Bulma&lt;/a&gt;) and deploying it all for free on Firebase, I went on looking for means I could augment it through.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter NuxtJS
&lt;/h2&gt;

&lt;p&gt;Being brand new to all these new fancy Javascript frameworks I spent an absurd amount of time just by trying them out and experimenting with them, not counting the time spent just to get the hang of some obscure JS concepts.&lt;/p&gt;

&lt;p&gt;Then... it finally clicked when I found about &lt;a href="https://nuxtjs.org/"&gt;NuxtJS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This will be a summary of the things I had to do in order to make this website and blog work the way I wanted: static website, markdown blog posts and freely hosted (this time on &lt;a href="https://netlify.com/"&gt;Netlify&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a NuxtJS website
&lt;/h2&gt;

&lt;p&gt;Initializing a new NuxtJS website is as easy as running a single command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run the create-nuxt-app without having to install it beforehand&lt;/span&gt;
npx create-nuxt-app my-markdown-blog
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;I set the &lt;code&gt;Nuxt mode&lt;/code&gt; to &lt;code&gt;Universal&lt;/code&gt; to reap the rewards of server side rendered Vue out of the box.&lt;/p&gt;

&lt;p&gt;I wanted to replace my old website with this new (only under the hood) version, so I had to bring over the old source code, slapping the content of &lt;code&gt;index.html&lt;/code&gt; in the &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; tag in &lt;code&gt;pages/index.vue&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Loading Bulma
&lt;/h2&gt;

&lt;p&gt;How the heck do I load Bulma here? Probably my solution isn't the cleanest or most elegant, but here it is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="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;--save-dev&lt;/span&gt; bulma @nuxtjs/style-resources node-sass sass-loader
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;I had also some customisations over the stock Bulma framework so, in order to make it work, I copied over my &lt;code&gt;main.scss&lt;/code&gt; in the &lt;code&gt;assets/&lt;/code&gt; directory and changed a couple of things in &lt;code&gt;nuxt.config.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&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;css&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;assets/main.scss&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;// This line instructs Nuxt to load this file in every page&lt;/span&gt;
  &lt;span class="p"&gt;[...]&lt;/span&gt;
  &lt;span class="na"&gt;modules&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;@nuxtjs/axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// This was already present because I chose it during the init&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@nuxtjs/style-resources&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// Necessary to make Nuxt load the SCSS and SASS files&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;After setting the correct path of the &lt;code&gt;bulma.sass&lt;/code&gt; file in my &lt;code&gt;main.scss&lt;/code&gt; all the styles fixed themselves. Yay! Success! (After hours of trial and error)&lt;/p&gt;

&lt;h2&gt;
  
  
  Refactoring website header and footer in components
&lt;/h2&gt;

&lt;p&gt;To take advantage of the intrinsic modularisation of Nuxt, I split the navbar and the footer in separate components, so I could use them in the default layout for the pages.&lt;/p&gt;

&lt;p&gt;After this, my &lt;code&gt;layouts/default.vue&lt;/code&gt; file looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&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;"main"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;NavBar&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;nuxt&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;SiteFooter&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;NavBar&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../components/NavBar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;SiteFooter&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../components/SiteFooter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;
    &lt;span class="nx"&gt;NavBar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;SiteFooter&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Adding Markdown support
&lt;/h2&gt;

&lt;p&gt;This has been a major pain point since I tried it the first time. The following is the way that I managed to set it up. If someone wants to show me the 'real' way, please make a PR to correct this article or my source, I'd be happy to learn about it.&lt;/p&gt;

&lt;p&gt;Some preparations...&lt;br&gt;
&lt;/p&gt;

&lt;div class="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;--save-dev&lt;/span&gt; frontmatter-markdown-loader @nuxtjs/markdownit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Let's impart Webpack to read the Markdown files using the &lt;code&gt;raw-loader&lt;/code&gt; in order to avoid any manipulation of the output.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&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;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="sr"&gt;md$/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;use&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="s1"&gt;raw-loader&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="p"&gt;[...]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Separating Markdown content and metadata
&lt;/h2&gt;

&lt;p&gt;In the &lt;code&gt;pages/blog/_post/index.vue&lt;/code&gt; file is where the magic happens (at least for me). Given the fact that &lt;code&gt;markdownit&lt;/code&gt; doesn't support reading the markdown metadata, where the article info is stored, we need to decouple the process of getting the content and the attributes (as are called by front-matter):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;// Let's require the needed modules&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;front-matter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;md&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;markdown-it&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)({&lt;/span&gt;
  &lt;span class="na"&gt;html&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="na"&gt;typographer&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nx"&gt;asyncData&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// We read the markdown file by looking at the `post` parameter&lt;/span&gt;
    &lt;span class="c1"&gt;// in the URL and searching for a markdown file with that name in&lt;/span&gt;
    &lt;span class="c1"&gt;// the articles directory&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fileContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`~/articles/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.md`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// We process the raw output through front-matter&lt;/span&gt;
    &lt;span class="c1"&gt;// (markdownit was giving me garbled results)&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fileContent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// attributes will be an object containing the markdown metadata&lt;/span&gt;
      &lt;span class="na"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="c1"&gt;// content will contain the body of the markdown file,&lt;/span&gt;
      &lt;span class="c1"&gt;// rendered in HTML via the `markdownit` class&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;md&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&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="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;With this data filled up, we can populate some elements:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;:key=&lt;/span&gt;&lt;span class="s"&gt;"$route.params.post"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&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;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&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;"columns is-centered"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&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;"blog column is-10-tablet"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&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;"title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&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;"subtitle"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            Published on &lt;span class="si"&gt;{{&lt;/span&gt;&lt;span class="nx"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ctime&lt;/span&gt;&lt;span class="si"&gt;}}&lt;/span&gt;
            by &lt;span class="si"&gt;{{&lt;/span&gt; &lt;span class="nx"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;author&lt;/span&gt; &lt;span class="si"&gt;}}&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;v-html=&lt;/span&gt;&lt;span class="s"&gt;"content"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"blog-content content"&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;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Right now, if you navigate to the path &lt;code&gt;blog/some-markdown-file&lt;/code&gt; you should see the content and attributes displayed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generating the routes for the blog posts
&lt;/h2&gt;

&lt;p&gt;We are one step closer to having a statically generated blog powered by markdown but, before deploying, we have to make one extra step.&lt;/p&gt;

&lt;p&gt;Nuxt, by default, generates only the routes found in the &lt;code&gt;pages/&lt;/code&gt; directory, but it doesn't generate every dynamic page, only the index. So we have to find  a way to make it generate also the routes like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;blog/first-post&lt;/code&gt; based on the file &lt;code&gt;articles/first-post.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;blog/second-post&lt;/code&gt; based on the file &lt;code&gt;articles/second-post.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;And so on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's dive in the &lt;code&gt;nuxt.config.js&lt;/code&gt; once again. At the top I've configured it this way&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// glob is a small module to read 'globs', useful to get&lt;/span&gt;
&lt;span class="c1"&gt;// a filtered file list&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;glob&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;glob&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// we acquire an array containing the filenames&lt;/span&gt;
&lt;span class="c1"&gt;// in the articles directory&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;**/*.md&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;cwd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;articles&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// We define a function to trim the '.md' from the filename&lt;/span&gt;
&lt;span class="c1"&gt;// and return the correct path.&lt;/span&gt;
&lt;span class="c1"&gt;// This function will be used later&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;getSlugs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;slug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;substr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastIndexOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`/blog/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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;Then, edit the &lt;code&gt;generate&lt;/code&gt; object in &lt;code&gt;nuxt.config.js&lt;/code&gt; to add the routes obtained via the previous piece of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&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;generate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;routes&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="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;getSlugs&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="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;If I didn't forget anything, you should have at least a resemblance of a Markdown blog post viewer and you should be able to succesfully build all the pages and deploying your blog to your favourite static site hosting service.&lt;/p&gt;

&lt;p&gt;The command &lt;code&gt;npm run generate&lt;/code&gt; will get us the &lt;code&gt;build&lt;/code&gt; directory containing our fresh statically generated website.&lt;/p&gt;

&lt;p&gt;From this guide, and from my website, are missing &lt;strong&gt;crucial&lt;/strong&gt; parts that I'm going to implement, like using Vuex to store all the blog posts metadata and using that info to render a list of articles. Right now I can only write single blog posts and link them somewhere. Expect an update or a new post about those also!&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

&lt;p&gt;Cover photo by Jonathan Pielmayer on &lt;a href="https://unsplash.com"&gt;Unsplash&lt;/a&gt; // This post will appear also on my blog, when it will be somewhat functional.&lt;/p&gt;

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