Projects
vivid/
★ featured
A daily diary where each day is a hand-painted watercolour circle, mixed from up to three colours tied to three short notes and revealed by holding a breathing gesture. Washes render in Skia as a pure function of colour, dilution and seed, so a day's artwork reproduces exactly from a handful of numbers — there is no object storage to run, and photos and voice notes never leave the device. SQLite is the source of truth so the app works fully offline, with sync resolving last-write-wins per day.
home-network/
Two NixOS towers declared in one flake, running the house: Home Assistant OS as a KVM guest, AdGuard Home resolving DNS, Tailscale for remote access and exit-node duty. AdGuard and Tailscale run on the host rather than as Home Assistant add-ons, so DNS and remote access survive the guest rebooting, upgrading or being restored — precisely when you most need to reach the box. The second tower is a deliberately minimal secondary resolver, so the house keeps DNS when the first one is down.
5e-tabletop-tool/
Arcanum — a multi-user character builder and session tool for 5th Edition SRD-compatible tabletop games: point buy, level-up ASI slots, computed skill bonuses, weapon and armor math, and campaigns where the DM controls what players can see of an encounter. Rulesets are data rather than code, so a group can import its own content by JSON or PDF and get the same builder. Licensing is enforced by architecture, not good intentions: the public database seed carries only CC BY 4.0 SRD material, and third-party book content lives in a private ruleset that never ships.
job-tracker/
A local pipeline for running a job search end to end: ingest postings from ATS APIs, score them for fit, tailor a resume per role, and fill the application — stopping for human review before anything is submitted. Scoring runs deterministic hard filters in code before an LLM rubric that only judges degree, with every dimension anchored, because an unanchored 0–5 scale clusters everything at 3–4 and produces a ranking that carries no information. The guardrails are structural rather than advisory: resume bullets are selected by ID from a pre-approved pool so nothing can be fabricated, and there is no code path that clicks a submit button.
lukeevers.com/
This site: a terminal you can actually type in, where every command is also a real indexable route. The shell is an XState machine, the pages are server-rendered, and deep-linking seeds the scrollback as if you had typed your way there, so the URL and the terminal never disagree. Next.js and a FastAPI contact endpoint ship in one Vercel deploy — the contact form is a Python function on the same domain, with no second service and no CORS.