Skip to content

// Notes

Notes

Short entries on what I’m building and why it’s built that way. Newest first. No schedule, no newsletter — they go up when there’s something worth saying.

VoicesZA is ready for local money

Paddle is a merchant of record and settles from anywhere, which is why it was chosen — but it is card-first, and a meaningful share of South African organisers do not hold a card it will accept. So Payfast is built beside it, for Instant EFT and SnapScan in rand. Nothing is charged on VoicesZA yet: everything is free until March 2027, and the second rail goes live when charging starts. The interesting part was not adding a second gateway; it was that the thing which actually varies between two payment providers is the browser, not the server. One opens an overlay in the page, the other posts a signed form and navigates away.

Stellar Drift is playable

A browser idle game with offline earnings and a prestige loop. The engine is zero-build vanilla JavaScript — no bundler, no framework, no install step — so it loads as fast as a static page and keeps working with the network off. You can play it on its project page without leaving this site.

Parlour is being built against a rule, not a spec

A suite of quiet card and tile games for people the casual-games market treats badly. The constraint that shapes every decision is that large is the DEFAULT, not a setting: the trap is adding a large-text option and then designing the default for yourself. So body text starts at 20px, touch targets are 64px rather than the 44px mobile guidance calls a minimum — that guidance assumes steady hands — and the size setting only scales up.

The builder collects the thing a form cannot

Anybody can tick a box saying they want pricing on the page. Dragging pricing above the fold says something a contact form never gets out of people, and the order of the blocks turns out to be the most useful thing the builder collects. Every list in it is deliberately closed — the moment it can express an arbitrary layout it stops being a way to start a conversation and becomes a page builder nobody asked me to maintain.

// Open for work

Want something like this, built to your own brief?

Fast, accessible, and built to last — no page builders, no template you'll outgrow in a year. Tell me what you need and the contact form goes straight to my inbox.