Systems that take in data from devices, keep it correct and serve it fast.
I've been writing software since 2018, mostly TypeScript/Node.js and Python. Lately that has meant network monitoring and telemetry for ISPs. Here are two things I built and still run.
VISP: one monitoring portal for many ISPs
The ISPs on Reflex's network had their device and customer information spread over separate systems: network monitoring, router management, inventory, the service desk and billing. I built VISP to pull all of that into one portal. Each ISP signs in and sees only its own customers and devices, live.
I designed, built and deployed it on my own, and it runs in production today.
One portal, kept apart
Every ISP uses the same portal. Access is checked per user and per customer, so an ISP's staff only ever see their own customers, devices and tickets.
Fast, without hammering upstream
Two cache levels, each type of data with its own expiry, and identical requests arriving together are answered once. Changing how VISP syncs with the monitoring system cut the load on it by about 90%.
Alarms that agree
The monitoring system pushes alarms to VISP. They update the cached view in place and go into an alarm history, so every server shows the same thing.
Data goes out too
VISP sends each ISP's device telemetry over Kafka to a separate operations platform. Each ISP is set up and switched on individually.
Released carefully
Every change goes through a pull request with secret scanning, static analysis and dependency checks, then moves from development to test, pre-production and production.
TrainApp: training software for trail and ultra runners
I built TrainApp for a few runners. It pulls every run from Garmin, analyses it and keeps a training plan up to date. Each week an LLM coach reviews the training and suggests changes, and nothing changes until the runner approves it.
- Syncs runs, laps and second-by-second data from Garmin throughout the day.
- A report for every run: splits, intervals, heart-rate zones, drift and climb.
- Weekly trends, race readiness, a weight log and shoe mileage.
- Plans are plain markdown. A session ticks itself off when a matching run arrives.
- RunPlanner, the Android app (Kotlin), shows today's session, a calendar and the run reports.
- Runs on my own server: separate accounts, sandboxed services, HTTPS only, a rate-limited login, hourly health checks with push alerts, and daily backups kept off the server.
A bit about me
I studied mathematics at the University of Pretoria and have worked as a developer since 2018: healthcare billing, logistics platforms for companies like STIHL and SASOL, integration work across SAP and service-desk systems, and for the last few years ISP monitoring and telemetry. I like problems where the data has to be right and the system has to keep working when something goes wrong.
I use AI coding tools every day and have put LLM features into production. I still review and test everything that ships.
Away from the keyboard I run trail and ultra races (3rd at Pass2Pass 2025) and read philosophy and economics. English and Afrikaans are my home languages, and I'm learning German.