Developer · Bot Builder · Infrastructure Nerd
I build bots and the servers they run on. Most of my work is for live streams on Twitch, joystick.tv and Velora, where I make the chat bots, the on-screen alerts and the extras viewers play with. I also make moderation tools for a large online community, and I host all of it myself on a pair of cloud servers.
These are the projects I've built and still run. Most of them are bots for live streams on Twitch, Joystick.tv and Velora, or tools for moderating a large online community. The rest feed this site or take care of small jobs for me. I host the important parts myself instead of relying on outside services.
The main bot for the Twitch channel. It reacts to follows, raids and channel-point redeems, and it runs the chat commands, like the 4:20 milestone counts, F1 schedule lookups and a shared watchlist. Cheers set off a string of meat emoji. Gifted subs and bits get logged to the streamer's income spreadsheet automatically, and whatever happens here also shows up on the overlay and in Discord.
This one runs chat on Joystick.tv. It picks up messages, tips, and the stream going live or ending as they happen. Regulars keep a chat streak going and earn daily tokens they can spend on perks. Every channel it's in has its own settings, and the commands are the same ones the Twitch bot uses.
The newest of the three chat bots. It has the same commands as the Twitch and Joystick bots and keeps its own chat streaks. If it restarts in the middle of a stream, anything that came in while it was down still gets counted when it comes back.
The Discord bot for the community. It posts when a stream goes live, keeps the shared watchlist and game suggestions (with movie and Steam lookups), and has an AI assistant that runs on my own hardware. It also reads streaming plans posted in chat and turns them into the schedule on this site. When something breaks, I get a notification on my phone.
This plays the sound, video and GIF alerts on the stream overlay. All the bots send to it, so something that happens on any platform can show up on screen. I can change which clip goes with what in the middle of a stream without interrupting it, and cooldowns keep chat from firing the same alert over and over. I didn't use a third-party alert service for any of it.
These are the parts viewers actually see. Chat can open blind boxes from a set of 53 capybaras, trade the duplicates, and look up anyone's collection on this site. There's a to-do panel on screen that the streamer and chat both add to, and a focus timer that shows a work block and then a break as a card on the overlay. During the streamathon, a goal meter filled up as support came in from all three platforms.
Everything on this page runs on two small cloud servers that I set up and maintain myself, and the hosting doesn't cost me anything. That includes the bots, the overlay, this website and the backups, plus the alerts that reach my phone when something needs attention.
A few bots that help keep a large subreddit running. One of them archives each season's episode discussion threads to the wiki and keeps an index of every show, so old discussions are still easy to find years later. Another looks after the recurring discussion threads. It retires the old ones, points people to the new thread, links the regular and spoiler versions together, and rolls the day over at midnight. A scheduler posts the timed threads, and I get notified on my phone about what they're doing.
This puts a subreddit's auto-moderation rules behind Discord commands. Before, a routine change meant hand-editing a two-thousand-line config where one bad line could take down the whole filter. Now mods can list the rules, pause one that's misfiring and turn it back on later, or add a word to a filter, and it'll catch the usual ways people try to disguise it. There's also a command that runs a real comment through the rules to show which one would have caught it. Before anything is saved, the mod sees exactly what's going to change.
The platform only keeps about three months of moderator logs, so I built one that keeps everything. It records every mod action and removal reason, plus a copy of the removed content, as soon as it happens, and all of it stays searchable. Mods can use it in two places. A browser add-on shows removal reasons and a user's full history right on the page while they work, and there are over a dozen Discord commands for things like looking up one user's record, searching removed content by keyword, mod leaderboards and activity charts.
This keeps a full record of a busy community. Each new post is saved as soon as it goes up, along with whatever the moderators did with it, and the media gets copied to storage at home. If a post disappears later, I still have it.
This runs the dashboard on this site. It shows what's live on Twitch, the next F1 race, what I've been watching on Letterboxd and what's coming out soon, and it updates more often while a stream is on. Letterboxd doesn't have an API, so it reads my diary from the site directly, ratings and tags included.
An Android app I made so I can check on the bots from my phone. I can watch any bot's output live or scroll back through its history, and errors and warnings are colour-coded so they're easy to spot. It uses the same teal-on-navy look as this site.
This keeps an eye on a prepaid account and works out when the money will run out, based on how fast it's being spent. It emails me and sends a notification to my phone early enough to top up before anything lapses. It runs on a schedule, and I can also start it from my phone.
This gets new media from my desktop onto my tablet without me doing anything. New files get picked up as soon as they show up and land on the tablet a little later. Both ends check the file size so nothing arrives half-copied, and it keeps going even when Android tries to shut down apps running in the background.
Live status of the services above.
Running bots and self-hosted infrastructure has real costs. If you'd like to help keep the lights on, donations are appreciated.
Support on Ko-fi