Kia ora! I'm a first-year Computer Science student at The University of Auckland.
Projects
WaiMUN
Website and registration for Interschool MUN (~80 delegates in 2024, over 120 in 2025). Sanity CMS, Airtable, and Stripe, plus tooling for event badges and personalised allocation emails.
- Astro
- Sanity CMS
- Airtable
- Stripe
- TypeScript
- React Email
Lectern
Event management platform for organisations, bringing publishing, registration, ticketing, check-in, participant imports, branded public pages, and printable materials into one place.
- TypeScript
- TanStack Start
- Convex
- WorkOS
- Stripe
- Resend
- React PDF
TimeTree
Lead developer on a UOACS × DEVS hackathon project. Maps decisions as pathways so you can see how outcomes branch.
- Next.js
- TypeScript
- Convex
- Clerk
- AI SDK
- React Flow
Saku
Discord-hosted coding agent and harness in Rust with threaded conversations, file and shell tools, web search, and memory system for working on codebases away from the terminal.
- Rust
- Serenity
- Codex
- Exa
Alien Helpdesk
Helpdesk simulator game where players answer tickets from aliens, with AI-graded user responses.
- Next.js
- TypeScript
- Zustand
- AI SDK
- Base UI
AnkAI
Built a study app that turns messy notes into Anki-style decks, with a collaborative, realtime editor and an AI microservice which generates structured flashcards.
- Next.js
- TypeScript
- Convex
- Clerk
- Tiptap
- OpenRouter
Homelab
Maintain self-hosted infrastructure for learning production-style operations, including Linux servers, Docker services, reverse proxies, backups, and home networking.
- Linux
- Docker
- Caddy
- Cloudflare
- Networking
- UniFi
Bridging Plugin
Developed a multiplayer game server plugin in Kotlin, implementing a session replay system, packet-level NMS hooks, and a persistent MariaDB database layer using Exposed and coroutines for async handling.
- Kotlin
- Spigot
- Exposed
- MariaDB
PaperSpigot Patch
Identified and patched a state desync bug in PaperSpigot – out-of-range block placements were rejected without a corrective client update, causing ghost blocks. Fixed by forking the project and issuing the missing update packets.
- Java
- PaperSpigot
- Minecraft
- NMS