Products I've built
Wall Street Journal
Articles
Companies Turn to Internal Crowdsourcing to Pick Best New Ideas
By using a system modeled after websites such as Kickstarter, companies allow employees to have a say in which projects deserve to be funded.
NASA Administrator Jim Bridenstine on Life off Earth
The former Oklahoma congressman wants to make space accessible to everyone, and (possibly) discover life on other planets.
Forget Passwords. It's Time for Passphrases.
Two researchers say they have come up with a system that makes passphrases more secure and practical.
Artificial Intelligence May Make Traffic Congestion a Thing of the Past
Startups and car companies see AI as the answer to a lot of traffic troubles.
What's an Online Ad Worth? Blockchain Might Help With That
Three startups propose blockchain-based solutions to rampant fraud in digital advertising.
Blockchain May Offer a Resume You Can Trust
Colleges and tech companies are using the digital ledger to develop easily verifiable diplomas and employment records.
Inside Verizon Wireless's Hurricane Playbook
To maintain phone service, the chief network officer deploys drones, boats and a lot of fuel.
'Catch Me if You Can' Scam Artist Has a Warning for Today's Consumers
Frank Abagnale Jr., whose exploits inspired the Leonardo DiCaprio movie, says digital technology and social media only make things easier for swindlers now.
Living Wills: How Each Bank Performed
A look at how each bank was judged by regulators.
Wall Street Journal
On camera
1:04Juice Up Smartphones With JUMP's Hidden Battery
1:57Tinder vs. OkCupid: Which App Finds Love Faster?
1:37Does Sony's Vita Add Life to Gaming on the Go?
1:23To Play or to Pass? Sony's Playstation Vita TV
1:53Microsoft Unveils Its Latest 'Surface' Tablets
4:08Slap My Wrist Up! Fitbit, Nike or Jawbone Best?
3:36Are Translation Apps for China's Twitter So Bad?
9:11Waze App Helps You Avoid Traffic Cops
2:34An Important Lesson in Startup Failure
5:21Nate Silver: Exhausted by Politics
Open Source
GitHub projects
36 repositories across MCP servers, web apps, desktop tools, browser extensions, and more.
appreviews-mcp
Synthetic user personas from real app store reviews for product research and competitive analysis
gmail-mcp
Remote MCP server for Gmail with AI-powered semantic search, knowledge graph, and 31 tools
bouncie-mcp
MCP server for the Bouncie OBD2 vehicle tracker. GPS, trips, diagnostics, and fuel data with multi-user OAuth
opnsense-mcp
MCP server connecting Claude to OPNsense router API. Firewall, diagnostics, VPN, DNS, and 20+ modules with 750+ methods
target-shopper
MCP server that lets Claude automate Target.com grocery ordering via Playwright browser automation
coparenting-email-archive-mcp-server
Sync and archive email exchanges via IMAP. AI-powered summaries, auto-tagging, and MCP server for Claude
tsa-times
Live TSA security checkpoint wait times for JFK, Newark, and LaGuardia with historical trends
gist-email
Natural-language Gmail search. Cmd+K overlay using local LLM indexing and hybrid vector/full-text retrieval
radio-blighty
Time-shifted BBC and UK radio player for expats. Hear the breakfast show at your breakfast time
coned-tracker
Real-time Con Edison power outage tracker with live map, timeline charts, and historical data for NYC
money
Open-source replacement for NCH MoneyLine. Fast, modern web app for personal finance management
transcord-app2
Transcord v2. Full rewrite with Next.js 15, Prisma, Stripe billing, and word-level transcript highlighting
resume-ai
Interactive AI-powered resume where visitors ask questions answered by a local LLM with streaming responses
interview-coach
Real-time AI interview coach using Deepgram speech-to-text and Claude for live tactical suggestions
subway-data
Captures NYC subway GTFS-RT realtime feeds into TimescaleDB for delay analytics and travel-time prediction
dossier
Research dossier builder
orbital
macOS menu bar app tracking NASA missions in real-time. Live Artemis II telemetry with altitude, speed, and mission phase
remaining-balance
macOS menu bar app that tracks Anthropic API spend in real time with hourly burn rate, charts, and spike alerts
burndown-garmin-watchface
Garmin watch face that visualizes Body Battery as a color-coded grid of squares for 20+ devices
arduino-json-api
Arduino WiFi web server with HTTP/JSON API for remote pin control. Originally built for a door buzzer
killswitch
Docker-based parental control app that manages internet access by toggling TP-Link switch ports on a schedule
vision-language-plates
AR-style license plate scanner. Phone camera through a local Ollama vision model returning structured plate data
snowmageddon
Ring camera timelapse capture during snowstorms with a scrubbable web-based timeline viewer
tab-tunnel
Firefox extension that routes specific tabs through a SOCKS5/WireGuard VPN. Selective split-tunneling for streaming and privacy
ClassSnag
Chrome extension that auto-monitors and books fitness classes on VirtuaGym-powered gym websites
resume-chrome-extension
Chrome extension that tailors your resume to any job posting using Claude AI and generates an ATS-optimized PDF
dev-setup
One command to set up a Mac or Windows machine for development with Claude Code, VS Code, and essential tools
synology-s3
Synology DSM 7 package that turns your NAS into an S3-compatible endpoint with a native admin app
mediasort
Zero-dependency Python CLI that organizes movies and TV shows into Plex-friendly folders using TMDB metadata
rsync-backup
Rsync backup scripts with SSH remote pull, hard-link deduplication, and automatic hourly/daily/weekly rotation
imap-to-sheets
Sync emails from any IMAP server to Google Sheets with full metadata, deletion tracking, and cron scheduling
gmail-schedule-block
Hide and resurface Gmail emails on a per-sender schedule. Block notifications outside business hours
kickstarter_analysis
Exploratory data analysis of 46K Kickstarter campaigns with outlier detection and statistical visualizations
speechAnalysis
TF-IDF analysis of U.S. State of the Union speeches from 1790-2012, identifying key terms by year and decade
ImageAnalysis
Fire and flame detection in images using pixel color analysis and connected-component labeling
crashy-bird
Flappy Bird clone for the BBC micro:bit built with Microsoft MakeCode
Background
The short version
I started in finance, on the trading floors at Lehman Brothers (yes, that one), Barclays, and Morgan Stanley, building real-time systems where milliseconds actually mattered.
Then I switched to journalism. Got a Google Scholarship for a Master's at the University of Hong Kong, worked at the Wall Street Journal and Dow Jones, and spent years figuring out how to make newsrooms work like product organizations.
Now at Reuters, I lead consumer product: the apps, the web, the things millions of people actually touch. I got there by shipping fast and measuring what worked: a $1M mobile subscription ARR in 4 weeks, a podcast on track for $9M ARR, AI features that outperformed everything before them.
I also build my own things. I founded Cleartext Labs because I kept running into the same problem: important conversations happen, and then there's no reliable record. Transcord handles calls. CEDAR handles co-parenting emails. Both are tools for people who need the truth documented, not remembered.
Education
BSc Computer Science, Exeter
MJ Journalism, HKU
Citizenship
US & UK dual
Stack
TypeScript, React, Node
Python, SQL, AWS, GCP
Claude API, MCP
Interests
AI product strategy
Real-time systems
Legal tech