Mission Control for PRESET
Building the ground software the McMaster Interdisciplinary Satellite Team will fly its first cubesat mission on.
The mission
PRESET is the McMaster Interdisciplinary Satellite Team's cubesat mission. A satellite is only half the problem — the other half is everything on the ground: the software that plans a pass, issues commands, stores telemetry, and tells an operator whether what just came down is normal.
I lead the Mission Operations Centre software team, a group of six undergraduates building that half.
What we built
A command scheduler. Passes are short and they do not wait. The scheduler lets an operator queue timed commands ahead of a window so the satellite receives them at exactly the right moment instead of whenever somebody happens to be at the keyboard. It removed hours of manual, error-prone work from every pass.
Standardized schemas. Telemetry is only useful if every subsystem agrees on what a field means. We defined shared schemas and backends across the team so payload, ADCS, and power data land in the same shape, and so a downstream chart cannot silently misread a packet.
Role-based access. Not everyone on a student team should be able to send a command to a spacecraft. Authentication runs through Keycloak with OAuth2, with roles separating people who can look from people who can act.
Custom visualizations. Off-the-shelf dashboards get you part of the way. Time-series telemetry lives in InfluxDB and surfaces through Grafana, with purpose-built views in the app for the things a generic panel handles badly — pass windows, command state, and link health.
The stack
Next.js and React with server-side rendering on the front end, Node.js and MongoDB behind it, InfluxDB and Grafana for telemetry, Keycloak and OAuth2 for identity, all styled with Tailwind.
Working with the CSA
Part of the work is technical and part of it is explaining the technical work. We have presented the architecture to the Canadian Space Agency, and I handle onboarding for new members of the software team — which, on a student team where people graduate, is its own kind of system design.