Caddyfile Manager is the control plane for the reverse-proxy layer that fronts every site I run — daha.us, perfecthomestrategies.com, brentrussell.com, and the homelab services behind them. Caddy serves as a great reverse proxy server, but its config is a single text file, and once you're past a dozen sites that file becomes the bottleneck: a misplaced brace breaks TLS for everything. So I built a visual editor that owns the Caddyfile end-to-end.
The app is structured around four working surfaces. Sites is the main view: each domain (or domain group) renders as an expandable card with reverse proxies, redirects, custom headers, named matchers, IP allow/deny rules, TLS snippet imports, and per-site logging — all edited inline, grouped by project with chip-style filtering and live search. Snippets and IP Presets capture the reusable bits — a cloudflare_tls block, a cache_bust header set, named CIDR groups like LAN or VPN — so common patterns aren't copy-pasted across sites. Preview shows the generated Caddyfile in real time, ready to copy or download.
Anything too intense for CaddyFile Manager to decompose cleanly drops into per-site Raw Mode, where the original block is preserved verbatim.
Architecturally it's deliberately backend-free: a single static HTML file with vanilla JavaScript handling state, parsing, and Caddyfile generation entirely in the browser, with localStorage as the persistence layer. A thin Next.js 16 shell wraps it for dev tooling and deployment, but there's no server, no database, no auth — the file you generate is the source of truth, and you paste it into Caddy yourself. That keeps the trust boundary tight (the tool never touches the live server) and means it runs anywhere a browser does.