<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Jeremy Max</title>
    <link>https://jeremymax.com</link>
    <description>Writing about AI tooling, Linux workflows, and developer tools.</description>
    <language>en</language>
    <atom:link href="https://jeremymax.com/feed.xml" rel="self" type="application/rss+xml"/>
    
    <item>
      <title>Uptime Kuma told me everything was fine. It wasn&apos;t.</title>
      <link>https://jeremymax.com/blog/beyond-uptime-kuma-observability</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/beyond-uptime-kuma-observability</guid>
      <description>Green checkmarks are not observability. Here is what I learned building a real monitoring stack.</description>
      <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
      <category>homelab</category>
    </item>
    <item>
      <title>What agentic coding actually looks like</title>
      <link>https://jeremymax.com/blog/agentic-coding-in-practice</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/agentic-coding-in-practice</guid>
      <description>Agentic coding changed how I build software. Not in the way the hype suggests.</description>
      <pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>Hermes Agent by Nous Research: the AI agent that actually cares about security</title>
      <link>https://jeremymax.com/blog/hermes-agent-nous-research</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/hermes-agent-nous-research</guid>
      <description>What Hermes Agent is, how it compares to OpenClaw on security and usability, and why it earned my trust.</description>
      <pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>How I would design an ad platform for LLMs</title>
      <link>https://jeremymax.com/blog/designing-llm-ad-platform</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/designing-llm-ad-platform</guid>
      <description>A technical breakdown of how a middleware ad layer for LLM APIs could work, why the economics demand it, and whether it should exist at all.</description>
      <pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>Why I built Omnibase: a universal database MCP server</title>
      <link>https://jeremymax.com/blog/why-i-built-omnibase</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/why-i-built-omnibase</guid>
      <description>I got tired of copy-pasting query results between DataGrip and AI agents. So I built an MCP server that gives AI agents secure, direct access to any database.</description>
      <pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Delta libraries: how diffing works and which library to use</title>
      <link>https://jeremymax.com/blog/delta-libraries-compared</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/delta-libraries-compared</guid>
      <description>What delta libraries do, how diff algorithms work under the hood, and a practical comparison of the most popular options in the JavaScript ecosystem.</description>
      <pubDate>Sat, 28 Mar 2026 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Offline-first apps: harder than it sounds</title>
      <link>https://jeremymax.com/blog/offline-first-apps</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/offline-first-apps</guid>
      <description>Building apps that work without internet is one of those things that seems straightforward until you actually try it. Here is what makes it hard and how to approach it.</description>
      <pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Building RAG pipelines with local models</title>
      <link>https://jeremymax.com/blog/rag-local-models</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/rag-local-models</guid>
      <description>How to build a retrieval-augmented generation pipeline using local models and your own documents, without sending data to cloud APIs.</description>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>Using OpenRouter to access multiple AI models</title>
      <link>https://jeremymax.com/blog/openrouter-ai-models</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/openrouter-ai-models</guid>
      <description>How OpenRouter gives you a single API to access models from OpenAI, Anthropic, Google, and others without managing multiple accounts.</description>
      <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>Starlink Mini: internet anywhere and peace of mind in remote places</title>
      <link>https://jeremymax.com/blog/starlink-mini-remote-work</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/starlink-mini-remote-work</guid>
      <description>How the Starlink Mini changed how I think about working remotely and adventuring in places with no cell coverage.</description>
      <pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate>
      <category>outdoor-tech</category>
    </item>
    <item>
      <title>How agent skills work</title>
      <link>https://jeremymax.com/blog/how-agent-skills-work</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/how-agent-skills-work</guid>
      <description>What agent skills are, how they extend AI coding assistants with reusable workflows, and why they matter for developer productivity.</description>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>AI-assisted code review workflows</title>
      <link>https://jeremymax.com/blog/ai-code-review-workflows</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/ai-code-review-workflows</guid>
      <description>How I use AI tools to review code before committing, catch bugs early, and maintain consistency across projects.</description>
      <pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>What is an MCP server and why should you care?</title>
      <link>https://jeremymax.com/blog/what-is-mcp-server</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/what-is-mcp-server</guid>
      <description>An introduction to the Model Context Protocol, what MCP servers are, and how they let AI assistants interact with external tools and data.</description>
      <pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>Meshtastic: building an off-grid communication network</title>
      <link>https://jeremymax.com/blog/meshtastic-off-grid-comms</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/meshtastic-off-grid-comms</guid>
      <description>How Meshtastic turns cheap LoRa hardware into a mesh communication network that works without cell towers, Wi-Fi, or internet, and why it is perfect for outdoor adventures.</description>
      <pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate>
      <category>outdoor-tech</category>
    </item>
    <item>
      <title>Getting structured output from language models</title>
      <link>https://jeremymax.com/blog/structured-llm-output</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/structured-llm-output</guid>
      <description>Techniques for getting LLMs to return JSON, typed objects, and other structured formats reliably, from prompt engineering to constrained decoding.</description>
      <pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>OpenCode: an open-source AI coding assistant</title>
      <link>https://jeremymax.com/blog/opencode-ai-coding</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/opencode-ai-coding</guid>
      <description>A look at OpenCode, an open-source terminal-based AI coding tool, and how it fits into my development workflow.</description>
      <pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>Fine-tuning small language models for specific tasks</title>
      <link>https://jeremymax.com/blog/fine-tuning-small-models</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/fine-tuning-small-models</guid>
      <description>A practical introduction to fine-tuning small LLMs for domain-specific tasks using tools like Unsloth and LoRA.</description>
      <pubDate>Sat, 28 Feb 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>Kiwix: carrying Wikipedia (and more) offline</title>
      <link>https://jeremymax.com/blog/kiwix-offline-knowledge</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/kiwix-offline-knowledge</guid>
      <description>How Kiwix lets you download entire knowledge bases for offline access, and why I keep it on my devices for travel and remote adventures.</description>
      <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
      <category>outdoor-tech</category>
    </item>
    <item>
      <title>Self-hosting with Coolify: a PaaS on your own server</title>
      <link>https://jeremymax.com/blog/coolify-self-hosting</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/coolify-self-hosting</guid>
      <description>How Coolify turns your VPS into a Heroku-like platform for deploying apps, databases, and services with a clean web UI.</description>
      <pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Comparing AI coding assistants: Claude Code, Cline, and OpenCode</title>
      <link>https://jeremymax.com/blog/comparing-ai-coding-assistants</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/comparing-ai-coding-assistants</guid>
      <description>An honest comparison of the AI coding tools I have used, what each does well, and which one fits different workflows.</description>
      <pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>Getting started with Open WebUI and Ollama</title>
      <link>https://jeremymax.com/blog/open-webui-ollama</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/open-webui-ollama</guid>
      <description>How to run local LLMs on your own machine with Ollama and put a clean web interface on top with Open WebUI.</description>
      <pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>What is LoRa and why does it matter for off-grid communication?</title>
      <link>https://jeremymax.com/blog/lora-radio-basics</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/lora-radio-basics</guid>
      <description>An introduction to LoRa radio technology, how it enables long-range communication without cellular or Wi-Fi, and why it is gaining traction with outdoor enthusiasts and tinkerers.</description>
      <pubDate>Thu, 05 Feb 2026 00:00:00 GMT</pubDate>
      <category>outdoor-tech</category>
    </item>
    <item>
      <title>Setting up a productive dev environment on Linux</title>
      <link>https://jeremymax.com/blog/linux-dev-environment</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/linux-dev-environment</guid>
      <description>The actual tools, terminal setup, and configuration I use for web development on Linux.</description>
      <pubDate>Sun, 01 Feb 2026 00:00:00 GMT</pubDate>
      <category>linux</category>
    </item>
    <item>
      <title>Building an MCP server with TypeScript</title>
      <link>https://jeremymax.com/blog/building-mcp-server-typescript</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/building-mcp-server-typescript</guid>
      <description>A step-by-step guide to building your own Model Context Protocol server in TypeScript to give AI assistants access to custom tools.</description>
      <pubDate>Sun, 25 Jan 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>Why I use Linux for web development</title>
      <link>https://jeremymax.com/blog/linux-for-web-dev</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/linux-for-web-dev</guid>
      <description>My case for using Linux as a web development environment, and the practical advantages it has over Windows.</description>
      <pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate>
      <category>linux</category>
    </item>
    <item>
      <title>Why shadcn/ui changed how I build React interfaces</title>
      <link>https://jeremymax.com/blog/shadcn-ui-components</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/shadcn-ui-components</guid>
      <description>What makes shadcn/ui different from traditional component libraries, and why copying components into your project is actually the better approach.</description>
      <pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>Automating workflows with n8n</title>
      <link>https://jeremymax.com/blog/n8n-workflow-automation</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/n8n-workflow-automation</guid>
      <description>How I use n8n as a self-hosted alternative to Zapier for connecting services and automating repetitive tasks.</description>
      <pubDate>Sat, 10 Jan 2026 00:00:00 GMT</pubDate>
      <category>devops</category>
    </item>
    <item>
      <title>What HuggingFace actually is</title>
      <link>https://jeremymax.com/blog/what-huggingface-actually-is</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/what-huggingface-actually-is</guid>
      <description>I thought HuggingFace was just GitHub for AI models, but that comparison sells it way short.</description>
      <pubDate>Sat, 10 Jan 2026 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>Deploying apps with Railway</title>
      <link>https://jeremymax.com/blog/railway-app-hosting</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/railway-app-hosting</guid>
      <description>How Railway makes deploying web applications simple without giving up control, and why I use it for side projects.</description>
      <pubDate>Mon, 05 Jan 2026 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Running local LLMs on a consumer GPU</title>
      <link>https://jeremymax.com/blog/local-llms-consumer-gpu</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/local-llms-consumer-gpu</guid>
      <description>What you need to run large language models locally, which models fit on consumer hardware, and how to get the best performance.</description>
      <pubDate>Sat, 20 Dec 2025 00:00:00 GMT</pubDate>
      <category>ai</category>
    </item>
    <item>
      <title>Why I moved from Vercel to Cloudflare Pages</title>
      <link>https://jeremymax.com/blog/vercel-to-cloudflare-pages</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/vercel-to-cloudflare-pages</guid>
      <description>Vercel is great, but Cloudflare Pages with OpenNext gives me more control, better pricing, and no vendor lock-in for my Next.js apps.</description>
      <pubDate>Mon, 15 Dec 2025 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Why Pop!_OS is my Linux distro of choice</title>
      <link>https://jeremymax.com/blog/popos-for-developers</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/popos-for-developers</guid>
      <description>What makes Pop!_OS stand out as a Linux distribution for developers, and why I chose it over Ubuntu, Fedora, and Arch.</description>
      <pubDate>Mon, 08 Dec 2025 00:00:00 GMT</pubDate>
      <category>linux</category>
    </item>
    <item>
      <title>TrueNAS: reliable storage for your homelab</title>
      <link>https://jeremymax.com/blog/truenas-home-storage</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/truenas-home-storage</guid>
      <description>Why I use TrueNAS for network storage in my homelab, how to set it up, and the features that make it worth running over a simple file share.</description>
      <pubDate>Thu, 20 Nov 2025 00:00:00 GMT</pubDate>
      <category>homelab</category>
    </item>
    <item>
      <title>Proxmox Backup Server: incremental backups done right</title>
      <link>https://jeremymax.com/blog/proxmox-backup-server</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/proxmox-backup-server</guid>
      <description>Why I use Proxmox Backup Server for my homelab backups, how incremental backups save massive amounts of storage, and how to set it up.</description>
      <pubDate>Mon, 10 Nov 2025 00:00:00 GMT</pubDate>
      <category>homelab</category>
    </item>
    <item>
      <title>Tailwind CSS in practice: why I still reach for it</title>
      <link>https://jeremymax.com/blog/tailwind-in-practice</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/tailwind-in-practice</guid>
      <description>An honest take on using Tailwind CSS in real projects, what works well, and where it falls short.</description>
      <pubDate>Mon, 03 Nov 2025 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Automating your homelab with Ansible</title>
      <link>https://jeremymax.com/blog/ansible-homelab</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/ansible-homelab</guid>
      <description>How I use Ansible to automate server setup, configuration, and maintenance across my homelab machines.</description>
      <pubDate>Sat, 25 Oct 2025 00:00:00 GMT</pubDate>
      <category>homelab</category>
    </item>
    <item>
      <title>Setting up a home lab with Proxmox VE</title>
      <link>https://jeremymax.com/blog/proxmox-home-lab</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/proxmox-home-lab</guid>
      <description>Why Proxmox is my go-to hypervisor for running a home lab, and how to get started with your first virtual machines and containers.</description>
      <pubDate>Sun, 12 Oct 2025 00:00:00 GMT</pubDate>
      <category>homelab</category>
    </item>
    <item>
      <title>Why I prefer Tauri over Electron for desktop apps</title>
      <link>https://jeremymax.com/blog/tauri-over-electron</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/tauri-over-electron</guid>
      <description>What makes Tauri a better choice than Electron for building desktop applications, and why the resource savings alone are worth the switch.</description>
      <pubDate>Wed, 01 Oct 2025 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>PostgreSQL tips I wish I knew earlier</title>
      <link>https://jeremymax.com/blog/postgresql-tips</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/postgresql-tips</guid>
      <description>Practical PostgreSQL tips and patterns that have saved me time in real projects, from indexing to JSON queries to connection management.</description>
      <pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate>
      <category>databases</category>
    </item>
    <item>
      <title>Why a 3D printer is the most useful tool in my office</title>
      <link>https://jeremymax.com/blog/3d-printer-home-factory</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/3d-printer-home-factory</guid>
      <description>How having a 3D printer turns your desk into a micro-factory, letting you pull designs from the internet and turn them into real objects in hours.</description>
      <pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
      <category>outdoor-tech</category>
    </item>
    <item>
      <title>Backup strategies for self-hosted data</title>
      <link>https://jeremymax.com/blog/backup-strategies-selfhost</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/backup-strategies-selfhost</guid>
      <description>The 3-2-1 backup rule applied to self-hosted services, with practical tools and patterns I use to protect my data.</description>
      <pubDate>Sat, 30 Aug 2025 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Self-hosting with Docker Compose: lessons learned</title>
      <link>https://jeremymax.com/blog/docker-compose-lessons</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/docker-compose-lessons</guid>
      <description>Practical patterns and mistakes from running self-hosted services with Docker Compose.</description>
      <pubDate>Fri, 15 Aug 2025 00:00:00 GMT</pubDate>
      <category>devops</category>
    </item>
    <item>
      <title>Self-hosting a media server with Jellyfin</title>
      <link>https://jeremymax.com/blog/jellyfin-media-server</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/jellyfin-media-server</guid>
      <description>Setting up Jellyfin to stream movies, music, and photos across all my devices without a Plex subscription.</description>
      <pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Tailscale: the easiest way to connect your devices</title>
      <link>https://jeremymax.com/blog/tailscale-mesh-vpn</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/tailscale-mesh-vpn</guid>
      <description>How Tailscale creates a mesh VPN between your devices without port forwarding, firewall rules, or a VPN server.</description>
      <pubDate>Tue, 15 Jul 2025 00:00:00 GMT</pubDate>
      <category>networking</category>
    </item>
    <item>
      <title>Caddy as a reverse proxy for self-hosted services</title>
      <link>https://jeremymax.com/blog/caddy-reverse-proxy</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/caddy-reverse-proxy</guid>
      <description>How Caddy simplifies reverse proxying for self-hosted services with automatic HTTPS and minimal configuration.</description>
      <pubDate>Thu, 10 Jul 2025 00:00:00 GMT</pubDate>
      <category>networking</category>
    </item>
    <item>
      <title>pnpm workspaces: managing monorepos without the headache</title>
      <link>https://jeremymax.com/blog/pnpm-workspaces</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/pnpm-workspaces</guid>
      <description>A practical guide to using pnpm workspaces for monorepo management, with real patterns from actual projects.</description>
      <pubDate>Fri, 20 Jun 2025 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>Why I use Meilisearch instead of Elasticsearch</title>
      <link>https://jeremymax.com/blog/meilisearch-over-elasticsearch</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/meilisearch-over-elasticsearch</guid>
      <description>What makes Meilisearch a better fit for most projects than Elasticsearch, and why simpler search does not mean worse search.</description>
      <pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate>
      <category>databases</category>
    </item>
    <item>
      <title>Replacing Google Photos with Immich</title>
      <link>https://jeremymax.com/blog/immich-self-hosted-photos</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/immich-self-hosted-photos</guid>
      <description>How I set up Immich as a self-hosted alternative to Google Photos, with automatic backup, face recognition, and map view.</description>
      <pubDate>Wed, 28 May 2025 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Setting up WireGuard for secure remote access</title>
      <link>https://jeremymax.com/blog/wireguard-remote-access</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/wireguard-remote-access</guid>
      <description>How to set up WireGuard VPN to securely access your home lab and self-hosted services from anywhere.</description>
      <pubDate>Sun, 18 May 2025 00:00:00 GMT</pubDate>
      <category>networking</category>
    </item>
    <item>
      <title>Building a personal knowledge base with Obsidian</title>
      <link>https://jeremymax.com/blog/obsidian-knowledge-base</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/obsidian-knowledge-base</guid>
      <description>How I use Obsidian to organize notes, documentation, and ideas with linked thinking and plain Markdown files.</description>
      <pubDate>Sun, 20 Apr 2025 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>What is a homelab and why would you want one?</title>
      <link>https://jeremymax.com/blog/what-is-a-homelab</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/what-is-a-homelab</guid>
      <description>An introduction to homelabs, what they are, why developers and tech enthusiasts build them, and how to get started without spending a fortune.</description>
      <pubDate>Thu, 10 Apr 2025 00:00:00 GMT</pubDate>
      <category>homelab</category>
    </item>
    <item>
      <title>The case for self-hosting</title>
      <link>https://jeremymax.com/blog/why-self-host</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/why-self-host</guid>
      <description>Why I self-host services instead of relying on SaaS, what I run, and an honest look at the tradeoffs involved.</description>
      <pubDate>Sat, 15 Mar 2025 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Monitoring your services with Uptime Kuma</title>
      <link>https://jeremymax.com/blog/uptime-kuma-monitoring</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/uptime-kuma-monitoring</guid>
      <description>How to set up Uptime Kuma for monitoring your self-hosted services and getting alerts when something goes down.</description>
      <pubDate>Tue, 25 Feb 2025 00:00:00 GMT</pubDate>
      <category>homelab</category>
    </item>
    <item>
      <title>Setting up Portainer for Docker container management</title>
      <link>https://jeremymax.com/blog/portainer-docker-management</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/portainer-docker-management</guid>
      <description>Using Portainer to manage Docker containers through a web UI instead of SSH and command-line Docker.</description>
      <pubDate>Thu, 06 Feb 2025 00:00:00 GMT</pubDate>
      <category>homelab</category>
    </item>
    <item>
      <title>Privacy-respecting alternatives to Google services</title>
      <link>https://jeremymax.com/blog/privacy-google-alternatives</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/privacy-google-alternatives</guid>
      <description>The services I use instead of Google for search, email, cloud storage, photos, and more, without sacrificing usability.</description>
      <pubDate>Sat, 18 Jan 2025 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Why Joplin is my go-to note-taking app</title>
      <link>https://jeremymax.com/blog/joplin-note-taking</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/joplin-note-taking</guid>
      <description>What makes Joplin stand out for note-taking, how I use it for technical documentation and daily notes, and why I picked it over the alternatives.</description>
      <pubDate>Sun, 05 Jan 2025 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>What nobody tells you about side projects</title>
      <link>https://jeremymax.com/blog/side-projects-truth</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/side-projects-truth</guid>
      <description>Most side projects die. Here is what I have learned about why, and the few things that actually help.</description>
      <pubDate>Sun, 15 Dec 2024 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>AdGuard Home: DNS-level ad blocking for your network</title>
      <link>https://jeremymax.com/blog/adguard-home-dns</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/adguard-home-dns</guid>
      <description>How AdGuard Home compares to Pi-hole for network-wide ad blocking, and why I switched to it for my homelab.</description>
      <pubDate>Mon, 18 Nov 2024 00:00:00 GMT</pubDate>
      <category>networking</category>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Understanding WebSockets for real-time features</title>
      <link>https://jeremymax.com/blog/websockets-realtime</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/websockets-realtime</guid>
      <description>How WebSockets work, when to use them over regular HTTP, and a practical example of adding real-time updates to a web app.</description>
      <pubDate>Tue, 05 Nov 2024 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Making maps work offline with PMTiles</title>
      <link>https://jeremymax.com/blog/offline-maps-pmtiles</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/offline-maps-pmtiles</guid>
      <description>How the PMTiles format enables offline-capable maps by serving vector tiles from a single static file, and how I use it in Landbound.</description>
      <pubDate>Tue, 22 Oct 2024 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Git workflows that actually work for solo developers</title>
      <link>https://jeremymax.com/blog/git-workflows-solo</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/git-workflows-solo</guid>
      <description>Practical git strategies for when you are the only developer on a project, without the overhead of team-oriented workflows.</description>
      <pubDate>Sat, 05 Oct 2024 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>Why I use VSCodium instead of VS Code</title>
      <link>https://jeremymax.com/blog/vscodium-no-telemetry</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/vscodium-no-telemetry</guid>
      <description>VSCodium gives you the same editor as VS Code without Microsoft&apos;s telemetry, tracking, and proprietary additions.</description>
      <pubDate>Sun, 15 Sep 2024 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>Migrating a JavaScript project to TypeScript</title>
      <link>https://jeremymax.com/blog/js-to-typescript-migration</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/js-to-typescript-migration</guid>
      <description>A practical approach to migrating an existing JavaScript codebase to TypeScript incrementally, without rewriting everything at once.</description>
      <pubDate>Tue, 10 Sep 2024 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>QGIS: the free alternative to ArcGIS that actually works</title>
      <link>https://jeremymax.com/blog/qgis-free-arcgis-alternative</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/qgis-free-arcgis-alternative</guid>
      <description>How QGIS handles real geospatial analysis work without the ArcGIS price tag, and where I use it for Landbound and trip planning.</description>
      <pubDate>Tue, 27 Aug 2024 00:00:00 GMT</pubDate>
      <category>outdoor-tech</category>
    </item>
    <item>
      <title>Why I self-host my passwords with Vaultwarden</title>
      <link>https://jeremymax.com/blog/vaultwarden-passwords</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/vaultwarden-passwords</guid>
      <description>The case for running Vaultwarden instead of using a proprietary password manager, and how to set it up.</description>
      <pubDate>Sat, 10 Aug 2024 00:00:00 GMT</pubDate>
      <category>security</category>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Planning trips with technology without ruining the adventure</title>
      <link>https://jeremymax.com/blog/trip-planning-tech-balance</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/trip-planning-tech-balance</guid>
      <description>I build a trip planning app, but some of my best outdoor experiences happened when the plan fell apart. Here is how I think about the balance.</description>
      <pubDate>Fri, 12 Jul 2024 00:00:00 GMT</pubDate>
      <category>outdoor-tech</category>
    </item>
    <item>
      <title>SQLite: the most underrated database</title>
      <link>https://jeremymax.com/blog/sqlite-underrated</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/sqlite-underrated</guid>
      <description>Why SQLite deserves more respect as a production database, and the use cases where it outperforms client-server databases.</description>
      <pubDate>Mon, 08 Jul 2024 00:00:00 GMT</pubDate>
      <category>databases</category>
    </item>
    <item>
      <title>Network-wide ad blocking with Pi-hole</title>
      <link>https://jeremymax.com/blog/pihole-ad-blocking</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/pihole-ad-blocking</guid>
      <description>How Pi-hole blocks ads and trackers for every device on your network, and how to set it up in Docker.</description>
      <pubDate>Sat, 22 Jun 2024 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Running Home Assistant for smart home automation</title>
      <link>https://jeremymax.com/blog/home-assistant-smart-home</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/home-assistant-smart-home</guid>
      <description>Setting up Home Assistant to control lights, monitor sensors, and automate the house without depending on cloud services.</description>
      <pubDate>Wed, 05 Jun 2024 00:00:00 GMT</pubDate>
      <category>homelab</category>
    </item>
    <item>
      <title>Setting up CI/CD with GitHub Actions</title>
      <link>https://jeremymax.com/blog/github-actions-cicd</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/github-actions-cicd</guid>
      <description>How I use GitHub Actions to automate testing, building, and deploying my projects on every push.</description>
      <pubDate>Mon, 20 May 2024 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>Building a LoRa weather station for my garden</title>
      <link>https://jeremymax.com/blog/lora-weather-station</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/lora-weather-station</guid>
      <description>How I built a solar-powered LoRa weather station that reports temperature, humidity, and soil moisture to a base station inside my house.</description>
      <pubDate>Fri, 03 May 2024 00:00:00 GMT</pubDate>
      <category>outdoor-tech</category>
    </item>
    <item>
      <title>Setting up Nextcloud with S3-compatible primary storage</title>
      <link>https://jeremymax.com/blog/nextcloud-s3-storage</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/nextcloud-s3-storage</guid>
      <description>How to configure a fresh Nextcloud installation to use S3-compatible object storage as its primary storage backend.</description>
      <pubDate>Wed, 17 Apr 2024 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Why I use DuckDuckGo (and it is not just about privacy)</title>
      <link>https://jeremymax.com/blog/duckduckgo-bangs</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/duckduckgo-bangs</guid>
      <description>DuckDuckGo&apos;s bang shortcuts, instant answers, and clean interface make it a genuinely better search experience, not just a private one.</description>
      <pubDate>Fri, 05 Apr 2024 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>Why I care about web performance</title>
      <link>https://jeremymax.com/blog/web-performance-matters</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/web-performance-matters</guid>
      <description>What web performance actually means for users, the metrics that matter, and the quick wins that make the biggest difference.</description>
      <pubDate>Fri, 15 Mar 2024 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Mapping libraries compared: Mapbox, Leaflet, and MapLibre</title>
      <link>https://jeremymax.com/blog/mapping-libraries-compared</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/mapping-libraries-compared</guid>
      <description>After building Landbound&apos;s map-heavy interface, here is how Mapbox, Leaflet, and MapLibre compare in practice for web applications.</description>
      <pubDate>Tue, 20 Feb 2024 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Managing dotfiles with GNU Stow</title>
      <link>https://jeremymax.com/blog/dotfiles-gnu-stow</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/dotfiles-gnu-stow</guid>
      <description>How I use GNU Stow to manage my dotfiles across machines, and why it is the simplest approach I have found.</description>
      <pubDate>Thu, 15 Feb 2024 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>Setting up a development machine from scratch</title>
      <link>https://jeremymax.com/blog/dev-machine-setup</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/dev-machine-setup</guid>
      <description>My checklist for setting up a fresh Linux development machine, from OS installation to a fully configured environment in under an hour.</description>
      <pubDate>Sun, 28 Jan 2024 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>Markdown for everything: why I write all my docs in it</title>
      <link>https://jeremymax.com/blog/markdown-for-everything</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/markdown-for-everything</guid>
      <description>How Markdown became my default format for notes, documentation, blog posts, and project files, and why plaintext beats proprietary formats.</description>
      <pubDate>Wed, 10 Jan 2024 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>Year in review: what I self-hosted in 2023</title>
      <link>https://jeremymax.com/blog/self-hosted-2023-review</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/self-hosted-2023-review</guid>
      <description>A look back at every service I ran on my own hardware in 2023, what stuck, what I dropped, and what surprised me.</description>
      <pubDate>Sat, 23 Dec 2023 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Why I switched from npm to pnpm</title>
      <link>https://jeremymax.com/blog/npm-to-pnpm</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/npm-to-pnpm</guid>
      <description>The practical reasons pnpm replaced npm as my default package manager, and why the switch was easier than expected.</description>
      <pubDate>Tue, 05 Dec 2023 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>REST vs GraphQL in practice</title>
      <link>https://jeremymax.com/blog/rest-vs-graphql</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/rest-vs-graphql</guid>
      <description>When GraphQL is worth the complexity and when REST is the better choice, based on using both in real projects.</description>
      <pubDate>Tue, 28 Nov 2023 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>My first homelab build: mistakes and lessons</title>
      <link>https://jeremymax.com/blog/first-homelab-build</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/first-homelab-build</guid>
      <description>What I got right and wrong when building my first homelab, and what I would do differently starting over.</description>
      <pubDate>Wed, 15 Nov 2023 00:00:00 GMT</pubDate>
      <category>homelab</category>
    </item>
    <item>
      <title>How Docker image layers actually work under the hood</title>
      <link>https://jeremymax.com/blog/docker-image-layers-deep-dive</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/docker-image-layers-deep-dive</guid>
      <description>A deep dive into Docker image layers, union filesystems, content-addressable storage, copy-on-write, and why understanding this stuff makes you better at writing Dockerfiles.</description>
      <pubDate>Wed, 08 Nov 2023 00:00:00 GMT</pubDate>
      <category>devops</category>
    </item>
    <item>
      <title>Terminal multiplexers: why tmux changed how I work</title>
      <link>https://jeremymax.com/blog/tmux-terminal-multiplexer</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/tmux-terminal-multiplexer</guid>
      <description>How tmux lets me manage multiple terminal sessions, survive SSH disconnects, and organize my workspace without a tiling window manager.</description>
      <pubDate>Mon, 30 Oct 2023 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>Automating backups with restic and rclone</title>
      <link>https://jeremymax.com/blog/restic-rclone-backups</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/restic-rclone-backups</guid>
      <description>How I back up my self-hosted services using restic for deduplication and rclone for syncing to remote storage.</description>
      <pubDate>Wed, 11 Oct 2023 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Self-hosting Gitea for private repositories</title>
      <link>https://jeremymax.com/blog/self-hosting-gitea</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/self-hosting-gitea</guid>
      <description>How I set up Gitea as a self-hosted Git server for private repos, and when it makes sense over GitHub or GitLab.</description>
      <pubDate>Mon, 18 Sep 2023 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Choosing a database for a small SaaS</title>
      <link>https://jeremymax.com/blog/choosing-database-small-saas</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/choosing-database-small-saas</guid>
      <description>SQLite, PostgreSQL, or a managed database? Here is how I think about the decision for small, indie SaaS projects.</description>
      <pubDate>Sun, 20 Aug 2023 00:00:00 GMT</pubDate>
      <category>databases</category>
      <category>web-dev</category>
    </item>
    <item>
      <title>How DNS actually works (the practical version)</title>
      <link>https://jeremymax.com/blog/how-dns-works</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/how-dns-works</guid>
      <description>A practical explanation of DNS for developers and self-hosters, covering what happens when you type a URL and how to manage your own DNS.</description>
      <pubDate>Sat, 12 Aug 2023 00:00:00 GMT</pubDate>
      <category>networking</category>
    </item>
    <item>
      <title>Understanding Linux file permissions (the stuff that trips people up)</title>
      <link>https://jeremymax.com/blog/linux-file-permissions</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/linux-file-permissions</guid>
      <description>A practical guide to Linux file permissions, ownership, and the common mistakes that break self-hosted services and Docker setups.</description>
      <pubDate>Sat, 22 Jul 2023 00:00:00 GMT</pubDate>
      <category>linux</category>
    </item>
    <item>
      <title>Working with GPX files: parsing, rendering, and the messy reality</title>
      <link>https://jeremymax.com/blog/gpx-files-messy-reality</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/gpx-files-messy-reality</guid>
      <description>What I learned building Routemade: GPX is a simple format in theory, but real-world files from different devices are anything but consistent.</description>
      <pubDate>Sat, 15 Jul 2023 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Containers vs virtual machines: when to use which</title>
      <link>https://jeremymax.com/blog/containers-vs-vms</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/containers-vs-vms</guid>
      <description>A practical comparison of Docker containers and virtual machines, and how I use both in my homelab.</description>
      <pubDate>Wed, 05 Jul 2023 00:00:00 GMT</pubDate>
      <category>devops</category>
    </item>
    <item>
      <title>Systemd timers vs cron: which to use and when</title>
      <link>https://jeremymax.com/blog/systemd-timers-vs-cron</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/systemd-timers-vs-cron</guid>
      <description>A practical comparison of systemd timers and cron for scheduling tasks on Linux, with examples for common use cases.</description>
      <pubDate>Wed, 28 Jun 2023 00:00:00 GMT</pubDate>
      <category>linux</category>
    </item>
    <item>
      <title>What is OpenStreetMap and why it matters</title>
      <link>https://jeremymax.com/blog/what-is-openstreetmap</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/what-is-openstreetmap</guid>
      <description>How OpenStreetMap works, who contributes to it, and why it is the foundation for almost every open-source mapping project.</description>
      <pubDate>Thu, 08 Jun 2023 00:00:00 GMT</pubDate>
      <category>outdoor-tech</category>
    </item>
    <item>
      <title>Running Nextcloud as a Google Drive replacement</title>
      <link>https://jeremymax.com/blog/nextcloud-google-drive</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/nextcloud-google-drive</guid>
      <description>How I set up Nextcloud to replace Google Drive for file sync, sharing, and collaboration, and what the experience is actually like.</description>
      <pubDate>Sat, 20 May 2023 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Why I stopped using cloud IDEs</title>
      <link>https://jeremymax.com/blog/why-not-cloud-ides</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/why-not-cloud-ides</guid>
      <description>My experience with cloud-based development environments and why I went back to local development.</description>
      <pubDate>Fri, 05 May 2023 00:00:00 GMT</pubDate>
      <category>developer-tools</category>
    </item>
    <item>
      <title>Why I switched from Nginx to Caddy</title>
      <link>https://jeremymax.com/blog/nginx-to-caddy</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/nginx-to-caddy</guid>
      <description>What drove me to replace Nginx with Caddy as my reverse proxy, and why I have not looked back.</description>
      <pubDate>Sat, 15 Apr 2023 00:00:00 GMT</pubDate>
      <category>devops</category>
    </item>
    <item>
      <title>Self-hosting Nominatim for local geocoding</title>
      <link>https://jeremymax.com/blog/nominatim-self-hosted-geocoding</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/nominatim-self-hosted-geocoding</guid>
      <description>Running your own geocoding service with Nominatim and OpenStreetMap data, without sending every address lookup to Google.</description>
      <pubDate>Tue, 28 Mar 2023 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Setting up a proper home network</title>
      <link>https://jeremymax.com/blog/home-network-setup</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/home-network-setup</guid>
      <description>How I configured VLANs, subnets, and firewall rules to separate my homelab traffic from the rest of my network.</description>
      <pubDate>Fri, 10 Mar 2023 00:00:00 GMT</pubDate>
      <category>homelab</category>
    </item>
    <item>
      <title>Choosing a VPS provider: what actually matters</title>
      <link>https://jeremymax.com/blog/choosing-vps-provider</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/choosing-vps-provider</guid>
      <description>What to look for when picking a VPS provider, which ones I have used, and what I recommend for different use cases.</description>
      <pubDate>Tue, 14 Feb 2023 00:00:00 GMT</pubDate>
      <category>devops</category>
    </item>
    <item>
      <title>Environment variables: what they are and how to stop getting them wrong</title>
      <link>https://jeremymax.com/blog/env-variables-stop-getting-wrong</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/env-variables-stop-getting-wrong</guid>
      <description>Environment variables are one of those things that seem simple until you spend an hour debugging why your app cannot connect to the database. Here is what I wish I knew earlier.</description>
      <pubDate>Sun, 22 Jan 2023 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>How database indexes actually work</title>
      <link>https://jeremymax.com/blog/how-database-indexes-work</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/how-database-indexes-work</guid>
      <description>B-trees, query plans, and why adding an index does not always make things faster.</description>
      <pubDate>Fri, 30 Dec 2022 00:00:00 GMT</pubDate>
      <category>databases</category>
    </item>
    <item>
      <title>Why TypeScript is worth the setup cost</title>
      <link>https://jeremymax.com/blog/typescript-worth-it</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/typescript-worth-it</guid>
      <description>The practical benefits of TypeScript over plain JavaScript, and why the initial learning curve pays for itself quickly.</description>
      <pubDate>Sat, 10 Dec 2022 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>What is a reverse proxy and why do you need one?</title>
      <link>https://jeremymax.com/blog/intro-reverse-proxies</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/intro-reverse-proxies</guid>
      <description>A practical explanation of reverse proxies, why they matter for self-hosting, and how they route traffic to your services.</description>
      <pubDate>Fri, 25 Nov 2022 00:00:00 GMT</pubDate>
      <category>networking</category>
    </item>
    <item>
      <title>Understanding CORS (and why your API calls fail)</title>
      <link>https://jeremymax.com/blog/understanding-cors</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/understanding-cors</guid>
      <description>What CORS actually is, why browsers enforce it, and how to fix the errors without just slapping a wildcard on everything.</description>
      <pubDate>Sat, 05 Nov 2022 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Why I use Cloudflare for everything</title>
      <link>https://jeremymax.com/blog/cloudflare-for-everything</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/cloudflare-for-everything</guid>
      <description>DNS, CDN, Pages, Workers, and a free tier that is hard to beat. Here is why Cloudflare has become my default for almost everything web-related.</description>
      <pubDate>Tue, 18 Oct 2022 00:00:00 GMT</pubDate>
      <category>devops</category>
    </item>
    <item>
      <title>Protomaps: self-hosted vector maps from a single file</title>
      <link>https://jeremymax.com/blog/protomaps-self-hosted-maps</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/protomaps-self-hosted-maps</guid>
      <description>How Protomaps lets you serve a full vector map tileset from a single static file, no tile server needed.</description>
      <pubDate>Wed, 28 Sep 2022 00:00:00 GMT</pubDate>
      <category>self-hosting</category>
    </item>
    <item>
      <title>Setting up SSH keys and never typing a password again</title>
      <link>https://jeremymax.com/blog/ssh-keys-setup</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/ssh-keys-setup</guid>
      <description>How to set up SSH key authentication, manage multiple keys, and configure your SSH client for a smoother workflow.</description>
      <pubDate>Thu, 08 Sep 2022 00:00:00 GMT</pubDate>
      <category>networking</category>
      <category>security</category>
    </item>
    <item>
      <title>What is open source and why it matters to me</title>
      <link>https://jeremymax.com/blog/why-open-source-matters</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/why-open-source-matters</guid>
      <description>Why I gravitate toward open-source software, what it actually means in practice, and how it shapes the tools I choose.</description>
      <pubDate>Mon, 15 Aug 2022 00:00:00 GMT</pubDate>
      <category>open-source</category>
    </item>
    <item>
      <title>My Linux distro journey: from Ubuntu to Pop!_OS</title>
      <link>https://jeremymax.com/blog/distro-hopping-to-popos</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/distro-hopping-to-popos</guid>
      <description>Why I tried multiple Linux distributions and how I ended up on Pop!_OS as my daily driver for development.</description>
      <pubDate>Thu, 28 Jul 2022 00:00:00 GMT</pubDate>
      <category>linux</category>
    </item>
    <item>
      <title>Fail2ban and basic server hardening</title>
      <link>https://jeremymax.com/blog/fail2ban-server-hardening</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/fail2ban-server-hardening</guid>
      <description>The first things to do after spinning up a VPS: Fail2ban, disabling root login, firewall basics, and unattended upgrades.</description>
      <pubDate>Wed, 06 Jul 2022 00:00:00 GMT</pubDate>
      <category>security</category>
    </item>
    <item>
      <title>Why I switched from Windows to Linux</title>
      <link>https://jeremymax.com/blog/windows-to-linux</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/windows-to-linux</guid>
      <description>The practical reasons I moved from Windows to Linux for my development work, and what the transition was actually like.</description>
      <pubDate>Wed, 15 Jun 2022 00:00:00 GMT</pubDate>
      <category>linux</category>
    </item>
    <item>
      <title>A practical guide to the Linux command line</title>
      <link>https://jeremymax.com/blog/command-line-basics</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/command-line-basics</guid>
      <description>The essential Linux commands I use daily for development, file management, and server administration.</description>
      <pubDate>Sun, 22 May 2022 00:00:00 GMT</pubDate>
      <category>linux</category>
    </item>
    <item>
      <title>Shell scripting basics: automating the boring stuff</title>
      <link>https://jeremymax.com/blog/shell-scripting-basics</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/shell-scripting-basics</guid>
      <description>A beginner-friendly introduction to writing shell scripts for repetitive tasks, from file renaming to deployment shortcuts.</description>
      <pubDate>Thu, 05 May 2022 00:00:00 GMT</pubDate>
      <category>linux</category>
    </item>
    <item>
      <title>Understanding environment variables</title>
      <link>https://jeremymax.com/blog/understanding-env-variables</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/understanding-env-variables</guid>
      <description>What environment variables are, why they matter for development, and how to use them properly without leaking secrets.</description>
      <pubDate>Mon, 18 Apr 2022 00:00:00 GMT</pubDate>
      <category>web-dev</category>
    </item>
    <item>
      <title>Getting started with Docker: the basics I wish I knew</title>
      <link>https://jeremymax.com/blog/getting-started-docker</link>
      <guid isPermaLink="true">https://jeremymax.com/blog/getting-started-docker</guid>
      <description>A practical introduction to Docker for developers, covering the concepts that actually matter and skipping the ones that do not.</description>
      <pubDate>Sun, 20 Mar 2022 00:00:00 GMT</pubDate>
      <category>devops</category>
    </item>
  </channel>
</rss>