Projects
Personal Projects
2026
- Turned an old Lenovo laptop into an always-on Ubuntu home server that hosts my own projects, including Minecraft servers and my Discord bot.
- Wrote systemd services so each server starts on boot, restarts after a crash and shuts down cleanly.
- Secured remote access with SSH key-only login, and put the game server behind TCPShield with a custom domain to hide my home IP and protect against DDoS attacks.
- Ubuntu Server
- systemd
- SSH
- Bash
- DNS
Minecraft server plugin
- Lets server admins set, teleport to and delete spawn points separately for the Overworld, Nether and End.
- Includes a chest-style GUI menu for choosing a dimension, tab completion and permission-based access control.
- A configurable teleport countdown cancels if the player moves, with pending teleports tracked per player so overlapping requests don't clash.
- Sends new players and players without a bed to the custom spawn on first join and respawn.
- Java
- Paper API
- Maven
- YAML
Self-hosted on my Linux server
- A Discord bot with a betting game that tracks each user's balance.
- Packaged as a single runnable jar, with the bot token kept in an environment variable rather than in the code.
University Projects
University coursework · 2025/26
- A memory game played across two Raspberry Pi Pico W devices with buttons and LEDs, which communicate over Wi-Fi using MQTT.
- Players take turns creating and copying button sequences, with each round getting longer and faster.
- A live web leaderboard updates in real time over MQTT WebSockets.
- MicroPython
- Raspberry Pi Pico W
- MQTT
- HTML/JavaScript
University coursework · 2026
- A desktop messaging app with a JavaFX GUI, built using an MVC structure.
- Supports one-to-one and group chats, message search, contact management and multiple user profiles.
- Saves app data between sessions using Java serialisation.
University coursework · 2025
- A turn-based grid game with a full GUI, including menus, a help screen and an interactive game board.
- Randomised board generation places differently shaped pieces without overlaps.
- Saves and loads the full game state to file, with a turn timer and automatic win/loss detection.