The plan
Photo by ThisisEngineering on Unsplash
What I'm building, why, and where it stands after the first week. A homelab, a personal vault, a design agent pipeline, and a site to document all of it.
I’ve been meaning to build this for a while. A system that connects my notes, my tools, and my design work — without depending on a stack of SaaS subscriptions I don’t fully control. This site is where I document it as it gets built.
What I’m building
Three things that feed into each other:
A homelab — two always-on machines running the services I actually use: n8n for automation, Penpot for design, Ollama for local AI, CouchDB for vault sync. Everything behind Tailscale and Nginx Proxy Manager, accessible anywhere via *.[domain].
A personal vault — Obsidian notes that sync in real time across Mac, iPhone, and eventually any device. Self-hosted LiveSync over CouchDB instead of Obsidian Sync. No data leaving my infrastructure.
A design agent pipeline — an n8n workflow that takes a brief, generates design variants using local and cloud AI models, and outputs them to Penpot. Built around the design system I work with daily.
This site documents the build. Every major milestone gets a post here, generated automatically when I tick a checkbox in my planning doc.
The hardware
- Pi-hole DNS
- Exit node
- Watchtower
- Claude Code
- Obsidian vault
- Figma · Browser
- n8n
- Penpot
- CouchDB
- Ollama · Open WebUI
- NPM reverse proxy
- Immich
- Homepage
- Uptime Kuma
- Obsidian
- Blink Shell
The GMKtec runs an AMD 780M iGPU with 3GB actual VRAM — enough for qwen2.5:7b via Vulkan, which handles all automation. Heavier quality work goes to the Claude API. The Pi handles everything that needs to be reliable but doesn’t need compute.
The phases
The full plan runs across 7 phases. Each one gates the next.
| Phase | What | Status |
|---|---|---|
| 0 | GitHub backbone, artupinad.com rebuild, foundation files | ✅ Done |
| 1A | GMKtec services live (n8n, Penpot, CouchDB migration) | ✅ Done |
| 1B | Vault migration from Pi4 SSHFS → GMKtec CouchDB | ✅ Done |
| 2 | Vault structure, CLI layer, note templates | 🔄 Now |
| 3 | CLI tools wired to n8n webhooks | — |
| 4A/4B | n8n core agents + design agent pipeline | — |
| 5a/5b | Design system in Storybook | — |
| 6 | RAG with Qdrant — askvault() in terminal | — |
| 7 | Multi-agent critic loop | — |
What’s been built
Phase 0 involved more decisions than work. The biggest was dropping Sanity.
I built the first version of this site with Astro + Sanity CMS. The journey post automation wrote drafts directly to Sanity via their write API. It worked, but Sanity was the only external dependency in the chain — a dashboard to manage, a token to rotate, a service to stay running.
- sanity
- @sanity/client
- @sanity/astro
- @portabletext/to-html
- studio/ directory
- @astrojs/mdx
- src/content.config.ts
- src/content/journey/*.mdx
Posts are now MDX files committed directly to this repo. The automation still works the same way from the outside: tick a checkbox in MASTERPLAN.md, push, a Claude-written draft appears as a PR. The difference is one fewer service in the chain.
Phase 1A was infrastructure. Five services deployed to GMKtec, CouchDB migrated from Pi4 to GMKtec without dropping a single sync, n8n and Penpot accounts set up with proper SMTP, Cloudflare R2 wired as the CDN.
What’s next
Phase 1B migrates the Obsidian vault off the Pi4 SSHFS mount and onto the new GMKtec CouchDB backend. This eliminates the last fragile dependency in the daily workflow: the SSHFS mount that breaks whenever the Mac sleeps wrong.
After that, Phase 2 scaffolds the vault folder structure and CLI aliases. Then Phase 3 wires the CLI to n8n webhooks. Then the agent work starts.
The goal isn’t to finish fast. It’s to build something I’ll actually use every day.