Full-stack engineer. I write the interface, the service behind it and the schema under that,
in whichever language the problem actually wants.
Projects that run, not screenshots of projects. Fifty-two of them run in a browser tab and have to hold their frame rate while they do it, driving hand and face tracking through WebGL particles or compute shaders written in WGSL. The rest carry a real backend: schemas, migrations, HTTP APIs, a CRDT that reconverges three offline replicas without a server deciding anything. Some are desktop builds, some ship to Android, and one point of sale runs on a restaurant counter.
Every project states the problem, the approach and a measured result. The whole catalog builds from one source tree into a single deployment and routes by hostname, so a case study can never link to a stale copy of its own app.
| Project | What it is | Stack |
|---|---|---|
| Parcelwise | Work out what a courier will really charge to post a parcel. They bill on the greater of the weight and the box size, so a light thing in a big box costs a fortune. Parcelwise shows the volumetric weight, which one you'll be billed on, how much air you're paying for, and the smaller box that would stop it. Boxy the box helps. | JavaScript, SVG |
| Draper | Work out how much fabric to make your curtains: the metres to order, the number of widths to join, the cut length and the waste, from the track width, drop and heading style. A curtain is gathered, so it needs far more fabric than the window is wide. Bobbin the spool helps. | JavaScript, SVG |
| Layline | Work out how much carpet or vinyl to buy off a fixed-width roll, which way to run it, where any seam falls and how much you waste. It tries both ways round and prefers the one that needs no seam. Rollo the roll helps. | JavaScript, SVG |
| Sizely | Turn a US, UK or EU size into the others, or get your size from a measurement, for shoes and clothes. It leans on the measurement because fit, not price, is the top reason clothes get sent back. Tam the tape measure helps. | JavaScript, SVG |
| Packfit | Will your bag fit? Type its size and weight, pick the airline, and get a plain yes or no with the exact amount to shave off or lift out. Measures a cabin bag side by side and a hold bag on the three sides added up. Stow the suitcase helps. | JavaScript, SVG |
| Readyby | Tell it what you're cooking and when you want to eat, and it works out when to start each dish so the roast, the potatoes and the veg all land together, with safe pull temperatures and an oven-clash check. Ding the kitchen timer helps. | JavaScript, SVG |
| Divvy | Split the rent when the rooms aren't equal. Everyone says what each room is worth to them and it sets envy-free rents nobody would swap, with shared bills on top. Nook the little house helps. | JavaScript, SVG |
| Recoup | Track the last day you can take things back. It counts down every return window, sorts by what closes first, and knows the rights the law gives you on top of the shop's policy. Fetch the dog keeps watch. | JavaScript, SVG |
| Fridgewise | Keep a quick list of what's in your fridge, freezer and cupboard and it sorts itself by what to eat first, using published food storage times so less gets thrown away. Frost the fridge keeps watch. | JavaScript, SVG |
| Wattson | Add the things in your home and see what each one costs to run for a year, with the standby you forget about counted and the daily standing charge kept separate. Watt the meter helps. | JavaScript, SVG |
| Prorate | Work out a mid-month move's rent three ways at once, see the gap between the methods, and add up the full cheque for day one. Kee the key helps. | JavaScript, SVG |
| GoodHours | Add where everyone is and when they work, and see the meeting times inside everyone's day, with clock change warnings and fair turn-taking when nobody's day lines up. Sol the sun helps. | JavaScript, Intl API, SVG |
| RoomCoat | Measure a room and see how much paint it needs and the cheapest tins to buy, with doors, windows, ceilings and new plaster counted. Dab the paint tin helps. | JavaScript, SVG |
| Batchwise | Make any recipe bigger, smaller or fit your pan. Writes amounts in the cups and spoons you own, or grams from a real weight chart, and handles part of an egg. Scoop the measuring cup helps. | JavaScript, SVG |
| ChoreShare | A fair chore rota for a shared house or family. Splits jobs by time, not count, rotates the worst ones and writes the group chat message. Suds the soap bubble helps. | JavaScript, SVG |
| FocusForge | A focus timer that keeps time in a hidden or reloaded tab, rings when time is up and shows where your week went, with Ember the spark mascot. | JavaScript, Web Audio, SVG |
| Shelf Check | Type what each shelf label says and see which pack is really cheaper, with multi-buy offers counted and the bigger-pack trap flagged. Works offline in the shop. | JavaScript, PWA |
| EvenUp | Split group costs and settle up in the fewest payments, solved exactly with a subset dynamic program. Writes the pay-me-back message for you. | JavaScript, SVG |
| Setout | How many tiles a floor or wall needs, with spares, and where to start laying them so you don't finish on a thin sliver cut. Set-out follows BS 5385 and the TCNA wastage bands. | JavaScript, SVG |
| MindMesh Board | Jot ideas, link them, and tidy them with a force-directed layout. Keyboard first, a pasted list becomes a map, and deletes stay deleted across tabs. | JavaScript, SVG, BroadcastChannel |
| Rate Limit Lab | Five rate limiting algorithms, an HTTP middleware that speaks the IETF RateLimit headers, and a simulator that runs them side by side. | JavaScript, Node |
| Idempotency Lab | An Idempotency-Key middleware for node:http built to the IETF draft, and a simulator that shows what retries do to a payments API with and without it. | JavaScript, Node |
| Lux | A business operating system. A business signs up, picks its type, and gets a public site, a customer record, a booking or order flow and numbers that all know about each other. | Next.js, TypeScript, PostgreSQL |
| Kivo | A life operating system: one account holding Money, School, Commute, Life and Local, with a home brief that reads all five together to say what the day asks of you. | Next.js, TypeScript, PostgreSQL |
| Aegis Scan | Defensive web-security assessment. Passive scans of headers, cookies, TLS, DNS and technology hints, graded A to F with a remediation report. | Next.js, Drizzle, PostgreSQL |
| ONNX Digit Lab | A 26 KB neural network classifying on device. The runtime walks WebGPU, then WebGL, then WASM, and reports where it landed instead of guessing. | ONNX Runtime Web, WebGL, WASM |
| WebGPU Vision Lab | Four filters written twice, once as a Canvas2D loop and once as a WGSL compute shader, on the same webcam frame. Measured 22.8x on blur, 2.1x on Sobel. | WebGPU, WGSL, WebRTC |
| SAT0RU | Hand-tracked technique visualiser. A classifier reads 21-point landmarks per frame and votes across a rolling window, with a geometric fallback when confidence drops. | Three.js, MediaPipe, TensorFlow.js |
| Local-First Sync | A last-writer-wins CRDT with vector clocks and causal delivery, written from scratch. Property-tested across 40 randomised edit-and-gossip orders. | JavaScript, CRDT, Node |
| UPCAT Reviewer | Adaptive study system over 1,017 questions and 28 topics that learns which topics you are weak at and schedules what to review next. | PWA, IndexedDB, Service Worker |
31 October 2026: one new project and six improved.
- New: Parcelwise works out what a courier will really charge to post a parcel. Couriers bill on the greater of the weight and the box size, so a light thing in a big box costs a fortune; Parcelwise shows the volumetric (box-size) weight, which one you'll be billed on, how much air you're paying for, and the smaller box that would stop it. Boxy the box helps. Try it.
- Setout: a window or door now comes off the tiled area, with the ring of cut tiles around its edge added back, since the offcut is usually too small to reuse.
- Layline: a stairs calculator for a straight flight, working out the running metres off the roll from the tread, riser and nosing of each step, with the pile running down the stairs.
- Sizely: a ring-size converter, anchored on the ISO 8653 inner circumference (the exact EU/ISO number), giving the US number and UK letter from a finger measurement or a known size.
- Packfit: a cabin-liquids 3-1-1 check, flagging any bottle over 100 ml and warning when even compliant ones won't fit the one clear bag (a US quart or the EU 1-litre).
- Snapsize: an exact print-resolution readout, the dpi your photo prints at against the 300 and 600 dpi bars, plus a warning when it's under the country's online-form minimum pixel size.
- Readyby: a "finished early?" keep-warm panel, holding a dish safely above 60°C in a warm oven, tented while it rests, or under the 2-hour rule, with a warning when the hold runs too long.
30 October 2026: one new project and seven improved.
- New: Draper works out how much fabric to make your curtains: the metres to order, how many widths to join, the cut length of each drop and the waste, from the track width, the drop and the heading style. A curtain is gathered, so it needs far more fabric than the window is wide, cut off a roll in whole widths. Bobbin the spool helps. Try it.
- Wattson: the tracked appliances are now placed against a typical home, using Ofgem's 2026 Typical Domestic Consumption Values, so a year's kWh reads as low, about average or high (and against an Economy 7 home when a night rate is set).
- Shelf Check: handles "£X each when you buy N" multibuys (a per-unit price you only get at the quantity), telling it apart from a lump "2 for £3" by the word "each".
- Snapsize: added the Singapore and South Korea passport-photo sizes, both 35×45 mm with the smaller 25–35 mm head height.
- Divvy: flags a deposit above the Tenant Fees Act 2019 cap for England (five weeks' rent, or six at £50,000 a year or more), so you catch an unlawful deposit before you pay it.
- Prorate: type the part-month figure your landlord actually quoted and it says which method it matches, or that it's more than any fair split.
- Fridgewise: each food now knows whether its date is about safety or quality, so a tracked item near its date says "eat it or freeze it now" for raw meat and dairy, or "usually fine a little after" for bread and produce, following the FSA's use-by vs best-before split.
- Recoup: a faulty return no longer has a restocking fee taken off; a faulty item is a full refund by law (Consumer Rights Act 2015), and the line now says so.
28 October 2026: one new project and six improved.
- New: Layline works out how much carpet or vinyl to buy off a fixed-width roll, which way to run it, where any seam ends up and how much gets trimmed off. It tries the roll both ways round and prefers the one that covers the room in a single piece, because a seam is the thing people regret. Rollo the roll picks the run. Try it.
- Readyby: the pull temperature now allows for carryover, so you take a roast out of the oven a few degrees early and let it coast up to the doneness you wanted while it rests, instead of overshooting.
- Fridgewise: a "Thawed it" button restarts the clock on a frozen item's fridge life, so a chicken that kept for months in the freezer now shows the day or two it really has once defrosted.
- Recoup: an online return window now counts from the day the parcel arrives, not the day you ordered, following the Consumer Contracts Regulations where the cancellation period runs from delivery.
- Sizely: added kids' clothes, sized by the child's height (the one fixed number) with the US and UK age equivalents alongside.
- Packfit: added the free under-seat personal item for American and United, the extra bag you get on top of the carry-on and the only free one on a US Basic Economy fare.
- Wattson: a washing machine, tumble dryer or dishwasher now shows the cost of a single load next to the yearly figure, the way their energy labels are quoted.
25 October 2026: one new project and five improved.
- New: Setout works out how many tiles a floor or wall needs, with the right spares, and where to start laying them so you don't finish on a thin sliver cut against the wall. Chip the tile plans the job. Try it.
- Shelf Check: ranks tinned food on its drained weight, not the net weight in brine, so you aren't paying for the water it sits in.
- Divvy: splits the deposit in proportion to each person's rent, not equally, since the deposit is set as a multiple of the rent and the small room shouldn't carry the same share.
- Prorate: a rent quoted per week, four weeks or year is turned into the right monthly figure first (per week is times 52 over 12, not times 4) before it prorates.
- Snapsize: added the China visa (33x48 mm) and Philippines (35x45 mm) photo sizes, each with its own head-size band.
- Wattson: adds the VAT on the bill, the reduced 5% rate UK domestic energy carries, so the headline is what you actually pay.
24 October 2026: one new project, five improved, and Packfit now live.
- New: Sizely turns a US, UK or EU size into the others, or reads your size off a measurement, for shoes and clothes. It leans on the measurement because fit, not price, is the top reason clothes get sent back. Tam the tape measure helps. Try it.
- Now live: Packfit checks a bag against an airline's cabin or hold limit and says exactly how much to shave off or lift out. Stow the suitcase helps. Try it.
- EvenUp: Cash App and Venmo handles now fill in the amount on the pay link (and Venmo picks up the trip name), the same as PayPal and Monzo already did.
- Snapsize: lay the photo sheet out on A4 or US Letter and run it off on an ordinary printer, not just a 4x6 photo print.
- ChoreShare: mark a chore as someone's own and it always goes to them, still counting towards their share; tick two people and they share just that one.
- Batchwise: change the pan and it now guides the bake time too, since a deeper tin bakes slower and a wider one faster, with a time to start checking.
- RoomCoat: bare or new woodwork now adds a wood-primer coat before the topcoats, as its own line on the shopping list.
22 October 2026: one new project and six projects improved.
- New: Readyby gets every dish ready at the same time. It works backwards from your serving time, builds in the rest for the meat, flags when two oven dishes want different heat, and names the temperature to check the joint with. Ding the kitchen timer keeps you company. Try it.
- Recoup: extended holiday return windows, so a gift bought in November can go back into January, using the big shops' published holiday policies.
- Divvy: split shared bills equally on top of the rent, so each housemate sees the real monthly cheque, not just the room rent.
- Snapsize: added Australia and India passport photo sizes, each with its official head-size band.
- Prorate: a short-let mode that prices a whole fixed-term tenancy, a part-month at each end and the full months between, three ways at once.
- Wattson: a "used" setting for each thing, so a space heater or air conditioner is costed for the months it actually runs, not all year.
- Fridgewise: a "use it or freeze it" nudge that works out the last day you can still freeze something to save it.
19 October 2026: one new project and four projects improved.
- New: Recoup tracks the last day you can take things back, counts down the days, and knows the return rights the law gives you on top of the shop's own policy. Fetch the dog keeps an eye on the dates. Try it.
- Wattson: add a cheaper night rate (Economy 7) and tick what you run overnight, and it charges those at the night rate and shows what moving them to the cheap hours saves over a year.
- Siphon: points out when two subscriptions do the same job, like two music apps or two cloud drives, and adds up what the pair costs a year.
- Shelf Check: compare concentrates fairly by typing what the bottle makes, so it ranks on the price per made-up litre, not the price per bottle.
- Fridgewise: type the date printed on a pack and say if it's a use-by or a best-before, and it gives the right advice for each, safety for a use-by and quality for a best-before.
18 October 2026: one new project and four projects improved.
- New: Fridgewise keeps a list of what's in your fridge, freezer and cupboard and sorts it by what to eat first, using published food storage times so less gets thrown away. Frost the fridge looks worried when something needs eating today. Try it.
- EvenUp: add a tip or service charge to a cost and it's shared the same way as the bill, so whoever had more pays a little more of it.
- Siphon: shows how much each subscription has actually cost so far, per one and as a total, because people guess their subscription spend far too low.
- Wattson: puts the carbon next to the cost, turning a year's electricity into kilograms of CO₂ and an easy "like driving X miles".
- ChoreShare: mark a chore someone can't do at all, like a child and bleach or a bad back, and it never lands on them unless nobody else can take it.
17 October 2026: one new project and four projects improved.
- New: Wattson adds up what each thing in your home costs to run for a year, counts the standby you forget about, and keeps the daily standing charge on its own so you see what you can actually change. Watt the meter buzzes when the year lands. Try it.
- Shelf Check: type a loyalty or member price and it ranks on what you'd really pay with the card, and says when the card changes which pack is the best buy.
- Batchwise: a new oven temperature card converts a recipe's heat between a normal oven and a fan oven, in °C, °F and gas mark.
- RoomCoat: enter the paint already in the cupboard and it comes off the shopping list, so you buy around it instead of adding to the pile.
- ChoreShare: mark a whole week someone is away and they drop off the rota for it, without it counting against their fair share.
16 October 2026: one new project and three projects improved.
- New: Prorate works out part-month rent three ways at once for a mid-month move, shows the gap between the methods, and adds up the full cheque you write on day one. Kee the key jingles when the numbers land. Try it.
- Photo Fit: added Australia, Japan, India e-Visa/OCI and China presets, each carrying the size, head band and file limits from the issuing authority.
- ChoreShare: a chore no longer lands on the same person two turns running while someone else is free, so the worst jobs actually rotate.
- Batchwise: the gram chart now covers almond flour, cornmeal, cream cheese, molasses, dates, semolina and shredded coconut from King Arthur's weights.
15 October 2026: one new project and four projects improved.
- New: GoodHours finds a meeting time that lands inside everyone's working day across time zones, warns you before clocks change, and writes the invite in each person's own time. Sol the sun turns into a sleepy moon when a time is the middle of the night for someone. Try it.
- Velocity Lens: plans the sprint from your own backlog CSV and packs it for the most value instead of grabbing the top scores first, with a reason for every task left out.
- Workflow CLI Kit: README checks no longer count headings inside code examples or empty sections, and runbooks are built from the project's real scripts and package manager.
- Hollow Purple: hand gestures now work at any angle and any distance from the camera, and the camera says why it couldn't start.
- SAT0RU: keeps both hands when the tracker labels them the same side, and the backup gesture reader works with a tilted hand.
Languages
Front end
Back end and data
ML and vision
Platform and tooling