R. Alex Anderson
banner
ralexanderson.com
R. Alex Anderson
@ralexanderson.com
He/Him • Husband • Dad • Latter-day Saint • Code Poet • Hobby Chef • Spaceship Enthusiast • Serial Optimist • Determined Dreamer

Living in Utah

https://thoriumsim.com
Seriously, I'm not publishing this to Github, because you can just view source.

The only resources it downloads aside from the HTML come from Unpkg or are vendored NPM modules (for speed, loading from a CDN is slower).

The website is the source code.
December 12, 2025 at 8:04 PM
Built with frickin' HTML, CSS, and JavaScript

No React. No Tailwind. Hosted on Cloudflare Workers because I wanted to mess with the response headers to enable multi-thread support (but I never figured that out, so maybe I'll switch to a pure static host).

It's about as vanilla as it gets.
December 12, 2025 at 8:03 PM
All this to say, just because a neighborhood is cookie cutter now doesn't mean it will always be, so long as HOA policies are permissive.

Furthermore, Oreos are delicious.
December 11, 2025 at 5:30 PM
As Remix v3 is used more, we'll start seeing patterns and packages built up around it to smooth over these UI behaviors, much like @sergiodxa.com's Remix Utils for Remix v2/React Router.

But the point is that you can do these complicated UI updates in user land without it being miserable to debug.
December 10, 2025 at 2:37 PM
an "optimistic-fail" event. The relevant component listens for that and restores its state to the previous state and calls this.update().

There are ways to make it more sophisticated and less boilerplate-y, but there are no surprises over when the UI updates. It's all very explicit.
December 10, 2025 at 2:37 PM
I mean... I said it in the post.

Events. Its like this.

I fire off an HTTP request while firing off an "optimistic-update" event. The relevant component listens for that and updates its state, stores the previous state, and calls this.update().

The HTTP request errors, so I fire ...
December 10, 2025 at 2:37 PM
Reminds me of Remix v1. LOTS of rough edges there, but they got smoothed out most excellently as people started using it and recognizing the rough edges.

You're doing good work. 🫡
December 9, 2025 at 3:59 PM
Things that Remix probably won't need a replacement for due to event-based manual UI rendering coordination:

useDeferredValue
useEffect
useOptimistic
useSyncExternalStore
useTransition

And a compiler.
December 9, 2025 at 3:45 PM
I still need to give Remix a bigger shake, but my hope is that the extra step of doing manual reactivity removes the need for all of the non-obvious extra steps to make React's reactivity right.

When you're manually orchestrating UI updates, you have more control, and need fewer reactivity tricks.
December 9, 2025 at 3:45 PM
Especially about "all the noise noise noise noise NOISE!"
December 8, 2025 at 4:00 PM
Seriously. The hubris of defying the computer gods and bending them to your will never gets old.
December 7, 2025 at 5:41 PM
_And_ if you're hosting on Vercel, Cloudflare, Railway, and a bunch of other hosts, they've put their own mitigation in place.

The vulnerability is still a big deal, but the CVE pipeline is working as designed.
December 5, 2025 at 7:30 PM
It's gotten so good, even just in the last 2 years.
December 4, 2025 at 4:16 PM
I love it when I see the little bird on websites or in print material.

LONG LIVE LARRY!
December 4, 2025 at 3:03 PM
Just gonna leave this lovely guy here en.wikipedia.org/wiki/Pando_(...
Pando (tree) - Wikipedia
en.wikipedia.org
December 3, 2025 at 3:10 PM
I'm grateful that I'm a cool dad that knows how to use ffmpeg to stitch frames together into a video.
November 30, 2025 at 9:28 PM
It is. bsky.app/profile/rale...

Guilty as charged, I guess. 🤐
November 30, 2025 at 3:32 PM