I build and fix things.

Full-stack engineer in Seattle and Boulder, and the only in-house software engineer at Seattle Sun Tan. Booking, rewards, search, and the data behind them.

Shipped for
  • Seattle Sun Tan
  • Desert Sun Tan
  • Glowlight Med Spa
  • ChapterMade

Selected work

Every one of these is live and in somebody else’s hands.
Software engineer · May 2026 to present

Seattle Sun Tan

SST Group · Seattle Sun Tan, Desert Sun Tan, Glowlight Med Spa

The only in-house software engineer across three brands and 60+ retail locations. The biggest piece is rewards. I built the backend for both tanning brands: an API and an append-only points ledger, so a replayed sales feed can never pay out twice. It has been in production since August 2026 and holds 23,000+ customers moved off the old vendor, every balance matching the export. I security-reviewed the API myself before launch, and 300+ automated tests back it. Both brands’ apps build from one React Native codebase and are in TestFlight ahead of the switchover. Both brands now own their Apple and Google developer accounts, which I set up from scratch.

The point-of-sale database had 3.5 million transactions and no documentation. I decoded its product-code scheme, wrote the business’s first data dictionary, and built Tableau dashboards to replace the old intranet reports. Those metric definitions are what SST’s Salesforce Data Cloud partner now builds on. I’m SST’s technical lead on that rollout, from vetting the partner’s proposal through staff training.

SST Group · booking live Sep 2026

Glowlight Med Spa

Search system · booking rebuild

I shipped the first version of the SEO plugin before I was hired, unpaid. It rebuilt the site’s headlines, metadata and structured data server-side, and most of the queries I tracked moved up, several from page two to page one. The plugin got me hired, and the booking build came with it.

Rebuilt the booking flow on the Boulevard API, replacing a hosted widget the clinic could not style, instrument or extend. Built to directly replace the existing system screen for screen: same order, same wording, same number of taps. Live since September 2026. No retraining and no change to front desk workflow.

Co-founder · 3 chapters

ChapterMade

Composite platform · 500+ members

Co-founder. Composite photography for Boulder fraternities and sororities, plus the software that runs it. Shoots tether straight into the database, each frame matched to its member by filename. Chapters get a searchable roster, role-based access across four kinds of user, and a public share link per composite. Stripe checkout covers individual print orders.

I also handle sales and accounting, and shoot the sessions.

Freelance · 2026

Freelance work

Storefronts

  • Golden Coast Beauty Live 30 Jul 2026

    A new brand with no store, no catalog structure and no design system. The category tree was designed before anything went into it, and the search pass ran before launch rather than after, which is the only reason day one was indexable. Every color resolves through a token, and there is no hex anywhere else in the codebase.

  • Lilo Curated Live

    A wholesale store with its own admin CMS and a quote-request flow instead of a cart, because their buyers do not check out, they ask. Auth runs fail-closed over Supabase SSR, so a broken session denies rather than leaks.

Currently building

Not public yet, so no names.

A headless storefront replacing a dated site for a multi-location chain and adding ecommerce to it. The constraint is carrying the existing search equity across without losing any of it.

A treatment-recommendation app for a clinic. The sensitive part is a face photo, so the image is processed and destroyed in flight and never exists as a file on any server or on the device.

The daydream

Wayfarers

A co-op multiplayer game · Godot 4.7 · GDScript · in active development

I love design. I like architecting things from the ground up and scaling them, and I like building experiences. At some point building websites wasn’t enough. I wanted to build something that could fully immerse someone, and possibly change their perspective on life.

Two stories have done that for me, The Secret Life of Walter Mitty and The Alchemist. Both are awe-inspiring stories about giving up what you have in pursuit of something else, only to realize the greater thing was the pursuit. Wayfarers, my passion project, is my retelling of that story in an immersive environment that draws you in.

The goal is to have someone struck the same way I have been, and inspired to chase whatever their life’s passion is. However, the process is extremely fulfilling to me, and it isn’t contingent on reaching that goal.

To see the world, things dangerous to come to, to see behind walls, draw closer, to find each other, and to feel. That is the purpose of life.

The Life magazine motto, as it appears in The Secret Life of Walter Mitty

Tell your heart that the fear of suffering is worse than the suffering itself.

Paulo Coelho, The Alchemist

You leave Alcaria, your home hamlet, to find one town at the far end of the world. Reaching it is the goal. The road east is open, a compass finds the towns in between, and none of them has a name until you get there.

The road is survival: food, water, weather, and enemies, first thieves and bandits, later cultists and guardians. Towns are where you rest, restock, learn skills from the people there, and bank what matters in your stash.

Under the survival is a layer of omens and spirituality. It sits in the background early, and the further you travel, the more the game picks it up.

The spine Someone fighting their way to the other side of the world. They fight literally, they fight hunger, they fight obstacles.
The palette67 colors. Every generated building and plant is snapped to it.
The Wayfarers palette: a grid of 67 color swatches from warm earth tones through greens, blues, and dusk pinks
The core loop
  1. Travel out. Gather, craft, cook over your own fire, and fight. What you loot shows on your character.
  2. Reach a town. Rest, restock, learn from the people there, and trade. Towns with a travellers’ guild hold your stash.
  3. Push on. The next stretch is new ground and new threats.
Tone

It plays the way travelling actually goes: some stretches are comfortable, and some are hard.

In engine · October 2026 · work in progress
Wayfarers in engine: Alcaria, a hamlet of thatched cottages, stone walls and a watermill beside a canal, seen isometrically by day
Alcaria, where the road starts. The buildings are generated against my concept art for the hamlet. The ground and the trees are drawn in code.
The same corner of Alcaria at night, lit by torches that throw pools of warm light across the paths
The same corner at night. Each torch is a live light you can walk around, and the sprites carry normal maps so they shade against it.
Wayfarers in engine: a path winding through giant redwoods and dense undergrowth
The redwoods. The forest is generated from a seed, and a checker script tests each seed against the level’s rules, including that every point on the road can be reached.

The white figure is a stand-in until the character art pass.

From the design notes

“Art will not save a boring core verb.”

“The answer to ‘a repeated verb is dull’ is never to juice the verb; it is to put more loud chosen verbs alongside it.”

About

I am a full-stack engineer in Seattle and Boulder. I’m the only in-house software engineer at Seattle Sun Tan, and I take on contract work alongside it. I build storefronts, apps, booking flows, and the backends behind them. Most of the time I’m working on something that’s already live, so it has to keep running while I change it.

The stack runs from Next.js, Shopify Hydrogen and Supabase to WordPress plugins in PHP, depending on what the client already runs. Most jobs involve an incumbent system, an outside vendor, or both, so a fair amount of the work is reading someone else’s code before writing any of my own.

If you have something to build, or something that broke and nobody can tell you why, send me a note.