--- import { getCollection } from 'astro:content'; import type { CollectionEntry } from 'astro:content'; import BaseLayout from '../layouts/BaseLayout.astro'; import DigitalGardenGraph from '../components/DigitalGardenGraph.astro'; type Post = CollectionEntry<'posts'>; type Config = CollectionEntry<'configurations'>; type Project = CollectionEntry<'projects'>; // Get all blog posts (excluding configurations and specific guides) const posts = (await getCollection('blog')) .filter(item => !item.slug.startsWith('configurations/') && !item.slug.startsWith('projects/') && !item.data.category?.toLowerCase().includes('configuration') && !item.slug.includes('setup-guide') && !item.slug.includes('config') ) .sort((a, b) => new Date(b.data.pubDate || 0).valueOf() - new Date(a.data.pubDate || 0).valueOf()); // Get configuration posts const configurations = (await getCollection('blog')) .filter(item => item.slug.startsWith('configurations/') || item.data.category?.toLowerCase().includes('configuration') || item.slug.includes('setup-guide') || item.slug.includes('config') || item.slug.includes('monitoring') || item.slug.includes('server') || item.slug.includes('tunnel') ) .sort((a, b) => new Date(b.data.pubDate || 0).valueOf() - new Date(a.data.pubDate || 0).valueOf()); // Get project posts const projects = (await getCollection('blog')) .filter(item => item.slug.startsWith('projects/') || item.data.category?.toLowerCase().includes('project') ) .sort((a, b) => new Date(b.data.pubDate || 0).valueOf() - new Date(a.data.pubDate || 0).valueOf()); ---
Home Lab & DevOps

Exploring advanced infrastructure and automation

Join me on a journey through enterprise-grade home lab setups, Kubernetes deployments, and DevOps best practices for the modern tech enthusiast.

Explore Latest Posts
argobox:~/homelab
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
argobox Ready <none> 47d v1.28.3+k3s1
argobox-lite Ready control-plane,master 47d v1.28.3+k3s1
$ helm list -A
NAME NAMESPACE REVISION STATUS CHART
cloudnative-pg postgres 1 deployed cloudnative-pg-0.18.0
prometheus monitoring 2 deployed kube-prometheus-stack-51.2.0
$ cloudflared tunnel status

My Digital Garden

This blog functions as my personal digital garden - a collection of interconnected ideas, guides, and projects. Browse through the visualization below to see how different concepts relate to each other.

Latest Posts

{posts.map((post) => (
{post.data.heroImage ? ( ) : ( )}

{post.data.title} {post.data.draft && Draft}

{post.data.description}

))}

Configurations

{configurations.map((config) => (
{config.data.heroImage ? ( ) : ( )}

{config.data.title} {config.data.draft && Draft}

{config.data.description}

))}

Projects

{projects.map((project) => (
{project.data.heroImage ? ( ) : ( )}

{project.data.title} {project.data.draft && Draft}

{project.data.technologies && (
{project.data.technologies.map((tech) => ( ))}
)}

{project.data.description}

))}

About Me

Hi, I'm Daniel LaForce, a passionate DevOps and infrastructure engineer with a focus on Kubernetes, automation, and cloud technologies. When I'm not working on enterprise systems, I'm building and refining my home lab environment to test and learn new technologies.

This site serves as both my technical blog and digital garden - a place to share what I've learned and document my ongoing projects. Feel free to connect with me on GitHub or LinkedIn!