<?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: hongvin</title>
    <description>The latest articles on DEV Community by hongvin (@khvmaths).</description>
    <link>https://dev.to/khvmaths</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%2F368857%2Fd8e2a073-87c5-4775-86df-0da0a1812961.jpeg</url>
      <title>DEV Community: hongvin</title>
      <link>https://dev.to/khvmaths</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/khvmaths"/>
    <language>en</language>
    <item>
      <title>Dynamic Links with Firebase (Alternative to URL shortener service)</title>
      <dc:creator>hongvin</dc:creator>
      <pubDate>Sun, 19 Apr 2020 13:01:55 +0000</pubDate>
      <link>https://dev.to/khvmaths/dynamic-links-with-firebase-alternative-to-url-shortener-service-151l</link>
      <guid>https://dev.to/khvmaths/dynamic-links-with-firebase-alternative-to-url-shortener-service-151l</guid>
      <description>&lt;p&gt;I recently has a new domain, yay! But, i always wanted to have my own URL shortener service, like hv.in. Upon searching at Namecheap, I gave up 😢.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8i66LIEs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dfb139vlpfz5it3q7lyv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8i66LIEs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dfb139vlpfz5it3q7lyv.png" alt="P1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;BUT, I won't stop there. I searched for free domain, such as .tk, still no luck.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YdJ6Uqit--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ur3v0m0ng8jgpschzsid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YdJ6Uqit--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ur3v0m0ng8jgpschzsid.png" alt="P2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, since I have my own domain, but I don't want my domain to be solely serve as URL shortener only. And, thankfully Firebase offer similar services. I simply create a new subdomain and then use that subdomain for my shortener service. Although it's not as good as bit.ly / goo.gl (those fancy yet short one), but it serve the purpose!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 If you are lucky to get one with a low price or you just don't mind about the price tag, you can use &lt;a href="https://yourls.org/"&gt;YOURLS&lt;/a&gt; to manage your URL shortener service.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Create a new domain/subdomain at your domain provider dashboard
&lt;/h2&gt;

&lt;p&gt;In my case, &lt;a href="https://www.ionos.com/office-solutions/create-an-email-address?ac=OM.US.USf11K357090T7073a&amp;amp;kwk=668406507"&gt;Ionos&lt;/a&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--85rKGuu3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j5j3891q1y4hrergrnh8.png"&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R8Vu9jVy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9p8wtq1b25tskyz4dmdc.png"&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
1. Click &lt;b&gt;Domains &amp;amp; SSL&lt;/b&gt;
&lt;/td&gt;
&lt;td&gt;
2. Click your registered domain 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--smsaPOqR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rlgbd6pyei9dqxqndhmt.png"&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---95Y0LUf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cbn0u6zx7ljyl7l3fxu5.png"&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; 
3. Head over to &lt;b&gt;Subdomains&lt;/b&gt; and click on &lt;b&gt;Add subdomain&lt;/b&gt;
&lt;/td&gt;
&lt;td&gt;
4. Give your subdomain a name
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Once you have done this, you shall have something like below,&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4KNogBpG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kv9a7qtjoapzi31fu3xx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4KNogBpG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kv9a7qtjoapzi31fu3xx.png" alt="P2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Go to Firebase console and configure the subdomain
&lt;/h2&gt;

&lt;p&gt;Please refer my previous post on how to do so. (Step 1 in the post)&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/khvmaths" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nGRPR0Hy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--b7fo6bv3--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/368857/d8e2a073-87c5-4775-86df-0da0a1812961.jpeg" alt="khvmaths image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/khvmaths/host-your-own-blog-with-jekyll-on-firebase-and-travis-ci-1mko" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Host your own blog with Jekyll on Firebase and Travis CI&lt;/h2&gt;
      &lt;h3&gt;hongvin ・ Apr 18 ・ 7 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#firebase&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#travis&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#jekyll&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;You are almost there!&lt;/p&gt;

&lt;h2&gt;
  
  
  Use dynamic links in Firebase
&lt;/h2&gt;

&lt;p&gt;Step 1, select Dynamic links in Firebase&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XLOdNGYw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xw0xyfzjuuczo72an9wr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XLOdNGYw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xw0xyfzjuuczo72an9wr.png" alt="P3"&gt;&lt;/a&gt;&lt;br&gt;
Step 2, key in your subdomain and follow the on-screen instruction.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9RarMy3t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/23no5ys3en02dev03hh0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9RarMy3t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/23no5ys3en02dev03hh0.png" alt="P4"&gt;&lt;/a&gt;&lt;br&gt;
You shall arrive at this page if everything is right!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GndSgYKP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/twtacgkx16qlk8k4xo9f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GndSgYKP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/twtacgkx16qlk8k4xo9f.png" alt="P5"&gt;&lt;/a&gt;&lt;br&gt;
It's done! &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It might take several hours to be able to use dynamic links.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AND, YOU HAVE JUST SETUP A SO-CALLED 'URL Shortener Service'!&lt;/p&gt;

&lt;h2&gt;
  
  
  Create your first 'shortened link'
&lt;/h2&gt;

&lt;p&gt;At dynamic link dashboard, click on &lt;strong&gt;New Dynamic Link&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F7AeVn7M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rx6sbcf4he2ye0fxmjfc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F7AeVn7M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rx6sbcf4he2ye0fxmjfc.png" alt="P6"&gt;&lt;/a&gt;&lt;br&gt;
Just follow all on-screen instruction.&lt;/p&gt;

&lt;h2&gt;
  
  
  🍷 That's all!
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/hongvin"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y61HrVIM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.buymeacoffee.com/buttons/v2/default-blue.png" alt="Buy Me A Coffee" width="140px"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>firebase</category>
      <category>tutorial</category>
      <category>dynamiclink</category>
    </item>
    <item>
      <title>Host your own blog with Jekyll on Firebase and Travis CI</title>
      <dc:creator>hongvin</dc:creator>
      <pubDate>Sat, 18 Apr 2020 11:18:55 +0000</pubDate>
      <link>https://dev.to/khvmaths/host-your-own-blog-with-jekyll-on-firebase-and-travis-ci-1mko</link>
      <guid>https://dev.to/khvmaths/host-your-own-blog-with-jekyll-on-firebase-and-travis-ci-1mko</guid>
      <description>&lt;p&gt;I always wanted to have my own domain and so with a cool email address. And so, I came across &lt;a href="https://www.ionos.com/office-solutions/create-an-email-address?ac=OM.US.USf11K357090T7073a&amp;amp;kwk=668406507"&gt;Ionos&lt;/a&gt; with its relatively cheap domain name and email hosting. With $1/month, it came with 2GB email storage and a customised .net domain, and 1000 subdomain. What a deal! And, so I this post will walk you through all the process.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Table of Content&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. Firebase Hosting
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Create new Jekyll site
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Deploy site to Firebase
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Add to your Github
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5. Travis CI to trigger new build
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Hosting on Firebase
&lt;/h2&gt;

&lt;p&gt;I have mine through Ionos. You can choose any domain provider as well. Now, with your domain ready, it's time to choose a hosting provider. In this case, I choose Firebase Hosting, because "IT'S GOOGLE". Seriously, it's because of it's relatively cheap rate and some generous free tier. Also, Google CDN is fast and Firebase is just simply Awesome! The pricing is available &lt;a href="https://firebase.google.com/pricing"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Create a new project in Firebase
&lt;/h4&gt;

&lt;p&gt;Step 1, choose your project name.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vBTxsiny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/g5xx7zl14lon5flmu6t9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vBTxsiny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/g5xx7zl14lon5flmu6t9.png" alt="Step 1"&gt;&lt;/a&gt;&lt;br&gt;
Step 2, this is optional. To make things easier, we will just turn off the option.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OklVykQs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z9931atpf4szm8m6dhq5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OklVykQs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/z9931atpf4szm8m6dhq5.png" alt="Step 2"&gt;&lt;/a&gt;&lt;br&gt;
Step 3, wait the project to be created.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rhf62QLI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lnf48ga2cwe7mqhi5i7x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rhf62QLI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lnf48ga2cwe7mqhi5i7x.png" alt="Step 3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Link your domain with Firebase Hosting
&lt;/h4&gt;

&lt;p&gt;Now, once your project is created, head over to your project and click on the &lt;strong&gt;Hosting&lt;/strong&gt; tab.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DTbPki44--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2km4al9mlus60sdsmx3p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DTbPki44--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2km4al9mlus60sdsmx3p.png" alt="Step 4"&gt;&lt;/a&gt;&lt;br&gt;
Click on get started, and then click &lt;strong&gt;Next&lt;/strong&gt; on step 1 and step 2, then click on &lt;strong&gt;Continue to console&lt;/strong&gt; as shown.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6BOunS_C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kq8t2ytb5dvz1074cgbn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6BOunS_C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kq8t2ytb5dvz1074cgbn.png" alt="Step 5"&gt;&lt;/a&gt;&lt;br&gt;
In order to let Firebase know that we have our own domain, click on &lt;strong&gt;Add custom domain&lt;/strong&gt;, and the following will popup.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZEPDk36b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2hspr37vm4ma85mobcxb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZEPDk36b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2hspr37vm4ma85mobcxb.png" alt="Step 6"&gt;&lt;/a&gt;&lt;br&gt;
Now, in the domain column, type in your domain and then click on &lt;strong&gt;Continue&lt;/strong&gt;. The next step will require you to verify the ownership of the domain. You will see the following TXT record.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6WBVKXMT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5jyuu7l4320kue98e2eu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6WBVKXMT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5jyuu7l4320kue98e2eu.png" alt="Step 7"&gt;&lt;/a&gt;&lt;br&gt;
Copy the TXT record and then add them to your domain dashboard. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LRM_Jex6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.imgur.com/n0TX1SK.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LRM_Jex6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.imgur.com/n0TX1SK.gif" alt="Step 8"&gt;&lt;/a&gt;&lt;br&gt;
Once the verification is done, you will need to add A records to your domain.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nsXqiXLG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5e5bu4km1rzbd2tex082.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nsXqiXLG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5e5bu4km1rzbd2tex082.png" alt="Step 9"&gt;&lt;/a&gt;&lt;br&gt;
Copy the A records and paste in your domain, the same step as per adding TXT record.&lt;/p&gt;

&lt;p&gt;Now, your domain is linked to the Firebase hosting. yay!😍&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Setting up Jekyll
&lt;/h2&gt;

&lt;p&gt;Prerequisite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/download/"&gt;Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ruby-lang.org/en/downloads/"&gt;Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/en/download/"&gt;Node JS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://code.visualstudio.com/download"&gt;VS Code&lt;/a&gt; or any code editor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once all the above is installed, run the following code in your newly created folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="m"&gt;1&lt;/span&gt;  &lt;span class="kd"&gt;gem&lt;/span&gt; &lt;span class="kd"&gt;install&lt;/span&gt; &lt;span class="kd"&gt;bundler&lt;/span&gt; &lt;span class="kd"&gt;jekyll&lt;/span&gt;
&lt;span class="m"&gt;2&lt;/span&gt;  &lt;span class="kd"&gt;jekyll&lt;/span&gt; &lt;span class="kd"&gt;new&lt;/span&gt; &lt;span class="kd"&gt;my&lt;/span&gt;&lt;span class="na"&gt;-awesome-site
&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;  &lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="kd"&gt;my&lt;/span&gt;&lt;span class="na"&gt;-awesome-site
&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;  &lt;span class="kd"&gt;bundle&lt;/span&gt; &lt;span class="kd"&gt;exec&lt;/span&gt; &lt;span class="kd"&gt;jekyll&lt;/span&gt; &lt;span class="kd"&gt;serve&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Line 1 &amp;amp; 2 will install Jekyll and build a simple Jekyll site.&lt;/li&gt;
&lt;li&gt;Line 3 &amp;amp; 4 will execute the newly created site and serve it at &lt;code&gt;http://localhost:4000&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You will see under your folder as shown below.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s3-cmGZD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pepatnbut0hydxz64nkv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s3-cmGZD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pepatnbut0hydxz64nkv.png" alt="Step 10"&gt;&lt;/a&gt;&lt;br&gt;
When you execute line 4, your terminal/command prompt will display as follows.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O0RbSVZ2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8p1is1a85wf5z5pzllvv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O0RbSVZ2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8p1is1a85wf5z5pzllvv.png" alt="Step 11"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 If you encounter this &lt;code&gt;Your user account isn't allowed to install to the system RubyGems.&lt;/code&gt;, simply just follow the instruction given. Exit the installation and then just run &lt;code&gt;bundle install --path vendor/bundle&lt;/code&gt; inside the directory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you head over to &lt;code&gt;http://localhost:4000&lt;/code&gt;, you will see the following.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ewlc36IM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/v35qe670ye502e0w51bj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ewlc36IM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/v35qe670ye502e0w51bj.png" alt="Step 12"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Notice that there is a new folder "_site" after you run &lt;code&gt;jekyll serve&lt;/code&gt;. When running Jekyll serve, it will use &lt;code&gt;jekyll build&lt;/code&gt; and then the static site will being generated.&lt;/p&gt;

&lt;p&gt;💡 To create a new post, simply add them into &lt;code&gt;_post&lt;/code&gt; folder. Remember, it's a markdown file, so here's the &lt;a href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet"&gt;cheatsheet&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🍻 And you have just set-up a site!&lt;/p&gt;
&lt;h5&gt;
  
  
  This site is so simple, I want something special!
&lt;/h5&gt;

&lt;p&gt;Yes, you can just download theme &lt;a href="https://jekyllthemes.io/free"&gt;here&lt;/a&gt;. That's the drawback of Jekyll, you need to know some coding skill to modify the layout. &lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Deploy your site to Firebase
&lt;/h2&gt;

&lt;p&gt;Now that you have a simple blog setup, you want to host on Firebase. It's just simple. Follow the steps below!&lt;/p&gt;

&lt;p&gt;Step 1, Install Firebase CLI Tool&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;npm&lt;/span&gt; &lt;span class="kd"&gt;install&lt;/span&gt; &lt;span class="na"&gt;-g &lt;/span&gt;&lt;span class="kd"&gt;firebase&lt;/span&gt;&lt;span class="na"&gt;-tools
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2, Then, login to your firebase.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;firebase&lt;/span&gt; &lt;span class="kd"&gt;login&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;When the prompt ask &lt;code&gt;Allow Firebase to collect CLI usage and error reporting information?&lt;/code&gt;, just type in &lt;code&gt;Y&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;First you will saw a browser popup asking you to sign in your account.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ImoJwlhG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/n7tqqgdpu292f5lnrz25.png" alt="Step 13"&gt;
&lt;/li&gt;
&lt;li&gt;Choose your account and allow.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3rI3OyiB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/msie53qixkypw774ywrk.png" alt="Step 14"&gt;
&lt;/li&gt;
&lt;li&gt;Once success, you will see this.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q1Y4iwLx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6pbmyr456y88dwt7kndj.png" alt="Step 15"&gt;
&lt;/li&gt;
&lt;li&gt;In your command prompt / Terminal, you will see this.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AnJZ5EBy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/99263sjnpr71p9z72qdu.png" alt="Step 16"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 3, Initialise your project to firebase.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;firebase&lt;/span&gt; &lt;span class="kd"&gt;init&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Use down key to choose &lt;em&gt;Hosting&lt;/em&gt; and space bar to select. Then, hit enter.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vCW3Jl0o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l2mqj6og56km88f6e1sk.png" alt="Step 17"&gt;
&lt;/li&gt;
&lt;li&gt;Since we have created a new project earlier, thus, we choose &lt;strong&gt;Use an existing project&lt;/strong&gt;.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hfQ4s4Ce--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wcma2i11srayiprpqpxc.png" alt="Step 18"&gt;
&lt;/li&gt;
&lt;li&gt;Select the project.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LddcEkdU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ib6b877bupmn17lpb2md.png" alt="Step 19"&gt;
&lt;/li&gt;
&lt;li&gt;Key in &lt;code&gt;_site&lt;/code&gt; as your public directory, &lt;code&gt;Yes&lt;/code&gt; to configure as single-page app and &lt;code&gt;No&lt;/code&gt; to overwrite the index.html.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fVTUgZRm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wzc7ikeo20ssm5lcapy8.png" alt="Step 20"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ These step will create two new files under root folder.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;firebase.json&lt;/code&gt; contains information about public folder and route.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.firebaserc&lt;/code&gt; contains information about firebase project.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Step 4, (Optional) Deploy the site to Firebase.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;firebase&lt;/span&gt; &lt;span class="kd"&gt;deploy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will deploy to firebase hosting. When your command prompt / Terminal shows success, means your site is live!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DI7n-IHe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yxw0omaah4qb1atdapyl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DI7n-IHe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yxw0omaah4qb1atdapyl.png" alt="Step 21"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is cool &lt;strong&gt;BUT&lt;/strong&gt; we don't want to do this everytime we add a new post, right? Ideally, when we write a post and it shall be show in the website without deploying manually.&lt;/p&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Github
&lt;/h2&gt;

&lt;p&gt;Github is perfect for source control. And, there is some reason to consider,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It won't loss, if you were to save in your hard disks, if they fail, it's all GONE!&lt;/li&gt;
&lt;li&gt;Rolling back to last successfully build if we messed up.&lt;/li&gt;
&lt;li&gt;Editing old files and republish them easily.&lt;/li&gt;
&lt;li&gt;FREE, so why not?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 1, Head over to &lt;a href="//www.github.com"&gt;Github&lt;/a&gt; and create a new repository.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BfQycvL6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ezybtvckkvuvsinclja4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BfQycvL6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ezybtvckkvuvsinclja4.png" alt="Step 22"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Public or private? Your choice!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Step 2, Now, Git everything in the folder!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;git&lt;/span&gt; &lt;span class="kd"&gt;init&lt;/span&gt;
&lt;span class="kd"&gt;git&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; .
&lt;span class="kd"&gt;git&lt;/span&gt; &lt;span class="kd"&gt;commit&lt;/span&gt; &lt;span class="na"&gt;-m &lt;/span&gt;&lt;span class="s2"&gt;"First commit"&lt;/span&gt;
&lt;span class="kd"&gt;git&lt;/span&gt; &lt;span class="kd"&gt;remote&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="kd"&gt;origin&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="kd"&gt;YOUR_GITHUB_URL&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="kd"&gt;git&lt;/span&gt; &lt;span class="kd"&gt;remote&lt;/span&gt; &lt;span class="na"&gt;-v
&lt;/span&gt;&lt;span class="kd"&gt;git&lt;/span&gt; &lt;span class="kd"&gt;push&lt;/span&gt; &lt;span class="kd"&gt;origin&lt;/span&gt; &lt;span class="kd"&gt;master&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Replace &lt;code&gt;[YOUR_GITHUB_URL]&lt;/code&gt; with your Github repository link.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Whenever you have done something (eg add a new post), just remember to &lt;code&gt;git add .&lt;/code&gt; and &lt;code&gt;git push&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. TravisCI to automatically update every new post
&lt;/h2&gt;

&lt;p&gt;Last step! There's several CI tools out there, like CircleCI, TravisCI, etc. But, I gonna use TravisCI.&lt;/p&gt;

&lt;p&gt;Step 1, Go to &lt;a href="https://travis-ci.com/"&gt;TravisCI&lt;/a&gt;. Create a new account and sync with your Github.&lt;/p&gt;

&lt;p&gt;Step 2, Once done sync with your Github, go to your dashboard, choose the repository you created and click &lt;strong&gt;Trigger Build&lt;/strong&gt; button.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nh71eZPF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/k8oi7svakzutbvv7t58w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nh71eZPF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/k8oi7svakzutbvv7t58w.png" alt="Step 23"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3, Configure Travis.&lt;br&gt;
Travis uses YAML script, a very simple language and in order to let Travis know you have the script ready, save them as &lt;code&gt;.travis.yml&lt;/code&gt; under the root folder. Use the script below. Travis is just like you doing the manual deploying, but automagically! &lt;/p&gt;

&lt;p&gt;(a) Before configuring, you must need to have Firebase Token ready. In order to get the token, in your Terminal,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;firebase&lt;/span&gt; &lt;span class="kd"&gt;login&lt;/span&gt;&lt;span class="nl"&gt;:ci&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In your terminal, copy the token. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LfXaX8Mt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5oxzauakmo72gqnolij5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LfXaX8Mt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5oxzauakmo72gqnolij5.png" alt="Step 24"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(b) Copy the following script and save as &lt;code&gt;.travis.yml&lt;/code&gt; in root folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;language&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ruby&lt;/span&gt;
&lt;span class="na"&gt;rvm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2.4.1&lt;/span&gt;

&lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;only&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;master&lt;/span&gt;

&lt;span class="na"&gt;notifications&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;on_success&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="na"&gt;on_failure &lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt; 

&lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
 &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;gem update --system&lt;/span&gt;
 &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;gem install bundler&lt;/span&gt;
 &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;bundler update --bundler&lt;/span&gt;
 &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;gem install jekyll bundler&lt;/span&gt;
 &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;bundle exec jekyll build&lt;/span&gt;

&lt;span class="na"&gt;after_success&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;firebase deploy --token "[YOUR_FIREBASE_TOKEN]"&lt;/span&gt; 

&lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;global&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NOKOGIRI_USE_SYSTEM_LIBRARIES=true&lt;/span&gt; &lt;span class="c1"&gt;# speeds up installation of html-proofer&lt;/span&gt;

&lt;span class="na"&gt;sudo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Replace &lt;code&gt;[YOUR_FIREBASE_TOKEN]&lt;/code&gt; with your Firebase token obtained in step 3a.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The script is simple. It basically lists down what we did earlier for manual deploying.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;(c) Add the file to Github repo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;&lt;span class="kd"&gt;git&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; .
&lt;span class="kd"&gt;git&lt;/span&gt; &lt;span class="kd"&gt;commit&lt;/span&gt; &lt;span class="na"&gt;-m &lt;/span&gt;&lt;span class="s2"&gt;"added travis.yml"&lt;/span&gt;
&lt;span class="kd"&gt;git&lt;/span&gt; &lt;span class="kd"&gt;push&lt;/span&gt; &lt;span class="kd"&gt;origin&lt;/span&gt; &lt;span class="kd"&gt;master&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 4, Watch the build done automatically everytime there's update to your Github repo.&lt;br&gt;
In your TravisCI dashboard, you will see something like&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OKguEgNX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/msi53tk1hc8h1irwn3o7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OKguEgNX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/msi53tk1hc8h1irwn3o7.png" alt="Step 25"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. What's next?
&lt;/h2&gt;

&lt;p&gt;(a) Use Markdown editor to write new blog posts under &lt;code&gt;_posts&lt;/code&gt; folder. The documentation can be found &lt;a href="https://jekyllrb.com/docs/posts/"&gt;here&lt;/a&gt;.&lt;br&gt;
(b) Add file and commit&lt;br&gt;
(c) Repeat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2zzlcE-B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://media.tenor.com/images/45a77fafd65507de4242fb29498ab004/tenor.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2zzlcE-B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://media.tenor.com/images/45a77fafd65507de4242fb29498ab004/tenor.gif" alt="Done GIF"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/hongvin"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y61HrVIM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.buymeacoffee.com/buttons/v2/default-blue.png" alt="Buy Me A Coffee" width="140px"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>firebase</category>
      <category>travis</category>
      <category>jekyll</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
