Skip to content

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 →
pausedTypeScript · Node.js · Solana

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.

Dry run, sixteen minutes in: four strategies armed, the curve flat because nothing traded
Dry run, sixteen minutes in: four strategies armed, the curve flat because nothing traded
Live on the App Store

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.1

A 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 bench

Photograph 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.

  1. Work1MeOther branch: my push: GitHub
  2. 2Master agent(I ask)Other branch: documents: Homelab repo
  3. 3Project agents(splits)Other branch: rehearses: Rehearsal
  4. Back to step 2, Master agent (reports)
  5. Validate4GitHub(commits, merges)
  6. 5CI(every push)Other branch: red: Project agents
  7. Production6Auto deploy(green)
  8. 7Web apps(pulled)Other branch: unhealthy: rollback: Auto deployOther branch: data: SupabaseOther branch: mail: Email relay
  9. Validate8My approval(go public?)
  10. Back to step 7, Web apps (Cloudflare route)

5 scenariosPick one, the steps above follow it

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.

Also built

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 →
web4 up
llm nodeidle
mediadegraded

categories, never service names