Summary
Left corporate banking because the gap between how systems should
serve people and how bureaucracy actually runs them was too frustrating.
Went freelance to build software for small businesses — where what you
ship actually reaches users and they talk to you directly.
Full-stack generalist. TypeScript-dominant. Runs everything on Railway
with Fastify + PostgreSQL. Lays groundwork for sustainable additions so
changes stay cheap. Fast feedback loops via PaaS, type safety, good linting,
and AI-assisted tooling. Learned the hard way that over-engineering kills
projects before they launch.
Experience
Freelance Software Engineer
Self-employed · Dec 2024 – Present
3 paying clients. Delivered a Telegram-based order management system
(24–26 daily users, PostgreSQL, role-based access, CRON reports), an AI
photobooth for live events, and a restaurant PWA. Sole operator on all
systems: CI/CD, monitoring, on-call, infrastructure. All production
backends deployed on Railway (Fastify, PostgreSQL, health-checked
endpoints, zero-downtime deploys).
API Developer, Digital Channels & OpenBanking
OCBC Bank · Apr 2023 – Sep 2024
OpenBanking API development. Owned the partner onboarding pipeline: spec
review, implementation, regression testing, production release. Managed
change tickets through banking-grade release gates. Zero rollback
incidents. Mentored Ignite apprentices on an internal portal (React,
Spring).
IGNITE Apprenticeship, OpenBanking & Partnerships
OCBC Bank · Mar 2022 – Mar 2023
Built a Node.js CLI that parses Postman collections, auto-generates
assertion tests, and renders results on a dashboard. Replaced manual QA
for the team's API regression suite. Won Rookie of the Year. Taught
JavaScript to secondary school students via Code@OCBC.
IoT Lock Technician
SG Bike · Nov 2018 – Aug 2020
Shared-mobility startup. Trained 3 interns, wrote the team's first
troubleshooting documentation. Reverse-engineered a competitor's lock
firmware acquired through M&A (no keys provided) to integrate into fleet
operations.
Projects
Vexora Solution: Company Landing Page
vexora-solution · 2025 · Static site
Company landing website for a consulting business. Astro SSR with
Tailwind CSS, Express API backend, Prisma + PostgreSQL. Deployed as a
single Railway service.
Tekong Seafood Restaurant: Digital Storefront
tekong-seafood-restaurant · 2024 – Present · Production
PWA for a 35-year restaurant in Singapore. Menu digitized from
spreadsheets into searchable, mobile-first format. Embedded media
(YouTube, TikTok), seasonal promotional banners, Supabase-backed
customer data, offline-first service worker.
Sales Consolidator: Order Pipeline
2026 – Present · Deployed at live events
Replaced manual spreadsheet workflow with a structured order pipeline.
Salespersons submit orders via Telegram. PostgreSQL as source of truth.
Role-based admin flows, CRON-triggered daily summaries, custom ESLint
rules enforcing bot command consistency. Zero data loss since launch.
Extended with an AI product catalog intake: upload transcripts and
DeepSeek AI structures them into product rows for CSV export.
Valentino Houseparty: AI Avatar & Interactive Arcade
2025 – Present · Deployed at live events
4-station beauty brand event activation with a retro 90s theme.
AI pixel art avatar via Replicate (flux-kontext-pro), Snake game,
video stations, QR-code-based navigation, prize claim system.
Built as a SvelteKit 5 SPA with Fastify 5 API, Prisma + PostgreSQL,
and Redis session cache. Retro Windows 98 UI with 98.css and pink
palette. Deployed on Railway. Closest I've been to actual production
users — client was happy, event ran live.
Themelios: AI Accounts Receivables Platform
Jul 2024 – Jan 2025 · Attempted startup (scrapped)
AI-powered platform for business owners to manage invoices, collections,
and payment reconciliation. Built with Temporal.io for durable workflow
orchestration, Mastra AI agents for email-based receivables
conversations, Xero accounting API integration, Stripe payment
processing, oRPC type-safe API contracts, and Azure AD authentication.
Monorepo with React 19 + Redux Saga frontend, Fastify + Prisma +
PostgreSQL backend, and dedicated Temporal worker service.
Over-engineered for the problem and never shipped. A lesson in scoping.