<!doctype html><htmllang=endir=ltrclass=scroll-smoothdata-default-appearance=darkdata-auto-appearance=false><head><metacharset=utf-8><metahttp-equiv=content-languagecontent="en"><metaname=viewportcontent="width=device-width,initial-scale=1"><metahttp-equiv=x-ua-compatiblecontent="ie=edge"><title>How I Created My Homepage (for free) Using Docker, Hugo, and Firebase · Blowfish</title><metaname=titlecontent="How I Created My Homepage (for free) Using Docker, Hugo, and Firebase · Blowfish"><metaname=descriptioncontent="Product | Nuno Coração"><linkrel=canonicalhref=https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/><linktype=text/cssrel=stylesheethref=/blowfish/css/main.bundle.min.3f7a3d89b943c3dacb033ff4448c83a5b58692eb75f99e903ee759443c690298da06dc2cc7adc967ae51bb50103acfa1b65f99a428ef2ff09176f2519b277273.cssintegrity="sha512-P3o9iblDw9rLAz/0RIyDpbWGkut1+Z6QPudZRDxpApjaBtwsx63JZ65Ru1AQOs+htl+ZpCjvL/CRdvJRmydycw=="><scripttype=text/javascriptsrc=/blowfish/js/main.min.cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e.jsintegrity="sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg=="></script>
<linkrel=apple-touch-iconsizes=180x180href=/blowfish/%20apple-touch-icon.png><linkrel=icontype=image/pngsizes=32x32href=/blowfish/%20favicon-32x32.png><linkrel=icontype=image/pngsizes=16x16href=/blowfish/%20favicon-16x16.png><linkrel=manifesthref=/blowfish/%20site.webmanifest><metaproperty="og:title"content="How I Created My Homepage (for free) Using Docker, Hugo, and Firebase"><metaproperty="og:description"content="Currently, there are several solutions to build and host your personal website. I wanted to challenge myself to see if I could do it with the same set of features as some of the paid solutions out there and for free. Here are the results."><metaproperty="og:type"content="article"><metaproperty="og:url"content="https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/"><metaproperty="og:image"content="https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/feature.png"><metaproperty="article:section"content="posts"><metaproperty="article:published_time"content="2022-06-27T00:00:00+00:00"><metaproperty="article:modified_time"content="2022-06-27T00:00:00+00:00"><metaproperty="og:site_name"content="Blowfish"><metaname=twitter:cardcontent="summary_large_image"><metaname=twitter:imagecontent="https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/feature.png"><metaname=twitter:titlecontent="How I Created My Homepage (for free) Using Docker, Hugo, and Firebase"><metaname=twitter:descriptioncontent="Currently, there are several solutions to build and host your personal website. I wanted to challenge myself to see if I could do it with the same set of features as some of the paid solutions out there and for free. Here are the results."><scripttype=application/ld+json>[{"@context":"https://schema.org","@type":"Article","articleSection":"Posts","name":"How I Created My Homepage (for free) Using Docker, Hugo, and Firebase","headline":"How I Created My Homepage (for free) Using Docker, Hugo, and Firebase","description":"Currently, there are several solutions to build and host your personal website. I wanted to challenge myself to see if I could do it with the same set of features as some of the paid solutions out there and for free. Here are the results.","abstract":"Currently, there are several solutions to build and host your personal website. I wanted to challenge myself to see if I could do it with the same set of features as some of the paid solutions out there and for free. Here are the results.","inLanguage":"en","url":"https:\/\/nunocoracao.github.io\/blowfish\/posts\/202206-homepage-guide\/","author":{"@type":"Person","name":"Blowfish"},"copyrightYear":"2022","dateCreated":"2022-06-27T00:00:00\u002b00:00","datePublished":"2022-06-27T00:00:00\u002b00:00","dateModified":"2022-06-27T00:00:00\u002b00:00","keywords":["Development","Environment","Tutorial","Hugo","Congo","Docker","VSCode","Go"],"mainEntityOfPage":"true","wordCount":"2892"}]</script><metaname=authorcontent="Blowfish"><scriptasyncsrc="https://www.googletagmanager.com/gtag/js?id=G-XXXXXX"></script>
<spanclass=mb-[2px]><ahref=#/posts/202206-homepage-guide/index.mdclass="text-lg hover:text-primary-500"rel="noopener noreferrer"target=_blanktitle="Edit content"><spanclass="relative inline-block align-text-bottom icon"><svgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 512 512"><pathfill="currentcolor"d="M490.3 40.4c21.9 21.87 21.9 57.33.0 79.2l-30 30.1-98-97.98 30.1-30.06C414.3-.2135 449.7-.2135 471.6 21.66L490.3 40.4zM172.4 241.7 339.7 74.34l98 97.96L270.3 339.6C264.2 345.8 256.7 350.4 248.4 353.2l-88.8 29.6C150.1 385.6 141.5 383.4 135 376.1 128.6 370.5 126.4 361 129.2 352.4l29.6-88.8C161.6 255.3 166.2 247.8 172.4 241.7v0zM192 63.1c17.7.0 32 15.23 32 32 0 18.6-14.3 32-32 32H96c-17.67.0-32 15.2-32 32V416c0 17.7 14.33 32 32 32H352c17.7.0 32-14.3 32-32V319.1c0-16.8 14.3-32 32-32s32 15.2 32 32V416c0 53-43 96-96 96H96c-53.02.0-96-43-96-96V159.1c0-53 42.98-96 96-96h96z"/></svg></span></a></span></div></div></header><sectionclass="flex flex-col max-w-full mt-0 prose dark:prose-invert lg:flex-row"><divclass="order-first px-0 lg:order-last lg:max-w-xs ltr:lg:pl-8 rtl:lg:pr-8"><divclass="toc ltr:pl-5 rtl:pr-5 print:hidden lg:sticky lg:top-10"><detailsopenclass="mt-0 overflow-hidden rounded-lg ltr:-ml-5 ltr:pl-5 rtl:-mr-5 rtl:pr-5"><summaryclass="block py-1 text-lg font-semibold cursor-pointer bg-neutral-100 text-neutral-800 ltr:-ml-5 ltr:pl-5 rtl:-mr-5 rtl:pr-5 dark:bg-neutral-700 dark:text-neutral-100 lg:hidden">Table of Contents</summary><divclass="py-2 border-dotted border-neutral-300 ltr:-ml-5 ltr:border-l ltr:pl-5 rtl:-mr-5 rtl:border-r rtl:pr-5 dark:border-neutral-600"><navid=TableOfContents><ul><li><ahref=#tldr>TL;DR</a></li><li><ahref=#why-would-a-pm-build-their-own-homepage-from-scratch>Why would a PM build their own homepage from scratch…</a></li><li><ahref=#lets-get-started>Let’s get started…</a></li><li><ahref=#tools>Tools</a></li><li><ahref=#setup-the-development-environment>Setup the Development Environment</a><ul><li><ahref=#using-docker>Using Docker</a></li><li><ahref=#using-visual-studio-code>Using Visual Studio Code</a></li><li><ahref=#but-i-really-want-to-run-everything-locally>…but I really want to run everything locally</a></li></ul></li><li><ahref=#create-site-skeleton>Create Site Skeleton</a></li><li><ahref=#configure-theme>Configure Theme</a><ul><li><ahref=#profile-picture>Profile picture</a></li><li><ahref=#configuration-files>Configuration Files</a><ul><li><ahref=#configtoml>config.toml</a></li><li><ahref=#languagesentoml>languages.en.toml</a></li><li><ahref=#paramstoml>params.toml</a></li></ul></li><li><ahref=#final>Final</a></li></ul></li><li><ahref=#how-to-generate-articles>How to generate articles</a></li><li><ahref=#deploy>Deploy</a><ul><li><ahref=#create-firebase-project>Create Firebase Project</a></li><li><ahref=#setup-firebase>Setup Firebase</a></li><li><ahref=#deploy-1>Deploy</a></li></ul></li><li><ahref=#conclusion>Conclusion</a></li><li><ahref=#resources>Resources</a></li></ul></nav></div></details></div></div><divclass="min-w-0 min-h-0 max-w-prose"><imgstyle="box-shadow:10px 10px 30px 2px rgba(0,0,0,.6)"src=feature.png><h2id=tldrclass="relative group">TL;DR <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#tldraria-label=Anchor>#</a></span></h2><p>Currently, there are several solutions to build and host your personal website. I wanted to challenge myself to see if I could do it with the same set of features as some of the paid solutions out there and for free. Here are the results.</p><h2id=why-would-a-pm-build-their-own-homepage-from-scratchclass="relative group">Why would a PM build their own homepage from scratch… <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:non
</code></pre><divclass="flex px-4 py-3 rounded-md bg-primary-100 dark:bg-primary-900"><spanclass="text-primary-400 ltr:pr-3 rtl:pl-3"><spanclass="relative inline-block align-text-bottom icon"><svgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 512 512"><pathfill="currentcolor"d="M506.3 417 293 53c-16.33-28-57.54-28-73.98.0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6c32.76.0 53.26-35 36.96-63zM232 168c0-13.25 10.75-24 24-24s24 10.8 24 24v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zm24 248c-17.36.0-31.44-14.08-31.44-31.44s14.07-31.44 31.44-31.44 31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg></span></span><spanclass=dark:text-neutral-300><strong>Note:</strong> If you clone the repo locally you can also start from the local folder</span></div><p>Once the container is running you should see something similar to the images below.</p><imgstyle=float:leftwidth=50%src=devenvs/step4.png>
<imgstyle=float:leftwidth=50%src=devenvs/step5.png><p>In both situations, you will be able to see and click the button “Open in VSCode” which will open the editor and will allow you to start working. From there open a terminal and proceed to <ahref=#create-site-skeleton>create the site skeleton</a></p><h3id=using-visual-studio-codeclass="relative group">Using Visual Studio Code <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#using-visual-studio-codearia-label=Anchor>#</a></span></h3><p>Start by cloning the GitHub repository with the development environment configurations.</p><pretabindex=0><code>git clone https://github.com/nunocoracao/homepage-kickstart
</code></pre><p>This method requires the installation of an extra VSCode extension in order to spin up the containers. Please search for <strong>Remote - Containers</strong> and install the extension to continue this guide.</p><p>After successfully installing the extension, open your source folder in VSCode and open the “Remote - Containers” extension panel on the left. Select “Open Folder in Container” to spin up a container with the development environment.</p><imgsrc=setup/extension.png><p>Wait a couple of minutes while the image is built. Docker is creating an image with all the required software for the development of the website. This will only happen the first time you spin the environment.</p><imgsrc=setup/imagebuild.png><p>Once the image is built, VSCode will spin the container and will place your working environment inside of it (information available in the bottom left corner of the window). You now have a development environment with Go, Hugo, Firebase CLI, and all the tools you will need for this guide. Just open a new terminal and you’re ready to begin creating your site.</p><imgsrc=setup/newterminal.png><h3id=but-i-really-want-to-run-everything-locallyclass="relative group">…but I really want to run everything locally <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#but-i-really-want-to-run-everything-locallyaria-label=Anchor>#</a></span></h3><p>If you either prefer or need to run your environment locally follow the guides below to install everything you need for your setup:</p><ul><li><strong>Homebrew</strong> - <atarget=_blankhref=https://brew.sh/>Install homebrew</a></li><li><strong>Hugo</strong> - <atarget=_blankhref=https://gohugo.io/getting-started/installing/>InstallHugo</a></li><li><strong>Node.js and NPM</strong> - <atarget=_blankhref=https://nodejs.org/en/download/>Install node.js&NPM</a> (easier to install Firebase CLI)</li><li><strong>Firebase CLI</strong> - <atarget=_blankhref=https://firebase.google.com/docs/cli#install_the_firebase_cli>Install FirebaseCLI</a></li></ul><h2id=create-site-skeletonclass="relative group">Create Site Skeleton <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#create-site-skeletonaria-label=Anchor>#</a></span></h2><p>Now that we have a development environment running the first step is to create the base version of your website. For this let’s use <strong>Hugo</strong> to generate the folder template and configuration files we need by running the following command (<code>--force</code> parameter is required to run Hugo on a non-empty directory):</p><pretabindex=0><code>hugo new site . --force
</code></pre><p>This should have created a set of folders inside your workspace that you don’t need to worry about for now. The next step is to install a theme for Hugo. I choose <atarget=_blankhref=https://github.com/jpanther/congo>Congo</a> as it had all the features I required for my website and it seemed to be easy to change if I ever need it to. If you want to try a different theme there are several available in Hugo’s documentation, each with documentation and examples.</p><p>Install Congo using git submodules by running the following command:</p><pretabindex=0><code>git submodule add -b stable https://github.com/jpanther/congo.git themes/congo
</code></pre><p>Now we need to make some changes to the directory and file structure so that Congo can work properly. I will not get into the details of what is happening in this guide (you can consult Congo’s documentation if you want to learn more), the main takeaway is that we’re creating and configuring a folder in <code>config/_default/</code> which will contain all the important configuration files for Hugo and Congo.</p><p>Please run the following commands in order:</p><pretabindex=0><code>mkdir -p config/_default
</code></pre><p>Congratulations, you should have your site up and running now. Let’s try it out by running Hugo’s debug server:</p><pretabindex=0><code>hugo server -D
</code></pre><p>Please open your favorite browser and navigate to <atarget=_blankhref=http://localhost:1313>localhost:1313</a> to see your page.</p><imgsrc=theme/vanilla.png><p>You should see something similar to the image above. Doesn’t look that exciting, does it? Let’s configure the theme in the next sections and learn how to create your first article.</p><h2id=configure-themeclass="relative group">Configure Theme <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#configure-themearia-label=Anchor>#</a></span></h2><p>Now I’ll be covering how to change the look and feel of your website, add some personal information, and activate the dark mode toggle (aka the most important feature in any website these days).</p><divclass="flex px-4 py-3 rounded-md bg-primary-100 dark:bg-primary-900"><spanclass="text-primary-400 ltr:pr-3 rtl:pl-3"><spanclass="relative inline-block align-text-bottom icon"><svgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 512 512"><pathfill="currentcolor"d="M506.3 417 293 53c-16.33-28-57.54-28-73.98.0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6c32.76.0 53.26-35 36.96-63zM232 168c0-13.25 10.75-24 24-24s24 10.8 24 24v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zm24 248c-17.36.0-31.44-14.08-31.44-31.44s14.07-31.44 31.44-31.44 31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg></span></span><spanclass=dark:text-neutral-300>A note, I am covering a very simple configuration for this theme please check <atarget=_blankhref=https://jpanther.github.io/congo/docs/>Congo’s theme documentation</a> to understand everything you can do with this theme.</span></div><h3id=profile-pictureclass="relative group">Profile picture <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#profile-picturearia-label=Anchor>#</a></span></h3><p>Let’s start by adding a profile picture to your site. Create a folder called “assets” at the root of your project. Choose a profile picture and place it inside the assets folder. The rest of the guide will assume the final picture is named “profile.jpg”, so please rename your picture or take that into account when configuring some of the other files.</p><figure><imgsrc=configure/profile.jpg><figcaption>If you still need to take a proper awesome picture for this feel free to download this one to proceed with the tutorial.</figcaption></figure><h3id=configuration-filesclass="relative group">Configuration Files <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#configuration-filesaria-label=Anchor>#</a></span></h3><p>Let’s open a couple of configuration files and start updating them. All the files we are going to change are inside <code>config/_default/</code> folder.</p><h4id=configtomlclass="relative group">config.toml <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#configtomlaria-label=Anchor>#</a></span></h4><p>Uncomment the <code>baseURL</code> parameter and replace it with the final domain of your website. This value will be used to create the robots.txt file for any search engines to successfully crawl and index your website.</p><imgsrc=configure/config.png><divclass="flex px-4 py-3 rounded-md bg-primary-100 dark:bg-primary-900"><spanclass="text-primary-400 ltr:pr-3 rtl:pl-3"><spanclass="relative inline-block align-text-bottom icon"><svgxmlns="http://www.w3
</code></pre><p>And navigate to <atarget=_blankhref=http://localhost:1313>localhost:1313</a> you should see something similar to the page below.</p><imgstyle="box-shadow:10px 10px 30px 2px rgba(0,0,0,.6)"src=configure/final.png><p>Congrats it’s looking great, let’s learn how to generate your first articles.</p><h2id=how-to-generate-articlesclass="relative group">How to generate articles <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#how-to-generate-articlesaria-label=Anchor>#</a></span></h2><p>Hugo provides some tools to generate your articles (<atarget=_blankhref=https://www.markdownguide.org/>markdown</a> files) with a base set of tags already in them. Run the following command to create your first post</p><pretabindex=0><code>hugo new posts/my-first-post.md
</code></pre><p>replace the contents of the file with the following:</p><pretabindex=0><code>---
</code></pre><p>This just created your first blog post. We’ve added a couple of categories and tags, which will be indexed by Hugo during build time. These tags will be used to create the Categories and Tags section of the website automatically for you. Notice that I’ve changed the <code>draft</code> to false to simulate a published post.</p><p>Run the following command to create your second post</p><pretabindex=0><code>hugo new posts/my-draft-post.md
</code></pre><p>and replace the contents of that file with the following:</p><divclass=highlight><pretabindex=0class=chroma><codeclass=language-markdowndata-lang=markdown><spanclass=line><spanclass=cl>---
</span></span><spanclass=line><spanclass=cl>This is my second blog post
</span></span></code></pre></div><p>For the second post, I’ve left the <code>draft</code> parameter true to simulate a draft post.</p><p>Hugo automatically hides draft posts from the final site generation. You can keep working on articles leaving the draft label true and they will be ignored by the engine. If you want to run in DEBUG mode just use the command:</p><pretabindex=0><code>hugo server -D
</code></pre><p>If you go to the posts on the site you should be able to see both entries. If you then run the server in normal mode the draft articles will disappear. You can use the command below to do so:</p><pretabindex=0><code>hugo server
</code></pre><p>You can use this command to test the final version of the website or an article before generating the final build. When you’re ready just use the command ‘Hugo’ to generate the final website inside the /public folder.</p><pretabindex=0><code>hugo
</code></pre><p>All files are written in <atarget=_blankhref=https://en.wikipedia.org/wiki/Markdown>Markdown</a> which Hugo then uses to generate the final pages. I’ll not teach you how to write markdown files in this guide but I can recommend this <atarget=_blankhref=https://www.markdownguide.org/getting-started/>“getting started”</a> tutorial and this <atarget=_blankhref=https://www.markdownguide.org/cheat-sheet/>“cheat sheet”</a> to get you started.</p><h2id=deployclass="relative group">Deploy <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#deployaria-label=Anchor>#</a></span></h2><p>Ok, you’ve configured your website and created a couple of articles, but we still need to deploy it somewhere. As I mentioned before I chose Firebase for this guide, even though I know that it offers much more than just a simple hosting service it allows me to host my site for free without much of a hassle.</p><h3id=create-firebase-projectclass="relative group">Create Firebase Project <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#create-firebase-projectaria-label=Anchor>#</a></span></h3><p>Let’s start by going to <atarget=_blankhref=https://firebase.google.com><ahref=https://firebase.google.com>https://firebase.google.com</a></a> and creating an account. Once that is done you can create a project for free. The process should be straightforward and when you finish you should be in Firebase’s project dashboard.</p><h3id=setup-firebaseclass="relative group">Setup Firebase <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#setup-firebasearia-label=Anchor>#</a></span></h3><p>Now you can go back to your environment which already has Firebase CLI tools installed and ready to go. Let’s start by authenticating using:</p><pretabindex=0><code>firebase login
</code></pre><p>Once you are successfully logged in you need to initiate the project configurations for firebase. For that please use:</p><pretabindex=0><code>firebase init
</code></pre><p>The tool will offer you a wide variety of different options in order to configure your Firebase project. For now, we just want to configure hosting. If you are using GitHub, you might want to consider configuring GitHub action deploys which can automatically build and deploy your site every time there is a push to a specific branch or a merged pull request.</p><imgsrc=deploy/firebasehosting.png><p>Choose the Firebase project created before as the hosting destination. And select the configurations you wish for the deployment process. The important one here is the folder where the final files to the server will be placed and this is the <code>public</code> folder. For the other parameters you experiment with what better matches your use-case, the image below shows you what I picked (<em>Note: for this tutorial I didn’t configure GitHub actions but I am using that in my real setup</em>).</p><imgsrc=deploy/firebaseconfig.png><h3id=deploy-1class="relative group">Deploy <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#deploy-1aria-label=Anchor>#</a></span></h3><p>Ok, now for the long and boring process of deployment… joking! Once you are ready and have all your files generated by the <code>hugo</code> command in the public folder just use the following command to deploy:</p><pretabindex=0><code>firebase deploy
</code></pre><imgsrc=deploy/firebasedeploy.png><p>The process should take a couple of seconds and there you go your site is deployed. The final line of the CLI tool will give you a URL to see for yourself, otherwise, you can explore your Firebase dashboard hosting section which will have more information regarding the deployment.</p><imgsrc=deploy/final.png><h2id=conclusionclass="relative group">Conclusion <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#conclusionaria-label=Anchor>#</a></span></h2><p>By now you should have a simple version of your website which you can configure to your needs. The main advantage of this solution is that it is flexible and extensible to a variety of different needs especially if you take the time to explore Hugo’s theme catalog. True that it might require some coding to implement complex but I would guess that this solves the problem for almost everyone.</p><p>Above all, it’s a completely free solution if you’re looking to start and can’t (or don’t want to) spend money. Hope this guide helps you, feel free to share it with your network and give me feedback so that I can make it better over time.</p><h2id=resourcesclass="relative group">Resources <spanclass="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><aclass="group-hover:text-primary-300 dark:group-hover:text-neutral-700"style=text-decoration-line:none!importanthref=#resourcesaria-label=Anchor>#</a></span></h2><ul><li><atarget=_blankhref=https://github.com/nunocoracao/homepage-kickstart>GitHub Repo for development environment</a></li><li><atarget=_blankhref=https://github.com/nunocoracao/homepage-hugo-congo>GitHub Repo for base Hugo and Congo configuration</a></li><li><atarget=_blankhref=https://github.com/nunocoracao/homepage-dockerimage>GitHub Repo for base image</a></li><li><atarget=_blankhref=https://hub.docker.com/r/nunocoracao/homepage-dockerimage>Docker Hub image URL</a></li><li><atarget=_blankhref=https://gohugo.io/documentation/>Hugo's Documentation</a></li><li><atarget=_blankhref=https://github.com/jpanther/congo>Congo's Documentation</a></li><li><atarget=_blankhref=https://firebase.google.com/docs>Firebase Documentation</a></li><li><atarget=_blankhref=https://www.markdownguide.org/>MarkdownGuide</a></li><li><atarget=_blankhref=https://www.markdownguide.org/getting-started/>Markdown Getting Started"</a></li><li><atarget=_blankhref=https://www.markdownguide.org/cheat-sheet/>Markdown Cheat Sheet</a></li></ul></div><script>if(typeofauth!='undefined'){varoid="views_posts/202206-homepage-guide/index.md",id=oid&&oid.replaceAll("/","-"),viewed=localStorage.getItem(id);viewed||auth.signInAnonymously().then(()=>{vare=db.collection('views').doc(id);localStorage.setItem(id,!0),e.get().then(e=>{e.exists?db.collection('views').doc(id).update({views:firebase.firestore.FieldValue.increment(1)}):db.collection('views').doc(id).set({views:1})}).catch(e=>{console.log("Error getting document:",e)})}).catch(e=>{vart=e.code,n=e.message;console.error(t,n)})}</script></section><footerclass="pt-8 max-w-prose print:hidden"><divclass=flex><imgclass="!mt-0 !mb-0 h-24 w-24 rounded-full ltr:mr-4 rtl:ml-4"width=96height=96alt=Blowfishsrc=/blowfish/img/blowfish_logo_hu184ea2fa12490a2458ca388a16ab730e_227816_192x192_fill_box_smart1_3.png><divclass=place-self-center><divclass="text-[0.6rem] uppercase leading-3 text-neutral-500 dark:text-neutral-400">Author</div><divclass="font-semibold leading-6 text-neutral-800 dark:text-neutral-300">Blowfish</div><divclass="text-2xl sm:text-lg"></div></div></div><sectionclass="flex flex-row flex-wrap justify-center pt-4 text-xl"><aclass="m-1inline-blockmin-w-[2.4rem]roundedbg-neutral-300p-1text-centertext-neutral-700hover:bg-primary-500hover:text-neutraldark:bg-neutral-700dark:text-neu
<spanclass="flex flex-col"><spanclass="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500">Nuno Coração – Meet the Mentor</span>
<spanclass="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400"><timedatetime="2022-06-26 00:00:00 +0000 UTC">26 June 2022</time></span></span></a></span>
<span><aclass="flex text-right group"href=/blowfish/posts/202207-docker-bulk-add/><spanclass="flex flex-col"><spanclass="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500">Bulk User Add for Docker Business and Teams</span>
<spanclass="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400"><timedatetime="2022-07-27 00:00:00 +0000 UTC">27 July 2022</time></span></span>