Guides

Guides on building things, step by step. With optional AI assistance.

A note on prices. Every cost figure in these guides was accurate when that guide was built, and each one carries its build date. Hosting prices have moved a long way since. Hetzner raised cloud pricing on April 1, 2026 and again on June 15, 2026, the second round hitting some lines by well over 100%, citing higher operating costs and hardware procurement against an ongoing DRAM shortage. Other providers have followed, and some older plans are no longer orderable at all.
Existing servers are usually grandfathered at the rate you signed up on, which is why a box provisioned before an increase can still be running at a price nobody can buy today. That cuts both ways: the figures here are honest snapshots of what a build actually cost on its build date, and they are not quotes. Verify current pricing with the provider before you budget anything.

Keeping a Shipped App on Google Play

A finished Android app with no pending features got three emails from Google in one summer: raise your target API, verify your developer identity, meet a new memory and code-optimization bar. Each one is a different kind of obligation, and sorting them is most of the work. This is the triage, the toolchain hop that the setup docs get wrong, the one behavior change that actually bit, the device tests that did not need a tablet, and the five image files that were quietly costing 56 MB apiece.

7 steps18 min2026-08-28

Shipping a Hobby Android App to Google Play

One person, one small offline app, seven months from first commit to a live store listing, built with an AI coding tool from the first line. This is not a Kotlin tutorial. It is the list of things that were hard for reasons nobody warned me about: what Android Studio and adb actually are, the bugs that only a real phone in a real hand can find, the review passes that were wrong often enough to matter, the five places a single outbound link has to be disclosed, and the console form that got the app rejected for one unchecked box. The thread through all of it is the worry I had before the idea was even finished: how do you make one layout work on every screen?

7 steps28 min2026-08-28

Self-Hosted Cloud Storage: Tier, Don't Migrate

Nextcloud, Seafile, Syncthing, and File Browser get compared on feature tables as if they were substitutes. They answer different questions. This is the decision underneath: which model you need, what it costs to leave each one, why self-hosting is not encryption, and why replacing Google Drive wholesale is the wrong goal in the first place.

6 steps21 min2026-08-21

Building a Custom Debian Rescue ISO

Parted Magic is paid and SystemRescue leans command-line, so this is the third option: build your own bootable Debian rescue image with live-build. The worked example is a real one, but the transferable part is the method, and specifically the testing, which is where a project like this actually spends its time and which every other live-build tutorial stops short of.

7 steps24 min2026-08-20

Monitoring Foreign-Language News with Local Models

Hardware news breaks in Chinese, Japanese, and Korean while North America is asleep, and by the time it reaches English it is twelve hours old. This is a pipeline that collects it overnight and emails a graded digest by morning, built around one inversion: translation is the expensive step, so score first and translate only what survives. On one real run, 103 of 143 candidates never touched the GPU.

7 steps22 min2026-08-20

Monitoring a Mixed Fleet with Grafana and Prometheus

Most monitoring guides stop at node_exporter on one Linux server. This is the version where the fleet doesn't match: Windows laptop-servers, Raspberry Pis, a GPU box, and two UPS units from different vendors, all scraped by one small VPS over a tailnet. The hard parts turn out to be reachability and normalization, not Grafana.

7 steps18 min2026-08-20

Self-Hosted Invoicing with Invoice Ninja

Standing up a self-hosted invoicing and billing service on a $7/month VPS with zero open ports and a payment processor wired end to end, then working the problem every other guide skips: a client portal and a payment webhook that both have to stay public while the admin UI stays gated.

8 steps26 min2026-08-20

Local DNS, Filtering, and Reverse Proxy

Every self-hosting guide ends at 'now point a name at it' and waves. This is that layer: AdGuard Home filtering in front of Unbound resolving behind, a reverse proxy for the names that need one, and the two things nobody writes up honestly, which are that you cannot have both recursive privacy and encrypted DNS, and that a service with a LAN address and a tailnet address needs a certificate covering both or it breaks on whichever path you forgot.

7 steps22 min2026-08-20

Self-Hosted n8n: Public Webhooks, Private Everything Else

n8n is an arbitrary code execution engine, and self-hosting it at home means running one on your own network with a public ingress. This is the split that makes that reasonable: webhooks public behind two edge rules, the editor bound to a tailnet and never published at all, and layers underneath that still hold when the one above them fails.

7 steps20 min2026-08-20

Jellyfin on Proxmox

Plex raised prices and put remote streaming of your own server behind its paywall, so here is the honest replacement: Jellyfin in a Proxmox LXC on the backbone you already built. It serves the media you already have, not your streaming subscriptions, and this guide is upfront about exactly that: where a legal library actually comes from, why direct play beats transcoding until the moment it doesn't, what a media library on another box costs you in bandwidth and latency, and the GPU-passthrough path you only take if you opt in. No *arr, no piracy tooling.

7 steps32 min2026-05-23

Self-hosted on Proxmox

One old PC, one hypervisor, and a backbone you build once: Proxmox plus host-only Tailscale, a local CA, and deduplicating backups, then pick your services. The narrative is the plan-vs-reality friction every other tutorial skips: the 401 wall that locks you out of a fresh install, the wizard toggle that silently leaves Gitea's SSH dead, the backup-token error that lies about why it fails, the restored container that fights the original for its IP, and the one HTTPS header on one service that quietly breaks a sibling on a shared tailnet name.

9 steps55 min2026-05-22

A Custom netboot.xyz Build for Asuswrt-Merlin

The official "netboot.xyz on Merlin" path hands you stale curl-ed binaries and a routine update detonates three independent, mutually-aliasing faults at once. This is the build that routes around all three: a self-built iPXE that trusts the live rolling menu with no private key, the snponly-for-UEFI requirement nobody documents, and an atomic router deploy you can roll back.

11 steps28 min2026-05-16

Self-Hosted MCP Servers on a Tailscale VPS

Most MCP guides assume a server running locally over stdio. This is the remote version: arxiv, Scrapling, and SearXNG hosted on a hardened Tailscale VPS, reachable from any client machine, with the transport, binding, and verification choices that local guides never have to make.

9 steps24 min2026-05-15

VPS Security Foundations

Take a fresh Debian 13 VPS to a Tailscale-only base box you can drop any container workload onto. Zero public ports, hardened sysctl, UFW done right, Docker installed safely, and an Ansible playbook so the next box is one command away.

13 steps28 min2026-05-06

Self-Hosted E-Signatures with DocuSeal

How to stand up a small private e-signature service on a $7/month VPS that rivals DocuSign in principle, with Cloudflare Tunnel, encrypted backups, and zero open ports.

10 steps22 min2026-05-02

Automating a News Feed Pipeline

Funnel, curate, and distribute news automatically — with optional AI augmentation.

4 steps7 min read2026-04-11

Making a Video Clip for TikTok

Going from nothing to an uploaded TikTok video clip, step by step with AI assistance.

7 steps10 min read2026-04-04

Adding Audio to a Web Guide

How I added text-to-speech audio to the SSD Basics guide, from preprocessing to integration.

7 steps12 min2026-04-03