Stack

What I use, and why each thing earns its slot. Updated when something changes, not on a schedule.

Hardware

  • MacBook Pro 14β€³ (M3 Max), daily driver. Big enough for two Claude Code sessions and a dev server at once.
  • Mac Mini in Singapore (M2), always-on. Runs the personal OpenClaw fleet and a couple of crons. Tailscale for remote access.
  • iPhone, for testing mobile (most of our customers are WhatsApp-first) and Telegram, which is where most of my agents live.

AI as a daily collaborator

  • Claude Opus 4.7, default model. I keep Claude Max paid, so the marginal cost of a heavyweight model on a small task is zero. See cost is a product feature for why I default like this personally but never for production agents.
  • Claude Code, AI pair programmer. The site you are reading is mostly built with it. Audit of my own use: claude-code-audit. Tokens through Claude Code: /usage/.
  • Claude Sonnet 4.6, production agent inference at Voltade. Right balance of latency, capability, cost for live customer conversations.
  • Claude Haiku 4.5, cheap async work. Triage, summarisation, log-line classification.
  • ChatGPT, occasional second opinion when I want a different prior.

Agent infrastructure

  • OpenClaw, the harness I run my personal fleet on. Workspace-per-agent, persistent memory, multi-bot routing. Open source.
  • Vobase, the app framework underneath Voltade. Bun + TypeScript + Drizzle, with an agent harness baked in. Self-learning loop covered in how Vobase agents learn.
  • Telegram, primary surface for personal agents. Lawrence, Happy, and friends all run as Telegram bots.
  • WhatsApp Cloud API, primary surface for Voltade customer agents.
  • Postgres, every agent’s long-term memory. Drizzle for schema and queries.
  • WIMAUT, my own agent observability dashboard. Built after a cron job silently burned $300.

Production stack at Voltade

  • Bun, runtime. Fast, native test runner, ships TypeScript without a separate build step.
  • Hono, HTTP framework. Typed RPC client end to end.
  • Drizzle, ORM. The schema is the source of truth.
  • TanStack Query on the frontend, never raw fetch. Realtime invalidation via pg_notify.
  • shadcn/ui + Tailwind, frontend components. OKLCH colours.
  • better-auth, authentication. Plugins for org + role management.
  • Railway, deployment. Push to main, it ships.
  • Bifrost, LLM gateway. Per-tenant virtual keys, no provider-key sprawl.

Dev workflow

  • Cursor, IDE when I want a tighter inline loop than Claude Code’s CLI.
  • iTerm2 + zsh, terminal. Catppuccin Mocha theme.
  • Git, version control. gh for everything GitHub.
  • Vim keybindings, everywhere they will install.
  • OrbStack for Docker, when needed.

PM toolkit

  • Notion, specs, decision docs, weekly customer feedback log.
  • Linear, task tracking when work crosses two people.
  • Figma, lightweight prototyping. Most product decisions get sketched here before code.
  • Loom, async walkthroughs and async customer demos.

Writing + this site

  • Node.js, the entire server. Single file (server.js), no framework, no build step.
  • marked, markdown to HTML.
  • Typst, CV typesetting. Compiles cv/cv.typ to PDF.
  • Buttondown, newsletter. Posts with newsletter: true in frontmatter go out automatically.
  • Umami, privacy-first analytics. No cookies.

Personal-agent ecosystem (macOS scripts)

  • osascript, the bridge from agents to Apple Mail, Calendar, and Notes. Surprising how far this goes.
  • icalBuddy, calendar reads. Cleaner output than scripting Calendar.app directly.
  • memo, Apple Notes CLI.
  • Mindbody API, gym booking source of truth for Lawrence.

See the full site-internals breakdown on the colophon. The named patterns I have converged on live on the frameworks page.