Developer · Bot Builder · Infrastructure Nerd
I build the bots and back-end infrastructure that power live streaming across multiple platforms. From custom Twitch and joystick.tv bots to real-time alert systems and Discord integrations, I keep the infrastructure humming so the chaos can flow uninterrupted.
Custom-built tools running on self-hosted Oracle Cloud infrastructure, supporting live streams across Twitch and Joystick.tv with real-time event processing, automated community management, and zero third-party dependencies for critical systems.
Central orchestrator for live Twitch channels. Processes EventSub webhooks for follows, raids, and channel point redeems; handles chat commands spanning 4:20 milestone announcements, F1 schedule lookups, and media watchlist management via TMDB. Cheer events trigger meat emoji sequences. SQLite database tracks all events for analytics while Google Sheets API integration provides persistent logging. Feeds real-time events to the alerts relay and Discord bot for cross-platform coordination.
Multi-streamer gateway for Joystick.tv. Maintains persistent ActionCable WebSocket connections for multiple channels simultaneously, processing chat commands, tip events, and stream lifecycle events in real time. Chat Streak economy rewards active viewers with daily token accumulation and redeemable perks. Tip events relay to MixItUp webhooks for TITS throw triggers. Per-channel configurable settings allow independent behaviour across streams. Shares the SQLite database and core command framework with the Twitch bot.
Community Discord bot coordinating cross-platform activity. Receives webhook events from Twitch and Joystick bots to post live stream notifications. Slash command cogs provide watchlist and game suggestion management via TMDB and Steam APIs, and an AI chat assistant that routes queries to a self-hosted local LLM over Tailscale. A schedule extraction cog uses Google Gemini to parse streaming intent from Discord messages and write the JSON schedule feeds consumed by the website. Gotify push notifications surface unhandled exceptions directly to mobile.
Lightweight audio, video, and GIF alert relay. Receives normalized events from all bots via HTTP POST and fans them out over WebSocket to OBS Browser Source overlays in real time. Event-to-media mappings are defined in a TOML config that can be hot-reloaded without a service restart. Per-user and global cooldown tracking prevent alert spam. Cloudflare Tunnel exposes a public WebSocket endpoint without port forwarding, eliminating dependency on third-party alert services.
Dual-server architecture on Oracle Cloud AMD free-tier instances, networked via Tailscale mesh. Server A runs Python bots as systemd services with independent restart capability. Server B runs supporting services as Docker Compose stacks, with Dockhand for container management and Caddy for automated TLS and reverse proxying. Cloudflare Tunnels expose public endpoints for webhooks, alerts, and the website. Supporting services include Gotify for self-hosted push notifications, sqlite-web for remote database inspection, and Filebrowser for file management.
Automation suite managing a large subreddit. The Episode Archival Bot uses multi-strategy regex parsing to identify season identifiers in episode discussion titles, dynamically generates and maintains franchise-specific Wiki pages with naturally-sorted entries, and self-heals the centralized Wiki index. The Feed Discussion Bot orchestrates sticky thread lifecycles through a SQLite state machine: automatic thread expiration with viewer redirection, cross-linking of standard and spoiler variants, coordination with Discord for sticky comment migration, and midnight day-counter rollover. A post scheduler coordinates timed thread creation across the ecosystem. Gotify push notifications provide real-time operational visibility across all bots.
Background data aggregation service powering the website dashboard. Polls Twitch, the F1 API, Letterboxd, and comic release calendars on staggered, context-aware schedules — polling more aggressively while a stream is live. Letterboxd is scraped directly (no official API), producing rated and tagged diary entries. Comic data is parsed from a local iCal pull list and enriched via the Metron API. All sources produce static JSON feeds consumed by the site with no client-side API calls.
Native Android log viewer for monitoring the bot infrastructure in real time. Connects to Server A over SSH via Tailscale, pulling live or historical output from the Twitch, Discord, and Reddit bot processes running as systemd services. Syntax-highlighted output distinguishes errors, warnings, and standard entries at a glance. Toggle between live-tail streaming and historical views of the last 1,000 log lines across multiple bot environments. Built in Kotlin with Jetpack Compose and the SSHJ library, with a terminal-aesthetic UI that mirrors the website's teal-on-navy colour scheme.
Live status of active bots.
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