Hi I'm Dennis!

Full stack engineer who builds with AI agents, and builds them.


I build web apps with TypeScript, React, and Node, and AI agents are a big part of how I work every day. I write specs they can follow and check their work with tests and screenshots before anything ships. I also know when a problem doesn't need AI at all.


Before software, I spent eight years as a high school band director. I still build for teachers, and I still care most about the people using what I make.

Blogs

All posts

Projects

ship-kit

A ship-kit run in the terminal with Haiku scouts, a Sonnet plan approved by an Opus checkpoint, a failing test made to pass, and a final Opus review.

A Claude Code plugin that takes a feature or bug from a plain-English request to a reviewed, tested change.

Each model gets the job it's best at. Haiku scouts the codebase in parallel, Sonnet plans and builds, and Opus only steps in at three review checkpoints. You get Opus-level review without paying Opus prices for every step, and no run counts as done without screenshot proof.

Claude Code plugin / subagents / Haiku, Sonnet, Opus

CS2Expert StatsDiscord bot / private repo

A CS2Expert match card in Discord showing K/D, ADR, headshot percentage, rank, and an AI-written verdict.

An AI agent that posts Counter-Strike 2 match and career cards to Discord from Leetify data.

The model writes exactly one sentence. The stats, ratings, badges, and whether the note roasts or praises you are decided by plain code, which keeps it cheap, testable, and unable to invent a number.

eve agent / AI SDK / OpenAI / Turso / Discord API

BandRoomHQ

The BandRoomHQ home screen with upcoming concerts, unfinished work, and ensemble summaries for a high school band program.

Software for school band directors that keeps rosters, concert seasons, the music library, seating charts, and instrument inventory in one place.

I built it for the job I used to do. The product, its vocabulary, and every architecture decision are written down in PRODUCT.md, CONTEXT.md, and ADRs, so AI agents build to the spec instead of guessing.

React Router 8 / Cloudflare Workers / D1 / Drizzle / Better Auth

NCE ConnectClient project

An NCE Connect tracking page showing a shipment in customs, its six-step timeline, and the update history.

Shipment tracking for a cargo company shipping to Nicaragua. Staff update each shipment's status and clients check it with a short code.

Clients get a lookup code instead of an account, because a code on a paper receipt is all they need. English and Spanish from day one, and WhatsApp updates that staff send with one tap.

TanStack Start / Cloudflare Workers / D1 / Drizzle

Notulio

Source code

Save any article and get an AI summary of it.

Firecrawl pulls clean text out of the page before the model sees it, so the summary covers the article, not the navigation and ads around it.

Next.js / Convex / Firecrawl / OpenAI

ShoutOWT Twitch Player

The ShoutOWT setup page with channel, theme, and volume settings next to a live preview of a clip in the Gaming theme.

An OBS overlay that plays a clip of another streamer when the streamer or a mod types the shoutout command in chat.

No login and no bot account. The overlay reads chat anonymously and your settings live in the OBS URL itself, while the Twitch API keys stay on the server. Shoutouts queue up, avoid repeating clips, and fall back to a creator card when there's no video to play.

Astro / React / Twitch API / Netlify