[Brand] · [Year]
Instant win · Age gate 21+
[What it was, what you built, and the constraint it had to survive.]
Razor · CSS · JS config flows
Front-end developer · Phoenix, AZ
Front-end developer in Phoenix. 15 years building online promotions for brands you've heard of.
Est.
1978!
Why "we"?
The developer who's shipped brand promotions for 15 years, and the collector with two sleeves of comic-book ink. Both of us show up to work.
Side A · 15 years of promotions
For 15 years I built online promotions: instant wins, code entries, sweepstakes and games for brands like MillerCoors, Disney, Pepsi, McDonald's, Mars and Takis. Promo sites live fast. They launch on a date that doesn't move, take a traffic spike, follow the legal rules to the letter, and disappear when the campaign ends. None of them are online anymore, so here's what went into them instead.
Promotions go live when the campaign says so. I've spent 15 years shipping to a fixed date.
Most recently I styled .NET MVC builds: Razor views, CSS architecture, image and font assets, and JS-driven flows wired through config.
Age gates for alcohol brands, official rules, eligibility checks: compliance is a feature, not an afterthought.
The sites are gone. The work isn't. Here's what I built, for whom, and what it had to survive.
Instant win · Age gate 21+
[What it was, what you built, and the constraint it had to survive.]
Razor · CSS · JS config flows
Code entry · Sweepstakes
[What it was, what you built, and the constraint it had to survive.]
Razor · CSS · JS config flows
Game · Launch-day spike
[What it was, what you built, and the constraint it had to survive.]
Razor · CSS · JS config flows
Side A · my own apps
Each of these started as something I wanted to exist: a home for my gym's coach challenge, a roast for my fantasy league, a receipt for doing someone a favor. I build them end to end: design, front end, server and hosting. Three share one deliberately small stack, because a stack you know cold is a stack you can ship on.

Open beta
My gym's five-week coach challenge, now a platform any gym can run.
React · Express · SQLite · Railway

Open beta
Paste your fantasy league. Get roasted. AI-written, no account needed.
Next.js · Claude API · Redis · Tailwind

Coming soon
A receipt for doing someone a favor, with an optional tip jar.
React · Express · SQLite · Stripe

Coming soon
A recipe box for keeps: save recipes from a link or a photo, scale them, and shop from them.
React · Express · SQLite
Side A · client work
I also work directly with businesses. Some need a hard look at the site they have, some need a new one, and some need an app. I build to what the owner actually needs, not to the tool I happen to like.
A full audit of the site you already have: what's working, what isn't, and what it would take to improve your rankings, usability and brand.
A new site built from your designer's creative, or from mine. Static, a custom back end with a simple admin login, or WordPress or another CMS: whatever fits how you'll run it.
When the business needs more than a website. I build apps end to end, the same way I built the four above.
In progress
A rebuild for a Phoenix shipping-container company: clear prices, one quote form, and pages the owner can edit without breaking the layout.
WordPress · Custom theme · ACF Pro
Side B · the other half of "we"
I collect comics, mostly Venom and Spider-Man, plus the figures that go with them. My favorites are the December 1978 issues, my birth month, and nearly every one of those covers is loud, flat yellow. That's where this site's yellow comes from.
Two full sleeves. The first session was a line on the inside of my forearms that most comic fans will recognize. It took a lot more sessions to finish the rest.
Current pull list
[What you're reading]
Grail
[The one you'd never sell]