Projects

Things I built for fun, curiosity, or because no suitable thing existed.

🐹

Hamster AI

Active

A lightweight, local-first AI companion for Windows. Sits in your system tray, helps you remember things, set reminders, and have a chat — all without a single byte leaving your machine.

BACKEND

Ollama (local LLM)

UI

PySide6 (Qt)

STORAGE

SQLite (local)

PLATFORM

Windows 10/11

What it does

  • Fully offline — all inference runs locally, no cloud, no subscriptions
  • Plugin system — 8 optional plugins, enable only what you want
  • Memory — remembers facts, todos, and notes across sessions
  • Mode system — Work, Focus, Private, and Game Safe modes
  • Anti-cheat safe — invisible to anti-cheat, tested with Vanguard and EAC
  • Mini widget — quick questions without opening the full chat
  • 21 milestones, 283 passing tests
Documentation ↗ GitHub ↗ Read the devlog →
🗑️

CityRubbish

For fun

A crowdsourced map of public bin locations across UK cities. Users can find their nearest bin, add missing ones to the map, vote on whether a bin is still there, and earn karma for accurate contributions.

FRONTEND

React + Vite

MAPS

Leaflet + OpenStreetMap

BACKEND

Supabase (PostgreSQL)

TYPE

PWA (installable)

What it does

  • Interactive map of public bins across London, Manchester, Birmingham, Edinburgh, Bristol
  • Add bin locations — up to 3 per day per user
  • Vote on bins: confirm they exist, mark as missing, or flag wrong type
  • Karma system — earn points for accurate contributions
  • Find nearest bins to your current location
  • Filter by bin type (general, recycling, dog waste, etc.)
  • PWA — installable on mobile like a native app
  • Admin dashboard for moderation
Read the devlog → 🔒 Private repo
🎮

Insomniacs Bot

Active

A private Discord bot for a CS2 friend group. Pulls live stats from FACEIT and surfaces them through slash commands — leaderboards, session recaps, teammate chemistry, achievements. Pull-based only; the bot never posts anything unsolicited.

LANGUAGE

TypeScript

DISCORD

discord.js v14

DATA

FACEIT API v4

STORAGE

SQLite + Prisma

What it does

  • 15 slash commands under a single /ic parent — ping, link, stats, recent, form, leaderboard, compare, maps, mapstats, records, session, chemistry, achievements
  • FACEIT account linking — one-time link per player, stores stable FACEIT player ID
  • Server leaderboard with live ELO, K/D, win rate, headshot %, and win streak categories
  • Teammate chemistry — duo win rates across the last 100 matches per player
  • Achievement system — Thirty Bomb, The Hard Carry, Tilt Queue, Go To Bed, Ace, and more
  • Session detection — groups matches by 3-hour gaps, shows per-session stats and ELO change
  • All-time record book across all linked players
  • Cloudflare Worker powers the feature request form on the project website
Website ↗ GitHub ↗
🖥️

VPS Dashboard

Active

A self-hosted web dashboard for managing a personal VPS. Game server control, resource monitoring, an AI assistant, anomaly detection, and capacity forecasting — built because no off-the-shelf tool did exactly what I wanted.

FRAMEWORK

Next.js 16 (App Router)

DATABASE

SQLite + Drizzle ORM

DEPLOYMENT

Docker (self-hosted VPS)

AI

Gemini Flash (via OpenAI compat.)

What it does

  • AI assistant with tool use — start/stop game servers, check disk, query the audit log, run diagnostics, and set alerts in plain English
  • Game server management for CS2, Palworld, Project Zomboid, Terraria, Minecraft, and Valheim — live log streaming, console, scheduled restarts
  • Real-time resource charts — CPU, memory, and disk history with 1h/6h/24h/7d time ranges, powered by Recharts
  • Statistical anomaly detection — z-score analysis against a time-of-day baseline; unusual spikes fire a Discord DM with a 2-hour cooldown per metric
  • Capacity forecasting — linear regression over 7 days of disk data, overlaid on the resource chart with a "full in N days" badge
  • Self-healing crash recovery — detects unexpected game server exits, restarts automatically, and logs the event to the audit log
  • Notification center — unified feed of anomalies, crashes, restarts, and backup failures with an unread badge in the header
  • Weekly AI-written health digest delivered via Discord DM every Monday morning
  • DNS record viewer, Docker container control, full audit log with action history
Read the devlog → 🔒 Private repo
// more things coming. probably.