I Built a Dead Man's Switch That Watches My Nostr Activity

A dead man’s switch triggers actions if you stop responding. The existing ones — Aeterna, LastSignal — require periodic manual check-ins. That works. But Nostr already has a better signal: every post, reaction, zap, and repost is a cryptographically signed event tied to your public key. Your normal usage is proof of life. I built nostr-dead-man-switch to use that signal. It subscribes to relays, watches for any event from my npub, and resets its timer on activity. If I go quiet for long enough and don’t respond to warning DMs, it fires off emails, webhooks, or Nostr notes to the people who need to know. ...

April 11, 2026 · 4 min

MCP Memory Server: One Month In

A month ago I wrote about building a self-hosted memory layer for Claude Code. The system has been running continuously since then — 194 memories stored, mostly from Claude Code sessions across a dozen projects. This post covers what I learned from actual usage and the changes I made as a result. What Changed After Real Use The original system worked. Search found relevant memories, AI metadata extraction added useful structure, and the mobile capture form let me save thoughts from my phone. But a month of daily use exposed friction points that weren’t obvious during initial development. ...

March 31, 2026 · 8 min

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

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

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