Work · Signals · Colophon · Contact
Small tools, mostly at the seam between AI and creative work. I build rough, ship early, then make it good.
The full index — every repo, as plain text
| Project | What it does | Stack | |
|---|---|---|---|
| GitDNA | Reads a repository's commit history and renders its shape — who touched what, and when. | Python |
repo ↗ |
| Gesture | A gesture-powered macOS companion where AI watches your hand, Chrome sees the motion, Node makes the decisions, Swift presses the keys, and Rust quietly keeps everything alive. No clicks. Just vibes and surprisingly cooperative software. | JavaScript |
repo ↗ |
| Prompt-Vault | PromptVault is a version-controlled AI prompt manager that lets you save, organize, search, compare, and restore prompts without ever losing previous edits. Every change creates an immutable version, giving you a complete history of your prompt evolution. | TypeScript |
repo ↗ · live ↗ |
| Creative-Brief-Doctor | Creative Brief Doctor is an AI-powered tool that scores creative briefs, identifies gaps, and generates actionable follow-up questions in a shareable report. | TypeScript |
repo ↗ · live ↗ |
Open the hood
This README is a build artifact. Nothing on it is typed by hand except the prose you're reading.
Four times a day, a GitHub Action asks the GraphQL API what I've been doing, hands the answer to a
set of SVG generators in scripts/, and rewrites the regions of this file between
<!-- MARKER:START --> comments. Push a new public repo and a card for it appears here on the next
run — art-directed like everything else, with no editing.
The constraints shaped it. GitHub strips <script>, so there's no JavaScript. Pointer events
don't reach inside an <img>, so there are no hover states. An SVG loaded that way can't fetch a
webfont either, so the display type is converted to vector paths at build time — which is why the
headline renders identically for you as it does for me.
What's left that is interactive: these accordions, a click target on every card, and art that switches with your GitHub theme.
Motion notes. Everything loops rather than playing once — GitHub lazy-loads images, and a one-shot title sequence usually finishes before it scrolls into view, leaving a dead frame. Each asset runs on a single master clock with per-element delays for stagger, so the phase relationships hold forever instead of drifting apart. Timelines are authored in seconds and converted to keyframe percentages, the way you'd key them on a real timeline.
Nothing here is hotlinked. Every asset is generated into this repo and served from it. The
previous version of this page pulled its stats from a herokuapp.com endpoint that had gone dark,
so the numbers rendered as a broken image for anyone who visited. Contribution counts, streaks and
language splits are all computed from data the build already fetched.
| Refresh | Every 6 hours, plus on demand |
| Auth | The workflow's built-in GITHUB_TOKEN — no PAT |
| Build | scripts/build.mjs · refresh.yml |
| Type | Space Grotesk, OFL, converted to paths |
| Snake | Platane/snk |
Built it rough, shipped it, still making it good.

