^

Projects

Android React Java Other

Since I was about 12, I've been coding in some form in order to solve problems.

From a metronome app to help me practice the piano to a Student ID Scanner to record participation at university tutorials, I've always looked for ways to do things better with technology.

Below is a selection of some of my favourite projects.


MultiQR

2021

Android, Kotlin

ZXing, CSV, Android File Management, Fragments, Jetpack Compose

Building upon my experience making IDScanner for Victoria University of Wellington, MultiQR is an extension of IDScanner, as a general-purpose batch QR scanner. Instead of emailing a String, MultiQR generates a .csv file that can be shared using the Android share sheet.

It features a fresh design, and introduces new features that allow it to be used in a broader variety of applications than IDScanner:

- Split entries into any number of columns based on Regex
- Optional column headers
- Alphanumeric input
- CSV Output

Onboarding Screen
Home Screen

pillBox

2021

Android, Java

SQLite/ROOM, Remote Views

I designed pillBox to help people ensure they don't run out of critical medication, by keeping track of how many pills they have left, as well as expiration dates.

pillBox is designed to be used every day, and so a streamlined experience with minimal friction was extremely important. To achieve this, I used a homescreen widget which allows the user to decrement a pill with just one tap. If a user takes a pill regularly, the app can also automatically decrement for them periodically.

pillBox was written in Java with Android Studio, using Android Room and SQLite as a database.

Onboarding Screen
Home Screen

IDScanner

2021

Android, Kotlin

ZXing

I designed IDScanner for the Victoria University of Wellington and the Faculty of Engineering and Computer Science to scan student QR codes from an Android phone.

It is currently used in the COMP103 course, in order to scan student QR codes to record participation. The app has safety features such as Regex matching for QR validation. It is used in every tutorial, and has significantly sped up the recording process, which had previously been done manually.

IDScanner is written in Kotlin with Android Studio, and uses the ZXing library for scanning QR codes.

Home Screen
Regex Failure

Sunset

2020

Android, Java

Remote Views

Inspired by apps like Duolingo, which keep a "streak" of how many consecutive days a goal is met, I designed Sunset to bring the "streak" concept to the daily to-do list. By encouraging users to keep their streak, Sunset encourages users to set realistic goals, and achieve them - every day.

Sunset was the first time I had used a RecyclerView, and a significant challenge was ordering the tasks based on whether they are completed or not, so that all the uncompleted tasks are at the top.

Home Screen
Archive

Noted

2018

Lua, Solar2D

I developed Noted for a high school project in 2018, using Lua and the CoronaSDK (now Solar2D) cross-platform SDK. When I was learning the piano and how to read music at a young age, I found it difficult to learn how to read notes - since my ear was better trained than my eyes, I would usually learn songs by ear.

To solve this problem for others like me, I designed Noted in order to engage people using gamification and animations in guided lessons.

Because CoronaSDK did not have libraries for many UI elements, I designed a lot of the UI elements in the app from scratch. For example, when designing the rounded buttons, I used coordinate geometry to detect when a user's finger had slipped off a button, triggering the bounce-back animation. These explorations in UI element design can be found in the project prototype brief here.

Gameplay

Observer

2021

React, TypeScript

I designed Observer to make it easy to collect and visualise feedback, using color to show what feedback is most agreed with. To collect feedback, a user makes a new "room", and shares the room PIN with others to post messages on.

The feedback can be downloaded as a .JSON file, so that the feedback can easily be exported to other programs.

I built Observer with a friend through the 2021 lockdown, working collaboratively over zoom.

Home Screen
Archive

IFR Simulator

2020

Processing (Java)

I developed "IFR Simulator" based on the idea of flying an aeroplane without outside visual reference, for example, in adverse weather conditions such as heavy fog. In these conditions, the pilot must rely on their instruments only, such as the Virtual Horizon, Altimeter and GPS, adhering to the Instrument Flight Rules, or IFR for short.

To achieve this, IFR Simulator simulates a 3D world with a runway for the player to land on. One of the biggest challenges when making this game was the flight physics, requiring a lot of vector maths.


CSVC

2021

C#, WPF

I built CSVC to track my finances, enabling me to quickly see where I spend the most money. It automatically categorises CSV cells based on string matching. It parses a configuration file, and either adds or replaces cells of a column with its category.

CSVC can check whether a cell contains, is the same as, or matches (Regex) a particular search value.

noheader
column 0,1
replace 1
category "Food And Drink" {
   contains {
       "Rest"
       "Mc Donalds"
       "Maccas"
   }
}
category "Bad" {
   contains {
       "Key"
   }
}
category "Groceries" {
   equals {
       "New World"
   }
   contains {
       "New World"
       "CountDown"
   }
   matches {
       "b.*a"
   }
}

Home Screen

GetGradeECS

2021

Python

MechanicalSoup

I wrote GetGradeECS to get my grades from a University portal website. It checks for grades every 15-30 minutes, and uses the Gmail API for Python to send an email of any new grades. Features:

Automatic login
Automatically logs into the ECS Assessment Marks page by encrypting and storing the user's username and password.

Active Hours
Checks a .ini file so that it only checks for grades between those times (e.g 9-17) for 9am to 5pm.

An example of an email sent by GetGrade