Projects
Things I built. Where the source is open you can read the code; where it isn't, you can look at the live version.
Qupsoft
Full stack · Production · still working on it · 2026
B2B and B2C digital receipt and expense platform. I work across the React interface, the FastAPI services, and the PostgreSQL schema, including multi-tenancy and role-based access.
React · TypeScript · FastAPI · PostgreSQL
Closed source
Pratech
Co-founder · Production · still working on it · 2025
Across the software work I built the backend of the programs, the server infrastructure, the corporate site, and the user dashboard from scratch.
FastAPI · React · PostgreSQL · Docker
Closed source
NAC System
Network security · done
AAA architecture built on RADIUS (RFC 2865/2866). FreeRADIUS authenticates, a FastAPI policy engine decides who lands on which VLAN, Redis holds the sessions. 35 unit tests. Written for the S3M Security internship evaluation.
Python · FastAPI · FreeRADIUS · PostgreSQL · Redis · Docker
How it works
A device never joins directly. The switch relays the request to FreeRADIUS, the decision comes back from the policy engine, and only then does the device land on its assigned VLAN. NAC Gap Analyzer
Security analysis · done
Scans a local network, fingerprints the devices, and simulates what a NAC system would enforce — without deploying any infrastructure. Topology visualisation via a D3.js force graph, plus PDF reports.
Python · FastAPI · React · TypeScript · D3.js · Docker
How it works
No NAC is installed. The tool scans the network, sorts devices by risk, and writes up what a real NAC would have done to each one. AutoHeal
Developer tools · done
Repairs broken Playwright tests with an LLM. Captures a DOM snapshot, assembles the failure context, patches the AST through ts-morph, then re-runs the test to verify. Works with OpenAI, Anthropic, and Ollama.
TypeScript · Node.js · Playwright · ts-morph · OpenAI · Anthropic
How it works
The loop only exits once the test is green again. The model's suggestion is never taken on trust — the patch is applied and the test is re-run to prove it. CleanDev
Desktop app · done
Cross-platform fork of Cleantr. Adds a Dead Project Detector that finds abandoned git repos across ten ecosystems (Node, Python, Rust, Go, Java…) and a global package cache scanner. Windows, macOS, Linux.
Electron · TypeScript · React · Node.js
eQualiter
Computer vision · done
Contactless audio and media control from hand gestures. MediaPipe extracts hand landmarks, OpenCV processes the frames, and the gesture maps to system volume.
Python · OpenCV · MediaPipe · C++
How it works
The only thing measured is the gap between thumb and index finger. That distance maps straight onto a 0–100 volume, so opening and closing your fingers is the dial. WhatsControl
Automation · done
Listens to WhatsApp Web through Selenium, parses incoming messages as commands, and drives a Mi Box over ADB. I wrote it because the remote kept giving me trouble and I was bored. It drops onto any smart TV easily.
Python · Selenium · ADB
How it works
The message is turned into a command and sent to the TV over ADB as a key press. Anything unrecognised is dropped, so a stray message can't drive the television. FlexFarm
Education · Gamification · done
An interactive web game that teaches CSS Flexbox by playing it. It has twenty levels, a story mode, and a live code editor.
React · TypeScript · Tailwind CSS
STEMxFuture
Web · NGO · still working on it · 2026
Corporate site for the STEMxFuture STEM non-profit, written from scratch without a framework. I also run the organisation's IT department.
HTML · CSS · JavaScript
EKAP Data Bots
Data engineering · source is closed · 2022
Scrapers that pull and process thousands of rows from tender platforms like EKAP. They run overnight and leave clean data by morning, and can be run by hand whenever you want. Source is closed.
Python · Selenium · Pandas
Closed source