Est.1978No. 47 · Dec
We are Foshe

Front-end developer · Phoenix, AZ

We are Foshe!

Front-end developer in Phoenix. 15 years building online promotions for brands you've heard of.

Est.
1978!

Why "we"?

One guy, two sides

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

Built for launch day

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.

Launch dates don't move

Promotions go live when the campaign says so. I've spent 15 years shipping to a fixed date.

Pixel-level CSS on real stacks

Most recently I styled .NET MVC builds: Razor views, CSS architecture, image and font assets, and JS-driven flows wired through config.

Rules are part of the build

Age gates for alcohol brands, official rules, eligibility checks: compliance is a feature, not an afterthought.

Case files

The sites are gone. The work isn't. Here's what I built, for whom, and what it had to survive.

  • Disney
  • Mars
  • McDonald's
  • MillerCoors
  • Mtn Dew
  • Pepsi
  • Subway
  • Taco Bell
  • Takis
Case file 01

[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

Case file 02

[Brand] · [Year]

Code entry · Sweepstakes

[What it was, what you built, and the constraint it had to survive.]

Razor · CSS · JS config flows

Case file 03

[Brand] · [Year]

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

Built because I wanted it

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.

coachbattle.app

Coach Battle

Open beta

My gym's five-week coach challenge, now a platform any gym can run.

React · Express · SQLite · Railway

Issue 01 · Open beta

Coach Battle

Coach Battle home page
Coach Battle on a phone

Every fall my gym runs the Battle of the Coaches: two coaches pick squads, members log points every day for five weeks, and one side wins. It ran on a spreadsheet. Now any gym can run its own.

  1. Sign up on your gym’s page and join a squad.
  2. Log workouts, sleep, water and steps every day.
  3. Watch the standings until the winner is called.
Visit coachbattle.app

Meanwhile, behind the panels…

How I built it

  • A season with seven phases, worked out from the event dates and the gym’s timezone.
  • One gym grew into a platform: every gym gets its own events, and one account works across all of them.
  • Tests run two gyms against the real server to prove no data crosses between them.
  • Passwordless sign-in by emailed link, and printable QR codes for signup.

The stack

  • React 18
  • Vite
  • Express 5
  • Node 22
  • SQLite
  • Docker
  • Railway
  • Litestream
  • Resend
A gym’s event page: the coaches face off, and the season runs on a timeline.
roastorreview.com

RoastOrReview

Open beta

Paste your fantasy league. Get roasted. AI-written, no account needed.

Next.js · Claude API · Redis · Tailwind

Issue 02 · Open beta

RoastOrReview

RoastOrReview home page
RoastOrReview on a phone

Paste your ESPN or Sleeper league link. Get a roast of every team, built on its own stats, plus power rankings that say who’s good and who’s lucky. No account needed.

  1. Paste a league link and pick a timeframe.
  2. Add some dirt on your leaguemates, if you like.
  3. Flip between the roast and the review, then share.
Visit roastorreview.com

Meanwhile, behind the panels…

How I built it

  • ESPN and Sleeper data mapped into one shape, then Claude writes the roast and the review in parallel, streamed back.
  • A free AI product with no login, kept cheap: per-IP rate limits and a seven-day recap cache in Redis.
  • Private ESPN leagues work by passing cookies through for one request. Nothing is stored.
  • Shareable recap pages with their own generated social preview images.

The stack

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind v4
  • Claude API
  • Redis
  • Railway
  • Cloudflare
yourwelco.me

YourWelco.me

Coming soon

A receipt for doing someone a favor, with an optional tip jar.

React · Express · SQLite · Stripe

Issue 03 · Coming soon

YourWelco.me

YourWelco.me home page
YourWelco.me on a phone

Did someone a favor? Send the receipt. YourWelco.me makes a thank-you page for whatever you did, with an optional tip jar for Venmo, PayPal or Cash App. It never touches the money.

  1. Write up the favor. No account needed yet.
  2. Send them one short link.
  3. They say thanks, or tip you if they insist.

yourwelco.me · Coming soon

Meanwhile, behind the panels…

How I built it

  • Anonymous-first: the receipt waits in the browser until you claim it with a magic link.
  • Short, unguessable share links, kept separate from your public profile path.
  • Payment deep links instead of a processor, so there’s no custody of anyone’s money.
  • A live split-screen preview of their copy as you type.

The stack

  • React
  • Vite
  • Express
  • Node 22
  • SQLite
  • Stripe
  • Resend
  • Docker
  • Railway
The receipt builder, with their copy printing live beside it.
mycipe.com

Mycipe

Coming soon

A recipe box for keeps: save recipes from a link or a photo, scale them, and shop from them.

React · Express · SQLite

Issue 04 · Coming soon

Mycipe

Mycipe home page
Mycipe on a phone

A recipe box that keeps. Search recipes shared from around the web, then save your own from a link, a cookbook page or a card in someone’s handwriting. Scale it, shop it, file it.

  1. Find something to cook by ingredient or title.
  2. Add your own from a link, photos or by hand.
  3. Scale the servings and build the shopping list.

mycipe.com · Coming soon

Meanwhile, behind the panels…

How I built it

  • Link import reads the structured data sites already publish for Google’s recipe results. No per-site scrapers.
  • Photo import takes up to three photos of one recipe. [How the photos are read]
  • A servings scaler that rescales every amount, fractions included.
  • Print-ready recipe pages, sharing, and light and dark themes.

The stack

  • React
  • Vite
  • Express
  • SQLite
Three ways in: a link, a photo, or by hand.

Side A · client work

Built for the business

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.

Consultant

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.

Website builder

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.

App developer

When the business needs more than a website. I build apps end to end, the same way I built the four above.

Recent client work

azcontainers.com
[Screenshot]

AZ Containers

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"

Comics, ink & code!

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.

[Tattoo photo · decision pending]

Current pull list

[What you're reading]

Grail

[The one you'd never sell]

Let's build something with a launch date

Projects, questions or comic talk. Online only.