Trailmark
BuildingRace registration and operations for the trail and ultra community, plus a free race-day companion for athletes, their crews and the people following along.
Visit trailmark.run →A side project · Est. 2026
I'm Nick. I write software and run long distances on trails, and this is where the two meet. Most of what I build here starts as a small annoyance in my own life. Some of it turns into something real. All of it is for fun.
This is the plain version of the site. The real one is a 2004 desktop you can play with: open Switchback OS.
Things to do
Skip the boot and wake up in The Matrix.
Golden hour in the mountains, with a switchback to the summit.
The Long Run Mix, playing in Trailamp.
Six arcade games with all-time high-score boards, in the Games folder.
Minesweeper with rattlesnakes. Plant trail markers, step carefully.
Switch themes, run a fake deploy, or type HELP.
It knows a few canned lines and one decent joke.
Projects
Race registration and operations for the trail and ultra community, plus a free race-day companion for athletes, their crews and the people following along.
Visit trailmark.run →A race-day guide for friends and family following one runner at the Javelina Jundred: live updates, push notifications, a cheers wall and a course tracker.
Visit javelauryn.run →A platform for an athletic club's eight-week performance challenge: body scans, fitness tests and points-based divisions. It's a private pilot for now.
The next one. It usually starts somewhere around mile 30 and ends up in this folder.
Under the hood
This site runs on one small AWS Graviton server (a t4g.micro) in Oregon, behind Cloudflare. It costs about $9 a month.
One server is plenty until traffic says otherwise. When it does, the same setup grows with it: a bigger server first, then more of them.
Messages to Nick go out through Amazon SES using the server's own AWS role, so there's no email password or API key to leak.
Every push to the main branch runs the full test suite. If the tests pass, Kamal builds a container image and swaps it in with zero downtime.
The new version has to pass a health check before it takes any traffic. If it fails, the old version keeps serving. After every successful deploy, Nick gets an email saying what went out.
The server has no open SSH port, and only Cloudflare can reach it. Traffic is encrypted all the way to the server.
Each deploy uses short-lived AWS credentials that GitHub requests for that run. Secrets live in AWS Secrets Manager, never in the code.
The server's disk is snapshotted every day, and each snapshot is kept for two weeks.
AWS checks the server every minute and sends an email if it stops responding. Logs go to CloudWatch.
Say hi
Found a bug, cleared Trailsweeper, or just liked the music? Say so here, or email nick@switchback-labs.com.