Projects
15
In progress
02
Categories
06
Based in
HK

AI Projects

Work in progress

ASEP Capstone (in progress)

My capstone is the first project where the idea, the design and the build are all mine. It grew out of my ASEP internship, where I first started working with vision-language models (VLMs), and it is supported by SPS and the ASEP program.

The problemVLMs are often presented as the thing that will make robots more versatile, because in theory they can understand a scene and navigate it as it changes. That claim has not been tested very thoroughly, especially in environments that move and shift around the robot.

The solutionBuilding on designs from past research, I am testing whether a VLM can navigate dynamic environments zero-shot, with no task-specific training. Where it can't, I want to find out which changes actually help.

What I learned

I’ve gone through a lot of iterations on this project, and the biggest change has been in how I make decisions. On earlier projects my goal was to get the thing working at any cost. Here I set boundaries for the experiment at the start, and every design choice has to fit inside them. If a fix makes the robot look better but breaks the rules of the test, it doesn’t count.

Working this way is slower, but I trust the results more, and I have started to think about my work as an experiment and not only as a build.

ASEP Internship

Patrol Drone

The patrol drone was my first formal project working with hardware, built during my ASEP internship.

The problemMost night patrol guards spend their shift walking the same route. It is a poor use of a person's time and ability, and it is expensive for whoever is paying for it.

The solutionWe set out to design a robot that could take over the repetitive walking part of patrol work, so human effort goes to the decisions that actually need a person.

What I learned

Hardware was a big step up from software for me. Part of the job was rewriting some of the drone’s radio code, which was some of the hardest code I have worked on, because problems on real hardware are harder to see and slower to test.

I also had to design the system in three layers. Planning that structure taught me to think about how the parts talk to each other before I start writing any code.

LLM Server Setup

Also during my ASEP internship, I set up a shared LLM server for HKMU.

The problemHKMU had an H100 server that nobody had set up, while its researchers needed access to LLMs to move their work forward.

The solutionI set up a vLLM proxy, Hermes Agent, a dashboard and other supporting tools so the server could host LLMs and researchers could manage models easily.

What I learned

To pick what to host, I tested a wide range of models on the server. Comparing them side by side, and keeping them running for other people, taught me much more about how LLMs work in practice than using them through a chat window ever had.

Oxford Project

My Oxford project was the first time I combined computer science with another scientific field.

The problemLLMs are trained to fit the data's idea of an ideal, general user. I wanted to know what happens when the user is neurodivergent and that picture doesn't fit them.

The solutionI built test cases that ask LLMs to respond in different styles, and used them to measure how strongly the models lean toward each style.

What I learned

This project is where I learned experiment design: how to set up a test so the result means something, and how to keep my own expectations out of it. Working with ideas from outside computer science pushed me to explain my work clearly to people with different backgrounds. It also made me much more comfortable working with LLMs directly.

Copypasta

Copypasta was my first experience with research, done as part of a team.

The problemMisinformation and rumours spread easily, in the news and across the internet.

The solutionUsing copypastas (blocks of text that get copied and reposted online) as a proof of concept, we explored whether an AI trained on rumours could help push back against them.

What I learned

This is where I first learned how research works, and also how to work on a team: dividing the work, keeping track of each other’s progress, and putting the pieces back together. A lot of the general habits I have as a developer started here.

Independent Projects

Work in progress

Golf Ball Pickup Startup (in progress)

I am the developer on a startup building a robot made specifically for picking up golf balls. The project is funded by my school's Visionary Award, which recognised my independent project work with grant money to spend on the "pursuit of excellence".

The problemMost golf ball pickup robots aren't built for the job. They are lawn mower robots, or other machines, adapted to collect balls. That makes them slow and inefficient, and it drives their cost up.

The solutionWe are designing a robot built only for golf ball pickup. It uses the ball tracking data many driving ranges already collect to plan its work, and it focuses on the greens and the low spots where balls tend to gather.

What I learned

This is my first project with a real budget and a real end user, which makes every decision feel more concrete. It is no longer enough for the robot to work; it has to be worth buying.

Garden of the Self

Garden of the Self is an app where I brought philosophy and computer science together, and put my app development skills to use.

The problemMost modern self-help tools have no systematic line of thought behind them and no real sense of progress. Many focus on helping you feel content, not on helping you improve.

The solutionThe app uses a virtue ethics framework and a garden-and-tree style of progression to encourage small daily improvements and virtuous habits.

What I learned

Designing this meant translating an ethical framework into something an app can track and reward, without making it shallow. The garden metaphor gives the progress a shape you can actually see grow, which is what I felt other tools were missing.

SJS User Management

A user management project for SJS, built to help staff support young people online.

The problemThe cyber-youths SJS works with often have many online identities, which made it hard to keep track of them and give them consistent support.

The solutionI created centralised user profiles that link those identities together and act as a single chokepoint, so staff can see one person instead of many scattered accounts.

What I learned

This project showed me that sometimes the most useful thing software can do is simple: put information in one place so people can do their jobs.

Personal Projects

HomeLab Stack

My home lab is a home server running an ad blocker, data storage, a media streamer, my own VPN and a personal sandbox.

The problemI relied too much on big companies for my digital life. I wanted secure storage, a safe space to experiment with machines without risking catastrophic damage, and fewer ads.

The solutionI built a home lab setup that handles each of these myself, so I can take back control of my digital life.

What I learned

Running my own services taught me a lot about networking, because when something breaks, there is no support team to call. The sandbox has become the place where I try ideas before they go anywhere near something important.

Laptop Setup (Rice)

I turned an old laptop into a Linux machine set up purely for development, customised from the ground up.

The problemMy development workflow was not as efficient as it could be, and I was unsatisfied with my operating system.

The solutionI wrote plugins and manage my dotfiles so I can customise my computer however I need, and I boot Linux on an old laptop to use as a pure dev machine.

What I learned

Along the way I learned basic Lua, got a much better understanding of process management, and became comfortable living in the terminal. Now when something about my setup annoys me, I can change it.

Canvas to Todo List

A small program that optimises my daily workflow around a single todo list.

The problemI didn't have one todo list for everything, and copying my school work across by hand was tedious enough that I never did it.

The solutionThe program pulls my school work from Canvas into my todo list automatically, and I manage everything else there myself.

What I learned

It is a small tool, but I use it every day. It reminded me that the best projects often start with something that bothers me personally.

Work Experience

Open Campus

At Open Campus I built a demo application around their token for credible online learning.

The problemThe Open Campus token was designed to support credible online learning, but there was no clear vision of how it would actually be used.

The solutionI developed a demo application that makes use of the token and shows off what it can do.

What I learned

Building a demo for something that doesn’t have a clear use yet meant I had to imagine the use case before I could build it.

FJ Dynamics

At FJ Dynamics I was a sales intern with a technical background, selling lawn mower and field painting robots. I acted as the technical voice on the team, and presented the products' technical capabilities at a conference.

The problemA product only succeeds if the people using it want it and are willing to pay for it. On the sales side, my job was to explain what the robots could do in terms that mattered to customers.

The solutionI used my engineering background to answer technical questions and to present the robots' capabilities to customers and at the conference.

What I learned

This job showed me the other side of engineering. Engineers can easily forget that the people using a product are what matters. Anyone can make a robot that does something. Good engineering makes it do that thing well, with the features people actually want, at a price that makes sense to them.

I bring that lesson to every project now, especially the robots I build myself.

School Projects

Space Simulator

For my Advanced Physics final project I built a fun physics simulation of orbiting bodies, using real-world planets.

The problemBeyond being my physics final, I wanted an interesting way to get people curious about physics and to help them build an intuitive feel for it.

The solutionI made a space simulator game with real planetary bodies, so people can play with orbits and see the physics in action.

What I learned

I first wrote it in Python. Then I used the project as a chance to learn Rust, rewriting a lot of it and making it run much faster. Rewriting code I already understood was a good way to learn a new language, because I could focus on how Rust does things and not on what the code should do.

Legacy

Skyblock Investment Tracker

One of my earliest projects, a tool to track my in-game investments in Hypixel Skyblock.

The problemI couldn't keep track of all my purchases in my head, and I couldn't watch the in-game market 24/7.

The solutionI wrote a program to track my investments and watch the market for me.

What I learned

It’s a small project, but it was one of the first times I wrote code to solve a problem I actually had, and that habit has stayed with me.