Personal AI Stack — operations
the boring part of having your own robots
The launch phase was fun. Spinning up Coolify on a VPS, wiring n8n, dropping LibreChat in front of a few MCPs. Demo day.
Operations is the phase after. Nobody writes blog posts about operations. It is the Gmail-to-Notion invoice workflow that has to survive a malformed email. It is the OAuth tokens that silently expire on a Sunday. It is the backup script nobody will miss until the day it was needed. It is the work of keeping a self-hosted stack from quietly rotting.
What lives on the stack
chat.gabi.tv— LibreChat v0.8 with MCP servers for Notion, Gmail, Linear, Google Drive, Google Calendar, Brave Search. OpenRouter as the model gateway so any model is one config edit away.n8n.gabi.tv— workflow runtime. Postgres + Redis next to it. First productive workflow: Gmail receipts into a Notion “verified subscriptions” database.coolify.gabi.tv— the orchestrator for all of the above, running on a Contabo VPS 10 with Traefik + Let’s Encrypt, fail2ban, UFW, Tailscale-only SSH (port 22 closes once I’m done soak-testing).status.gabi.tv— Uptime Kuma, because if you don’t know it’s down, it’s been down for longer than you think.
What this project is about
The backlog is unglamorous on purpose: closing the public SSH port after Tailscale soaks, backing critical secrets into a password manager (without this, restore is impossible), validating an end-to-end case where the chatbot actually operates my Notion / Gmail / Linear / Calendar through its tools, and building the workflows I was manually doing in a spreadsheet.
No agent development here — that lives in a sibling project. This one is plumbing.