ibra
All work

03 / ANU TechLauncher · Scientific software

Built for collaboration.

Letting researchers edit the same model without stepping on each other.

My role

Lead Software Engineer · capstone engagement

Tools & technologies

TypeScript / PostgreSQL / PostGIS / Socket.IO / Docker

FIG. 03 / ONE MODEL, MANY HANDSECOSYSTEM MODEL / SHAREDABCRainfallSoil moistureVegetationGrazingFire riskCarbonHELD BY ABCResearcher AResearcher BSNAPSHOTSv1v2v3nextBACKENDPOSTGISAPI · RBACREALTIMECITESTBUILDDOCKER
23Database tables
14Migrations
32Jest test files
Collaboration sketch · based on the real features
Read the diagram
  1. Shared model editor
  2. Authenticated API + Socket.IO
  3. Per-model permissions
  4. PostgreSQL / PostGIS
  5. 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.

  1. Shared model editor
  2. Authenticated API + Socket.IO
  3. Per-model permissions
  4. PostgreSQL / PostGIS
  5. 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.

Next case studyInside the language model