Projects
Most of my work doesn't end up in a paper: observatory software, telescope hardware, data pipelines, simulations and tactile models. This page is a running list of it. Most of the code is on GitHub.
Telescopes & instrumentation · Automation, ML & tools · Simulations & interactive tools · Accessible astronomy
Telescopes & instrumentation
ROTSE-IIIc observatory control system (2024 – present, SAAO)
Bringing a 20-year-old robotic telescope in Namibia back online. I designed a new observatory control system on the pyobs framework to replace the defunct legacy C software, with asynchronous interfaces that let the original hardware and modern components work together.
Python · pyobs · asyncio · Robotic telescopes
pyobs
All-sky camera & environmental monitoring (2024 – present, SAAO)
A low-cost custom all-sky camera and environmental monitoring suite. Its real-time telemetry feeds into the telescope’s autonomous decision-making.
Embedded systems · PCB design · Fusion 360 · Telemetry
Dome weather sensor network (2026, SAAO Intelligent Observatory)
Power-over-Ethernet sensor nodes that measure temperature, humidity and pressure inside SAAO’s telescope domes. I wrote the ESP32 firmware, which serves each reading as JSON on the observatory network, and designed the 3D-printed housing in Fusion 360.
ESP32 · C++ · Power over Ethernet · Fusion 360 · Python
Read more and explore the 3D model
Automation, ML & tools
Real-time cloud detection with machine learning (2024 – present, SAAO Intelligent Observatory)
A computer-vision pipeline that automatically detects cloud in all-sky camera images in real time, so observatory software knows what the sky is doing without someone looking up.
Python · Computer vision · Deep learning
Lesedi calibration scheduling (2024 – present, SAAO Intelligent Observatory)
Automated daily flat-field and spectrophotometric standard scheduling for the 1-metre Lesedi telescope, cutting down the manual work in each night’s “pre-flight” routine.
Python · Scheduling · Calibration
SALTshaker (2025 – present)
A Python package for planning astronomical observations with the Southern African Large Telescope (SALT).
Python · Observation planning · SALT
GitHub · Docs
sthweather (2026)
A lightweight, zero-dependency terminal monitor for the weather at the Sutherland observing site.
Shell · CLI
GitHub
Simulations & interactive tools
Fornax A: a merger simulation (2026)
A 1.1-million-particle N-body model of the merger thought to have formed NGC 1316, run on a Barnes–Hut tree code I wrote in C with OpenMP. The galaxies are calibrated against the observed kinematics, and the remnant’s shells, tidal tails and velocity profiles are compared with NGC 1316.
C · OpenMP · N-body · Python · Galaxy mergers
Read the write-up
Asteroseismology simulator (2026)
An interactive 3D model of stellar oscillations. Choose a star by spectral type or by Teff and log g, then explore how pulsation modes of different degree (l) and order (m) ripple across its surface.
JavaScript · three.js · Stellar physics
Launch simulator
Detecting Pandora: an exomoon transit
A model of how we might detect a habitable moon orbiting a gas giant around another star, using Pandora from Avatar as the test case.
Python · Transits · Exomoons
Watch on YouTube
GW170817: real vs simulated
Visualising the gravitational waves from the GW170817 neutron-star merger, comparing LIGO/Virgo data with a theoretical model.
Python · Gravitational waves · Signal processing
Watch on YouTube
Accessible astronomy
AstroTouch (2025 – present)
Open-source software that turns astronomical FITS images into 3D-printable tactile models, so blind and visually impaired people can explore real telescope data. Also available as a web app, no install needed.
Python · FITS · 3D printing · Accessibility
GitHub · Web app · Models