Go somewhere.

Home Page About Page Projects Page CV Page Dev Page Journal Page Contact Page Privacy Policy Page Terminal Spike Privacy Policy Page Astro for Documentation and a Professional Site Dev Codex anywhere with tmux, Mosh, Termius, and Tailscale Dev Observing Codex MCP Tool Calls with Langfuse Dev Localization in Product Apps Dev MCP as a Safe AI Integration Boundary Dev Zod, OpenAPI, and Swagger for API Contracts Dev pg-boss for Durable Background Jobs Dev pgvector and RAG, Explained Through a Real Knowledge Workflow Dev Pi Edge: Pi beside my Obsidian notes Dev Pragmatic Drag and Drop for Real Ordering Tasks Dev Prisma and PostgreSQL as the Product Source of Truth Dev Ralph Loop as a Plan Queue Dev React Router for Full-Stack Product Workflows Dev shadcn-Style UI as an Owned Product System Dev Dense Operational UI with Tables and Editors Dev Terminal Spike: a Native Android Terminal Dev Input Chinese pinyin with tones on Linux with fcitx Dev How to configure the DEFT Pro trackball on Linux Dev Use Pocket (read it later) on KOReader Dev Vercel AI SDK with Explicit Tool Boundaries Dev Vertical Slice Architecture with Dependency-Cruiser Dev Testing Product Workflows with Vitest and Playwright Dev My anywhere workflow: Herdr, code-server, Obsidian, and Pi Edge Dev Zod Beyond Validation Dev The Brothers Karamazov is the best novel I have ever read Journal Oral history of two Christians in a Chinese labour camp in the 1960s Journal The Word in the Bible Journal We love because He first loved us, not meaningless self-love Journal Mom, let me take the blame for Dad's mistakes Journal My story with God Journal The world is far from God, close to China Journal The Five Love Languages and Extrovert Only Exist in Language Journal Personality types don't exist, life is not a matching game Journal Dangerous words, why psychology is impossible Journal The story of a Shenzhen worker in 2000 Journal A Conversation with a Driver in Ras Al Khaimah Journal Shadian: a 1975 conflict between Communist forces and Muslims in China Journal Documentaries About China Journal

01 / Native Android · Developer tools

Terminal Spike.

Your remote workspace, on Android.

My open-source Android terminal for SSH, built-in Mosh, and remote coding. Resume Herdr spaces and agents, navigate with touch, and follow links into code-server or Obsidian. Connection details stay on your device.

Platform
Native Android
Built for
Herdr, tmux & remote agents
Privacy
No analytics or accounts
A workspace that goes with you.
Terminal Spike in action · 45 seconds · No audio Watch on Google Photos ↗

02 / Obsidian · Remote agents

Pi Edge.

Your notes. Your computer. Pi beside them.

An Obsidian plugin I built to chat with Pi on my computer from my phone or desktop. Attach notes and images, switch models, and return to earlier conversations without leaving the vault.

Client
Obsidian on mobile & desktop
Connection
Paired bridge over LAN or Tailscale
Context
Notes, selections & images
pi edge / obsidian on a Galaxy Fold
Pi Edge chat beside an Obsidian note, with a clickable note attachment

Workflow / Connected tools

One workspace.

Pick up the work wherever I am.

Terminal Spike opens my Herdr workspace. code-server gives me a browser editor. Obsidian holds the project context, with Pi Edge for working with Pi beside my notes. Links connect the views; Tailscale connects my devices.

My connected workspace

Terminal Spike Android · SSH / Mosh Herdr Spaces · Terminals · Agents Pi Edge Obsidian ↔ Bridge ↔ Pi on my computer
Tailscale connects my devices. Links connect the work.

03 / AI product · Full stack

OpsDesk AI.

AI-assisted work. Human judgement.

A policy-gated service desk demo that turns customer enquiries into reviewed operational work. Capture an enquiry, extract intent and risk, route approved templates, and keep complex cases in human hands.

Automation
Approved templates & risk checks
Visibility
Confidence, tokens & cost
Workflow
Triage, review & webhooks
opsdesk / live demo
OpsDesk AI service desk showing enquiries, approval status, and operational controls

04 / TypeScript · Agent tooling

Ralph Loop.

One plan. One focused run. Repeat.

A small TypeScript CLI for draining a folder of reviewed Markdown implementation plans through Codex. Plain files, fresh context, and auditable runs keep each change focused and reviewable.

ralph-loop / workflow

$ ralph --plans ~/plans --once

  1. 01 Pick the next runnable plan
  2. 02 Start a focused Codex run
  3. 03 Simplify and review the change
  4. 04 Archive the completed plan

Reviewed plans → verified changes