first commit

This commit is contained in:
2025-11-06 14:46:05 -08:00
commit d573e8355c
194 changed files with 6460 additions and 0 deletions

3
askkennyb/.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "themes/PaperMod"]
path = themes/PaperMod
url = https://github.com/adityatelange/hugo-PaperMod.git

View File

0
askkennyb/README.md Normal file
View File

View File

@@ -0,0 +1,5 @@
---
date: '{{ .Date }}'
draft: true
title: '{{ replace .File.ContentBaseName "-" " " | title }}'
---

View File

@@ -0,0 +1,9 @@
---
title: "Home"
description: "Landing page for Ask Kenny B."
---
{{< bio img="/images/profile.png" alt="Kenny Bondelie" >}}
👋 Im Kenny Bondelie — finance leader turned hands-on IT and security architect.
I write about building reliable systems, both technical and organizational.
{{< /bio >}}

View File

@@ -0,0 +1,12 @@
---
date: '2025-11-03T16:47:38-08:00'
draft: false
title: 'About'
description: "Who I am and what Ask Kenny B is about."
---
Hi, Im Kenny. I build reliable, human-centered systems—nonprofit finance → homelab resilience → cloud + security.
This site is my public lab notebook: practical guides, reproducible setups, and leadership patterns that scale.
Let's go.

View File

@@ -0,0 +1,38 @@
---
title: "Project Log: Docker Dreams and YAML Nightmares"
date: 2025-11-05
description: "A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience."
tags: ["homelab", "docker", "networking", "humor"]
categories: ["DevOps"]
draft: false
---
> Sometimes the difference between a 'production-ready stack' and 'why is my NAS on fire?' is one missing space in a YAML file.
It started innocently enough:
a single `docker-compose.yml`, neat and tidy, humming along like a well-trained orchestra. Then I added *one* new service—my self-hosted note app—and everything fell apart.
### The Symptoms
- Containers refusing to start with no useful logs
- DNS loops that made my router question its purpose
- My wife asking, “Why is our TV buffering when you touch the server?”
### The Diagnosis
Turns out, I nested a volume mount under the wrong key.
YAML: 1 — Human: 0.
### The Fix
A humble indent.
Four spaces, to be precise.
Suddenly the world made sense again, DNS was stable, and my cat stopped judging me.
### Lessons Learned
1. **Version control everything**, even your test Compose files.
2. **Automate backups** before you “just try something real quick.”
3. **Celebrate small victories**—sometimes the win is just getting your network back online before dinner.
---
If you read this and thought, “Ive been there,” then welcome to the club.
Homelabs teach patience, humility, and the thrill of a perfectly clean `docker ps` output.
*Stay tuned for next weeks adventure: rebuilding my reverse proxy after a 301 loop ate my weekend.*

View File

@@ -0,0 +1,15 @@
---
title: "Hello, World — Why Ask Kenny B?"
date: 2025-11-02
description: "What this space is about: practical homelab builds, cloud security, and translating leadership into hands-on architecture."
tags: ["intro", "homelab", "project"]
categories: ["Meta"]
draft: false
---
Welcome! This blog will cover:
- Reproducible **homelab guides** (Proxmox, Docker, Authentik, reverse proxies).
- **Cloud blueprints** that scale from personal to org-grade.
- Transferable **leadership → architecture** lessons (risk, controls, finance).
Thanks for being here—lets build.

57
askkennyb/hugo.yaml Normal file
View File

@@ -0,0 +1,57 @@
baseURL: "https://askkennyb.com"
languageCode: "en-us"
title: "Ask KennyB"
theme: "PaperMod"
pagination:
pagerSize: 10
enableRobotsTXT: true
# Optional: nice blog slugs at /blog/...
permalinks:
posts: /blog/:slug/
taxonomies:
category: categories
tag: tags
params:
label:
icon: "images/logo_words.svg"
iconHeight: 75
text: " "
description: "Sharpening tech leadership through hands-on homelab builds, cloud, and security."
author: "Kenny Bondelie"
# UX features
ShowReadingTime: true
ShowShareButtons: false
ShowPostNavLinks: true
ShowBreadCrumbs: true
ShowCodeCopyButtons: true
ShowToc: true
# Home hero (PaperMod's homeInfo)
homeInfoParams:
Title: "Ask KennyB"
Content: "From nonprofit CFO → hands-on IT & security leader. Homelab, cloud, ops, and practical strategy."
# Theme palette
defaultTheme: auto # auto | dark | light
# Socials (fill in later)
socialIcons:
# Uncomment GitHub when ready
# - name: github
# url: "https://github.com/kbondelie"
- name: linkedin
url: "https://www.linkedin.com/in/kennethbondelie"
menu:
main:
- name: Posts
url: "/posts/"
weight: 1
- name: About
url: "/about/"
weight: 3

View File

@@ -0,0 +1,12 @@
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel="stylesheet">
<!-- Favicon -->
<link rel="icon" href="{{ "favicon.ico" | relURL }}" sizes="any">
<link rel="icon" type="image/png" sizes="32x32" href="{{ "favicon-32x32.png" | relURL }}">
<link rel="icon" type="image/png" sizes="16x16" href="{{ "favicon-16x16.png" | relURL }}">
<link rel="apple-touch-icon" href="{{ "apple-touch-icon.png" | relURL }}">
<link rel="manifest" href="{{ "site.webmanifest" | relURL }}">
<meta name="theme-color" content="#007a70">
<!-- Umami Stats -->
<script defer src="https://stats.askkennyb.com/script.js" data-website-id="9ff21094-6881-404e-a30e-534c23dde9f8"></script>

View File

@@ -0,0 +1,6 @@
<div class="bio-block">
<img src="{{ .Get "img" | default "/images/profile.png" }}" alt="{{ .Get "alt" | default "Profile Photo" }}" class="bio-photo">
<div class="bio-text">
{{ .Inner | markdownify }}
</div>
</div>

View File

@@ -0,0 +1,7 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>404 Page not found | Ask KennyB</title><meta name=keywords content><meta name=description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/404.html><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=https://askkennyb.com/404.html><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/404.html"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="404 Page not found"><meta property="og:description" content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="404 Page not found"><meta name=twitter:description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><div class=not-found>404</div></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1,7 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>About | Ask KennyB</title><meta name=keywords content><meta name=description content="Who I am and what Ask Kenny B is about."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/about/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/about/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/about/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/about/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="About"><meta property="og:description" content="Who I am and what Ask Kenny B is about."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="About"><meta name=twitter:description content="Who I am and what Ask Kenny B is about."><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"About","item":"https://askkennyb.com/about/"}]}</script></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span class=active>About</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://askkennyb.com/>Home</a></div><h1>About</h1><div class=post-description>Who I am and what Ask Kenny B is about.</div></header><div class=post-content><p>Hi, Im Kenny. I build reliable, human-centered systems—nonprofit finance → homelab resilience → cloud + security.</p><p>This site is my public lab notebook: practical guides, reproducible setups, and leadership patterns that scale.</p><p>Let&rsquo;s go.</p></div></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>About on Ask KennyB</title><link>https://askkennyb.com/about/</link><description>Recent content in About on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate/><atom:link href="https://askkennyb.com/about/index.xml" rel="self" type="application/rss+xml"/></channel></rss>

View File

@@ -0,0 +1 @@
<!doctype html><html lang=en-us><head><title>https://askkennyb.com/about/</title><link rel=canonical href=https://askkennyb.com/about/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://askkennyb.com/about/"></head></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,12 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>DevOps | Ask KennyB</title><meta name=keywords content><meta name=description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/categories/devops/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/categories/devops/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/categories/devops/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/categories/devops/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="DevOps"><meta property="og:description" content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="DevOps"><meta name=twitter:description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://askkennyb.com/>Home</a>&nbsp;»&nbsp;<a href=https://askkennyb.com/categories/>Categories</a></div><h1>DevOps</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Project Log: Docker Dreams and YAML Nightmares</h2></header><div class=entry-content><p>Sometimes the difference between a production-ready stack and why is my NAS on fire? is one missing space in a YAML file.
It started innocently enough:
a single docker-compose.yml, neat and tidy, humming along like a well-trained orchestra. Then I added one new service—my self-hosted note app—and everything fell apart.
The Symptoms Containers refusing to start with no useful logs DNS loops that made my router question its purpose My wife asking, “Why is our TV buffering when you touch the server?” The Diagnosis Turns out, I nested a volume mount under the wrong key.
YAML: 1 — Human: 0.
...</p></div><footer class=entry-footer><span title='2025-11-05 00:00:00 +0000 UTC'>November 5, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Project Log: Docker Dreams and YAML Nightmares" href=https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/></a></article></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>DevOps on Ask KennyB</title><link>https://askkennyb.com/categories/devops/</link><description>Recent content in DevOps on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Wed, 05 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://askkennyb.com/categories/devops/index.xml" rel="self" type="application/rss+xml"/><item><title>Project Log: Docker Dreams and YAML Nightmares</title><link>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</guid><description>A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience.</description></item></channel></rss>

View File

@@ -0,0 +1 @@
<!doctype html><html lang=en-us><head><title>https://askkennyb.com/categories/devops/</title><link rel=canonical href=https://askkennyb.com/categories/devops/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://askkennyb.com/categories/devops/"></head></html>

View File

@@ -0,0 +1,7 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Categories | Ask KennyB</title><meta name=keywords content><meta name=description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/categories/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/categories/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/categories/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/categories/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="Categories"><meta property="og:description" content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Categories"><meta name=twitter:description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><header class=page-header><h1>Categories</h1></header><ul class=terms-tags><li><a href=https://askkennyb.com/categories/devops/>DevOps <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://askkennyb.com/categories/meta/>Meta <sup><strong><sup>1</sup></strong></sup></a></li></ul></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Categories on Ask KennyB</title><link>https://askkennyb.com/categories/</link><description>Recent content in Categories on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Wed, 05 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://askkennyb.com/categories/index.xml" rel="self" type="application/rss+xml"/><item><title>DevOps</title><link>https://askkennyb.com/categories/devops/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/categories/devops/</guid><description/></item><item><title>Meta</title><link>https://askkennyb.com/categories/meta/</link><pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/categories/meta/</guid><description/></item></channel></rss>

View File

@@ -0,0 +1,8 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Meta | Ask KennyB</title><meta name=keywords content><meta name=description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/categories/meta/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/categories/meta/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/categories/meta/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/categories/meta/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="Meta"><meta property="og:description" content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Meta"><meta name=twitter:description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://askkennyb.com/>Home</a>&nbsp;»&nbsp;<a href=https://askkennyb.com/categories/>Categories</a></div><h1>Meta</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Hello, World — Why Ask Kenny B?</h2></header><div class=entry-content><p>Welcome! This blog will cover:
Reproducible homelab guides (Proxmox, Docker, Authentik, reverse proxies). Cloud blueprints that scale from personal to org-grade. Transferable leadership → architecture lessons (risk, controls, finance). Thanks for being here—lets build.</p></div><footer class=entry-footer><span title='2025-11-02 00:00:00 +0000 UTC'>November 2, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Hello, World — Why Ask Kenny B?" href=https://askkennyb.com/blog/hello-world-why-ask-kenny-b/></a></article></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Meta on Ask KennyB</title><link>https://askkennyb.com/categories/meta/</link><description>Recent content in Meta on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Sun, 02 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://askkennyb.com/categories/meta/index.xml" rel="self" type="application/rss+xml"/><item><title>Hello, World — Why Ask Kenny B?</title><link>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</link><pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</guid><description>What this space is about: practical homelab builds, cloud security, and translating leadership into hands-on architecture.</description></item></channel></rss>

View File

@@ -0,0 +1 @@
<!doctype html><html lang=en-us><head><title>https://askkennyb.com/categories/meta/</title><link rel=canonical href=https://askkennyb.com/categories/meta/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://askkennyb.com/categories/meta/"></head></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 KiB

View File

@@ -0,0 +1,13 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta name=generator content="Hugo 0.152.2"><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Ask KennyB</title><meta name=description content="Landing page for Ask Kenny B."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="Home"><meta property="og:description" content="Landing page for Ask Kenny B."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Home"><meta name=twitter:description content="Landing page for Ask Kenny B."><script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","name":"Ask KennyB","url":"https://askkennyb.com/","description":"Sharpening tech leadership through hands-on homelab builds, cloud, and security.","logo":"https://askkennyb.com/favicon.ico","sameAs":["https://www.linkedin.com/in/kennethbondelie"]}</script></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><div class=post-content><div class=bio-block><img src=/images/profile.png alt="Kenny Bondelie" class=bio-photo><div class=bio-text>👋 Im Kenny Bondelie — finance leader turned hands-on IT and security architect.<br>I write about building reliable systems, both technical and organizational.</div></div></div><article class="first-entry home-info"><header class=entry-header><h1>Ask KennyB</h1></header><div class=entry-content>From nonprofit CFO → hands-on IT & security leader. Homelab, cloud, ops, and practical strategy.</div><footer class=entry-footer><div class=social-icons><a href=https://www.linkedin.com/in/kennethbondelie target=_blank rel="noopener noreferrer me" title=Linkedin><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 016 6v7h-4v-7a2 2 0 00-2-2 2 2 0 00-2 2v7h-4v-7a6 6 0 016-6z"/><rect x="2" y="9" width="4" height="12"/><circle cx="4" cy="4" r="2"/></svg></a></div></footer></article><article class=post-entry><header class=entry-header><h2 class=entry-hint-parent>Project Log: Docker Dreams and YAML Nightmares</h2></header><div class=entry-content><p>Sometimes the difference between a production-ready stack and why is my NAS on fire? is one missing space in a YAML file.
It started innocently enough:
a single docker-compose.yml, neat and tidy, humming along like a well-trained orchestra. Then I added one new service—my self-hosted note app—and everything fell apart.
The Symptoms Containers refusing to start with no useful logs DNS loops that made my router question its purpose My wife asking, “Why is our TV buffering when you touch the server?” The Diagnosis Turns out, I nested a volume mount under the wrong key.
YAML: 1 — Human: 0.
...</p></div><footer class=entry-footer><span title='2025-11-05 00:00:00 +0000 UTC'>November 5, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Project Log: Docker Dreams and YAML Nightmares" href=https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/></a></article><article class=post-entry><header class=entry-header><h2 class=entry-hint-parent>Hello, World — Why Ask Kenny B?</h2></header><div class=entry-content><p>Welcome! This blog will cover:
Reproducible homelab guides (Proxmox, Docker, Authentik, reverse proxies). Cloud blueprints that scale from personal to org-grade. Transferable leadership → architecture lessons (risk, controls, finance). Thanks for being here—lets build.</p></div><footer class=entry-footer><span title='2025-11-02 00:00:00 +0000 UTC'>November 2, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Hello, World — Why Ask Kenny B?" href=https://askkennyb.com/blog/hello-world-why-ask-kenny-b/></a></article></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Home on Ask KennyB</title><link>https://askkennyb.com/</link><description>Recent content in Home on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Wed, 05 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://askkennyb.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Project Log: Docker Dreams and YAML Nightmares</title><link>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</guid><description>A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience.</description></item><item><title>Hello, World — Why Ask Kenny B?</title><link>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</link><pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</guid><description>What this space is about: practical homelab builds, cloud security, and translating leadership into hands-on architecture.</description></item></channel></rss>

View File

@@ -0,0 +1 @@
<!doctype html><html lang=en-us><head><title>https://askkennyb.com/</title><link rel=canonical href=https://askkennyb.com/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://askkennyb.com/"></head></html>

View File

@@ -0,0 +1,13 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Posts | Ask KennyB</title><meta name=keywords content><meta name=description content="Posts - Ask KennyB"><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/posts/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/posts/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/posts/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/posts/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="Posts"><meta property="og:description" content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Posts"><meta name=twitter:description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Posts","item":"https://askkennyb.com/posts/"}]}</script></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span class=active>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://askkennyb.com/>Home</a></div><h1>Posts</h1></header><article class=post-entry><header class=entry-header><h2 class=entry-hint-parent>Project Log: Docker Dreams and YAML Nightmares</h2></header><div class=entry-content><p>Sometimes the difference between a production-ready stack and why is my NAS on fire? is one missing space in a YAML file.
It started innocently enough:
a single docker-compose.yml, neat and tidy, humming along like a well-trained orchestra. Then I added one new service—my self-hosted note app—and everything fell apart.
The Symptoms Containers refusing to start with no useful logs DNS loops that made my router question its purpose My wife asking, “Why is our TV buffering when you touch the server?” The Diagnosis Turns out, I nested a volume mount under the wrong key.
YAML: 1 — Human: 0.
...</p></div><footer class=entry-footer><span title='2025-11-05 00:00:00 +0000 UTC'>November 5, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Project Log: Docker Dreams and YAML Nightmares" href=https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/></a></article><article class=post-entry><header class=entry-header><h2 class=entry-hint-parent>Hello, World — Why Ask Kenny B?</h2></header><div class=entry-content><p>Welcome! This blog will cover:
Reproducible homelab guides (Proxmox, Docker, Authentik, reverse proxies). Cloud blueprints that scale from personal to org-grade. Transferable leadership → architecture lessons (risk, controls, finance). Thanks for being here—lets build.</p></div><footer class=entry-footer><span title='2025-11-02 00:00:00 +0000 UTC'>November 2, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Hello, World — Why Ask Kenny B?" href=https://askkennyb.com/blog/hello-world-why-ask-kenny-b/></a></article></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Ask KennyB</title><link>https://askkennyb.com/posts/</link><description>Recent content in Posts on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Wed, 05 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://askkennyb.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Project Log: Docker Dreams and YAML Nightmares</title><link>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</guid><description>A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience.</description></item><item><title>Hello, World — Why Ask Kenny B?</title><link>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</link><pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</guid><description>What this space is about: practical homelab builds, cloud security, and translating leadership into hands-on architecture.</description></item></channel></rss>

View File

@@ -0,0 +1 @@
<!doctype html><html lang=en-us><head><title>https://askkennyb.com/posts/</title><link rel=canonical href=https://askkennyb.com/posts/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://askkennyb.com/posts/"></head></html>

View File

@@ -0,0 +1,3 @@
User-agent: *
Disallow:
Sitemap: https://askkennyb.com/sitemap.xml

View File

@@ -0,0 +1 @@
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://askkennyb.com/categories/</loc><lastmod>2025-11-05T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/categories/devops/</loc><lastmod>2025-11-05T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/tags/docker/</loc><lastmod>2025-11-05T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/</loc><lastmod>2025-11-05T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/tags/homelab/</loc><lastmod>2025-11-05T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/tags/humor/</loc><lastmod>2025-11-05T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/tags/networking/</loc><lastmod>2025-11-05T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/posts/</loc><lastmod>2025-11-05T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</loc><lastmod>2025-11-05T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/tags/</loc><lastmod>2025-11-05T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/about/</loc><lastmod>2025-11-03T16:47:38-08:00</lastmod></url><url><loc>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</loc><lastmod>2025-11-02T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/tags/intro/</loc><lastmod>2025-11-02T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/categories/meta/</loc><lastmod>2025-11-02T00:00:00+00:00</lastmod></url><url><loc>https://askkennyb.com/tags/project/</loc><lastmod>2025-11-02T00:00:00+00:00</lastmod></url></urlset>

View File

@@ -0,0 +1,12 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Docker | Ask KennyB</title><meta name=keywords content><meta name=description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/tags/docker/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/tags/docker/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/tags/docker/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/tags/docker/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="Docker"><meta property="og:description" content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Docker"><meta name=twitter:description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://askkennyb.com/>Home</a>&nbsp;»&nbsp;<a href=https://askkennyb.com/tags/>Tags</a></div><h1>Docker</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Project Log: Docker Dreams and YAML Nightmares</h2></header><div class=entry-content><p>Sometimes the difference between a production-ready stack and why is my NAS on fire? is one missing space in a YAML file.
It started innocently enough:
a single docker-compose.yml, neat and tidy, humming along like a well-trained orchestra. Then I added one new service—my self-hosted note app—and everything fell apart.
The Symptoms Containers refusing to start with no useful logs DNS loops that made my router question its purpose My wife asking, “Why is our TV buffering when you touch the server?” The Diagnosis Turns out, I nested a volume mount under the wrong key.
YAML: 1 — Human: 0.
...</p></div><footer class=entry-footer><span title='2025-11-05 00:00:00 +0000 UTC'>November 5, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Project Log: Docker Dreams and YAML Nightmares" href=https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/></a></article></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Docker on Ask KennyB</title><link>https://askkennyb.com/tags/docker/</link><description>Recent content in Docker on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Wed, 05 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://askkennyb.com/tags/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>Project Log: Docker Dreams and YAML Nightmares</title><link>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</guid><description>A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience.</description></item></channel></rss>

View File

@@ -0,0 +1 @@
<!doctype html><html lang=en-us><head><title>https://askkennyb.com/tags/docker/</title><link rel=canonical href=https://askkennyb.com/tags/docker/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://askkennyb.com/tags/docker/"></head></html>

View File

@@ -0,0 +1,13 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Homelab | Ask KennyB</title><meta name=keywords content><meta name=description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/tags/homelab/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/tags/homelab/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/tags/homelab/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/tags/homelab/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="Homelab"><meta property="og:description" content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Homelab"><meta name=twitter:description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://askkennyb.com/>Home</a>&nbsp;»&nbsp;<a href=https://askkennyb.com/tags/>Tags</a></div><h1>Homelab</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Project Log: Docker Dreams and YAML Nightmares</h2></header><div class=entry-content><p>Sometimes the difference between a production-ready stack and why is my NAS on fire? is one missing space in a YAML file.
It started innocently enough:
a single docker-compose.yml, neat and tidy, humming along like a well-trained orchestra. Then I added one new service—my self-hosted note app—and everything fell apart.
The Symptoms Containers refusing to start with no useful logs DNS loops that made my router question its purpose My wife asking, “Why is our TV buffering when you touch the server?” The Diagnosis Turns out, I nested a volume mount under the wrong key.
YAML: 1 — Human: 0.
...</p></div><footer class=entry-footer><span title='2025-11-05 00:00:00 +0000 UTC'>November 5, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Project Log: Docker Dreams and YAML Nightmares" href=https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/></a></article><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Hello, World — Why Ask Kenny B?</h2></header><div class=entry-content><p>Welcome! This blog will cover:
Reproducible homelab guides (Proxmox, Docker, Authentik, reverse proxies). Cloud blueprints that scale from personal to org-grade. Transferable leadership → architecture lessons (risk, controls, finance). Thanks for being here—lets build.</p></div><footer class=entry-footer><span title='2025-11-02 00:00:00 +0000 UTC'>November 2, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Hello, World — Why Ask Kenny B?" href=https://askkennyb.com/blog/hello-world-why-ask-kenny-b/></a></article></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Homelab on Ask KennyB</title><link>https://askkennyb.com/tags/homelab/</link><description>Recent content in Homelab on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Wed, 05 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://askkennyb.com/tags/homelab/index.xml" rel="self" type="application/rss+xml"/><item><title>Project Log: Docker Dreams and YAML Nightmares</title><link>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</guid><description>A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience.</description></item><item><title>Hello, World — Why Ask Kenny B?</title><link>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</link><pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</guid><description>What this space is about: practical homelab builds, cloud security, and translating leadership into hands-on architecture.</description></item></channel></rss>

View File

@@ -0,0 +1 @@
<!doctype html><html lang=en-us><head><title>https://askkennyb.com/tags/homelab/</title><link rel=canonical href=https://askkennyb.com/tags/homelab/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://askkennyb.com/tags/homelab/"></head></html>

View File

@@ -0,0 +1,12 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Humor | Ask KennyB</title><meta name=keywords content><meta name=description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/tags/humor/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/tags/humor/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/tags/humor/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/tags/humor/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="Humor"><meta property="og:description" content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Humor"><meta name=twitter:description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://askkennyb.com/>Home</a>&nbsp;»&nbsp;<a href=https://askkennyb.com/tags/>Tags</a></div><h1>Humor</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Project Log: Docker Dreams and YAML Nightmares</h2></header><div class=entry-content><p>Sometimes the difference between a production-ready stack and why is my NAS on fire? is one missing space in a YAML file.
It started innocently enough:
a single docker-compose.yml, neat and tidy, humming along like a well-trained orchestra. Then I added one new service—my self-hosted note app—and everything fell apart.
The Symptoms Containers refusing to start with no useful logs DNS loops that made my router question its purpose My wife asking, “Why is our TV buffering when you touch the server?” The Diagnosis Turns out, I nested a volume mount under the wrong key.
YAML: 1 — Human: 0.
...</p></div><footer class=entry-footer><span title='2025-11-05 00:00:00 +0000 UTC'>November 5, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Project Log: Docker Dreams and YAML Nightmares" href=https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/></a></article></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Humor on Ask KennyB</title><link>https://askkennyb.com/tags/humor/</link><description>Recent content in Humor on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Wed, 05 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://askkennyb.com/tags/humor/index.xml" rel="self" type="application/rss+xml"/><item><title>Project Log: Docker Dreams and YAML Nightmares</title><link>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</guid><description>A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience.</description></item></channel></rss>

View File

@@ -0,0 +1 @@
<!doctype html><html lang=en-us><head><title>https://askkennyb.com/tags/humor/</title><link rel=canonical href=https://askkennyb.com/tags/humor/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://askkennyb.com/tags/humor/"></head></html>

View File

@@ -0,0 +1,7 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Tags | Ask KennyB</title><meta name=keywords content><meta name=description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/tags/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/tags/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/tags/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/tags/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="Tags"><meta property="og:description" content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Tags"><meta name=twitter:description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><header class=page-header><h1>Tags</h1></header><ul class=terms-tags><li><a href=https://askkennyb.com/tags/docker/>docker <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://askkennyb.com/tags/homelab/>homelab <sup><strong><sup>2</sup></strong></sup></a></li><li><a href=https://askkennyb.com/tags/humor/>humor <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://askkennyb.com/tags/intro/>intro <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://askkennyb.com/tags/networking/>networking <sup><strong><sup>1</sup></strong></sup></a></li><li><a href=https://askkennyb.com/tags/project/>project <sup><strong><sup>1</sup></strong></sup></a></li></ul></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Tags on Ask KennyB</title><link>https://askkennyb.com/tags/</link><description>Recent content in Tags on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Wed, 05 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://askkennyb.com/tags/index.xml" rel="self" type="application/rss+xml"/><item><title>Docker</title><link>https://askkennyb.com/tags/docker/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/tags/docker/</guid><description/></item><item><title>Homelab</title><link>https://askkennyb.com/tags/homelab/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/tags/homelab/</guid><description/></item><item><title>Humor</title><link>https://askkennyb.com/tags/humor/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/tags/humor/</guid><description/></item><item><title>Networking</title><link>https://askkennyb.com/tags/networking/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/tags/networking/</guid><description/></item><item><title>Intro</title><link>https://askkennyb.com/tags/intro/</link><pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/tags/intro/</guid><description/></item><item><title>Project</title><link>https://askkennyb.com/tags/project/</link><pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/tags/project/</guid><description/></item></channel></rss>

View File

@@ -0,0 +1,8 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Intro | Ask KennyB</title><meta name=keywords content><meta name=description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/tags/intro/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/tags/intro/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/tags/intro/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/tags/intro/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="Intro"><meta property="og:description" content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Intro"><meta name=twitter:description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://askkennyb.com/>Home</a>&nbsp;»&nbsp;<a href=https://askkennyb.com/tags/>Tags</a></div><h1>Intro</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Hello, World — Why Ask Kenny B?</h2></header><div class=entry-content><p>Welcome! This blog will cover:
Reproducible homelab guides (Proxmox, Docker, Authentik, reverse proxies). Cloud blueprints that scale from personal to org-grade. Transferable leadership → architecture lessons (risk, controls, finance). Thanks for being here—lets build.</p></div><footer class=entry-footer><span title='2025-11-02 00:00:00 +0000 UTC'>November 2, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Hello, World — Why Ask Kenny B?" href=https://askkennyb.com/blog/hello-world-why-ask-kenny-b/></a></article></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Intro on Ask KennyB</title><link>https://askkennyb.com/tags/intro/</link><description>Recent content in Intro on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Sun, 02 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://askkennyb.com/tags/intro/index.xml" rel="self" type="application/rss+xml"/><item><title>Hello, World — Why Ask Kenny B?</title><link>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</link><pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</guid><description>What this space is about: practical homelab builds, cloud security, and translating leadership into hands-on architecture.</description></item></channel></rss>

View File

@@ -0,0 +1 @@
<!doctype html><html lang=en-us><head><title>https://askkennyb.com/tags/intro/</title><link rel=canonical href=https://askkennyb.com/tags/intro/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://askkennyb.com/tags/intro/"></head></html>

View File

@@ -0,0 +1,12 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Networking | Ask KennyB</title><meta name=keywords content><meta name=description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/tags/networking/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/tags/networking/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/tags/networking/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/tags/networking/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="Networking"><meta property="og:description" content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Networking"><meta name=twitter:description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://askkennyb.com/>Home</a>&nbsp;»&nbsp;<a href=https://askkennyb.com/tags/>Tags</a></div><h1>Networking</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Project Log: Docker Dreams and YAML Nightmares</h2></header><div class=entry-content><p>Sometimes the difference between a production-ready stack and why is my NAS on fire? is one missing space in a YAML file.
It started innocently enough:
a single docker-compose.yml, neat and tidy, humming along like a well-trained orchestra. Then I added one new service—my self-hosted note app—and everything fell apart.
The Symptoms Containers refusing to start with no useful logs DNS loops that made my router question its purpose My wife asking, “Why is our TV buffering when you touch the server?” The Diagnosis Turns out, I nested a volume mount under the wrong key.
YAML: 1 — Human: 0.
...</p></div><footer class=entry-footer><span title='2025-11-05 00:00:00 +0000 UTC'>November 5, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Project Log: Docker Dreams and YAML Nightmares" href=https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/></a></article></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Networking on Ask KennyB</title><link>https://askkennyb.com/tags/networking/</link><description>Recent content in Networking on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Wed, 05 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://askkennyb.com/tags/networking/index.xml" rel="self" type="application/rss+xml"/><item><title>Project Log: Docker Dreams and YAML Nightmares</title><link>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/project-log-docker-dreams-and-yaml-nightmares/</guid><description>A totally serious update on my local lab, featuring unexpected container drama, a misbehaving reverse proxy, and lessons in patience.</description></item></channel></rss>

View File

@@ -0,0 +1 @@
<!doctype html><html lang=en-us><head><title>https://askkennyb.com/tags/networking/</title><link rel=canonical href=https://askkennyb.com/tags/networking/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://askkennyb.com/tags/networking/"></head></html>

View File

@@ -0,0 +1,8 @@
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Project | Ask KennyB</title><meta name=keywords content><meta name=description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta name=author content="Kenny Bondelie"><link rel=canonical href=https://askkennyb.com/tags/project/><link crossorigin=anonymous href=/assets/css/stylesheet.d1be478e0ac21456f47a24e92e3c75a5fb7aac2ff5827f9447dbc93b4dd76b50.css integrity="sha256-0b5HjgrCFFb0eiTpLjx1pft6rC/1gn+UR9vJO03Xa1A=" rel="preload stylesheet" as=style><link rel=icon href=https://askkennyb.com/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://askkennyb.com/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://askkennyb.com/favicon-32x32.png><link rel=apple-touch-icon href=https://askkennyb.com/apple-touch-icon.png><link rel=mask-icon href=https://askkennyb.com/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://askkennyb.com/tags/project/index.xml title=rss><link rel=alternate hreflang=en href=https://askkennyb.com/tags/project/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}@media(prefers-color-scheme:light){.list::-webkit-scrollbar-thumb{border-color:var(--code-bg)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Source+Serif+4:opsz,wght@8..60,500..700&display=swap" rel=stylesheet><link rel=icon href=/favicon.ico sizes=any><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=apple-touch-icon href=/apple-touch-icon.png><link rel=manifest href=/site.webmanifest><meta name=theme-color content="#007a70"><script defer src=https://stats.askkennyb.com/script.js data-website-id=9ff21094-6881-404e-a30e-534c23dde9f8></script><meta property="og:url" content="https://askkennyb.com/tags/project/"><meta property="og:site_name" content="Ask KennyB"><meta property="og:title" content="Project"><meta property="og:description" content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."><meta property="og:locale" content="en-us"><meta property="og:type" content="website"><meta name=twitter:card content="summary"><meta name=twitter:title content="Project"><meta name=twitter:description content="Sharpening tech leadership through hands-on homelab builds, cloud, and security."></head><body class=list id=top><header class=header><nav class=nav><div class=logo><a href=https://askkennyb.com/ accesskey=h title=" (Alt + H)"><img src=https://askkennyb.com/images/logo_words.svg alt aria-label=logo height=75></a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=https://askkennyb.com/posts/ title=Posts><span>Posts</span></a></li><li><a href=https://askkennyb.com/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><header class=page-header><div class=breadcrumbs><a href=https://askkennyb.com/>Home</a>&nbsp;»&nbsp;<a href=https://askkennyb.com/tags/>Tags</a></div><h1>Project</h1></header><article class="post-entry tag-entry"><header class=entry-header><h2 class=entry-hint-parent>Hello, World — Why Ask Kenny B?</h2></header><div class=entry-content><p>Welcome! This blog will cover:
Reproducible homelab guides (Proxmox, Docker, Authentik, reverse proxies). Cloud blueprints that scale from personal to org-grade. Transferable leadership → architecture lessons (risk, controls, finance). Thanks for being here—lets build.</p></div><footer class=entry-footer><span title='2025-11-02 00:00:00 +0000 UTC'>November 2, 2025</span>&nbsp;·&nbsp;<span>1 min</span>&nbsp;·&nbsp;<span>Kenny Bondelie</span></footer><a class=entry-link aria-label="post link to Hello, World — Why Ask Kenny B?" href=https://askkennyb.com/blog/hello-world-why-ask-kenny-b/></a></article></main><footer class=footer><span>&copy; 2025 <a href=https://askkennyb.com/>Ask KennyB</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentColor"><path d="M12 6H0l6-6z"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Project on Ask KennyB</title><link>https://askkennyb.com/tags/project/</link><description>Recent content in Project on Ask KennyB</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Sun, 02 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://askkennyb.com/tags/project/index.xml" rel="self" type="application/rss+xml"/><item><title>Hello, World — Why Ask Kenny B?</title><link>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</link><pubDate>Sun, 02 Nov 2025 00:00:00 +0000</pubDate><guid>https://askkennyb.com/blog/hello-world-why-ask-kenny-b/</guid><description>What this space is about: practical homelab builds, cloud security, and translating leadership into hands-on architecture.</description></item></channel></rss>

View File

@@ -0,0 +1 @@
<!doctype html><html lang=en-us><head><title>https://askkennyb.com/tags/project/</title><link rel=canonical href=https://askkennyb.com/tags/project/><meta charset=utf-8><meta http-equiv=refresh content="0; url=https://askkennyb.com/tags/project/"></head></html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 KiB

View File

@@ -0,0 +1 @@
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}

View File

@@ -0,0 +1,112 @@
name: Bug Report 🐞
description: Create a report to help us improve
title: "[Bug]: "
labels: ["bug", "triage"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report :)
- Kindly **DO NOT** ask for instructions.
- Use [Discussions](https://github.com/adityatelange/hugo-PaperMod/discussions) section if you have a query or doubts or any other relevant question.
- You may join [Discord community](https://discord.gg/ahpmTvhVmp) to interact with fellow contributors and users
- Read project's [Wiki](https://github.com/adityatelange/hugo-PaperMod/wiki) for detailed documentation.
- Read project's [FAQs](https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs) section for Frequently asked questions.
- Search for previous [Issues](https://github.com/adityatelange/hugo-PaperMod/issues)/[Pull Requests](https://github.com/adityatelange/hugo-PaperMod/pulls) if this issue is already reported or fix has been created.
- type: textarea
id: what_happened
attributes:
label: What happened?
description: Also tell us, what did you expect to happen?
placeholder: A bug happened! Here are the screenshots.. Tell us what you see!
validations:
required: true
- type: textarea
id: steps_to_reproduce
attributes:
label: Steps to reproduce
description: How to reproduce this issue. Here are the steps...
placeholder: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required: true
- type: dropdown
id: hugo_version
attributes:
label: Hugo Version
description: What version of Hugo are you running?
options:
- Hugo >= 0.146.0 (Recommended - Minimum version required for PaperMod)
- Hugo < 0.146.0 (Incompatible - Not recommended to build PaperMod on lower versions)
validations:
required: true
- type: input
id: papermod_version
attributes:
label: PaperMod Version
description: What version of PaperMod are you running?
placeholder: |
PaperMod v7.0 or
Branch master or
Commit-id: 3f50861a0ced88f9b614a43662edeb4c0bc45da8
validations:
required: true
- type: dropdown
id: browser_type
attributes:
label: What kind of devices are you seeing the problem on?
multiple: true
options:
- Mobile
- Desktop
validations:
required: false
- type: dropdown
id: browsers
attributes:
label: What browsers are you seeing the problem on?
multiple: true
options:
- Firefox
- Chrome
- Safari
- Microsoft Edge
validations:
required: false
- type: input
id: browser_version
attributes:
label: Browser Version
description: Please add browser version or enter user agent string (navigator.userAgent)
placeholder: ex. Google Chrome 86.0
validations:
required: false
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
render: shell
validations:
required: true
- type: input
id: repo_url
attributes:
label: Repository/Source Code link where this issue can be reproduced
description: Please add url of the repository where this issue can be reproduced
placeholder: https://github.com/<username>/<repo name>
validations:
required: false
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/adityatelange/hugo-PaperMod?tab=coc-ov-file#readme).
options:
- label: I agree to follow this project's Code of Conduct
required: true
validations:
required: true

View File

@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: PaperMod Discussions
url: https://github.com/adityatelange/hugo-PaperMod/discussions
about: Please ask and answer questions/doubts here, DO NOT open an issue for questions.

View File

@@ -0,0 +1,32 @@
name: Enhancement 🚀
description: Propose a new feature or change for enhancing the experience.
title: "[Enhancement]: "
labels: ["enhancement", "triage"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this enhancement form :)
- Use [Discussions](https://github.com/adityatelange/hugo-PaperMod/discussions) section if you have a query or doubts or any other relevant question.
- You may join [Discord community](https://discord.gg/ahpmTvhVmp) to interact with fellow contributors and users
- Read project's [Wiki](https://github.com/adityatelange/hugo-PaperMod/wiki) for detailed documentation.
- Read project's [FAQs](https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs) section for Frequently asked questions.
- Search for previous [Issues](https://github.com/adityatelange/hugo-PaperMod/issues)/[Pull Requests](https://github.com/adityatelange/hugo-PaperMod/pulls) if this issue is already reported or fix has been created.
- type: textarea
id: what_happened
attributes:
label: What you'd like to propose?
description:
placeholder:
validations:
required: true
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/adityatelange/hugo-PaperMod?tab=coc-ov-file#readme).
options:
- label: I agree to follow this project's Code of Conduct
required: true
validations:
required: true

View File

@@ -0,0 +1,44 @@
<!--
## READ BEFORE OPENING A PR
Thank you for contributing to hugo-PaperMod!
Please fill out the following questions to make it easier for us to review your
changes. You do not need to check all the boxes below.
**NOTE**: PaperMod does not have any external dependencies fetched from 3rd party
CDN servers. However we do have custom Head/Footer extender templates which you can use
to add those to your website.
https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#custom-head--footer
-->
**What does this PR change? What problem does it solve?**
<!--
Describe the changes and their purpose here, as detailed as and if needed.
Please do not add 2 unrelated changes in a single PR as it is difficult to track/revert those in future.
-->
**Was the change discussed in an issue or in the Discussions before?**
<!--
Link issues and relevant Discussions posts here.
If this PR resolves an issue on GitHub, use "Closes #1234" so that the issue
is closed automatically when this PR is merged.
-->
## PR Checklist
- [ ] This change adds/updates translations and I have used the [template present here](https://github.com/adityatelange/hugo-PaperMod/wiki/Translations#want-to-add-your-language-).
- [ ] I have enabled [maintainer edits for this PR](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork).
- [ ] I have verified that the code works as described/as intended.
- [ ] This change adds a Social Icon which has a permissive license to use it.
- [ ] This change **does not** include any CDN resources/links.
- [ ] This change **does not** include any unrelated scripts such as bash and python scripts.
- [ ] This change updates the overridden internal templates from HUGO's repository.

View File

@@ -0,0 +1,77 @@
name: Deploy Hugo PaperMod Demo to Pages
on:
push:
paths-ignore:
- "images/**"
- "LICENSE"
- "README.md"
branches:
- master
- exampleSite
workflow_dispatch:
# manual run
inputs:
hugoVersion:
description: "Hugo Version"
required: false
default: "0.146.0"
# Allow one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: true
# Default to bash
defaults:
run:
shell: bash
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
jobs:
# Build job
build:
runs-on: ubuntu-latest
env:
HUGO_VERSION: ${{ github.event.inputs.hugoVersion || '0.146.0' }}
steps:
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-amd64.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Checkout
uses: actions/checkout@v4
with:
ref: exampleSite
- name: Setup Pages
id: pages
uses: actions/configure-pages@v5
- name: Get Theme
run: git submodule update --init --recursive
- name: Update theme to Latest commit
run: git submodule update --remote --merge
- name: Build with Hugo
run: |
hugo \
--buildDrafts --gc \
--baseURL ${{ steps.pages.outputs.base_url }}
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./public
# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

View File

@@ -0,0 +1,22 @@
MIT License
Copyright (c) 2020 nanxiaobei and adityatelange
Copyright (c) 2021-2025 adityatelange
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,106 @@
<h1 align=center>Hugo PaperMod | <a href="https://adityatelange.github.io/hugo-PaperMod/" rel="nofollow">Demo</a></h1>
<h4 align=center>☄️ Fast | ☁️ Fluent | 🌙 Smooth | 📱 Responsive</h4>
<br>
> Hugo PaperMod is a theme based on [hugo-paper](https://github.com/nanxiaobei/hugo-paper/tree/4330c8b12aa48bfdecbcad6ad66145f679a430b3).<br>
> The goal of this project is to add more features and customization to the og theme.
**Documentation** can be found here: [**📚 Wiki**](https://github.com/adityatelange/hugo-PaperMod/wiki)
**ExampleSite** can be found here: [**exampleSite**](https://github.com/adityatelange/hugo-PaperMod/tree/exampleSite). Demo is built up with [exampleSite](https://github.com/adityatelange/hugo-PaperMod/tree/exampleSite) as source.
[![hugo-papermod](https://img.shields.io/badge/Hugo--Themes-@PaperMod-blue)](https://themes.gohugo.io/themes/hugo-papermod/)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=>=v0.146.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.146.0)
[![Discord](https://img.shields.io/discord/971046860317921340?label=Discord&logo=discord)](https://discord.gg/ahpmTvhVmp)
[![GitHub](https://img.shields.io/github/license/adityatelange/hugo-PaperMod)](https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE)
![code-size](https://img.shields.io/github/languages/code-size/adityatelange/hugo-PaperMod)
[![X (formerly Twitter) URL](https://img.shields.io/badge/-Share%20on%20X-gray?style=flat&logo=x)](https://x.com/intent/tweet/?text=Checkout%20Hugo%20PaperMod%20%E2%9C%A8%0AA%20fast,%20clean,%20responsive%20Hugo%20theme.&url=https://github.com/adityatelange/hugo-PaperMod&hashtags=Hugo,PaperMod)
---
<p align="center">
<kbd><img src="https://user-images.githubusercontent.com/21258296/114303440-bfc0ae80-9aeb-11eb-8cfa-48a4bb385a6d.png" alt="Mockup image" title="Mockup"/></kbd>
</p>
---
## Features/Mods 💥
- Uses Hugo's asset generator with pipelining, fingerprinting, bundling and minification by default.
- 3 Modes:
- [Regular Mode.](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#regular-mode-default-mode)
- [Home-Info Mode.](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#home-info-mode)
- [Profile Mode.](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#profile-mode)
- Table of Content Generation (newer implementation).
- Archive of posts.
- Social Icons (home-info and profile-mode).
- Social-Media Share buttons on posts.
- Menu location indicator.
- Multilingual support. (with language selector).
- Taxonomies.
- Cover image for each post (with Responsive image support).
- Light/Dark theme (automatic theme switch a/c to browser theme and theme-switch button).
- SEO Friendly.
- Multiple Author support.
- Search Page with Fuse.js
- Other Posts suggestion below a post
- Breadcrumb Navigation.
- Code Block Copy buttons.
- Hugo's Chroma syntax highlighter.
- No webpack, nodejs and other dependencies are required to edit the theme.
Read Wiki For More Details => **[PaperMod - Features](https://github.com/adityatelange/hugo-PaperMod/wiki/Features)**
---
## Install/Update 📥
Read Wiki For More Details => **[PaperMod - Installation](https://github.com/adityatelange/hugo-PaperMod/wiki/Installation)**
---
## FAQs / How To's Guide 🙋
Read Wiki For More Details => **[PaperMod-FAQs](https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs)**
---
## Social-Icons/Share-Icons 🖼️
Read Wiki For More Details => **[PaperMod-Icons](https://github.com/adityatelange/hugo-PaperMod/wiki/Icons)**
---
## Release Changelog 📃
Release ChangeLog has info about stuff added: **[Releases](https://github.com/adityatelange/hugo-PaperMod/releases)**
---
## [Pagespeed Insights (100% ?)](https://pagespeed.web.dev/report?url=https://adityatelange.github.io/hugo-PaperMod/) 👀
---
## Support 🫶
- Star 🌟 this repository.
- Help spread the word about PaperMod by sharing it on social media and recommending it to your friends. 🗣️
- You can also sponsor 🏅 on [Github Sponsors](https://github.com/sponsors/adityatelange) / [Ko-Fi](https://ko-fi.com/adityatelange).
---
## Special Thanks 🌟
- [**Highlight.js**](https://github.com/highlightjs/highlight.js)
- [**Fuse.js**](https://github.com/krisk/fuse)
- [**Feather Icons**](https://github.com/feathericons/feather)
- [**Simple Icons**](https://github.com/simple-icons/simple-icons)
- **All Contributors and Supporters**
---
## Stargazers over time 📈
[![Stargazers over time](https://starchart.cc/adityatelange/hugo-PaperMod.svg?background=%23ffffff00&axis=%23858585&line=%236b63ff)](https://starchart.cc/adityatelange/hugo-PaperMod)

View File

@@ -0,0 +1,11 @@
.not-found {
position: absolute;
left: 0;
right: 0;
display: flex;
align-items: center;
justify-content: center;
height: 80%;
font-size: 160px;
font-weight: 700;
}

View File

@@ -0,0 +1,44 @@
.archive-posts {
width: 100%;
font-size: 16px;
}
.archive-year {
margin-top: 40px;
}
.archive-year:not(:last-of-type) {
border-bottom: 2px solid var(--border);
}
.archive-month {
display: flex;
align-items: flex-start;
padding: 10px 0;
}
.archive-month-header {
margin: 25px 0;
width: 200px;
}
.archive-month:not(:last-of-type) {
border-bottom: 1px solid var(--border);
}
.archive-entry {
position: relative;
padding: 5px;
margin: 10px 0;
}
.archive-entry-title {
margin: 5px 0;
font-weight: 400;
}
.archive-count,
.archive-meta {
color: var(--secondary);
font-size: 14px;
}

View File

@@ -0,0 +1,60 @@
.footer,
.top-link {
font-size: 12px;
color: var(--secondary);
}
.footer {
max-width: calc(var(--main-width) + var(--gap) * 2);
margin: auto;
padding: calc((var(--footer-height) - var(--gap)) / 2) var(--gap);
text-align: center;
line-height: 24px;
}
.footer span {
margin-inline-start: 1px;
margin-inline-end: 1px;
}
.footer span:last-child {
white-space: nowrap;
}
.footer a {
color: inherit;
border-bottom: 1px solid var(--secondary);
}
.footer a:hover {
border-bottom: 1px solid var(--primary);
}
.top-link {
visibility: hidden;
position: fixed;
bottom: 60px;
right: 30px;
z-index: 99;
background: var(--tertiary);
width: 42px;
height: 42px;
padding: 12px;
border-radius: 64px;
transition: visibility 0.5s, opacity 0.8s linear;
}
.top-link,
.top-link svg {
filter: drop-shadow(0px 0px 0px var(--theme));
}
.footer a:hover,
.top-link:hover {
color: var(--primary);
}
.top-link:focus,
#theme-toggle:focus {
outline: 0;
}

View File

@@ -0,0 +1,92 @@
.nav {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
max-width: calc(var(--nav-width) + var(--gap) * 2);
margin-inline-start: auto;
margin-inline-end: auto;
line-height: var(--header-height);
}
.nav a {
display: block;
}
.logo,
#menu {
display: flex;
margin: auto var(--gap);
}
.logo {
flex-wrap: inherit;
}
.logo a {
font-size: 24px;
font-weight: 700;
}
.logo a img, .logo a svg {
display: inline;
vertical-align: middle;
pointer-events: none;
transform: translate(0, -10%);
border-radius: 6px;
margin-inline-end: 8px;
}
button#theme-toggle {
font-size: 26px;
margin: auto 4px;
}
[data-theme="dark"] #moon {
display: none;
}
[data-theme="light"] #sun {
display: none;
}
#menu {
list-style: none;
word-break: keep-all;
overflow-x: auto;
white-space: nowrap;
}
#menu li + li {
margin-inline-start: var(--gap);
}
#menu a {
font-size: 16px;
}
#menu .active {
font-weight: 500;
border-bottom: 2px solid currentColor;
}
.lang-switch li,
.lang-switch ul,
.logo-switches {
display: inline-flex;
margin: auto 4px;
}
.lang-switch {
display: flex;
flex-wrap: inherit;
}
.lang-switch a {
margin: auto 3px;
font-size: 16px;
font-weight: 500;
}
.logo-switches {
flex-wrap: inherit;
}

View File

@@ -0,0 +1,66 @@
.main {
position: relative;
min-height: calc(100vh - var(--header-height) - var(--footer-height));
max-width: calc(var(--main-width) + var(--gap) * 2);
margin: auto;
padding: var(--gap);
}
.page-header h1 {
font-size: 40px;
}
.pagination {
display: flex;
}
.pagination a {
color: var(--theme);
font-size: 13px;
line-height: 36px;
background: var(--primary);
border-radius: calc(36px / 2);
padding: 0 16px;
}
.pagination .next {
margin-inline-start: auto;
}
.social-icons a {
display: inline-flex;
padding: 10px;
}
.social-icons a svg {
height: 26px;
width: 26px;
}
code {
direction: ltr;
}
div.highlight,
pre {
position: relative;
}
.copy-code {
display: none;
position: absolute;
top: 4px;
right: 4px;
color: rgba(255, 255, 255, 0.8);
background: rgba(78, 78, 78, 0.8);
border-radius: var(--radius);
padding: 0 5px;
font-size: 14px;
user-select: none;
}
div.highlight:hover .copy-code,
pre:hover .copy-code {
display: block;
}

View File

@@ -0,0 +1,106 @@
.first-entry {
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
min-height: 320px;
margin: var(--gap) 0 calc(var(--gap) * 2) 0;
}
.first-entry .entry-header {
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
}
.first-entry .entry-header h1 {
font-size: 34px;
line-height: 1.3;
}
.first-entry .entry-content {
margin: 14px 0;
font-size: 16px;
-webkit-line-clamp: 3;
}
.first-entry .entry-footer {
font-size: 14px;
}
.home-info .entry-content {
-webkit-line-clamp: unset;
}
.post-entry {
position: relative;
margin-bottom: var(--gap);
padding: var(--gap);
background: var(--entry);
border-radius: var(--radius);
transition: transform 0.1s;
border: 1px solid var(--border);
}
.post-entry:active {
transform: scale(0.96);
}
.tag-entry .entry-cover {
display: none;
}
.entry-header h2 {
font-size: 24px;
line-height: 1.3;
}
.entry-content {
margin: 8px 0;
color: var(--secondary);
font-size: 14px;
line-height: 1.6;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.entry-footer {
color: var(--secondary);
font-size: 13px;
}
.entry-link {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
.entry-hint {
color: var(--secondary);
}
.entry-hint-parent {
display: flex;
justify-content: space-between;
}
.entry-cover {
font-size: 14px;
margin-bottom: var(--gap);
text-align: center;
}
.entry-cover img {
border-radius: var(--radius);
width: 100%;
height: auto;
}
.entry-cover a {
box-shadow: 0 1px 0 var(--primary);
}

View File

@@ -0,0 +1,417 @@
.page-header,
.post-header {
margin: 24px auto var(--content-gap) auto;
}
.post-title {
margin-bottom: 2px;
font-size: 40px;
}
.post-description {
margin-top: 10px;
margin-bottom: 5px;
}
.post-meta,
.breadcrumbs {
color: var(--secondary);
font-size: 14px;
}
.breadcrumbs {
display: flex;
flex-wrap: wrap;
align-items: center;
}
.i18n_list {
display: inline-flex;
}
.post-meta .i18n_list li {
list-style: none;
margin: auto 3px;
}
.breadcrumbs a {
font-size: 16px;
}
.post-content {
color: var(--content);
margin: 30px 0;
}
.post-content h3,
.post-content h4,
.post-content h5,
.post-content h6 {
margin: 24px 0 16px;
}
.post-content h1 {
margin: 40px auto 32px;
font-size: 40px;
}
.post-content h2 {
margin: 32px auto 24px;
font-size: 32px;
}
.post-content h3 {
font-size: 24px;
}
.post-content h4 {
font-size: 16px;
}
.post-content h5 {
font-size: 14px;
}
.post-content h6 {
font-size: 12px;
}
.post-content a,
.post-meta .i18n_list li a,
.toc a:hover {
box-shadow: 0 1px 0;
box-decoration-break: clone;
-webkit-box-decoration-break: clone;
}
.post-content a code {
margin: auto 0;
border-radius: 0;
box-shadow: 0 -1px 0 var(--primary) inset;
}
.post-content del {
text-decoration: line-through;
}
.post-content dl,
.post-content ol,
.post-content p,
.post-content figure,
.post-content ul {
margin-bottom: var(--content-gap);
}
.post-content ol,
.post-content ul {
padding-inline-start: 20px;
}
.post-content li {
margin-top: 5px;
}
.post-content li p {
margin-bottom: 0;
}
.post-content dl {
display: flex;
flex-wrap: wrap;
margin: 0;
}
.post-content dt {
width: 25%;
font-weight: 700;
}
.post-content dd {
width: 75%;
margin-inline-start: 0;
padding-inline-start: 10px;
}
.post-content dd~dd,
.post-content dt~dt {
margin-top: 10px;
}
.post-content table {
margin-bottom: var(--content-gap);
}
.post-content table th,
.post-content table:not(.highlighttable, .highlight table, .gist .highlight) td {
min-width: 80px;
padding: 8px 5px;
line-height: 1.5;
border-bottom: 1px solid var(--border);
}
.post-content table th {
text-align: start;
}
.post-content table:not(.highlighttable) td code:only-child {
margin: auto 0;
}
.post-content .highlight table {
border-radius: var(--radius);
}
.post-content .highlight:not(table) {
margin: 10px auto;
background: var(--code-block-bg) !important;
border-radius: var(--radius);
direction: ltr;
}
.post-content li>.highlight {
margin-inline-end: 0;
}
.post-content ul pre {
margin-inline-start: calc(var(--gap) * -2);
}
.post-content .highlight pre {
margin: 0;
}
.post-content .highlighttable {
table-layout: fixed;
}
.post-content .highlighttable td:first-child {
width: 40px;
}
.post-content .highlighttable td .linenodiv {
padding-inline-end: 0 !important;
}
.post-content .highlighttable td .highlight,
.post-content .highlighttable td .linenodiv pre {
margin-bottom: 0;
}
.post-content code {
margin: auto 4px;
padding: 4px 6px;
font-size: 0.78em;
line-height: 1.5;
background: var(--code-bg);
border-radius: 2px;
}
.post-content pre code {
display: grid;
margin: auto 0;
padding: 10px;
color: rgb(213, 213, 214);
background: var(--code-block-bg) !important;
border-radius: var(--radius);
overflow-x: auto;
word-break: break-all;
}
.post-content blockquote {
margin: 20px 0;
padding: 0 14px;
border-inline-start: 3px solid var(--primary);
}
.post-content hr {
margin: 30px 0;
height: 2px;
background: var(--tertiary);
border: 0;
}
.post-content iframe {
max-width: 100%;
}
.post-content img {
border-radius: 4px;
margin: 1rem 0;
}
.post-content img[src*="#center"] {
margin: 1rem auto;
}
.post-content figure.align-center {
text-align: center;
}
.post-content figure>figcaption {
color: var(--primary);
font-size: 16px;
font-weight: bold;
margin: 8px 0 16px;
}
.post-content figure>figcaption>p {
color: var(--secondary);
font-size: 14px;
font-weight: normal;
}
.toc {
margin-bottom: var(--content-gap);
border: 1px solid var(--border);
background: var(--code-bg);
border-radius: var(--radius);
padding: 0.4em;
}
[data-theme="dark"] .toc {
background: var(--entry);
}
.toc details summary {
cursor: zoom-in;
margin-inline-start: 10px;
user-select: none;
}
.toc details[open] summary {
cursor: zoom-out;
}
.toc .details {
display: inline;
font-weight: 500;
}
.toc .inner {
margin: 5px 20px;
padding: 0 10px;
opacity: 0.9;
}
.toc li ul {
margin-inline-start: var(--gap);
}
.toc summary:focus {
outline: 0;
}
.post-footer {
margin-top: var(--content-gap);
}
.post-footer>* {
margin-bottom: 10px;
}
.post-tags {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.post-tags li {
display: inline-block;
}
.post-tags a,
.share-buttons,
.paginav {
border-radius: var(--radius);
background: var(--code-bg);
border: 1px solid var(--border);
}
.post-tags a {
display: block;
padding: 0 14px;
color: var(--secondary);
font-size: 14px;
line-height: 34px;
background: var(--code-bg);
}
.post-tags a:hover,
.paginav a:hover {
background: var(--border);
}
.share-buttons {
padding: 10px;
display: flex;
justify-content: center;
overflow-x: auto;
gap: 10px;
}
.share-buttons li,
.share-buttons a {
display: inline-flex;
}
.share-buttons a:not(:last-of-type) {
margin-inline-end: 12px;
}
h1:hover .anchor,
h2:hover .anchor,
h3:hover .anchor,
h4:hover .anchor,
h5:hover .anchor,
h6:hover .anchor {
display: inline-flex;
color: var(--secondary);
margin-inline-start: 8px;
font-weight: 500;
user-select: none;
}
.paginav {
display: flex;
line-height: 30px;
}
.paginav a {
padding-inline-start: 14px;
padding-inline-end: 14px;
border-radius: var(--radius);
}
.paginav .title {
letter-spacing: 1px;
text-transform: uppercase;
font-size: small;
color: var(--secondary);
}
.paginav .prev,
.paginav .next {
width: 50%;
}
.paginav span:hover:not(.title) {
box-shadow: 0 1px 0;
}
.paginav .next {
margin-inline-start: auto;
text-align: right;
}
[dir="rtl"] .paginav .next {
text-align: left;
}
h1>a>svg {
display: inline;
}
img.in-text {
display: inline;
margin: auto;
}

View File

@@ -0,0 +1,43 @@
.buttons,
.main .profile {
display: flex;
justify-content: center;
}
.main .profile {
align-items: center;
min-height: calc(100vh - var(--header-height) - var(--footer-height) - (var(--gap) * 2));
text-align: center;
}
.profile .profile_inner {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.profile img {
border-radius: 50%;
}
.buttons {
flex-wrap: wrap;
max-width: 400px;
}
.button {
background: var(--tertiary);
border-radius: var(--radius);
margin: 8px;
padding: 6px;
transition: transform 0.1s;
}
.button-inner {
padding: 0 8px;
}
.button:active {
transform: scale(0.96);
}

View File

@@ -0,0 +1,45 @@
#searchbox input {
padding: 4px 10px;
width: 100%;
color: var(--primary);
font-weight: bold;
border: 2px solid var(--tertiary);
border-radius: var(--radius);
}
#searchbox input:focus {
border-color: var(--secondary);
}
#searchResults li {
list-style: none;
border-radius: var(--radius);
padding: 10px;
margin: 10px 0;
position: relative;
font-weight: 500;
}
#searchResults {
margin: 10px 0;
width: 100%;
}
#searchResults li:active {
transition: transform 0.1s;
transform: scale(0.98);
}
#searchResults a {
position: absolute;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
outline: none;
}
#searchResults .focus {
transform: scale(0.98);
border: 2px solid var(--tertiary);
}

View File

@@ -0,0 +1,18 @@
.terms-tags li {
display: inline-block;
margin: 10px;
font-weight: 500;
}
.terms-tags a {
display: block;
padding: 3px 10px;
background: var(--tertiary);
border-radius: 6px;
transition: transform 0.1s;
}
.terms-tags a:active {
background: var(--tertiary);
transform: scale(0.96);
}

View File

@@ -0,0 +1,6 @@
/*
PaperMod v8+
License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE
Copyright (c) 2020 nanxiaobei and adityatelange
Copyright (c) 2021-2025 adityatelange
*/

View File

@@ -0,0 +1,118 @@
*,
::after,
::before {
box-sizing: border-box;
}
html {
-webkit-tap-highlight-color: transparent;
overflow-y: scroll;
-webkit-text-size-adjust: 100%;
text-size-adjust: 100%;
}
a,
button,
body,
h1,
h2,
h3,
h4,
h5,
h6 {
color: var(--primary);
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
font-size: 18px;
line-height: 1.6;
word-break: break-word;
background: var(--theme);
}
article,
aside,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
table {
display: block;
}
h1,
h2,
h3,
h4,
h5,
h6 {
line-height: 1.2;
}
h1,
h2,
h3,
h4,
h5,
h6,
p {
margin-top: 0;
margin-bottom: 0;
}
ul {
padding: 0;
}
a {
text-decoration: none;
}
body,
figure,
ul {
margin: 0;
}
table {
width: 100%;
border-collapse: collapse;
border-spacing: 0;
overflow-x: auto;
word-break: keep-all;
}
button,
input,
textarea {
padding: 0;
font: inherit;
background: 0 0;
border: 0;
}
input,
textarea {
outline: 0;
}
button,
input[type=button],
input[type=submit] {
cursor: pointer;
}
input:-webkit-autofill,
textarea:-webkit-autofill {
box-shadow: 0 0 0 50px var(--theme) inset;
}
img {
display: block;
max-width: 100%;
}

View File

@@ -0,0 +1,40 @@
:root {
--gap: 24px;
--content-gap: 20px;
--nav-width: 1024px;
--main-width: 720px;
--header-height: 60px;
--footer-height: 60px;
--radius: 8px;
--theme: rgb(255, 255, 255);
--entry: rgb(255, 255, 255);
--primary: rgb(30, 30, 30);
--secondary: rgb(108, 108, 108);
--tertiary: rgb(214, 214, 214);
--content: rgb(31, 31, 31);
--code-block-bg: rgb(28, 29, 33);
--code-bg: rgb(245, 245, 245);
--border: rgb(238, 238, 238);
color-scheme: light;
}
:root[data-theme="dark"] {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--code-block-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
color-scheme: dark;
}
.list {
background: var(--code-bg);
}
[data-theme="dark"] .list {
background: var(--theme);
}

View File

@@ -0,0 +1,55 @@
@media screen and (max-width: 768px) {
/* theme-vars */
:root {
--gap: 14px;
}
/* profile-mode */
.profile img {
transform: scale(0.85);
}
/* post-entry */
.first-entry {
min-height: 260px;
}
/* archive */
.archive-month {
flex-direction: column;
}
.archive-year {
margin-top: 20px;
}
/* footer */
.footer {
padding: calc((var(--footer-height) - var(--gap) - 10px) / 2) var(--gap);
}
}
/* footer */
@media screen and (max-width: 900px) {
.list .top-link {
transform: translateY(-5rem);
}
}
@media screen and (max-width: 340px) {
.share-buttons {
justify-content: unset;
}
}
@media (prefers-reduced-motion) {
/* terms; profile-mode; post-single; post-entry; post-entry; search; search */
.terms-tags a:active,
.button:active,
.post-entry:active,
.top-link,
#searchResults .focus,
#searchResults li:active {
transform: none;
}
}

View File

@@ -0,0 +1,5 @@
/*
This is just a placeholder blank stylesheet so as to support adding custom styles budled with theme's default styles
Read https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#bundling-custom-css-with-themes-assets for more info
*/

View File

@@ -0,0 +1,35 @@
/* Body and headings */
body { font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif; }
h1,h2,h3,h4 { font-family: "Source Serif 4", ui-serif, Georgia, serif; }
/* Brand accent + links */
a { color: #163b8e; }
a:hover { color: #27b7c4; }
/* Card/list accents (safe generic selectors) */
.post-entry, .archive-entry, .post-content blockquote {
border-color: #27b7c4;
}
/* Bio Block */
.bio-block {
display: flex;
align-items: center;
gap: 1.2rem;
margin-top: 2rem;
flex-wrap: wrap;
}
.bio-photo {
width: 100px;
height: 100px;
border-radius: 50%;
object-fit: cover;
box-shadow: 0 2px 5px rgba(0,0,0,0.15);
}
.bio-text {
max-width: 60ch;
font-size: 1.05em;
line-height: 1.6;
}

View File

@@ -0,0 +1,24 @@
.chroma {
background-color: unset !important;
}
.chroma .hl {
display: flex;
}
.chroma .lnt {
padding: 0 0 0 12px;
}
.highlight pre.chroma code {
padding: 8px 0;
}
.highlight pre.chroma .line .cl,
.chroma .ln {
padding: 0 10px;
}
.chroma .lntd:last-of-type {
width: 100%;
}

View File

@@ -0,0 +1,86 @@
/* Background */ .bg { color: #cad3f5; background-color: #24273a; }
/* PreWrapper */ .chroma { color: #cad3f5; background-color: #24273a; }
/* Other */ .chroma .x { }
/* Error */ .chroma .err { color: #ed8796 }
/* CodeLine */ .chroma .cl { }
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #474733 }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #8087a2 }
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #8087a2 }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #c6a0f6 }
/* KeywordConstant */ .chroma .kc { color: #f5a97f }
/* KeywordDeclaration */ .chroma .kd { color: #ed8796 }
/* KeywordNamespace */ .chroma .kn { color: #8bd5ca }
/* KeywordPseudo */ .chroma .kp { color: #c6a0f6 }
/* KeywordReserved */ .chroma .kr { color: #c6a0f6 }
/* KeywordType */ .chroma .kt { color: #ed8796 }
/* Name */ .chroma .n { }
/* NameAttribute */ .chroma .na { color: #8aadf4 }
/* NameBuiltin */ .chroma .nb { color: #91d7e3 }
/* NameBuiltinPseudo */ .chroma .bp { color: #91d7e3 }
/* NameClass */ .chroma .nc { color: #eed49f }
/* NameConstant */ .chroma .no { color: #eed49f }
/* NameDecorator */ .chroma .nd { color: #8aadf4; font-weight: bold }
/* NameEntity */ .chroma .ni { color: #8bd5ca }
/* NameException */ .chroma .ne { color: #f5a97f }
/* NameFunction */ .chroma .nf { color: #8aadf4 }
/* NameFunctionMagic */ .chroma .fm { color: #8aadf4 }
/* NameLabel */ .chroma .nl { color: #91d7e3 }
/* NameNamespace */ .chroma .nn { color: #f5a97f }
/* NameOther */ .chroma .nx { }
/* NameProperty */ .chroma .py { color: #f5a97f }
/* NameTag */ .chroma .nt { color: #c6a0f6 }
/* NameVariable */ .chroma .nv { color: #f4dbd6 }
/* NameVariableClass */ .chroma .vc { color: #f4dbd6 }
/* NameVariableGlobal */ .chroma .vg { color: #f4dbd6 }
/* NameVariableInstance */ .chroma .vi { color: #f4dbd6 }
/* NameVariableMagic */ .chroma .vm { color: #f4dbd6 }
/* Literal */ .chroma .l { }
/* LiteralDate */ .chroma .ld { }
/* LiteralString */ .chroma .s { color: #a6da95 }
/* LiteralStringAffix */ .chroma .sa { color: #ed8796 }
/* LiteralStringBacktick */ .chroma .sb { color: #a6da95 }
/* LiteralStringChar */ .chroma .sc { color: #a6da95 }
/* LiteralStringDelimiter */ .chroma .dl { color: #8aadf4 }
/* LiteralStringDoc */ .chroma .sd { color: #6e738d }
/* LiteralStringDouble */ .chroma .s2 { color: #a6da95 }
/* LiteralStringEscape */ .chroma .se { color: #8aadf4 }
/* LiteralStringHeredoc */ .chroma .sh { color: #6e738d }
/* LiteralStringInterpol */ .chroma .si { color: #a6da95 }
/* LiteralStringOther */ .chroma .sx { color: #a6da95 }
/* LiteralStringRegex */ .chroma .sr { color: #8bd5ca }
/* LiteralStringSingle */ .chroma .s1 { color: #a6da95 }
/* LiteralStringSymbol */ .chroma .ss { color: #a6da95 }
/* LiteralNumber */ .chroma .m { color: #f5a97f }
/* LiteralNumberBin */ .chroma .mb { color: #f5a97f }
/* LiteralNumberFloat */ .chroma .mf { color: #f5a97f }
/* LiteralNumberHex */ .chroma .mh { color: #f5a97f }
/* LiteralNumberInteger */ .chroma .mi { color: #f5a97f }
/* LiteralNumberIntegerLong */ .chroma .il { color: #f5a97f }
/* LiteralNumberOct */ .chroma .mo { color: #f5a97f }
/* Operator */ .chroma .o { color: #91d7e3; font-weight: bold }
/* OperatorWord */ .chroma .ow { color: #91d7e3; font-weight: bold }
/* Punctuation */ .chroma .p { }
/* Comment */ .chroma .c { color: #6e738d; font-style: italic }
/* CommentHashbang */ .chroma .ch { color: #6e738d; font-style: italic }
/* CommentMultiline */ .chroma .cm { color: #6e738d; font-style: italic }
/* CommentSingle */ .chroma .c1 { color: #6e738d; font-style: italic }
/* CommentSpecial */ .chroma .cs { color: #6e738d; font-style: italic }
/* CommentPreproc */ .chroma .cp { color: #6e738d; font-style: italic }
/* CommentPreprocFile */ .chroma .cpf { color: #6e738d; font-weight: bold; font-style: italic }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { color: #ed8796; background-color: #363a4f }
/* GenericEmph */ .chroma .ge { font-style: italic }
/* GenericError */ .chroma .gr { color: #ed8796 }
/* GenericHeading */ .chroma .gh { color: #f5a97f; font-weight: bold }
/* GenericInserted */ .chroma .gi { color: #a6da95; background-color: #363a4f }
/* GenericOutput */ .chroma .go { }
/* GenericPrompt */ .chroma .gp { }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu { color: #f5a97f; font-weight: bold }
/* GenericTraceback */ .chroma .gt { color: #ed8796 }
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
/* TextWhitespace */ .chroma .w { }

View File

@@ -0,0 +1,59 @@
/* from reset */
::-webkit-scrollbar-track {
background: 0 0;
}
::-webkit-scrollbar-thumb {
background: var(--tertiary);
border: 5px solid var(--theme);
border-radius: var(--radius);
}
[data-theme="light"] .list::-webkit-scrollbar-thumb {
border: 5px solid var(--code-bg);
}
::-webkit-scrollbar-thumb:hover {
background: var(--secondary);
}
::-webkit-scrollbar:not(.highlighttable, .highlight table, .gist .highlight) {
background: var(--theme);
}
/* from post-single */
.post-content .highlighttable td .highlight pre code::-webkit-scrollbar {
display: none;
}
.post-content :not(table) ::-webkit-scrollbar-thumb {
border: 2px solid var(--code-block-bg);
background: rgb(113, 113, 117);
}
.post-content :not(table) ::-webkit-scrollbar-thumb:hover {
background: rgb(163, 163, 165);
}
.gist table::-webkit-scrollbar-thumb {
border: 2px solid rgb(255, 255, 255);
background: rgb(173, 173, 173);
}
.gist table::-webkit-scrollbar-thumb:hover {
background: rgb(112, 112, 112);
}
.post-content table::-webkit-scrollbar-thumb {
border-width: 2px;
}
/* from zmedia */
@media screen and (min-width: 768px) {
/* reset */
::-webkit-scrollbar {
width: 19px;
height: 11px;
}
}

View File

@@ -0,0 +1,152 @@
import * as params from '@params';
let fuse; // holds our search engine
let resList = document.getElementById('searchResults');
let sInput = document.getElementById('searchInput');
let first, last, current_elem = null
let resultsAvailable = false;
// load our search index
window.onload = function () {
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
let data = JSON.parse(xhr.responseText);
if (data) {
// fuse.js options; check fuse.js website for details
let options = {
distance: 100,
threshold: 0.4,
ignoreLocation: true,
keys: [
'title',
'permalink',
'summary',
'content'
]
};
if (params.fuseOpts) {
options = {
isCaseSensitive: params.fuseOpts.iscasesensitive ?? false,
includeScore: params.fuseOpts.includescore ?? false,
includeMatches: params.fuseOpts.includematches ?? false,
minMatchCharLength: params.fuseOpts.minmatchcharlength ?? 1,
shouldSort: params.fuseOpts.shouldsort ?? true,
findAllMatches: params.fuseOpts.findallmatches ?? false,
keys: params.fuseOpts.keys ?? ['title', 'permalink', 'summary', 'content'],
location: params.fuseOpts.location ?? 0,
threshold: params.fuseOpts.threshold ?? 0.4,
distance: params.fuseOpts.distance ?? 100,
ignoreLocation: params.fuseOpts.ignorelocation ?? true
}
}
fuse = new Fuse(data, options); // build the index from the json file
}
} else {
console.log(xhr.responseText);
}
}
};
xhr.open('GET', "../index.json");
xhr.send();
}
function activeToggle(ae) {
document.querySelectorAll('.focus').forEach(function (element) {
// rm focus class
element.classList.remove("focus")
});
if (ae) {
ae.focus()
document.activeElement = current_elem = ae;
ae.parentElement.classList.add("focus")
} else {
document.activeElement.parentElement.classList.add("focus")
}
}
function reset() {
resultsAvailable = false;
resList.innerHTML = sInput.value = ''; // clear inputbox and searchResults
sInput.focus(); // shift focus to input box
}
// execute search as each character is typed
sInput.onkeyup = function (e) {
// run a search query (for "term") every time a letter is typed
// in the search box
if (fuse) {
let results;
if (params.fuseOpts) {
results = fuse.search(this.value.trim(), {limit: params.fuseOpts.limit}); // the actual query being run using fuse.js along with options
} else {
results = fuse.search(this.value.trim()); // the actual query being run using fuse.js
}
if (results.length !== 0) {
// build our html if result exists
let resultSet = ''; // our results bucket
for (let item in results) {
resultSet += `<li class="post-entry"><header class="entry-header">${results[item].item.title}&nbsp;»</header>` +
`<a href="${results[item].item.permalink}" aria-label="${results[item].item.title}"></a></li>`
}
resList.innerHTML = resultSet;
resultsAvailable = true;
first = resList.firstChild;
last = resList.lastChild;
} else {
resultsAvailable = false;
resList.innerHTML = '';
}
}
}
sInput.addEventListener('search', function (e) {
// clicked on x
if (!this.value) reset()
})
// kb bindings
document.onkeydown = function (e) {
let key = e.key;
let ae = document.activeElement;
let inbox = document.getElementById("searchbox").contains(ae)
if (ae === sInput) {
let elements = document.getElementsByClassName('focus');
while (elements.length > 0) {
elements[0].classList.remove('focus');
}
} else if (current_elem) ae = current_elem;
if (key === "Escape") {
reset()
} else if (!resultsAvailable || !inbox) {
return
} else if (key === "ArrowDown") {
e.preventDefault();
if (ae == sInput) {
// if the currently focused element is the search input, focus the <a> of first <li>
activeToggle(resList.firstChild.lastChild);
} else if (ae.parentElement != last) {
// if the currently focused element's parent is last, do nothing
// otherwise select the next search result
activeToggle(ae.parentElement.nextSibling.lastChild);
}
} else if (key === "ArrowUp") {
e.preventDefault();
if (ae.parentElement == first) {
// if the currently focused element is first item, go to input box
activeToggle(sInput);
} else if (ae != sInput) {
// if the currently focused element is input box, do nothing
// otherwise select the previous search result
activeToggle(ae.parentElement.previousSibling.lastChild);
}
} else if (key === "ArrowRight") {
ae.click(); // click on active link
}
}

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More