Skip to main content
I'm streaming on Twitch right now. You should stop by. Let's go!

Recent posts

  • Avatars for Twitch


    I've been experimenting recently with front-end-only Twitch overlays that use static files, the TMI JavaScript library, and localStorage. I feel comfortable enough with the pattern now and have enough faith in it that I have excised the "avatars" subsystem from my bot into its own, …

  • Animated CSS "border"


    I had an idea for an animated "border" of sorts, and the urge to implement it in pure CSS (as much as my feeble skills are capable) stuck with me all day. I decided to take a crack at it on-stream last night. I managed to do a halfway decent job, if I do say so myself, though it requires …

  • A chat bot in your browser


    I've been tinkering with tmi.js (Twitch's messaging interface) in node as of late, and it occurred to me: the library works in the browser, as well! With this in my back pocket, I went off and built a tiny little chat bot as an experiment. The bot responds with a random "thank you" emote …

  • My daughter deserves better


    I'll be honest–I don't want to write this post, and for a multitude of reasons. Namely, I don't want to write this post because writing this post crystallizes the fact that this post needs to be written. I also feel just so wholly inadequate to put text on a screen regarding such an important …

  • Track change events for YouTube with MutationObserver


    Have you ever wanted to react to events taking place on a web page, but they aren't capital-e Events that you can catch and handle? I was in this situation recently, where I wanted to grab the current video and chapter titles to display on my Twitch stream. YouTube isn't going to provide you with …

  • Rate limiting with Flask-SocketIO


    I've been transitioning the API for a Flask project I'm working on away from REST and toward Socket.IO. In doing so, I came to the abrupt and depressing realization that the rate-limiter I had been using for the REST endpoints (flask-limiter) was unable to apply to Socket.IO endpoints. The author …