Full-stack engineer based in Singapore with 4+ years of experience building scalable backend systems and the frontends that sit on top of them. Currently at Vistra Singapore; previously at DCS Card Center, where I worked across TypeScript, Spring Boot, and PostgreSQL — focused on API performance, observability, and turning slow, manual workflows into fast, automated ones.

I care about the parts of software that compound: clean queries, good monitoring, type-safe interfaces, and code that the next engineer can actually read.

Mar 2026 — Present
Full-Stack Engineer — Vistra Singapore, Singapore
Building features across Next.js and Node.js.
  • Building internal AI tooling on Amazon Bedrock, including custom MCP servers that give coding agents access to the codebase.
  • Developing with AI through test-driven development: tests written from the spec first, with AI-assisted code review.
Next.js
Node.js
Amazon Bedrock
Mar 2025 — Mar 2026
Full-Stack Engineer — DCS Card Center, Singapore
Built and scaled backend services and customer-operations tooling for a card-issuing business.
  • Cut high-traffic API response times from 1–2 minutes to under 1 second by restructuring queries with CTEs to narrow data before joins. Read the note →
  • Automated card add-ons, fee waivers, and similar workflows, reducing manual agent intervention by ~80%.
  • Built a JWT + Lark OAuth sidebar app embedded in Zendesk, letting agents process customer requests (card closure, address updates) without leaving the ticket.
  • Stood up Grafana and Prometheus dashboards for backend services, surfacing performance regressions and scaling bottlenecks before they hit customers.
  • Introduced async task workers in Spring Boot to offload heavy operations and keep response times stable under load.
  • Refactored legacy services with parameterized SQL, closing injection risks and improving maintainability.
TypeScript
Spring Boot
PostgreSQL
Redis
Grafana
Prometheus
May 2022 — Jan 2025
Software Engineer — Kiteworks, Singapore
Full-stack engineer on a secure file-sharing platform serving enterprise customers.
  • Built interactive compliance dashboards in React + TypeScript, giving compliance officers visibility into file activity and policy violations.
  • Audited and remediated CVEs in frontend dependencies, replacing or patching compromised libraries to keep the platform compliant for enterprise customers.
  • Identified privilege-escalation and broken-access-control vulnerabilities during internal bug bashes, preventing scope-bypass issues from reaching production.
  • Migrated frontend components from JSX to TSX and introduced custom React hooks, improving type safety and reducing duplication across teams.
  • Led bug triages, sprint planning, and cross-team security reviews across engineering, product, and compliance.
React
TypeScript
Node.js
Python
PHP
PostgreSQL
Vue
Jan 2021 — May 2021
Software Engineer Intern — ST Engineering, Singapore
Reduced an RPA job's runtime from 10 minutes to 1–2 minutes by replacing brittle automation tasks with Python scripts and partnering with the RPA vendor on bug fixes.
Python
RPA

I do most of my development with AI agents: Claude Code day to day, and Amazon Bedrock at work. AI writes the first draft; tests, review and my own checks decide what ships.

  • Tests first. I write the tests from the spec before the agent writes any code, so "done" means the tests pass, not that the agent says so. AI also reviews my diffs as a second pair of eyes.
  • Grounded, not guessed. My agents are set up to ask when something is unclear and to back answers with docs and research, so I learn the context instead of trusting the output blindly. Hooks compact long sessions before the context grows large enough to cause drift, saving a checkpoint first.
  • Cost-aware. Different agents run on different models: cheap ones for lookups and boilerplate, the strongest only for changes that span several parts of a system. A terse output mode cuts token use further.
  • Internal tools at work. At Vistra I build internal tooling on Amazon Bedrock, including custom MCP servers that give coding agents access to our codebase.
  • Verified in production. A deploy once reported success while the server kept running the old config. I caught it by checking the live site, not the agent's summary.
  • Agents as pipeline stages. For a side project making short Singapore history videos, Claude Code writes scripts from my research notes and picks archive search terms; Node scripts fetch licensed images, render the video and add the voiceover. I approve every script and image by hand.

Flatlas — Singapore HDB Resale Map
Go · PostGIS · Martin vector tiles · React · MapLibre GL · DuckDB · Docker
An interactive map of every Singapore HDB resale since 1990 — roughly a million sales across ten thousand blocks. Zoom from ranked town choropleths to block dots to 3D buildings coloured floor by floor, and switch the map between price, $/m², lease, rent, rental yield and 5-year growth, in real or nominal dollars. Click any block for its price history and a hedonic model's verdict (test R² 0.94) on whether it sits above or below its likely value. Live at flatlas.sg. Read the case study →
Parking Arrival Prediction — Singapore
TypeScript · Node · Postgres · grammY · Docker · GitHub Actions
Every parking app here shows the lots free right now, which is fiction after a 30-minute drive. This one logs every public carpark feed in Singapore every five minutes and predicts whether a lot will still be there when you arrive, served as a Telegram bot. Each carpark is backtested walk-forward and has to clear an accuracy bar before it is allowed to answer — the ones that can't say "not enough signal" instead of guessing. Read the case study →
Hello Again — Merchant Portal
Vue 3 · Spring Boot · JWT · PostgreSQL
A merchant portal for managing inventory, employees, and business analytics. Built as an excuse to go end-to-end on a stack I don't use at work — frontend in Vue 3, backend in Spring Boot with JWT auth, admin dashboard layered on top.
Audio Transcriber
React · FastAPI · Redis · Docker · Whisper
A web app that transcribes uploaded audio files using OpenAI's whisper-tiny model. Async processing via Redis queues and Docker containers keeps the UI responsive while transcription runs in the background — the kind of architecture you'd reach for if this were a real product.

Open to interesting backend, full-stack, and platform problems. Quickest way to reach me: