Inspiration

One of us runs events for a UNSW society. Ten jobs, six volunteers, five weeks — and every year the same two people absorb everything, then something breaks at 2am. Trello holds the information fine. It can't tell you who should do a job, whether they're already at 140% of their week, or what else falls over when the venue cancels.

What it does

Paste a brief or drop in a PDF and Mistral turns it into a live graph of people, work, skills and deadlines. One click scores everyone against every open task and proposes owners with written reasons.

When the best person would end up over capacity, it says so out loud — names them anyway, flags the overload, offers the alternative.

Cancel the venue and the disruption ripples through real dependencies in waves, then proposes a recovery plan. Nothing is applied until a human accepts it.

How we built it

Node, TypeScript, Express and an in-memory graph; React Flow on the front. Mistral is the only model provider.

One rule drives everything: the model reads and writes words, and never does arithmetic. Scoring is a weighted sum, dependency traversal is a BFS, workload is division — all plain code, all tested. Every LLM call has a hard timeout and a real deterministic fallback, so with no API key the whole thing still runs.

Challenges we ran into

Our recommender had the exact bug the product exists to catch: scoring every task against the same stale state meant one person won everything and hit 300% of her week while another sat at 0% — and nothing warned us, because each proposal looked fine alone. Scoring sequentially on a cloned graph took the worst case to 167%.

Substring matching gave a volunteer an AV qualification because av appears inside "have".

We nearly demoed on a fallback: our import was taking 27.6s against a 30s ceiling and failing silently into a generic draft. A smaller model does it in 12.9s. We only caught it by timing it instead of trusting that it felt fast.

Accomplishments that we're proud of

Every number on screen traces to a formula and a test — 215 backend, 106 frontend. When someone asks "why her?", the answer isn't a vibe.

And it won't be tactful about overload, which is the part that actually helps a team decide.

What we learned

Running the demo end to end caught four real bugs a green test suite missed. And every time we took a job away from the model and gave it to plain code, the feature got faster, testable and explainable.

What's next for Living Coordination Graph

Refusing to plan work a team genuinely cannot absorb — a 6-hour-a-week volunteer can still be handed a 10-hour job, and "you need another person" is more useful than a plan that doesn't fit. Then multi-user, and editing the graph directly instead of regenerating it.

Built With

Share this project:

Updates

Submission history