Projects
Git Dummy
2026 · Python, PyQt5, GitPython, GitHub REST API, PyInstaller, NSIS, pytest, GitHub Actions
A desktop git client for people who don't know git. It draws the repo as a map instead of a log: every commit is a node, every branch is a lane, and the commands you'd have to memorise are buttons in plain English.
- Shipped twelve releases as a Windows installer, with in-app updates checked against the release checksums.
- Guards every destructive action. Reverting, force pushing and dropping uncommitted work all say what they'd destroy first.
- Tested against real throwaway repos instead of mocks, which caught line ending, push rejection and ref resolution bugs.
GitHubWebsiteDownload
Military Stores Telegram Bot
June 2024 · Python, Google Sheets API, Telegram Bot API, Digital Ocean
A Telegram bot for tracking military stores inventory, backed by Google Sheets. Instead of logging equipment on paper, the unit checked items in and out through a chat, and the sheet stayed current on its own.
- Adopted by the unit and used for about six months to track stores.
- Still the reference codebase for new bots being built in the unit.
- Gave the higher-ups a live view of equipment straight from Google Sheets.
GitHub
Hackathons
NAISC 2026: Singtel Customer Churn Prediction
2026 · Python, LightGBM, Scikit-learn, SciPy, Pandas, NumPy, Streamlit, Plotly
Our team built a churn prediction pipeline for Singtel that also watches for drift, the gap between the data a model trained on and the data it later sees. Most models fail at this quietly. Ours measures it and corrects for it before training even starts.
- Tested every feature for drift with KS, PSI, Wasserstein, Chi-square, CBDT, MMD and Fisher z-tests, with Benjamini-Hochberg correction across hundreds of tests.
- Reweighted the training samples using seven combined strategies to correct for covariate and concept drift.
- Ran up to 20 rounds of pseudo-labeling so the LightGBM model kept adapting to the test distribution.
- Built a Streamlit dashboard covering PSI breakdowns, CBDT scores, monthly drift timelines and feature importance.
Report
NUS Maritime Hackathon 2026
7 February 2026 · SQL, Databricks, Python
We built a maritime dashboard in Databricks covering global shipping patterns, port activity and fleet performance across thousands of vessel records.
- Delivered an interactive Databricks dashboard covering DWT distribution, cost efficiency, engine types and safety scores.
- Surfaced fleet optimisation insights the team could actually act on.
- Turned thousands of raw vessel records into patterns you can read at a glance.
GitHubPresentation Slides
Maritime ONE Case Summit 2026: BunkerNex
August 2026 · Next.js 15, React 19, TypeScript, Tailwind CSS 4, MapLibre GL, Recharts, Claude Haiku, jsPDF, PapaParse
We took on Pacific International Lines' bunkering case and built BunkerNex, a map of PIL's container services with a simulated 62-vessel fleet, fuel prices and a bunkering optimiser layered on top. You can scrub through three months of voyages, watch tanks run down, and get back the three cheapest ways to fuel the rest of the route.
- Pulled a fuel buying decision out of spreadsheets and broker emails into three screens: a fleet map, a supplier desk and a route optimiser.
- Ranked the three best bunkering combinations over the next five port calls, with a cost comparison and a plain explanation of why the winner wins.
- Built compliance in from the start. Residual and compliance tanks are tracked separately, and a grade that's banned at a port never gets nominated there.
- Said plainly what was simulated. The footers state that supplier quotes are invented and that the optimiser is decision support, not a solver.
GitHubLive siteReport
BrainHack CODE_EXP 2026: Fall In
June 2026 · Finalist · Next.js, TypeScript, Tailwind CSS, Supabase, PostgreSQL, Claude Sonnet, Google Calendar API, Python, python-telegram-bot
Fall In takes the admin out of running a unit. Commanders set up groups, build events with timelines and packing lists, and everyone gets told what they need on Telegram instead of in a mass text half the company scrolls past. We reached the finalist stage at BrainHack CODE_EXP 2026. I built the notification pipeline and the AI assistant that does the setting up for you.
- Reached the finalist stage at BrainHack CODE_EXP 2026.
- Put unit admin in one place: groups, events, timelines, packing lists and announcements, with roles deciding who can change what.
- Sent notifications only to the people they concern, covering new and updated events, group and event additions, announcements, and reminders a day and a week ahead.
- Let a commander set up a whole event by describing it to the assistant instead of working through forms.
- Delivered it all to Telegram, so nobody had to install another app to stay in the loop.
Fall In AppTelegram Server
About Me
Background
Second year at Nanyang Technological University reading Data Science and Artificial Intelligence, looking for my next internship. So far I have built automation systems at LaLaGreen, shipped a desktop Git client with installers, and reached the finals of BrainHack Code EXP 2026.
I'm interested in AI applied to real operational problems. Claude Code and MCP are part of my daily workflow, and I look for repetitive work worth automating.
How I work
Before building, I want to know who it is for and what they actually need. That habit came from leading a platoon of twenty and from pitching automation to stakeholders who do not work in English.
I present my work carefully, whether that is pitching to a business owner or a case competition panel. Good work nobody understands does not go anywhere.
Toolkit
Python · TypeScript · PyTorch · Pandas · SQL · Supabase · Databricks · Claude Code · OpenClaw · MCP · Hermes · n8n · Docker · Google Cloud