Software

Everything below is my own work and, unless noted, the source is public. The rest is on GitHub.

stdnt.xyz

JavaScript · Repository private

A searchable directory of everything a student can get for free — software packs, AI tools, free API keys, 115 scholarships and 224 STEM programmes — built so that community spreadsheets that quietly stop being updated have somewhere permanent to live. A quiz matches scholarships and programmes to your own circumstances entirely on-device; deadlines export to a calendar; saved items and quiz answers never leave the browser. Zero dependencies and no build step, so it deploys anywhere static.

stdnt.xyz in use

artwork

JavaScript

A pomodoro timer whose background is a museum painting that paints itself for exactly as long as you work. It starts on a bare toned canvas and lays down about fourteen thousand brush strokes one at a time, each travelling along its path and curving with the local image gradient, six passes from broad bands to fine points, the last landing as the clock reaches zero. Pictures come from seven open museum collections — the Met, the Rijksmuseum, the Prado, the Louvre and others — with a wall label for each. Everything you sit through is hung in a gallery of your own, repainted stroke for stroke from a forty-byte seed.

artwork in use

baselayer

JavaScript

A NixOS configuration builder that runs entirely in the browser. Pick what the machine is for, a desktop, packages, self-hosted services and how locked down you want it, and it emits real flake.nix and configuration.nix files. Fifty-nine services are generated from their actual NixOS modules, with ports collected into the firewall and dependencies pulled in automatically; package search queries the same index as search.nixos.org; and a conflict checker catches things like a hardened kernel against the NVIDIA driver, or two services fighting over port 80. There is no backend — the configuration is compressed into the URL, so the link is the config.

baselayer in use

backoffice

Go

A self-hosted inventory for the parts in a lab drawer — boards, sensors, modules, passives — with photos, counts, locations, printable QR labels, and project bills of materials that tell you what you are missing. It ships as one static binary with templates and assets compiled in, one SQLite file and a folder of photos: no database server, no Node build, no config file, and it cross-compiles to a Raspberry Pi with no runtime dependencies at all. Upgrading is replacing the binary; the schema migrates itself on startup.

  • backoffice, screen 1 of 5
    The inventory, filtered by type, drawer, maker and the interfaces a part speaks.
  • backoffice, screen 2 of 5
    One part: stock, where it lives, prices across the shops it can reach, and the pinout.
  • backoffice, screen 3 of 5
    A project reserves its parts, then budgets the pins on the board and draws the wiring.
  • backoffice, screen 4 of 5
    The idea board proposes builds it can name every part for, from what is already on the shelf.
  • backoffice, screen 5 of 5
    Case finder: printable models for a given board, ranked by how often they have actually been printed.

Other work