I build software that removes friction — usually a browser tab that replaces a spreadsheet, a manual process, or a "we've always done it by hand" workflow. Most of it lives in TypeScript and Next.js, with Node and Python doing the work underneath.
Nothing on this page is a widget. No badge services, no vendor cards, no trackers: a small dependency-free script reads the GitHub GraphQL API and draws every pixel you see here.
Live snapshot · 1386 contributions in the last 365 days · 590 commits · 212 pull requests · 15 repositories touched in the last 90 days · current streak 1 days.
Rendered 2026-09-20 23:47 UTC by
tools/render— every number and every pixel above comes from the GitHub GraphQL API, not from a third-party badge service.
rebar — JavaScript · 1 ★ · updated today
Repository checker and merge gate for projects written with AI agents. Audits any repository, scans versioned files for known prompt-injection signatures, and blocks the commit when a rule is ignored. Zero runtime dependencies.
OpenKartline — TypeScript · updated 3d ago
Racing-line planner and lap-time estimator that runs in the browser. Draw or import a kart track, pick a class, and get a baseline line, braking points and an estimated lap time — a planning estimate, not a validated one.
OpenParts — Svelte · updated 15d ago
Local-first parts interchange lab. Cross-reference automotive part numbers entirely in the browser, with no backend to depend on.
Constellation — TypeScript · updated 26d ago
An observatory for public GitHub signals — profiles, achievements and activity, measured honestly instead of gamified.
Galegos — TypeScript · updated 26d ago
Digital menu that hands the finished order off to WhatsApp. Built for a real kitchen, so it had to survive real customers.
Weekly totals instead of the usual 365-square grid. Consistency has a shape, and it is much easier to read as a waveform than as a wall of tiny boxes.
Measured in bytes of code across public repositories — what I actually write, not a wall of logos for things I once installed.
Profiles are increasingly consumed by software rather than people: agents summarising a candidate, bots routing an issue, a model answering "who maintains this?". So this repository ships a machine-readable layer alongside the human one.
llms.txt— a plain-text brief following the llms.txt convention: who I am, what I build, what I am good at.profile.json— the same information as structured data: stack shares, project summaries, live activity counters.
Both are regenerated on the same schedule as the images, so an agent reading them never gets a stale answer.
How this profile renders itself
A scheduled GitHub Action runs tools/render every six hours:
- A single GraphQL query pulls public repositories, language byte counts and the contribution calendar.
- Repositories are scored by recency, size and reach, then placed on a sunflower lattice. The constellation in the banner is the shape of my public work — it drifts as that work changes.
- Three SVG panels are drawn from scratch in light and dark variants, with the CSS and SMIL animation baked directly into each file.
llms.txt,profile.jsonand the generated blocks in this README are rewritten.- A fingerprint of the underlying data decides whether any of that gets committed, so a quiet week costs zero commits instead of four a day of timestamp churn.
No runtime dependencies and no external image services. If GitHub is up, this page is accurate.
GITHUB_TOKEN=$(gh auth token) node tools/render/render.mjsOpen to conversations about front-end architecture, developer tooling and open source.
Best first contact: open an issue or a discussion on any repository above.





