I Gave Claude Code Access to My Email

I’ve been running Claude Code as my primary development tool for months now. It writes code, reads docs, manages git — all from the terminal. But there’s always been a gap: it can’t see my email, my calendar, or my contacts. If I ask “what’s on this week?” it has to guess. If I need to draft a reply to someone, I’m switching to the browser. Fastmail MCP Server fills that gap. MCP (Model Context Protocol) is a standard that lets AI tools call external services through a uniform interface — the AI discovers available tools, calls them with structured inputs, and gets structured outputs back. An MCP server is just a process that exposes those tools. This one connects to Fastmail’s JMAP API and gives any MCP client access to 38 tools across email, contacts, and calendar. ...

March 16, 2026 · 4 min

You Don't Need a VPN App

Your Linux machine already has everything it needs to run a VPN — no app required. WireGuard is built into the kernel, and setup takes five minutes.

March 11, 2026 · 6 min

Talk Into Your Phone, Get a Blog Post: Building a Voice-to-Post Pipeline

A self-hosted pipeline that turns Telegram voice messages into draft blog posts — Whisper for transcription, Claude for writing, GitHub for commits, all wired together in n8n.

March 8, 2026 · 7 min

Building a Self-Hosted Memory Layer for Claude Code

Most AI tools have some form of memory now — Claude Code has its CLAUDE.md files, ChatGPT remembers things between sessions, Cursor has rules files. But these memory systems are siloed to one tool, stored as flat text, and not searchable by meaning. You can’t query “what did I decide about authentication last month?” and get a useful answer. Your context doesn’t travel between tools, and there’s no structure beyond what you manually write. ...

March 4, 2026 · 8 min

Mining Your Own Timesheet Data

Ask a contractor what they’ve worked on in the last year and you’ll get a vague answer. Something like “infrastructure, some web stuff, bit of everything really.” Ask me and I’ll give you a categorised breakdown of 489 logged tasks across 560 hours — because I tracked all of it. Why Track at This Level I use Kimai, an open-source time tracker I self-host. Every task gets a description. Not “did some work” — an actual note. Migrated LND wallet to new channel database. Configured Caddy reverse proxy with mTLS passthrough. Wrote Python script to reconcile UTXO set against xpub descriptors. That kind of thing. ...

February 26, 2026 · 4 min

LNbits Settings: The Database Always Wins

My LNbits instance stopped working. No config changes, no updates I’d triggered intentionally. Just VoidWallet errors where there used to be a functioning Lightning wallet. The fix took an embarrassingly long time to find, not because it was complicated, but because the failure mode was completely misleading. If you’re running LNbits in Docker with the Admin UI enabled, this will probably bite you too. The Symptom LNbits was falling back to VoidWallet on every startup: ...

February 21, 2026 · 4 min

My First Open Source Contribution: SimpleX Chat WebSocket Binding

This is a follow-on to my SimpleX CLI Docker Setup post. If you read that, you might remember the socat workaround I used to get around the WebSocket server only binding to localhost: command: > sh -c "socat TCP-LISTEN:5225,fork,bind=0.0.0.0 TCP:127.0.0.1:5226 & simplex-chat -p 5226" It worked, but it always felt like a hack. The underlying issue was that simplex-chat hardcodes the bind address to 127.0.0.1 when you use the -p flag. ...

February 1, 2026 · 2 min