Laravel 13 · Next.js 16 · Go · Docker · WireGuard · Expo
Disposable AI dev workspaces: every ticket gets a throwaway, sandboxed Docker container where a coding agent (Claude Code, OpenAI Codex or a local Ollama model) clones the repos, implements the ticket, runs the tests and opens the PR — reviewed live in the browser through running previews, a web terminal and an optional virtual desktop. Runners install on your own hardware in one command and connect outbound-only over an encrypted WireGuard mesh, so source, secrets and model keys never leave your network. Jira and Linear integrations and a fully air-gapped mode; a mobile companion app is in development.
TypeScript · Fastify · Next.js · PostgreSQL + pgvector
A multi-repo RAG system for engineering teams: index Git repos, ask questions, get answers with file-and-line citations. Hybrid retrieval (vector HNSW + full-text search, merged with Reciprocal Rank Fusion), a cross-service code graph (call trees, HTTP dependencies, impact analysis), an MCP server for AI agents, incremental indexing via content hashing, staleness warnings tied to commit SHAs, and a CLI. Open source (MIT).
Shryft
Laravel 12 · Livewire · PostgreSQL · Redis · Stripe
A SaaS that auto-fills cancelled shifts. Intelligent employee scoring, waitlist cascades, and multi-channel notifications (Slack, WhatsApp, email) that always reply on the channel the employee was reached on. Race-condition-safe capacity management, Horizon-backed queues, Stripe billing. On hold.
Research · Python · arXiv 2022
Published research: generating Super Mario levels with a genetic algorithm, using reinforcement learning to speed up generation. Started as my honours project at Wits, continued into my MSc.
JavaScript · VS Code Extension · on the Marketplace
A published VS Code extension for setting and jumping to numbered code anchors with Ctrl+Shift+number / Ctrl+number — like RTS control groups, for your code.
C · CUDA · MPI
Gravitational N-body simulation optimised from naive O(N²) to Barnes-Hut, then parallelised with MPI and CUDA.
C
Generating solvable mazes by evolving them — crossover and mutation with a solvability fitness function, no classical maze algorithm involved.
Java · Python
Standard vs recursive vs Strassen's matrix multiplication, benchmarked and graphed.
Java
A*, Dijkstra and BFS implementations over a grid, built to compare how each explores the space.
PHP · Slim 4
A minimal session-auth starting point for Slim 4 apps: PSR-15 middleware for sessions, login, logout and route guarding.