Proficiencies:

  • LAMP Stack
  • Javascript, HTML, CSS
  • React
  • Node.js
  • Git
  • Drupal
  • Wordpress
  • IoT
  • DigitalOcean
  • AWS

IsItUp

2025
Django (Python)PostgreSQLsystemdGunicorn

IsItUp is a Django-based uptime monitoring service using PostgreSQL and systemd timers to run independent background checks, record uptime history, and surface results in a dashboard. It required building a secure API, background execution, and full Linux deployment.

Highlights

  • Automated Health Checks – configurable background checks for uptime and response time.
  • Decoupled Background Execution – monitoring runs via systemd services/timers, independent of web traffic.
  • Historical Uptime Data – stores and surfaces availability and latency over time.
  • Secure API Access – API key authentication and rate limiting for data access.

FragVault

2025
NodeExpressMySQLChrome Extension (MV3)Twitch APIYouTube Data APIHMAC

FragVault is a Chrome extension that adds a clips tab to HLTV.org player pages, surfacing recent Twitch and YouTube clips for the player you're viewing. A Node.js/Express backend ingests clips on a schedule, stores them in MySQL, and serves them to the extension over a token-authenticated API.

Highlights

  • Scheduled Ingestion Pipeline – a cron-style job pulls clips from configured Twitch (Helix) and YouTube (Data API v3) channels, enriches view counts, and upserts into MySQL.
  • Signed API – every request is authenticated with an HMAC-SHA256 signature and timestamp replay protection, locking the backend to the extension.
  • Abuse Protection – rolling-window rate limiting with auto-clearing cooldowns, plus IP-based watch on token registration.
  • Operational Tooling – Discord webhook alerts on ingestion failures, daily intake summaries, and health/stats endpoints.

wizblast

2025
Godot 4.7GDScriptJolt Physics

wizblast is a top-down 2D wizard-vs-zombies wave-survival roguelite, built from scratch in Godot 4.7. A spellcasting wizard faces an endless, escalating horde – cast and upgrade spells, breach barriers, and survive. Inspired by COD Zombies: procedural waves, a between-round upgrade shop, a Mystery Box, and Pack-a-Punch spell upgrades.

Architecture (the focus of the project)

  • Data-Driven Content – spells, enemies, waves, upgrades, and status effects are all custom Godot Resources (.tres), not hardcoded. Adding a new enemy or spell is a single data file, scanned from the filesystem at startup.
  • Event-Decoupled Systems – a single EventBus autoload is the only cross-system channel; HUD, audio, progression, and drops subscribe to gameplay signals and never reach into each other.
  • Component-Based Combat – generic Hitbox / Hurtbox / Health / Mana components wire up damage, crits, knockback, and status effects for any entity, with RoR2-style on-hit/on-kill procs.
  • Navmesh-Driven AI – enemies chase or fall back to breaching the nearest reachable barrier via navigation reachability and portal-steering, with RVO soft-crowd separation so packs overlap under pressure without deadlocking choke points.

Gameplay

  • Endless procedural waves that scale count, spawn rate, and composition from the wave number, with periodic swarm and boss waves.
  • Four spells – arcane bolt, chain lightning, channeled flamethrower, and ice shard – each with a Pack-a-Punch upgrade variant.
  • A full run-progression loop: gold, a ~20-item upgrade shop, a Mystery Box, and a Pack-a-Punch machine.
  • Juice-forward combat – hit-flash, hitstop, trauma-based screen shake, floating damage numbers, and dynamic 2D lighting.

6Aside league scraper

2025
nodeexpressjscheeriopug

Our local league's website is outdated and hard to use. I built a scraper and frontend that fetches results, fixtures, and the current table, then restructures everything into a clean, well-organized JSON object and presents it in a modern UI.

Highlights

  • Clear view of upcoming fixtures and past results.
  • Shows exactly which teams have played each other and the final scores.
  • Readable, up-to-date league table.

How it works

  • The scraper periodically fetches data and builds a fresh JSON snapshot.
  • The backend serves the cached JSON for fast loads, avoiding unnecessary hits to the source site.
  • The frontend renders fixtures, previous results, and standings in a simple, responsive layout.

This project blends web scraping, data modelling, and UI work to make following our league much more enjoyable.

Custom Business CRM

2024/2025
PHPMySQLJavaScriptStripe APISendGridSecure Sessions

A full-featured Customer Relationship Management platform built from the ground up to streamline and automate business operations. Designed with scalability and security in mind, it provides a central hub for managing clients, bookings, payments, and communications.

Highlights

  • Booking & Scheduling – integrated system for managing client appointments and lessons.
  • Stripe Integration – supports one-off payments, subscriptions, and invoicing with secure transaction tracking.
  • Email & Notifications – automated communication pipeline powered by SendGrid for confirmations, reminders, and updates.
  • Role-Based Access – secure session handling with permissions tailored for admins, instructors, and clients.
  • Customizable Tables & Graphs – dynamic data visualization tools for tracking business performance and insights.
  • Secure Architecture – robust database design, session security, and modular components for maintainability.

Weather app

2024
nodejavascriptmysqlcsshtmlnextjsreactchartjsTomorrow.io

Displays real-time weather updates and room temperature data from a Raspberry Pi with BH1750 and BME688 sensors. Combines weather API data with a sleek frontend and supports RSS feed integration. Also displayed on a 20x4 LCD wired to the Pi.

Movie recommender

2023
javascriptreactmovie api

A React app that curates movie suggestions via a movie API. Built to streamline the search for quality films while sharpening React skills.

typeFaster

2023
nodeexpressJSsocket.iopughtmlcss

Multiplayer typing game inspired by TypeRacer. Utilizes WebSockets for real-time interaction and has secure user authentication. A proof of concept for leveraging modern web technologies.

Discord Bot

2023/2024
javascriptdiscordjsytdlyoutube api

A music bot for Discord that streams audio directly from YouTube. Integrated with FACEIT to display player stats. Some issues with ytdl caused random music interruptions.

chatbot

2023
javascriptOpenAI

Voice-enabled chatbot using OpenAI's API and Chrome's speech recognition. An experiment in combining conversational AI with real-time input.

marketPlace

2022
PHPtwig

An eBay-style marketplace with Stripe integration for payments and secure login. Designed as a sandbox for PHP and Twig proficiency.

Other interests:

  • Liverpool FC
  • Favourite movie: Blade Runner 2049
  • Bouldering
  • Favourite series: Peep show
  • CS2
  • PC building/hardware
  • IoT
  • golf handicap: NaN ;)

Among other projects...

if you read this far you're the goat