Household finance suite
2026 · Active · private- The problem
- Our household's money sits across several accounts and currencies, and answering a simple question meant opening a spreadsheet or building another chart.
- What I built
- A private app that tracks net worth daily, reads bank alert emails with a small language model, and gives Claude narrow read and write tools over MCP, with permissions enforced in the database.
- What I learned
- Measuring the classifier showed our own correction history was right 90% of the time and the model 58%, so the app stopped interrupting us about the first group.
- Next.js
- Postgres RLS
- MCP
- Claude
Have Haze Not
2026 · Active · public TRMNL recipe- The problem
- During haze season the first thing we check each morning is the air, and I wanted that on the e-ink display on the shelf instead of in an app.
- What I built
- A TRMNL recipe with no server: the display polls public APIs, and Liquid templates draw a halftone map of Singapore's five regions, the current reading and a 24-hour forecast.
- What I learned
- Most of the work was choosing which number to show. The hourly reading answers whether to open the window now, and the daily average does not.
Home Assistant add-ons
Ongoing · ActiveCustom add-ons that run our home: InventoryBot (barcode-scanner stock tracking), BabyBot (feed and care log), FlightBot (ADS-B receiver on an RTL-SDR stick) and ChoreBot (tablet chore tracker that alerts Home Assistant when something is overdue). Images are published to GitHub Container Registry.
WeDo
2022 · MaintainedInvitations, RSVPs and door check-in for our wedding. Rewritten in 2026 on Next.js 16 and Prisma 7, with Slack RSVP notifications.
SpendBot
2024 · Retired · precursor to the finance suiteOur first expense tracker: a Telegram bot that read receipt photos with GPT models and a web dashboard. What we learned from it became the household finance suite.
- Next.js
- Telegram
- LLM extraction
SG Vaccine Tracker
2021 · ArchivedShowed how many Singaporeans were fully vaccinated before official percentages existed. Lambda scraper, DynamoDB, and a Twitter bot that drew progress in Mahjong tiles.