journal // May 24, 2024

What I Built This Week: May 20th-24th, 2024

What I Built This Week: May 20th-24th, 2024

Background Noise

Louis C.K. Interview - Got a little bummed out on the web stuff this week and decided to put on comedy to lighten the mood. This one stood out specifically for this quote about comedians doing work just to serve social media algorithms:

“Just make the show you want, cause’ they’re not gonna pick it up. So at least you spent the month making something you loved. Nobody will ever see it, but you’ll look back at that month well. And it’ll be a piece of tape that you’ll be proud of—that’s all you got. That’s all you have. If you get there through that [algorithms], you’re not gonna be happy. What is that? What are you? King of The Algorithm? What the fuck kind of life is that?”

That one was relevant even as a developer. It got me thinking that trying to chase the Twitter crowd is a dead-end task. It’s also not me (somewhere on the road between Ned Flanders and Jello Biafra). People may not end up digging Joystick in the long run, but I know it’s good, so, that’s good enough.


Only a small bit of work on Joystick this week. I was working on some client stuff that required escaping HTML in user input and ran into a conflict with Markdown. Because Markdown can contain raw HTML (along with normal Markdown characters like ### Heading 3), you have to be careful if you’re exposing a Markdown input to user generated content.

What I ran into was that the escaping that already existed in Joystick caused an issue where raw HTML in a Markdown string would get escaped. This was confusing from the user side because they’d type the HTML and see it preview fine on screen, but after refreshing (loading from the database), they’d see the HTML part of the string mangled.

To get around this, I added an additional function to @joystick.js/node called escape_markdown_string(). Like the name implies, it’s designed to allow for very specific types of HTML in a Markdown string (e.g., a code block that showcases a <script></script> tag), but filters out others. So, if a user types a script tag into the main body text, that gets escaped, but the one enclosed in a code block (which Markdown parses to a <pre></pre> tag) is left alone.

The advantage is that now, something like a Markdown blog editor can be built and safely escaped without having to worry about creating a vulnerability.


I’ve been thinking a lot about the future of CheatCode, Joystick, and how everything will be offered. I spent a couple of hours this week working through some ideas on how I might repackage Joystick in the future to be for a different type of audience. As of now, there’s limited interested as-is (likely due to how I license the framework and its obscurity—a tough nut to crack), so I’m batting around some ideas for making it more attractive to a smaller audience.


Client work was my main focus for the week. I’m wrapping up work on v2 of Moumint and had a lot of little stuff to knock out.

That included working on subscription payments via Stripe (including webhook handling), wiring up list and search UIs for searching creators and artists on the platform, and working on the pack opener (users can buy “packs” of digital art cards on Moumint and they get an animated opener to add a bit of fun).

For the pack opener, I also ended up doing some sound design work which was fun. I haven’t built a lot of UIs with sound (usually because it’s out of place or difficult to execute well), but it’s always nice to get a chance to step outside of my usual code and design work.

Next Week

Next week will be client-heavy as well as we move from development and into testing. My goal is to get the majority of stuff solid by end of first week of June so we can get stuff rolled out before some summer events.

I’ll likely be spending some time as I can find it on some Mod stuff. I want to finish out the core component set and get that released first and then later this year, roll out some paid components and themes. I’ll be sharing more on how this will all work later but it should be pretty cool. You’ll be able to swap out a theme just by passing a different name to a data-mod-theme attribute that you set on your app’s <body> tag.

Written By
Ryan Glover

Ryan Glover

CEO/CTO @ CheatCode