Skip to content

Portfolio

Shipped work and side projects across the areas I spend my time in. Each entry lists what it actually runs on.

  • Web & Full-Stack5
  • AI Engineering3
  • Community & Game Infrastructure3

Full-stack web application · Senior capstone

Mentor Matching Platform

Award winner — University of Cincinnati IT Expo

My senior capstone at the University of Cincinnati, and an award winner at the IT Expo. The interaction model borrows from apps like Tinder and Hinge, but the thing being matched is a mentoring relationship rather than a date. The matching algorithm runs in real time against the attributes a user selects when creating or updating their profile, so results reflect the current state of the profile rather than a nightly batch. The team did not pursue the project after graduation.

  • Matchmaking recomputed live over SignalR as profile attributes change
  • Attribute-weighted matching rather than a simple tag intersection
  • Recognised at the University of Cincinnati IT Expo
  • ASP.NET Core
  • C#
  • SignalR

Private — available on request

KoG Support Portal ticket dashboard

Full-stack web application

KoG Support Portal

A support ticket management system built for the KoG gaming community. It authenticates against KoG's identity provider over OAuth 2.0, streams live ticket updates to clients using server-sent events, stores file attachments in MinIO, and enforces role-based access across user, moderator and admin tiers. Ticket creation, threaded replies, status tracking and administrative oversight are all handled in-app.

  • Server-sent events for live ticket state instead of client polling
  • OAuth 2.0 against the community's existing identity provider — no separate account system
  • Role-based access control across three permission tiers
  • MinIO object storage for attachments, containerised with Docker
  • React
  • TypeScript
  • Vite
  • TailwindCSS
  • Node.js
  • Express
  • PostgreSQL
  • Drizzle ORM
  • OAuth 2.0
  • MinIO
  • Server-Sent Events
  • Docker

Private — available on request

KoG Hammer Discord bot command output

Moderation tooling

KoG Hammer

KoG Hammer is a moderation tool, in the form of a Discord bot, built for the moderators of the King of Gores (KoG) network. It streamlines the full process of applying a punishment to a user who breaks a rule, replacing a manual workflow and introducing a merit-based approach to the punishment system. Structured output logging keeps decisions consistent and auditable across the team. Twenty-four commands are in place, with ongoing work to harden it further.

  • 24 commands covering the full moderation workflow
  • Merit-based punishment model replacing ad-hoc decisions
  • Structured audit logging for consistency across moderators
  • Python
  • Discord API
  • PostgreSQL
Recommended max bid calculator interface

Machine learning · API

Recommended Max Bid Calculator

Built to automate the recommended maximum bid on foreclosure properties. Knowing where to cap out when bidding is difficult to work out by hand, so this pulls data from previous auctions and predicts future auction outcomes with a decision tree model. The available sample size was very small, so data augmentation was used to generate enough training points to get a usable model off the ground.

  • Data augmentation to work around a genuinely small sample size
  • Django API serving predictions from the trained model
  • Scraping and normalisation pipeline over historical auction records
  • Python
  • Django
  • Scikit-Learn
  • Pandas
  • NumPy
  • Requests
  • SQL Server
Portfolio site home page

Web · static site

This Site

Built on Next.js and TypeScript, structured as a two-column shell: a sticky profile sidebar beside a content panel whose nav items are real routes rather than client-side swaps, so every view is linkable and independently prerendered. All content lives in a typed layer that the pages read from, so the site cannot drift out of sync with itself. It exports to static files and deploys to GitHub Pages from a build workflow.

  • Every route statically prerendered; the only client component is the form
  • Images pre-converted to WebP at build — 6.4 MB of source PNGs down to 428 KB
  • Typed content layer shared by the home panels and the deep pages
  • Next.js
  • TypeScript
  • Tailwind CSS
  • Radix UI
  • GitHub Actions
  • sharp
Text file translator console output

Tooling · API integration

Text File Translator

This came out of a need encountered while moderating for the DDraceNetwork KoG community. Server chat logs arrive as text files, and with the large majority of the player base being non-English speakers, reading them was a bottleneck. The program takes a log file, detects whatever languages appear inside it, and translates them through the DeepL API into a target language of the user's choice.

  • Python
  • DeepL API
  • json
  • os
Steganography password manager interface

Security · encryption

Steganographic Password Manager

An experiment in what it takes to embed a password in the pixels of an image. The program uses least-significant-bit steganography, altering the last few bits of 8-bit pixel values to store data. The password is encrypted with the Fernet scheme before embedding, which means the same image cannot be reused to recover the credential without the key. The next step is supporting drag-and-drop of the image directly into a browser password field, rather than decrypting in code and pasting the output.

  • Python
  • Pillow
  • NumPy
  • cryptography
  • os
House pricing prediction chart

Applied machine learning

House Pricing Predictions

A dataset read into a Pandas dataframe, cleaned and normalised, then split into train and test sets. The model uses ten input neurons, two hidden layers and a single output, compiled with mean squared error loss and the Adam optimiser. A custom plotting function built on NumPy and Matplotlib charts predictions against actuals after training.

  • TensorFlow
  • Keras
  • Pandas
  • NumPy
  • Matplotlib
  • Scikit-Learn
NYC crash reports dashboard map

Data application

NYC Crash Reports

A data web app displaying motor vehicle collision data in New York City. The emphasis is on presentation: dashboards have to be built so that a reader can actually consume and understand what they are looking at, which drove the choices around mapping, filtering and chart selection here.

  • Python
  • Pandas
  • NumPy
  • Streamlit
  • PyDeck
  • Plotly