Conor Hinchee
Tornado Simulator
You are the tornado
In development
A mobile game in active development where you play as a happy little tornado and grow into a monster. Drag to steer, wander into everything, and watch the field come apart behind you.
The environment is destructible and the destruction is the progression. You get 150 seconds before you rope out, and your EF rating is the worst thing you managed to flatten, the way real ratings are assigned from surveyed damage rather than measured wind.
The progression is the physics
- 65 mph Trees
- 86 mph Trailers
- 112 mph Houses
- 136 mph Grain silos
A structure below its break wind takes zero damage. A house ignores you outright until you have eaten enough trailers to raise your peak tangential velocity. There is no XP bar and no unlock screen, only the wind you have actually earned.
- Rankine vortex
- Tangential wind climbs linearly to peak at the core edge, then decays as one over r outside it.
- Updraft offset
- Lift peaks just outside the core, so debris spirals out and up instead of collapsing into the center.
- On the UI thread
- The loop runs in worklets against a struct of arrays, so the simulation never touches the JS bridge.
In progress · Next up: houses that shed a roof before they shed walls
Field
Analog dashboard watch face · Garmin Venu 4
A test of UI under constraint
Connect IQ is a deliberately small sandbox. A watch face gets one update call per minute in normal use, a fixed 454 by 454 round canvas, a subset of the graphics API, and no access to most of the sensors a full app can reach.
That is what makes the Garmin SDK worth building against. The interesting work is not adding features, it is fitting eight live readouts into one legible instrument that still reads correctly when any one of them goes missing.
Everything above is drawn imperatively in Monkey C. No layout XML, no UI framework, and no bitmaps beyond the launcher icon.
Eight live readouts, one instrument
- 12 o’clock
- Steps, distance, goal ring
- 2 – 3
- Condition, temp, high and low
- 4 – 5
- Battery with level ring
- 7 – 8
- Live heart rate, pulsing glyph
- 9 – 10
- Day, month, date
- 6 o’clock
- Open slot, swappable
Constraints that shaped the code
- Every symbol is a polygon
- No reliable icon font exists here, so cloud icons are filled silhouettes with an eroded copy carved back out to fake an outline stroke.
- Never size from live data
- Labels scaled to the measured width of the date collapsed on single digit days. Every text group now measures a worst case reference string instead.
- Everything degrades to a dash
- Heart rate falls back to the last valid history sample. A missing source renders two dashes in the right slot and the rest of the face carries on.
Running on hardware · Tuning on-wrist typography and an always-on variant
ODIN
Self-Hosted Agent Runtime
Archived 2026
Odin was a self-hosted agent runtime: persistent memory, 50+ tools, a seven-agent dispatch pipeline, and a nightly loop that read its own traces and rewrote its own prompts. It took a spec and opened a pull request. It ran work that spanned days.
What the vault kept
- Muninn
- Every turn wrote back to an Obsidian vault, so context outlived the process that made it.
- Saga
- Outcomes, errors and routing accuracy logged to JSONL and read back nightly.
- Bragi
- Weaknesses became versioned prompt patches, gated before anything applied itself.
Retired · No live instance
Heap Analyzer
A command-line tool for analyzing Node.js heap snapshots. Parses .heapsnapshot files, surfaces the largest object allocations by type, and flags likely memory leaks — without needing Chrome DevTools open.
- Parses raw V8 heap snapshot JSON without loading it all into memory
- Groups allocations by constructor name and reports top offenders
- Outputs a ranked table to stdout — pipe it, grep it, diff it
FIND ME ONLINE