More on GitHub. I build tons of useless stuff for fun, and because they’re cute.

Lead contributor for 2 years in this full-stack real-time Mafia game platform. Guided new contributors, including closely mentoring two high-school students for a year each.

xbar plugin to monitor active Claude Code sessions from the macOS menu bar.

Pose estimator trained in Tensorflow/Keras using transfer learning and the ensemble method. Won 6th place (Merit Award) out of 50+ teams at DSTA TIL AI Hack 2019.

Windows malware anti-analysis techniques, including self-debugging and anti-virtualisation. Educational reference for reverse engineers.
Binary exploitation techniques — buffer overflow, format string attacks, and ROP chains. Env: Ubuntu 16.04 with PEDA/GDB.

Retro word game (256×256 pixels!) in Python and Pyxel. Ieripsnd by our atiliby to qlkciuy raed selbmarcd wdros wettirn tihs way.
Contributed to open-sourced SMAPI mods for the game, including a butterfly-catching mod.

Cosy pixel art Chrome extension that replaces your new tab with a calm productivity corner. Sticky notes, checklists, ambient music, customisable backgrounds, and 20 draggable decorations.
Legal document search engine: tf-idf, positional phrase indexing, Boolean queries, and Rocchio relevance feedback.

AI Agent to play limit poker.
Python recreation of the Tamagotchi Version 4 Connection toy. Custom game engine with character evolution, in-game shop, and Pyxel graphics.

TCP-based traceroute in C using raw sockets. Bypasses ICMP firewalls that block traditional traceroute.
Game-theoretic analysis of the childhood game Chopsticks. Builds a game state graph to prove that optimal play always results in a perpetual tie. (It's impossible to win unless your opponent made a mistake.)

Satirical Animal Crossing news site with weekly crossword puzzles. Built during COVID for the SG Animal Crossing community.

Discrete event visualiser with xkcd-style charts. Built to explaining loss-dampening in roulette by betting on more squares.

Uses an RPi+COAP protocol with light sensors. Detects and displays if a room is occupied in real-time, more accurate than room booking systems.
Software-defined networking: Programmed for L2/L3 (switch/router): self-learning switch, firewall, variable QoS
Multiplayer word-guessing game on Telegram. A social zero-knowledge game, where players must prove that they know a word without revealing it.
Used OLS to define access rules on database tables

Object-oriented virtual machine that executes assembly code, with memory, registers, stack, function calls, jumps, and an ALU. Built for the Synacor Challenge.
Attack on PKCS5/7 Padding. By knowing if a given ciphertext is valid, we can trace backwards the original plaintext. We can also use this to generate ciphertexts for new plaintexts.
Enables NUS students to use IVLE login to get a queue number at the school clinic. Shows the estimated wait time as well. Without this, you had to take a queue number and physically wait at the clinic for an hour.
HacknRoll 2019 hack. Play a keyboard piano across octave rows — each note generates artwork, exploring synesthetic neurodivergence.