I work in OSAT process engineering at Custom Interconnect, on an industrial placement, I develop code for my own personal needs, work needs, enjoyment and interest.
Here's a selection of small but really helpful tools I've built to help myself.
- readme-svg-generator generates brutalist ui inspired svg's as seen in this repo
- Plaque I really struggled with a {{token}} based design suite for things like place cards and invites for y wedding so I built this with those uses in mind
- Cadence I also couldnt find a software o build complex timelines with multiple different stakeholders and uses so I decided to build this for myself and I've had vendors ask which software I used to make it
Research benches created to explore fundamental concepts as well as interesting avenues of development.
- poly-compress — I wanted to see if I could parameterize the gaps between letters into a complex polynomial/fourier to compress text but it never even got close to plain text
- CathSim — a 2D endovascular catheter trainer where every thing was based around a physics solver and I tried to bring in realistic real constrains such as flouroscopy contrast.
- RADL — cricket has Cricsheet and football has StatsBomb open-data; rugby union has nothing. A schema and a converter for the corpus that does not exist yet. Still at a v0.3 draft.
Five repositories, one wedding
Four apps have each been assigned a slice of the same day. Seating is in one, the running order in another, the crew in a third, the place cards in a fourth. Each app is able to export a file, but none of them can ever seem to get along , especially not in the critical moment when the place cards list table 6 but the seating arrangement has table 8 in mind.
Trousseau is the one agreed-upon file, along with the validation that happens before anything else is even recorded. Git manages the pointers while a private remote hosts the bytes because these repos are open while the data contains personal emails of real people.
graph TD
T["<b>Trousseau</b><br/>one file, one wedding"]
T --- TB["Tableaux<br/><i>seating</i>"]
T --- CA["Cadence<br/><i>timeline</i>"]
T --- BR["Brigade<br/><i>crew and jobs</i>"]
T --- PL["Plaque<br/><i>stationery</i>"]
CA -. "day.json" .-> BR
| Trousseau | The schema, the collector, the checks, and the version history of every state the wedding has been in |
| Tableaux | A to-scale room, tables dragged onto a canvas, guests assigned to tables or to individual seats |
| Cadence | The timeline, the clashes, and five printed pieces of paper |
| Brigade | The jobs hanging off Cadence's blocks, and the people doing them |
| Plaque | The place cards, imposed onto sheets that waste the least card stock |
Shared design language but no shared code.
- 25 Aug 2026 - pushed to readme-svg-generator - Add playground support for six cards, presets and shareable state
- 25 Aug 2026 - pushed to Trousseau - Make sync's dry run read-only, and stop the shell mangling commit...
- 25 Aug 2026 - merged Trousseau#1 - Readme tone
- 24 Aug 2026 - pushed to cadence - Ignore .remember/, which holds session transcripts with real names
- 24 Aug 2026 - pushed to Brigade - Ignore .remember/, which holds session transcripts with real names
Everything else
| Repository | |
|---|---|
| EMG | Muscle signal to moving gripper, with the whole filter chain on screen so the processing is visible rather than asserted. Runs with no hardware attached |
| Lunar-Lander | Classical control against PPO on LunarLander-v3. A 0.1 per-step time penalty buys 22% faster landings at no measurable cost to reward, three seeds per point |
| phase-trace | Trace a rugby possession with the mouse in one unbroken line; the recogniser reads carries, passes and kicks out of the shape of it, and a sport-agnostic engine draws the momentum chart |
| MAINTAIN | Zero-keyboard maintenance logging for a cleanroom production floor. Operator auth is a badge scan, not a password |
| PBPK-ABM-thesis | Dissertation work: an agent-based tumour model coupled to physiologically based pharmacokinetics |
| MALLI | Malaria detection classifier with a Flutter front end |
| Medtech | Anaesthesia infusion optimisation over a PK/PD model |
| DCE-Workshops · DCE-code-workshops | Data-Centric Engineering workshop material, and the participant notebooks that go with it |
jfrusher.github.io · LinkedIn · jacob@frusher.co.uk
How this page stays current
Every card above is a live SVG from
readme-svg-generator, rendered on request
against the GitHub API and cached for four hours. The stars, descriptions and topics on the
repository cards are whatever they are right now — there is no copy of them in this file to
go stale. Each card is wrapped in a <picture> so it follows your colour scheme rather than
mine.
The Now and Recent activity blocks are rewritten every night by a workflow running one dependency-free script. It commits only when the content actually changed: dates are absolute rather than relative, precisely so that a quiet week produces no commits at all instead of a week of bot noise in the heatmap two sections up. If the API is unreachable the script exits non-zero without writing, which leaves yesterday's correct content in place and turns the run red.
One known edge: GitHub disables scheduled workflows after 60 days with no repository activity, and the bot's own commits do not reset that clock. If this page ever stops moving, that is where to look.

