03 / ANU TechLauncher · Scientific software
Built for collaboration.
Letting researchers edit the same model without stepping on each other.
Read the diagram
- Shared model editor
- Authenticated API + Socket.IO
- Per-model permissions
- PostgreSQL / PostGIS
- CI + tests + Docker
01 / Context
The problem
Ecosystem models are built by groups of scientists, not one person at a desk. They need to work on the same model at the same time, control who can change what, talk through decisions in place, and keep versions worth returning to. This platform was built for exactly that.
02 / Contribution
What I did
I led the eight-person engineering team. I started the backend, owned it the whole way through, and was the sole owner of CI. For clarity: this was an ANU capstone with TERN and CSIRO as partners, not a job at either organisation.
03 / Decisions
The approach
The backend is TypeScript on PostgreSQL and PostGIS. Sign-in uses JWT with email verification, and permissions are set per model, so every model has its own roles. On top of that, a Socket.IO layer handles the live side: who’s online, node locks that expire on their own, threaded comments and milestone snapshots.
- Shared model editor
- Authenticated API + Socket.IO
- Per-model permissions
- PostgreSQL / PostGIS
- CI + tests + Docker
How the main pieces fit together.
04 / Evidence
What I can show
By the numbers: 23 database tables, 14 migrations and a Jest suite of 32 test files. I reviewed and merged 26 of the 31 production pull requests, and a contribution audit credits me as primary author of 12 of the 14 functional areas. Those figures describe scope and ownership, not how many people use it.
05 / Reflection
Limits & lessons
The backend code is public. The ownership figures come from the contribution audit, not something you can read off the repository. I’m not claiming users or uptime. The design call I’d defend is the split between locks and snapshots: expiring locks stop two people editing the same node at once, and snapshots mark the moments worth coming back to.