added firebase support and views to theme

This commit is contained in:
Nuno Coração committed 2022-09-12 12:49:52 +01:00
1 parent d0b0dfe002
commit 11320067eb
581 files changed
+1439 -79715

No files matched your search

+11 -7
View File
@@ -1,11 +1,15 @@
<!doctype html><html lang=en dir=ltr class=scroll-smooth data-default-appearance=dark data-auto-appearance=false><head><meta charset=utf-8><meta http-equiv=content-language content="en"><meta name=viewport content="width=device-width,initial-scale=1"><meta http-equiv=x-ua-compatible content="ie=edge"><title>How I Created My Homepage (for free) Using Docker, Hugo, and Firebase &#183; Blowfish</title><meta name=title content="How I Created My Homepage (for free) Using Docker, Hugo, and Firebase &#183; Blowfish"><meta name=description content="Product | Nuno Coração"><link rel=canonical href=https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/><link type=text/css rel=stylesheet href=/blowfish/css/main.bundle.min.3f7a3d89b943c3dacb033ff4448c83a5b58692eb75f99e903ee759443c690298da06dc2cc7adc967ae51bb50103acfa1b65f99a428ef2ff09176f2519b277273.css integrity="sha512-P3o9iblDw9rLAz/0RIyDpbWGkut1+Z6QPudZRDxpApjaBtwsx63JZ65Ru1AQOs+htl+ZpCjvL/CRdvJRmydycw=="><script type=text/javascript src=/blowfish/js/main.min.cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e.js integrity="sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg=="></script>
<script type=text/javascript src=/blowfish/js/appearance.min.4a00b8b8a9118d31826a03a2a9cca83390fcd3eddd9e03868fffcf4dc1e2dc15649e9266091f1225a24e1bcf6558ff4807f77663bcfaaa8f3050d73c1bd5bf0b.js integrity="sha512-SgC4uKkRjTGCagOiqcyoM5D80+3dngOGj//PTcHi3BVknpJmCR8SJaJOG89lWP9IB/d2Y7z6qo8wUNc8G9W/Cw=="></script>
<script defer type=text/javascript id=script-bundle src=/blowfish/js/main.bundle.min.9ae0a991bb442898e9bc60cf318b4de3ff878325ff3821625a5564b32b2f66aec0e7f7d0e00ca3ac7df59d9f01c18c88b6bdd213184f86ac9ce06d7bdffbadf8.js integrity="sha512-muCpkbtEKJjpvGDPMYtN4/+HgyX/OCFiWlVksysvZq7A5/fQ4AyjrH31nZ8BwYyItr3SExhPhqyc4G173/ut+A==" data-copy=Copy data-copied=Copied></script>
<script defer type=text/javascript id=script-bundle src=/blowfish/js/main.bundle.min.9ae0a991bb442898e9bc60cf318b4de3ff878325ff3821625a5564b32b2f66aec0e7f7d0e00ca3ac7df59d9f01c18c88b6bdd213184f86ac9ce06d7bdffbadf8.js integrity="sha512-muCpkbtEKJjpvGDPMYtN4/+HgyX/OCFiWlVksysvZq7A5/fQ4AyjrH31nZ8BwYyItr3SExhPhqyc4G173/ut+A==" data-copy data-copied></script>
<script src=/js/zoom.min.js></script>
<link rel=apple-touch-icon sizes=180x180 href=/blowfish/apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=/blowfish/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/blowfish/favicon-16x16.png><link rel=manifest href=/blowfish/site.webmanifest><meta property="og:title" content="How I Created My Homepage (for free) Using Docker, Hugo, and Firebase"><meta property="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."><meta property="og:type" content="article"><meta property="og:url" content="https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/"><meta property="og:image" content="https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/feature.png"><meta property="article:section" content="posts"><meta property="article:published_time" content="2022-06-27T00:00:00+00:00"><meta property="article:modified_time" content="2022-06-27T00:00:00+00:00"><meta property="og:site_name" content="Blowfish"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/feature.png"><meta name=twitter:title content="How I Created My Homepage (for free) Using Docker, Hugo, and Firebase"><meta name=twitter: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."><script type=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><meta name=author content="Blowfish"><script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXX"></script>
<script>var doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag('js',new Date),gtag('config','G-XXXXXX',{anonymize_ip:!1})}</script><link rel=stylesheet href=https://rsms.me/inter/inter.css></head><body class="flex flex-col h-screen px-6 m-auto text-lg leading-7 max-w-7xl bg-neutral text-neutral-900 dark:bg-neutral-800 dark:text-neutral sm:px-14 md:px-24 lg:px-32"><div id=the-top class="absolute flex self-center"><a class="px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 focus:translate-y-0 dark:bg-neutral-600" href=#main-content><span class="font-bold text-primary-600 ltr:pr-2 rtl:pl-2 dark:text-primary-400">&darr;</span>Skip to main content</a></div><div style=padding-left:0;padding-right:0 class="flex items-center justify-between px-4 py-6 sm:px-6 md:justify-start space-x-3"><div><a href=/blowfish/ class=flex><span class=sr-only>Blowfish</span>
<img src=/blowfish/img/blowfish_logo_transparent.png width=1000 height=1000 class="max-h-[5rem] max-w-[5rem] object-scale-down object-left nozoom" alt=Blowfish></a></div><div class="flex flex-1 items-center justify-between"><nav class="flex space-x-3"><a href=/ class="text-base font-medium text-gray-500 hover:text-gray-900">Blowfish</a></nav><div class="hidden md:flex items-center space-x-5 md:ml-12"><a href=https://github.com/nunocoracao/blowfish class="text-base font-medium text-gray-500 hover:text-gray-900" title>GitHub</a>
<span></span></div><div class="flex md:hidden items-center space-x-5 md:ml-12"><span></span></div></div><div class="-my-2 -mr-2 md:hidden"><label id=menu-button for=menu-controller class=block><input type=checkbox id=menu-controller class=hidden><div class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"><span class="relative inline-block align-text-bottom icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentcolor" d="M0 96C0 78.33 14.33 64 32 64H416c17.7.0 32 14.33 32 32 0 17.7-14.3 32-32 32H32C14.33 128 0 113.7.0 96zM0 256c0-17.7 14.33-32 32-32H416c17.7.0 32 14.3 32 32s-14.3 32-32 32H32c-17.67.0-32-14.3-32-32zM416 448H32c-17.67.0-32-14.3-32-32s14.33-32 32-32H416c17.7.0 32 14.3 32 32s-14.3 32-32 32z"/></svg></span></div><div id=menu-wrapper style=padding-top:25px class="fixed inset-0 z-30 invisible w-screen h-screen m-auto overflow-auto transition-opacity opacity-0 cursor-default bg-neutral-100/50 backdrop-blur-sm dark:bg-neutral-900/50"><ul class="flex movedown flex-col w-full px-6 py-6 mx-auto overflow-visible list-none ltr:text-right rtl:text-left max-w-7xl sm:px-14 md:px-24 lg:px-32 sm:py-10 sm:pt-10"><li class=mb-1><span class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"><span class="relative inline-block align-text-bottom icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentcolor" d="M310.6 361.4c12.5 12.5 12.5 32.75.0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75.0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75.0-45.25s32.75-12.5 45.25.0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25.0s12.5 32.75.0 45.25l-105.4 105.4L310.6 361.4z"/></svg></span></span></li><li class=mb-1><a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2" href=https://github.com/nunocoracao/blowfish title>GitHub</a></li></ul></div></label></div></div><div id=mobile-menu class="fixed inset-0 z-30 invisible w-screen h-screen m-auto overflow-auto transition-opacity opacity-0 cursor-default bg-neutral-100/50 backdrop-blur-sm dark:bg-neutral-900/50"><ul class="flex movedown flex-col w-full px-6 py-6 mx-auto overflow-visible list-none ltr:text-right rtl:text-left max-w-7xl sm:px-14 md:px-24 lg:px-32 sm:py-10 sm:pt-10"><li class=mb-1><span class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"><span class="relative inline-block align-text-bottom icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentcolor" d="M310.6 361.4c12.5 12.5 12.5 32.75.0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75.0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75.0-45.25s32.75-12.5 45.25.0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25.0s12.5 32.75.0 45.25l-105.4 105.4L310.6 361.4z"/></svg></span></span></li><li class=mb-1><a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2" href=https://github.com/nunocoracao/blowfish title>GitHub</a></li></ul></div><div class="relative flex flex-col grow"><main id=main-content class=grow><article><header class=max-w-prose><ol class="text-sm text-neutral-500 dark:text-neutral-400 print:hidden"><li class="inline hidden"><a class="hover:underline decoration-neutral-300 dark:underline-neutral-600" href=/blowfish/>Blowfish</a><span class="px-1 text-primary-500">/</span></li><li class=inline><a class="hover:underline decoration-neutral-300 dark:underline-neutral-600" href=/blowfish/posts/>Posts</a><span class="px-1 text-primary-500">/</span></li><li class="inline hidden"><a class="hover:underline decoration-neutral-300 dark:underline-neutral-600" href=/blowfish/posts/202206-homepage-guide/>How I Created My Homepage (for free) Using Docker, Hugo, and Firebase</a><span class="px-1 text-primary-500">/</span></li></ol><h1 class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">How I Created My Homepage (for free) Using Docker, Hugo, and Firebase</h1><div class="mt-8 mb-12 text-base text-neutral-500 dark:text-neutral-400 print:hidden"><div class="flex flex-row flex-wrap items-center"><time datetime="2022-06-27 00:00:00 +0000 UTC">27 June 2022</time><span class="px-2 text-primary-500">&#183;</span><span>2892 words</span><span class="px-2 text-primary-500">&#183;</span><span title="Reading time">14 mins</span><span class="px-2 text-primary-500">&#183;</span>
<link rel=apple-touch-icon sizes=180x180 href=/blowfish/%20apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=/blowfish/%20favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/blowfish/%20favicon-16x16.png><link rel=manifest href=/blowfish/%20site.webmanifest><meta property="og:title" content="How I Created My Homepage (for free) Using Docker, Hugo, and Firebase"><meta property="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."><meta property="og:type" content="article"><meta property="og:url" content="https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/"><meta property="og:image" content="https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/feature.png"><meta property="article:section" content="posts"><meta property="article:published_time" content="2022-06-27T00:00:00+00:00"><meta property="article:modified_time" content="2022-06-27T00:00:00+00:00"><meta property="og:site_name" content="Blowfish"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/feature.png"><meta name=twitter:title content="How I Created My Homepage (for free) Using Docker, Hugo, and Firebase"><meta name=twitter: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."><script type=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><meta name=author content="Blowfish"><script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXX"></script>
<script>var doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag('js',new Date),gtag('config','G-XXXXXX',{anonymize_ip:!1})}</script><link rel=stylesheet href=https://rsms.me/inter/inter.css><script>console.log("AIzaSyAN9vJzbGcqXi3fCiakI8rCVV7-S6T8n4s")</script><script src=https://www.gstatic.com/firebasejs/8.10.0/firebase-app.js></script>
<script src=https://www.gstatic.com/firebasejs/8.10.0/firebase-firestore.js></script>
<script src=https://www.gstatic.com/firebasejs/8.10.0/firebase-auth.js></script>
<script>const firebaseConfig={apiKey:"AIzaSyAN9vJzbGcqXi3fCiakI8rCVV7-S6T8n4s",authDomain:"AIzaSyAN9vJzbGcqXi3fCiakI8rCVV7-S6T8n4s",projectId:"homepage-a0c38",storageBucket:"homepage-a0c38.appspot.com",messagingSenderId:"722874298820",appId:"1:722874298820:web:b5c0e707586eba68c43491",measurementId:"G-H8CSEYZFG4"};var app=firebase.initializeApp(firebaseConfig),db=firebase.firestore(),auth=firebase.auth()</script></head><body class="flex flex-col h-screen px-6 m-auto text-lg leading-7 max-w-7xl bg-neutral text-neutral-900 dark:bg-neutral-800 dark:text-neutral sm:px-14 md:px-24 lg:px-32"><div id=the-top class="absolute flex self-center"><a class="px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 focus:translate-y-0 dark:bg-neutral-600" href=#main-content><span class="font-bold text-primary-600 ltr:pr-2 rtl:pl-2 dark:text-primary-400">&darr;</span>Skip to main content</a></div><div style=padding-left:0;padding-right:0 class="flex items-center justify-between px-4 py-6 sm:px-6 md:justify-start space-x-3"><div><a href=/blowfish/ class=flex><span class=sr-only>Blowfish</span>
<img src=/blowfish/img/blowfish_logo_transparent.png width=1000 height=1000 class="max-h-[5rem] max-w-[5rem] object-scale-down object-left nozoom" alt=Blowfish></a></div><div class="flex flex-1 items-center justify-between"><nav class="flex space-x-3"><a href=/ class="text-base font-medium text-gray-500 hover:text-gray-900">Blowfish</a></nav><div class="hidden md:flex items-center space-x-5 md:ml-12"><a href=/blowfish/docs/ class="text-base font-medium text-gray-500 hover:text-gray-900" title=Documentation>Docs</a>
<a href=https://github.com/nunocoracao/blowfish class="text-base font-medium text-gray-500 hover:text-gray-900" title>GitHub</a>
<span></span></div><div class="flex md:hidden items-center space-x-5 md:ml-12"><span></span></div></div><div class="-my-2 -mr-2 md:hidden"><label id=menu-button for=menu-controller class=block><input type=checkbox id=menu-controller class=hidden><div class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"><span class="relative inline-block align-text-bottom icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentcolor" d="M0 96C0 78.33 14.33 64 32 64H416c17.7.0 32 14.33 32 32 0 17.7-14.3 32-32 32H32C14.33 128 0 113.7.0 96zM0 256c0-17.7 14.33-32 32-32H416c17.7.0 32 14.3 32 32s-14.3 32-32 32H32c-17.67.0-32-14.3-32-32zM416 448H32c-17.67.0-32-14.3-32-32s14.33-32 32-32H416c17.7.0 32 14.3 32 32s-14.3 32-32 32z"/></svg></span></div><div id=menu-wrapper style=padding-top:25px class="fixed inset-0 z-30 invisible w-screen h-screen m-auto overflow-auto transition-opacity opacity-0 cursor-default bg-neutral-100/50 backdrop-blur-sm dark:bg-neutral-900/50"><ul class="flex movedown flex-col w-full px-6 py-6 mx-auto overflow-visible list-none ltr:text-right rtl:text-left max-w-7xl sm:px-14 md:px-24 lg:px-32 sm:py-10 sm:pt-10"><li class=mb-1><span class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"><span class="relative inline-block align-text-bottom icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentcolor" d="M310.6 361.4c12.5 12.5 12.5 32.75.0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75.0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75.0-45.25s32.75-12.5 45.25.0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25.0s12.5 32.75.0 45.25l-105.4 105.4L310.6 361.4z"/></svg></span></span></li><li class=mb-1><a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2" href=/blowfish/docs/ title=Documentation>Docs</a></li><li class=mb-1><a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2" href=https://github.com/nunocoracao/blowfish title>GitHub</a></li></ul></div></label></div></div><div id=mobile-menu class="fixed inset-0 z-30 invisible w-screen h-screen m-auto overflow-auto transition-opacity opacity-0 cursor-default bg-neutral-100/50 backdrop-blur-sm dark:bg-neutral-900/50"><ul class="flex movedown flex-col w-full px-6 py-6 mx-auto overflow-visible list-none ltr:text-right rtl:text-left max-w-7xl sm:px-14 md:px-24 lg:px-32 sm:py-10 sm:pt-10"><li class=mb-1><span class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"><span class="relative inline-block align-text-bottom icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentcolor" d="M310.6 361.4c12.5 12.5 12.5 32.75.0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75.0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75.0-45.25s32.75-12.5 45.25.0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25.0s12.5 32.75.0 45.25l-105.4 105.4L310.6 361.4z"/></svg></span></span></li><li class=mb-1><a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2" href=/blowfish/docs/ title=Documentation>Docs</a></li><li class=mb-1><a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2" href=https://github.com/nunocoracao/blowfish title>GitHub</a></li></ul></div><div class="relative flex flex-col grow"><main id=main-content class=grow><article><header class=max-w-prose><ol class="text-sm text-neutral-500 dark:text-neutral-400 print:hidden"><li class="inline hidden"><a class="hover:underline decoration-neutral-300 dark:underline-neutral-600" href=/blowfish/>Blowfish</a><span class="px-1 text-primary-500">/</span></li><li class=inline><a class="hover:underline decoration-neutral-300 dark:underline-neutral-600" href=/blowfish/posts/>Posts</a><span class="px-1 text-primary-500">/</span></li><li class="inline hidden"><a class="hover:underline decoration-neutral-300 dark:underline-neutral-600" href=/blowfish/posts/202206-homepage-guide/>How I Created My Homepage (for free) Using Docker, Hugo, and Firebase</a><span class="px-1 text-primary-500">/</span></li></ol><h1 class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">How I Created My Homepage (for free) Using Docker, Hugo, and Firebase</h1><div class="mt-8 mb-12 text-base text-neutral-500 dark:text-neutral-400 print:hidden"><div class="flex flex-row flex-wrap items-center"><time datetime="2022-06-27 00:00:00 +0000 UTC">27 June 2022</time><span class="px-2 text-primary-500">&#183;</span><span>2892 words</span><span class="px-2 text-primary-500">&#183;</span><span title="Reading time">14 mins</span><span class="px-2 text-primary-500">&#183;</span><span id=views_posts/202206-homepage-guide/index.md title=views>0 views</spanLine truncated
<span class=mb-[2px]><a href=#/posts/202206-homepage-guide/index.md class="text-lg hover:text-primary-500" rel="noopener noreferrer" target=_blank title="Edit content"><span class="relative inline-block align-text-bottom icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="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><section class="flex flex-col max-w-full mt-0 prose dark:prose-invert lg:flex-row"><div class="order-first px-0 lg:order-last lg:max-w-xs ltr:lg:pl-8 rtl:lg:pr-8"><div class="toc ltr:pl-5 rtl:pr-5 print:hidden lg:sticky lg:top-10"><details open class="mt-0 overflow-hidden rounded-lg ltr:-ml-5 ltr:pl-5 rtl:-mr-5 rtl:pr-5"><summary class="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><div class="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"><nav id=TableOfContents><ul><li><a href=#tldr>TL;DR</a></li><li><a href=#why-would-a-pm-build-their-own-homepage-from-scratch>Why would a PM build their own homepage from scratch…</a></li><li><a href=#lets-get-started>Let’s get started…</a></li><li><a href=#tools>Tools</a></li><li><a href=#setup-the-development-environment>Setup the Development Environment</a><ul><li><a href=#using-docker>Using Docker</a></li><li><a href=#using-visual-studio-code>Using Visual Studio Code</a></li><li><a href=#but-i-really-want-to-run-everything-locally>&mldr;but I really want to run everything locally</a></li></ul></li><li><a href=#create-site-skeleton>Create Site Skeleton</a></li><li><a href=#configure-theme>Configure Theme</a><ul><li><a href=#profile-picture>Profile picture</a></li><li><a href=#configuration-files>Configuration Files</a><ul><li><a href=#configtoml>config.toml</a></li><li><a href=#languagesentoml>languages.en.toml</a></li><li><a href=#paramstoml>params.toml</a></li></ul></li><li><a href=#final>Final</a></li></ul></li><li><a href=#how-to-generate-articles>How to generate articles</a></li><li><a href=#deploy>Deploy</a><ul><li><a href=#create-firebase-project>Create Firebase Project</a></li><li><a href=#setup-firebase>Setup Firebase</a></li><li><a href=#deploy-1>Deploy</a></li></ul></li><li><a href=#conclusion>Conclusion</a></li><li><a href=#resources>Resources</a></li></ul></nav></div></details></div></div><div class="min-w-0 min-h-0 max-w-prose"><img style="box-shadow:10px 10px 30px 2px rgba(0,0,0,.6)" src=feature.png><h2 id=tldr class="relative group">TL;DR <span class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#tldr aria-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><h2 id=why-would-a-pm-build-their-own-homepage-from-scratch class="relative group">Why would a PM build their own homepage from scratch… <span class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#why-would-a-pm-build-their-own-homepage-from-scratch aria-label=Anchor>#</a></span></h2><p>A couple of months ago I decided that I wanted to start writing more in order to a) exercise my writing skills and b) get feedback on some of my ideas. With this goal in mind, I started researching tools/platforms that would help me publish without creating too much friction for me, or for the people wanting to read what I have to say e.g. having to pay. Ultimately I decided upon creating my own website.</p><p>I had a couple of reasons for wanting to try this:</p><ul><li><p>challenge me to see if I, a previous software engineering student, could still bodge something together that would work and feel good about not having forgotten everything I ever learned about programming,</p></li><li><p>find a flexible free solution that would allow me to kickstart my website without investing monLine truncated
</code></pre><div class="flex px-4 py-3 rounded-md bg-primary-100 dark:bg-primary-900"><span class="text-primary-400 ltr:pr-3 rtl:pl-3"><span class="relative inline-block align-text-bottom icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="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><span class=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><img style=float:left width=50% src=devenvs/step4.png>
<img style=float:left width=50% src=devenvs/step5.png><p>In both situations, you will be able to see and click the button &ldquo;Open in VSCode&rdquo; which will open the editor and will allow you to start working. From there open a terminal and proceed to <a href=#create-site-skeleton>create the site skeleton</a></p><h3 id=using-visual-studio-code class="relative group">Using Visual Studio Code <span class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#using-visual-studio-code aria-label=Anchor>#</a></span></h3><p>Start by cloning the GitHub repository with the development environment configurations.</p><pre tabindex=0><code>git clone https://github.com/nunocoracao/homepage-kickstart
@@ -43,7 +47,7 @@ This is my first blog post
</code></pre><p>All files are written in <a target=_blank href=https://en.wikipedia.org/wiki/Markdown>Markdown</a> which Hugo then uses to generate the final pages. I&rsquo;ll not teach you how to write markdown files in this guide but I can recommend this <a target=_blank href=https://www.markdownguide.org/getting-started/>&ldquo;getting started&rdquo;</a> tutorial and this <a target=_blank href=https://www.markdownguide.org/cheat-sheet/>&ldquo;cheat sheet&rdquo;</a> to get you started.</p><h2 id=deploy class="relative group">Deploy <span class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#deploy aria-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><h3 id=create-firebase-project class="relative group">Create Firebase Project <span class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#create-firebase-project aria-label=Anchor>#</a></span></h3><p>Let’s start by going to <a target=_blank href=https://firebase.google.com><a href=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&rsquo;s project dashboard.</p><h3 id=setup-firebase class="relative group">Setup Firebase <span class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#setup-firebase aria-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><pre tabindex=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><pre tabindex=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><img src=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&rsquo;t configure GitHub actions but I am using that in my real setup</em>).</p><img src=deploy/firebaseconfig.png><h3 id=deploy-1 class="relative group">Deploy <span class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#deploy-1 aria-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><pre tabindex=0><code>firebase deploy
</code></pre><img src=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><img src=deploy/final.png><h2 id=conclusion class="relative group">Conclusion <span class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#conclusion aria-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&rsquo;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&rsquo;re looking to start and can&rsquo;t (or don&rsquo;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><h2 id=resources class="relative group">Resources <span class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#resources aria-label=Anchor>#</a></span></h2><ul><li><a target=_blank href=https://github.com/nunocoracao/homepage-kickstart>GitHub Repo for development environment</a></li><li><a target=_blank href=https://github.com/nunocoracao/homepage-hugo-congo>GitHub Repo for base Hugo and Congo configuration</a></li><li><a target=_blank href=https://github.com/nunocoracao/homepage-dockerimage>GitHub Repo for base image</a></li><li><a target=_blank href=https://hub.docker.com/r/nunocoracao/homepage-dockerimage>Docker Hub image URL</a></li><li><a target=_blank href=https://gohugo.io/documentation/>Hugo's Documentation</a></li><li><a target=_blank href=https://github.com/jpanther/congo>Congo's Documentation</a></li><li><a target=_blank href=https://firebase.google.com/docs>Firebase Documentation</a></li><li><a target=_blank href=https://www.markdownguide.org/>Markdown Guide</a></li><li><a target=_blank href=https://www.markdownguide.org/getting-started/>Markdown Getting Started"</a></li><li><a target=_blank href=https://www.markdownguide.org/cheat-sheet/>Markdown Cheat Sheet</a></li></ul></div></section><footer class="pt-8 max-w-prose print:hidden"><div class=flex><img class="!mt-0 !mb-0 h-24 w-24 rounded-full ltr:mr-4 rtl:ml-4" width=96 height=96 alt=Blowfish src=/blowfish/img/blowfish_logo_hu184ea2fa12490a2458ca388a16ab730e_227816_192x192_fill_box_smart1_3.png><div class=place-self-center><div class="text-[0.6rem] uppercase leading-3 text-neutral-500 dark:text-neutral-400">Author</div><div class="font-semibold leading-6 text-neutral-800 dark:text-neutral-300">Blowfish</div><div class="text-2xl sm:text-lg"></div></div></div><section class="flex flex-row flex-wrap justify-center pt-4 text-xl"><a class="m-1 inline-block min-w-[2.4rem] rounded bg-neutral-300 p-1 text-center text-neutral-700 hover:bg-primary-500 hover:text-neutral dark:bg-neutral-700 dark:text-neutral-300 dark:hover:bg-primary-400 dark:hover:text-neutral-800" href="https://www.linkedin.com/shareArticle?mini=true&url=https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/&title=How%20I%20Created%20My%20Homepage%20%28for%20free%29%20Using%20Docker,%20Hugo,%20and%20Firebase" title="Share on LinkedIn" aria-label="Share on LinkedIn"><span class="relative inline-block align-text-bottom icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentcolor" d="M416 32H31.9C14.3 32 0 46.5.0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6.0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3.0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2.0 38.5 17.3 38.5 38.5.0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6.0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2.0 79.7 44.3 79.7 101.9V416z"/></svg></span></a><a class="m-1 inline-block min-w-[2.4rem] rounded bg-neutral-300 p-1 text-center text-neutral-700 hover:bg-primary-500 hover:text-neutral dark:bg-neutral-700 dark:text-neutral-300 dark:hover:bg-primary-400 dark:hover:text-neutral-800" href="https://twitter.com/intent/tweet/?url=https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/&text=How%20I%20Created%20My%20Homepage%20%28for%20free%29%20Using%20Docker,%20Hugo,%20and%20Firebase" title="Tweet on Twitter" aria-label="Tweet on Twitter"><sLine truncated
</code></pre><img src=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><img src=deploy/final.png><h2 id=conclusion class="relative group">Conclusion <span class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#conclusion aria-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&rsquo;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&rsquo;re looking to start and can&rsquo;t (or don&rsquo;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><h2 id=resources class="relative group">Resources <span class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#resources aria-label=Anchor>#</a></span></h2><ul><li><a target=_blank href=https://github.com/nunocoracao/homepage-kickstart>GitHub Repo for development environment</a></li><li><a target=_blank href=https://github.com/nunocoracao/homepage-hugo-congo>GitHub Repo for base Hugo and Congo configuration</a></li><li><a target=_blank href=https://github.com/nunocoracao/homepage-dockerimage>GitHub Repo for base image</a></li><li><a target=_blank href=https://hub.docker.com/r/nunocoracao/homepage-dockerimage>Docker Hub image URL</a></li><li><a target=_blank href=https://gohugo.io/documentation/>Hugo's Documentation</a></li><li><a target=_blank href=https://github.com/jpanther/congo>Congo's Documentation</a></li><li><a target=_blank href=https://firebase.google.com/docs>Firebase Documentation</a></li><li><a target=_blank href=https://www.markdownguide.org/>Markdown Guide</a></li><li><a target=_blank href=https://www.markdownguide.org/getting-started/>Markdown Getting Started"</a></li><li><a target=_blank href=https://www.markdownguide.org/cheat-sheet/>Markdown Cheat Sheet</a></li></ul></div><script>if(typeof auth!='undefined'){var oid="views_posts/202206-homepage-guide/index.md",id=oid&&oid.replaceAll("/","-"),viewed=localStorage.getItem(id);viewed||auth.signInAnonymously().then(()=>{var e=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=>{var t=e.code,n=e.message;console.error(t,n)})}</script></section><footer class="pt-8 max-w-prose print:hidden"><div class=flex><img class="!mt-0 !mb-0 h-24 w-24 rounded-full ltr:mr-4 rtl:ml-4" width=96 height=96 alt=Blowfish src=/blowfish/img/blowfish_logo_hu184ea2fa12490a2458ca388a16ab730e_227816_192x192_fill_box_smart1_3.png><div class=place-self-center><div class="text-[0.6rem] uppercase leading-3 text-neutral-500 dark:text-neutral-400">Author</div><div class="font-semibold leading-6 text-neutral-800 dark:text-neutral-300">Blowfish</div><div class="text-2xl sm:text-lg"></div></div></div><section class="flex flex-row flex-wrap justify-center pt-4 text-xl"><a class="m-1 inline-block min-w-[2.4rem] rounded bg-neutral-300 p-1 text-center text-neutral-700 hover:bg-primary-500 hover:text-neutral dark:bg-neutral-700 dark:text-neutral-300 dark:hover:bg-primary-400 dark:hover:text-neutral-800" href="https://www.linkedin.com/shareArticle?mini=true&url=https://nunocoracao.github.io/blowfish/posts/202206-homepage-guide/&title=How%20I%20Created%20My%20Homepage%20%28for%20free%29%20Using%20Docker,%20Hugo,%20and%20Firebase" title="Share on LinkedIn" aria-label="Share on LinkedIn"><span class="relative inline-block align-text-bottom icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentcolor" d="M416 32H31.9C14.3 32 0 46.5.0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6.0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3.0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2.0 38.5 17.3 38.5 38.5.0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6.0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2.0 79.7 Line truncated
<span class="ml-3 text-neutral-700 group-hover:text-primary-600 ltr:hidden rtl:inline dark:text-neutral dark:group-hover:text-primary-400">&rarr;</span>
<span class="flex flex-col"><span class="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500">Nuno Coração – Meet the Mentor</span>
<span class="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400"><time datetime="2022-06-26 00:00:00 +0000 UTC">26 June 2022</time></span></span></a></span>
@@ -52,4 +56,4 @@ This is my first blog post
<span class="ml-3 text-neutral-700 group-hover:text-primary-600 ltr:inline rtl:hidden dark:text-neutral dark:group-hover:text-primary-400">&rarr;</span>
<span class="mr-3 text-neutral-700 group-hover:text-primary-600 ltr:hidden rtl:inline dark:text-neutral dark:group-hover:text-primary-400">&larr;</span></a></span></div></div></footer></article><div class="pointer-events-none absolute top-[100vh] bottom-0 w-12 ltr:right-0 rtl:left-0"><a href=#the-top class="pointer-events-auto sticky top-[calc(100vh-5.5rem)] flex h-12 w-12 items-center justify-center rounded-full bg-neutral/50 text-xl text-neutral-700 backdrop-blur hover:text-primary-600 dark:bg-neutral-800/50 dark:text-neutral dark:hover:text-primary-400" aria-label="Scroll to top" title="Scroll to top">&uarr;</a></div></main><footer class="py-10 print:hidden"><nav class="pb-4 text-base font-medium text-neutral-500 dark:text-neutral-400"><ul class="flex flex-col list-none sm:flex-row"><li class="mb-1 ltr:text-right rtl:text-left sm:mb-0 ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0"><a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2" href=/blowfish/tags/ title=Tags>Tags</a></li><li class="mb-1 ltr:text-right rtl:text-left sm:mb-0 ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0"><a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2" href=/blowfish/categories/ title=Categories>Categories</a></li></ul></nav><div class="flex items-center justify-between"><p class="text-sm text-neutral-500 dark:text-neutral-400">&copy;
2022
Blowfish</p><p class="text-xs text-neutral-500 dark:text-neutral-400">Powered by <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href=https://gohugo.io/ target=_blank rel="noopener noreferrer">Hugo</a> & <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href=https://github.com/nunocoracao/blowfish target=_blank rel="noopener noreferrer">Blowfish</a></p></div><script>mediumZoom(document.querySelectorAll("img:not(.nozoom)"),{margin:24,background:'rgba(0,0,0,0.5)',scrollOffset:0})</script></footer></div></body></html>
Blowfish</p><p class="text-xs text-neutral-500 dark:text-neutral-400">Powered by <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href=https://gohugo.io/ target=_blank rel="noopener noreferrer">Hugo</a> & <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href=https://github.com/nunocoracao/blowfish target=_blank rel="noopener noreferrer">Blowfish</a></p></div><script type=text/javascript src=/blowfish/js/process.min.ab6de293f795eaa765474f991a57d294e2bb8ec4a85f6f414275f12bccc88a08b508215988b2bb633d778f9563899f529a5a2c3cd5cb31b7551a9f99fc2479c8.js integrity="sha512-q23ik/eV6qdlR0+ZGlfSlOK7jsSoX29BQnXxK8zIigi1CCFZiLK7Yz13j5VjiZ9SmlosPNXLMbdVGp+Z/CR5yA=="></script></footer></div></body></html>