broadcasting on:
< return to archive

Personal AI Stack — operations

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.