AI agent engineer · Singapore
I build things,
and some of them
keep running.
AI agent engineer living in Singapore. I build LLM products and the checks around them: a synthetic customer panel with its own evaluation, a support agent where code makes the decisions, a macOS transcription app on the App Store. Even my homelab is run by agents, and nothing changes without my review. All of it built solo, mostly hosted on a small server in my living room.
Selected work
All 11 →Solana DeFi Trading Platform
A multi-strategy trading bot for Solana: DEX arbitrage, liquidations, keepers and LST spreads. It ran on mainnet with real capital, lost money, and taught me more in that hour than weeks of simulation had.

Hybrid
A training app on the App Store. Type your session as a sentence, import it from Apple Health, and get a score that makes an hour of yoga and an hour of intervals comparable.
Voxa
Signed · v1.6.1A native macOS app that transcribes and diarizes meetings entirely on-device. Free on the Mac App Store, open source, and used every day for two hundred meetings.
Pokémon TCG Scanner
20 512 cards · 18/18 on the benchPhotograph a trading card and get back which card it is, which set it was printed in, and how much that answer can be trusted. Entirely on the phone, with no network call at any stage.
How a project joins my homelab
One master repo, agents that read it before acting, checks before production, and my yes before anything goes public.
- Work1MeOther branch: my push: GitHub
- 2Master agent(I ask)Other branch: documents: Homelab repo
- 3Project agents(splits)Other branch: rehearses: Rehearsal
- Back to step 2, Master agent (reports)
- Validate4GitHub(commits, merges)
- 5CI(every push)Other branch: red: Project agents
- Production6Auto deploy(green)
- 7Web apps(pulled)Other branch: unhealthy: rollback: Auto deployOther branch: data: SupabaseOther branch: mail: Email relay
- Validate8My approval(go public?)
- Back to step 7, Web apps (Cloudflare route)
5 scenariosPick one, the steps above follow itPick one, the diagram replays its path
A new web project joins the labPublic after my yes
- Decided by
- A shared contract, then me: exposure is never automatic.
- Went through
- Agents classify the risk and wire CI, deploy and health check. It stays private until I add the route.
- Result
- A project that ships like all the others, and is documented.
I push a change myselfLive, no manual step
- Decided by
- CI: a failing check never becomes an image.
- Went through
- Typecheck, lint, image build, then a health check.
- Result
- The new version, or the previous one if health fails.
A build breaks on its way to productionStopped before prod
- Decided by
- CI: nothing is published until it passes.
- Went through
- The failure goes back to the agents, then a new commit.
- Result
- Production never saw the broken version.
A database change is too risky to try liveRehearsed first
- Decided by
- Me, once the rehearsal has passed.
- Went through
- A throwaway copy restored from a backup.
- Result
- A tested plan. Production is untouched until I approve.
The same failure comes backNew runbook
- Decided by
- My rule: a case solved twice is badly documented.
- Went through
- The runbooks and the journal, then the agent's report.
- Result
- A short path in the master repo, so the next fix costs less.
Things I have built
Updated by hand, when something changes
Also built
- PersonasA synthetic panel for testing an idea, a business model or a price before spending money on it. Built to be pessimistic on purpose, because a language model left alone likes everything.0 payers in 3,680 answers →
- Stride Support AgentA customer support agent for a fictional shoe brand, built on one rule: the model writes the reply, code makes the decision. A jailbroken model still has no tool that can move money.0 write tools · 19 safety cases →
- Grandes ColoniesA board game for eight to twelve players, in the browser, on a 3D board. Everyone joins from their own phone, and nobody loses their seat when the wifi drops.Open →
- DocStackA self-hosted document pipeline: OCR, a self-hosted LLM, and an entity graph that builds and resolves itself. No document goes to a cloud API. The model runs on a borrowed GPU machine, and enrichment is paused for now.enrichment paused →
- Health DocsPhotograph a medical document and it comes back named, filed, attached to the right episode of care, with the personal summary already rewritten. A local model does the reading, on a machine at home.8 model calls per document →
- WhatToWatchA trailer feed you scroll through one film at a time, filtered down to what your own subscriptions can actually play. Running on my own server, with a public URL.Open →
The lab
Everything on this site, including this site, runs on a homelab I built and operate: a Proxmox node, a handful of VMs, a local LLM box, and no open ports.
How it works →categories, never service names
