<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Self-Hosted on Landry Zetam - Tech Blog</title><link>https://blog.landryzetam.net/tags/self-hosted/</link><description>Recent content in Self-Hosted on Landry Zetam - Tech Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 07 Dec 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.landryzetam.net/tags/self-hosted/index.xml" rel="self" type="application/rss+xml"/><item><title>ChatBuddy - Voice AI Companion for Children</title><link>https://blog.landryzetam.net/posts/chatbuddy/</link><pubDate>Sun, 07 Dec 2025 00:00:00 +0000</pubDate><guid>https://blog.landryzetam.net/posts/chatbuddy/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>ChatBuddy is an AI-powered voice companion designed specifically for children aged 3-8. When a child asks &amp;ldquo;Why is the sky blue?&amp;rdquo;, they get a fun, age-appropriate answer—not a Wikipedia article.&lt;/p>
&lt;p>The system runs entirely on-device with 5 containerized services on hardware with just 8GB RAM, ensuring complete privacy while delivering natural voice interactions with educational content grounded in verified facts.&lt;/p>
&lt;h3 id="why-build-this">Why Build This?&lt;/h3>
&lt;p>Kids don&amp;rsquo;t want to type. They want to talk. And they need answers that:&lt;/p></description></item><item><title>Building an Oura Ring Health Dashboard with Streamlit</title><link>https://blog.landryzetam.net/posts/oura-dashboard/</link><pubDate>Fri, 08 Aug 2025 00:00:00 +0000</pubDate><guid>https://blog.landryzetam.net/posts/oura-dashboard/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>Oura Dashboard is a Streamlit-based web application deployed in the Fako cluster that provides interactive visualization of health data collected from the Oura Ring. It connects to the PostgreSQL database populated by the Oura Collector service and presents comprehensive health insights through charts, graphs, and analytics. The dashboard is secured with OAuth2 authentication and provides personalized health tracking capabilities for sleep, activity, readiness, and heart rate metrics.&lt;/p>
&lt;h2 id="key-features">Key Features&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Interactive Visualizations&lt;/strong>: Real-time charts and graphs using Streamlit&lt;/li>
&lt;li>&lt;strong>Comprehensive Metrics&lt;/strong>: Sleep, activity, readiness, and HRV analytics&lt;/li>
&lt;li>&lt;strong>OAuth2 Authentication&lt;/strong>: Secure access with OAuth2 proxy&lt;/li>
&lt;li>&lt;strong>PostgreSQL Integration&lt;/strong>: Direct database queries for data&lt;/li>
&lt;li>&lt;strong>Responsive Design&lt;/strong>: Mobile-friendly interface&lt;/li>
&lt;li>&lt;strong>Health Trends&lt;/strong>: Long-term pattern analysis&lt;/li>
&lt;li>&lt;strong>Custom Reports&lt;/strong>: Exportable health summaries&lt;/li>
&lt;li>&lt;strong>Real-time Updates&lt;/strong>: Auto-refresh capabilities&lt;/li>
&lt;/ul>
&lt;h2 id="architecture">Architecture&lt;/h2>
&lt;h3 id="components">Components&lt;/h3>
&lt;ol>
&lt;li>&lt;strong>Streamlit App&lt;/strong>: Python-based web dashboard&lt;/li>
&lt;li>&lt;strong>OAuth2 Proxy&lt;/strong>: Authentication layer&lt;/li>
&lt;li>&lt;strong>Service&lt;/strong>: ClusterIP on port 8501&lt;/li>
&lt;li>&lt;strong>Ingress&lt;/strong>: HTTPS access with authentication&lt;/li>
&lt;li>&lt;strong>External Secrets&lt;/strong>: AWS Secrets Manager integration&lt;/li>
&lt;li>&lt;strong>Database Connection&lt;/strong>: PostgreSQL read access&lt;/li>
&lt;/ol>
&lt;h3 id="resource-requirements">Resource Requirements&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Memory&lt;/strong>: 256Mi (request), 512Mi (limit)&lt;/li>
&lt;li>&lt;strong>CPU&lt;/strong>: 100m (request), 500m (limit)&lt;/li>
&lt;li>&lt;strong>Storage&lt;/strong>: EmptyDir for temporary data&lt;/li>
&lt;li>&lt;strong>Port&lt;/strong>: 8501 (Streamlit default)&lt;/li>
&lt;/ul>
&lt;h2 id="configuration">Configuration&lt;/h2>
&lt;h3 id="environment-settings">Environment Settings&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Parameter&lt;/th>
&lt;th>Value&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>DATABASE_NAME&lt;/code>&lt;/td>
&lt;td>&lt;code>app&lt;/code>&lt;/td>
&lt;td>PostgreSQL database&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>DAYS_TO_BACKFILL&lt;/code>&lt;/td>
&lt;td>&lt;code>7&lt;/code>&lt;/td>
&lt;td>Default data range&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>LOG_LEVEL&lt;/code>&lt;/td>
&lt;td>&lt;code>INFO&lt;/code>&lt;/td>
&lt;td>Application logging&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>API_TIMEOUT&lt;/code>&lt;/td>
&lt;td>&lt;code>30&lt;/code>&lt;/td>
&lt;td>Query timeout&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="oauth2-configuration">OAuth2 Configuration&lt;/h3>
&lt;p>Protected by OAuth2 proxy for secure access:&lt;/p></description></item><item><title>Home Assistant Voice Pipeline with Ollama</title><link>https://blog.landryzetam.net/posts/voice-pipeline/</link><pubDate>Fri, 08 Aug 2025 00:00:00 +0000</pubDate><guid>https://blog.landryzetam.net/posts/voice-pipeline/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>This implementation demonstrates a complete voice assistant pipeline using Wyoming Satellite with Home Assistant and Ollama as the AI brain, achieving natural conversation and smart home control entirely on-premises. The system transforms spoken words into meaningful actions through a sophisticated pipeline of AI models, all running locally for complete privacy.&lt;/p>
&lt;h2 id="why-ollama-for-voice">Why Ollama for Voice?&lt;/h2>
&lt;p>Voice assistants have unique requirements that Ollama handles beautifully:&lt;/p>
&lt;h3 id="speed-requirements">Speed Requirements&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Response Time&lt;/strong>: &amp;lt; 2 seconds for natural conversation&lt;/li>
&lt;li>&lt;strong>Model Loading&lt;/strong>: Pre-loaded models for instant responses&lt;/li>
&lt;li>&lt;strong>Streaming&lt;/strong>: Real-time token generation for faster perceived response&lt;/li>
&lt;/ul>
&lt;h3 id="privacy-first">Privacy First&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Local Processing&lt;/strong>: No cloud dependencies&lt;/li>
&lt;li>&lt;strong>Conversation History&lt;/strong>: Stored locally, never uploaded&lt;/li>
&lt;li>&lt;strong>Custom Wake Words&lt;/strong>: Combined with OpenWakeWord for complete privacy&lt;/li>
&lt;/ul>
&lt;h2 id="components-used">Components Used&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>OpenWakeWord&lt;/strong>: Wake word detection (&amp;ldquo;Hey Jarvis&amp;rdquo;)&lt;/li>
&lt;li>&lt;strong>Whisper&lt;/strong>: Speech-to-text transcription&lt;/li>
&lt;li>&lt;strong>Ollama (Qwen2.5:3b &amp;amp; Llama 8B)&lt;/strong>: Natural language understanding and response generation&lt;/li>
&lt;li>&lt;strong>Piper TTS&lt;/strong>: Text-to-speech synthesis&lt;/li>
&lt;li>&lt;strong>Home Assistant&lt;/strong>: Smart home orchestration and pipeline management&lt;/li>
&lt;li>&lt;strong>Wyoming Satellite&lt;/strong>: Voice satellite software on Raspberry Pi&lt;/li>
&lt;/ul>
&lt;h2 id="hardware-setup">Hardware Setup&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Raspberry Pi 5&lt;/strong> (2.4GHz, 4GB RAM) - Voice satellite device&lt;/li>
&lt;li>&lt;strong>ME6S USB Microphone&lt;/strong> - Audio input device&lt;/li>
&lt;li>&lt;strong>Bluetooth Speaker&lt;/strong> (88:92:CC:5D:CB:79) - Audio output via BlueALSA&lt;/li>
&lt;li>&lt;strong>Mini PC&lt;/strong> - Home Assistant server&lt;/li>
&lt;li>&lt;strong>Kubernetes Cluster&lt;/strong> - Container orchestration for AI services&lt;/li>
&lt;li>&lt;strong>NVIDIA GPU Node (yeezyai)&lt;/strong> - GPU acceleration for Ollama&lt;/li>
&lt;/ul>
&lt;h2 id="the-voice-pipeline-architecture">The Voice Pipeline Architecture&lt;/h2>
&lt;p>The voice pipeline runs entirely on the K8s homelab, with Ollama at its heart:&lt;/p></description></item><item><title>From GitHub Notes to Production Blog</title><link>https://blog.landryzetam.net/posts/hugo-blogging/</link><pubDate>Thu, 07 Aug 2025 00:00:00 +0000</pubDate><guid>https://blog.landryzetam.net/posts/hugo-blogging/</guid><description>&lt;h2 id="why-this-guide-exists">Why This Guide Exists&lt;/h2>
&lt;p>I&amp;rsquo;ve been doing a lot of dev work, research and hadn&amp;rsquo;t really thought about sharing the knowledge without having to learn frontend development or maintain complex code. I knew I had a bunch of markdown GitHub notes and thought they could be used as a baseline to catch up on all my lack of documentation. Then I found Hugo.&lt;/p>
&lt;p>This guide covers the entire workflow of creating a Hugo blog, containerizing it, and deploying it to Kubernetes - all without writing a single line of frontend code (html, css, js).&lt;/p></description></item><item><title>Powering My Voice Assistant with Ollama: Local AI for Home Automation</title><link>https://blog.landryzetam.net/posts/local-ai-with-ollama/</link><pubDate>Thu, 07 Aug 2025 00:00:00 +0000</pubDate><guid>https://blog.landryzetam.net/posts/local-ai-with-ollama/</guid><description>&lt;p>Ollama has become the AI brain of my home automation infrastructure, powering my voice assistant pipeline and Home Assistant integrations. Running entirely on-premises on my NVIDIA GPU node, it enables natural language understanding and intelligent responses while maintaining complete privacy and control.&lt;/p>
&lt;h2 id="the-home-automation-ai-hub">The Home Automation AI Hub&lt;/h2>
&lt;p>My Ollama deployment serves as the AI intelligence layer for home automation:&lt;/p>
&lt;p>&lt;img src="https://blog.landryzetam.net/posts/local-ai-with-ollama/img/homeassistantvoice_hu_25571ad08280435f.webp" alt="Home Automation AI Hub" width="1200" height="994" loading="lazy" decoding="async" />
&lt;em>Ollama serves as the AI brain for voice pipeline and Home Assistant automations&lt;/em>&lt;/p></description></item><item><title>Running 184 Pods on a 6-Node K3s Homelab Cluster</title><link>https://blog.landryzetam.net/posts/k8s/</link><pubDate>Thu, 07 Aug 2025 00:00:00 +0000</pubDate><guid>https://blog.landryzetam.net/posts/k8s/</guid><description>&lt;h2 id="project-overview">Project Overview&lt;/h2>
&lt;p>The Fako Cluster is my production Kubernetes environment that serves as the foundation for all other projects. It&amp;rsquo;s a self-hosted, production-grade K8s cluster that demonstrates enterprise-level practices while running on homelab hardware.&lt;/p>
&lt;h3 id="why-fako">Why &amp;ldquo;Fako&amp;rdquo;?&lt;/h3>
&lt;p>The name &amp;ldquo;Fako&amp;rdquo; holds special significance - it&amp;rsquo;s named after Mount Fako (Mount Cameroon), the highest peak in West and Central Africa. Just as Mount Fako stands as a towering landmark visible from miles away, this Kubernetes cluster serves as the foundational infrastructure that all other services can rely on.&lt;/p></description></item></channel></rss>