Independent Software Engineering
Browser software, built end to end.
I design, build, test and ship Manifest V3 Chrome extensions and browser-native systems — architecture through automated testing to the store listing. Every project on this site: one engineer, no team to hand the hard parts to.
What I build
Three kinds of work, one way of working
Different surfaces, same discipline: pure logic separated from the interface, tested headlessly, and shipped without an analytics tag anywhere in it.
Chrome Extensions
Manifest V3 across side panel, popup and new-tab surfaces. Local storage only, minimal permissions, and a permission-versus-code audit before every store submission.
Idle Games and Simulation
Economy curve design, offline-accrual math, and headless simulation harnesses that fast-forward thirty in-game days in seconds to catch balance and concurrency bugs.
Automation and Tooling
Python automation, browser RPA against legacy systems, reporting pipelines, and the document workflows behind a working legal-services operation.
Flagship — on the Chrome Web Store
Dota Companion
A private Dota 2 dashboard that grew a second half. It tracks whether you are actually improving — a streak counted against your own GPM baseline, not against attendance — and it values your entire Steam inventory against the Community Market. No account, no API key, nothing stored anywhere but your own machine. Version 2.5 moves it into Chrome’s side panel and adds hero reviews, searchable Guides, a ward map and share cards.
What it does
Improvement streaks, goals measured against your current twenty-game average, hero splits, and private notes on people you queue with. Then a full-page inventory view: every item priced, grouped and searchable, with a value history built from your own refreshes rather than a market average.
The part a price cannot tell you
Because it already reads your match history, it can cross the two: how much of your cosmetic spend is riding on heroes you actually play, and how much is parked on heroes you have not picked in twenty games. Every other inventory tool has the price lookup. None of them have the second dataset.
Flagship — on the Chrome Web Store, version 2.0
Annoying Dino
A mischievous dinosaur that lives on whatever page you are reading. He chases your cursor, perches on headings, lays eggs that hatch into friends, delivers joke cards, and occasionally survives a meteor. Version 2.0 rebuilt the lot — a new motion system, five species, volcanoes, a wardrobe and a fossil record — on the same three permissions as before.
What he does
Roams the page and leaves footprints, chases the pointer and either chomps or tail-bonks it when he catches it, naps in the middle of your article, roars at nothing in particular, and brings friends: hatchlings that follow him around and the occasional pterodactyl fly-by.
What he does not do
Touch the page. Everything he does is drawn in his own layer, and the site underneath is never modified. No network requests, no analytics, no account — and 2.0 added nothing to the permission list, so nobody who already had him installed saw a new warning.
How these ship
The part that is not visible in a screenshot
Anyone can post a demo. These are the four practices that decide whether it still works on somebody else’s machine a month later.
Logic that runs without a browser
Game and product logic lives in pure, dual-export modules with no DOM and no browser APIs. The same file runs inside the extension and inside a headless Node test, and for anything time-driven, inside a simulation that fast-forwards thirty minutes of ticks, accrual and hatching into milliseconds. Behaviour is proven long before anything is clicked.
Suites gate the ship, not the mood
Syntax, manifest limits, tuning constants, save concurrency, DOM contracts and a full render pass all run before a zip exists. A regression test is only accepted once the bug has been re-introduced and the test has been watched to fail, and anything that persists user data has its suite graded by mutation testing.
Instruments get proven before their numbers do
A measurement is a claim like any other. Before a benchmark, a probe or a coverage number is believed, it is run against a case whose answer is already known, and it has to be capable of reporting failure. A harness that cannot fail has not proved anything.
Local-first, and provably so
No accounts, no analytics, no third-party calls by default. The codebase is swept for network APIs and remote assets, and the build gate carries a privacy-egress check plus a DOM snapshot diff. The one deliberate network call, pricing a Dota inventory against the Community Market, is rate-limited and disclosed on its own page.
Who this is for
Depends why you are here
Hiring teams
Every project here was specified, built, tested and shipped by one person. The engineering section above and the devlog are the evidence — including the parts where something broke and had to be diagnosed properly.
Agencies and collaborators
Browser-native work, automation against systems that were never meant to be automated, and internal tooling. If it runs in a tab or cleans up a manual process, it is probably in scope.
People who just want the thing
Most of these are free on the Chrome Web Store and run entirely offline. No sign-up, no email capture, nothing phoning home. Pick one from the list below and install it.
Selected work
Projects
A selection. The full index, with per-project privacy details, is on the projects page.
An idle game about a wizard’s tower. Build rooms, send familiars out, compose spells from runes and Ascend. Free in the browser.
Wreck any web page with a hammer, fire or a quake, then mend the cracks in gold or let it grow wild. Chaos Mode hands the tools to a small black cat that picks its own targets. Nothing leaves your browser.
An idle game about a healer who cannot attack. Pick a road, pick your creature friends and keep them alive with songs while they do the fighting. Free in the arcade and on itch.io.
A woodland camp that lives in the side panel or takes the whole window. Twenty friends arrive one at a time against visible goals, wander, meet each other and keep a diary of it. Snacks are won in five camp games; hats and keepsakes are earned; every creature is drawn in code.
An original six-color trading card game you play against a computer rival: 250 cards, eight commons-only starter decks, packs earned from quests, and ten Ascendants that unlock only with signed codes. No account, and no network requests.
The complete showcase index, including the legal-tech and automation work.
Ask
There is an AI on this site now
It answers questions about what gets built here, and it will work through a build decision with you — decompose, find the flaw, resolve, check. It is deliberately short, and it says “I don’t know” rather than inventing a version number.
Ask about the work
What these extensions do, how they are tested, and whether I am free for a project. It points at the real page instead of guessing at details.
Bring a stuck decision
Side panel or popup, a bug that only appears on a double click, an idle curve that went flat. Real constraints get better answers than tidy questions.
Built on a free tier
A Val Town proxy holds the key and enforces a four-axis budget against Groq’s free tier. The whole build is written up in the devlog.
Devlog
Recent shipping notes
Questions
Before you ask
Are you available for work?
What is the actual stack?
Why is there no telemetry in any of this?
Did you build all of this alone?
Where do the numbers on this page come from?
What is Annoying Dino?
Let us build something
Open to contract work, collaboration, or a technical role. Tell me what you are trying to make work.
Replies come from a person · usually same day
WRITEUPS
Read the work, not just the list
Long-form case studies live on the writing index, with short direct answers to the same questions on the answers page. For the professional summary, see the CV. The engineering profile covers how the work gets built. There is also a Positivity Wall — a shared nine-panel surface where every visitor leaves one generated stamp, and yours is still there when you return.
DEVLOG
New builds, in your inbox
Occasional notes on what shipped, what broke, and what the fix actually was. No schedule, no marketing.