What's New
Latest updates, bug fixes, and new features — most recent first.
This release adds a public Event Page with a matching browser source, widget sounds across every native overlay, and a StreamElements account import that carries your settings over with it.
## ✨ Features
- Public Event Page — a shareable page and a browser source for your scene, previewed in the dashboard
- Widget sounds — bind a sound to any overlay event, upload your own or use the shared library
- StreamElements account import — commands, timers and quotes, with cooldowns, permissions and aliases intact
- Ending Credits widget — a full-bleed credits roll for stream end
- Watch time — presence tracking and a !watchtime command
- Channel-stat variables — $(followers), $(subs), $(subpoints) and $(plus …), readable from inside $(eval …)
- Giveaway time limits with a live countdown and an automatic pick, plus a !hypecheck command
- Stream Session Details — redesigned, expanded session tracking
- AI privacy — a viewer opt-out page, an opt-in command and a cross-channel purge
- Twitch renames now reach us, so changing your username no longer leaves stale data behind.
## 🐛 Bug Fixes
- The AI persona widget had never once worked — a token cap on a thinking model returned an empty line every time. It now uses your persona, lore and stream context.
- Tier upgrades counted as new subscribers, inflating sub counts and points; fixed, with a tool to clear what was already banked.
- Repeated chat commands broke — the invisible mark clients add to a duplicate message parsed as an extra argument, so every other !quote 1 missed.
- Charity goals — the target now reads live, the total is floored by the event figure, and "no target" stopped reading as "no campaign".
- Chat announcements 401'd on every send — a wrong token plus a missing scope.
- Subathon goals over-counted contributions — a burst of events no longer inflates the ladder.
- Goal readouts pinned at 100% — progress past the target is shown.
- Shoutout message templates were silently dropped on save.
- Rate-limit windows anchor on the first request, so nobody is locked out longer than the stated limit.
- !game, !title and shoutouts failed on a missing scope — the scopes are now requested, with a working grant flow.
- Mobile layout fixes — the Commands table no longer overflows, and the planner's card editor and popovers work on a phone.
- Wheel segment hover targets — the overlays above them are pointer-transparent, so segments respond to the cursor again.
## 🎯 Quality of Life
- Chat is faster — chat messages are processed about 40% faster and bot commands happen about 50% faster.
- Event date-range purge — detach transactions collected outside an event's dates, previewed before it applies.
- Discord pages load in one request and save optimistically, and every linked server is configurable rather than just the first.
- Regular mods can edit commands and Auto Chats, and quotes settings show for Lead Mods.
- Plus Points read the same ladder everywhere, and the panel shows previous months.
- Counter widget splits channel and per-viewer readings, and imported StreamElements widgets get a real sc.connected event.
- Dates render in your channel's timezone, so a late-evening quote is not stamped tomorrow.
- Duplicate an event or a reward rule rather than rebuilding it.
- $(randompick …) picks one of a list at random, and SE's random.* variables translate on import.
- Longer AI command descriptions — up to 1,000 characters.
## 🔧 Backend
- Transient database failures are retried everywhere, closing a class of silently dropped Twitch events.
- D1's 100-parameter bind cap is enforced repo-wide — several statements were already over it, failing watch-time credits.
- Token rotation has one owner, ending the false "reconnect your Twitch account" emails.
- Per-channel Durable Objects serialize the chat send limit, config merges and command cooldowns.
This release shipped tipping, so viewers can support your channel directly, charity donation tracking across goals, widgets and rewards, and a rebuilt widget editor.
## ✨ Features
- Tipping — viewers can tip your channel from a page of your own, paid out through your Stripe account, and tips can drive a goal widget.
- Charity donations — Twitch charity campaigns now drive Numbers metrics, goals, the subathon timer and ladder, reward rules, and widgets.
- Ask about your data — the command palette answers questions about your own analytics.
- Shoutout queue — a native queue in Chatters, also fed by modomation's auto shoutouts.
- The leaderboard widget gained a tips metric, a week window and a rotation interval.
- The subathon timer now counts follows, raids and sub-tier multipliers, and its goals take an event window.
- Wheelspin items take per-item weights, drawn to scale on the wheel, and a spin can be triggered by a channel point redemption.
- Auto Chats can be filtered by stream category, so a message only goes out under the game it was written for.
- Chatters redesigned into five tabbed pages with an Overview, with the tab in the URL so links and Back work.
- Modomation rules can trigger on follows.
## 🐛 Bug Fixes
- Hype train — every contribution counts, and the countdown ticks from the wall clock.
- Plus Points — purchases credit in full, and Twitch's own count is synced as the truth.
- Bot chat — stays out of co-streamers' chat in Shared Chat, and names the broadcaster, not the mod.
- Widget import — StreamElements exports now import and render, with session counters backed by real channel history.
- Command import — the source bot is detected correctly and far more of its syntax translates.
- Modomation — a stuck channel-wide gate that silently pinned every automation off is gone.
- The goal widget honours the Base Size slider again.
- Go-live previews stopped pinning Twitch's placeholder thumbnail.
- Invites no longer store an operator's login as the channel name.
## 🎯 Quality of Life
- Every module is visible at every tier — under-tier pages render read-only, and a "Get set up" walkthrough replaced the on/off toggle.
- Widget editor redesign — a unified panel, categorised test events, a tour, diffed version history, and a warning before unsaved edits are lost.
- $(variable) syntax works in onboarding copy, AI messages and Discord announcements alike, plus a new $(randomchatter).
- Widget styling — font size and colour became their own Style axes, and goal amounts can show cents and grouped thousands.
- Faster pages — widget polling, tipping goals and the recent-rewards feed stopped doing per-request work over the whole channel.
- Imported commands now arrive with sensible default cooldowns.
- Daily AI allowances went up on every tier, and new signups start on the 7-day free trial.
## 🔧 Backend
- EventSub is reconciled centrally — the platform owns subscription lifecycle from a manifest-driven desired set; no module Worker writes subscriptions itself.
- Module access is entitlement-only — the per-module enabled flag and its API were retired.
- Bits accounting unified — cheers, Power-ups and Extension bits credit through one rule.
This release adds Tipping — a Stripe-powered tip page with its own dashboard — plus two new native overlays, Wheelspin and Subathon Goals, and a much deeper Subathon Timer.
## ✨ Features
- Tipping module. Take card tips on a public tip page, onboard through Stripe Connect Express, and run it from a new Tipping section — Overview, History, Goal, Settings and Payments. Tippers can stay anonymous or verify their Twitch name, and fee handling is configurable.
- Tips reach the rest of the platform. They fire as a rewards trigger, count in Numbers, get announced in chat, and render in the alert, ticker, goal and custom widgets plus the Activity feed.
- Wheelspin widget. A spin-to-win overlay that fires on !spin or automatically on bits, gifts and tips.
- Subathon Goals widget. A goal ladder overlay that can add bonus time to the timer on unlock and stays in sync with the active tipping goal.
- Subathon Timer upgrades. Tips now add time, alongside a custom title, H:M:S display, per-minute amounts, fractional minutes and a maximum cap.
- Alert pacing controls and a reward "once" mode that caps lower-tier earns.
## 🐛 Bug Fixes
- Stripe tips settle reliably. Tips no longer stick in pending or vanish from the Today/7d/30d totals; missed settlements are reconciled and goal progress comes from the ledger.
- Stripe Connect onboarding works end to end. Fixed the 502 from an invalid statement descriptor, requested the card payments capability, and made status refresh live.
- Tip checkout stopped rejecting valid tips. Turnstile renders and gates submit, OAuth returns to the apex origin, and real Stripe errors are shown.
- Subathon timer counts correctly. A contribution counts once rather than once per reward rule, fractional rates are fixed, reset leaves it paused at the starting time, and it can go past 24 hours.
- Subathon Goals fixes. The widget enables, the ladder advances with backfill, and the spotlight queue windows by visible goals.
- Widget gallery fixes. The Wheelspin card opens and OBS source URLs carry the selected pack.
- Tip amounts render as currency in the goal widget and chat, using the unified $(variable) syntax.
- Subathon Goals polish. Progress bars tween on each update, the overlay sizes to its variant and visible goal count, and the header title is customisable.
- Wheelspin auto-fits item text instead of clipping long entries, and widget asset previews play again.
## 🔧 Backend
- Analytics split widget traffic from human traffic and added a page-view metric, so dashboard numbers count people rather than OBS polling.
- Admin dispute queue for tips, with refunds issued as transfer reversals.
- Hardened webhook dedup and added config health checks.
This release lands a full Numbers audience-analytics suite, end-to-end Hype Train tracking, and self-healing EventSub that stops duplicate chat replies.
## ✨ Features
- Audience intelligence for Numbers — a new Partner-tier analytics layer: acquisition-source tracking, per-source journey funnels, viewer archetypes, subscriber tenure/retention & loyalty, tier-progression, and temporal, contextual, and multi-session conversion patterns, grouped under a new Analytics sidebar section.
- Raids analytics — outgoing and incoming raids are now captured with per-user cohort attribution, reciprocity, ROI, source-quality and conversion tracking, plus rule-based recommendations in a new Raids tab.
- Hype Train tracking — records all-time-high level/percent, a dashboard section, a paginated history table with subs/bits breakdown, Mythic detection, and widget + shoutout template variables.
- Richer Numbers overview — clickable session detail with viewer-count history, average and live totals, and subscriber/follower charts.
- Custom Gallery widget packs testing — new skinnable gallery widget with the Sisi Grunge pack for Sisitv_.
- Smarter shoutouts — online/offline-aware !so templates in Chatters, brought to Modomation auto-shoutout with per-user native overrides.
- Audience privacy controls — public viewer opt-out page and per-viewer deletion for broadcasters.
- Global timezone setting — timestamps and pattern buckets follow your channel timezone.
## 🐛 Bug Fixes
- No more duplicate chat replies — duplicate EventSub subscriptions and deliveries are deduped across Chatters, AI, Rewards and Modomation.
- Overview KPIs offline — cards now show last-stream data instead of blanks when you're offline.
- Accurate acquisition — pre-existing followers are recorded as returning, not new, with a retroactive backfill.
- Analytics fixes — corrected insight links, retention queries, and the admin raw-logs viewer.
## 🎯 Quality of Life
- Rewards — Prime detection and Twitch lifetime gift totals now feed reward rules.
- Redesigned admin Channels console with an EventSub health column and one-click repair.
- Consistent textareas — themed and sized across every dashboard.
- Clearer Raids page — surfaces the outgoing-raid tracking-gap note up top.
## 🔧 Backend
- Self-healing EventSub — a health-and-repair contract on every module Worker, platform-wide aggregation, and auto-provisioning of missing outgoing-raid subscriptions.
- Platform-wide telemetry — request/error write path feeding admin analytics.
- Reliability — bounded router fan-out timeouts, deferred AI processing, and retries on transient queue, D1 and AE errors.
- Security — status surfaces no longer expose binding names or raw errors.
StreamerCatalyst v1.2.2 — Chatters shoutouts & reliability fixes
This bugfix release repairs the !so shoutout system in Chatters, stops chat from being sent while the module is disabled, and fixes widget broadcasts that could fail on large replay buffers.
## 🐛 Bug Fixes
- Chatters no longer sends chat while disabled — turning the module off now fully stops outgoing chat messages instead of leaking sends. Credit to @NovaGracie and @Noctifer for finding the bug.
- Large replay buffers no longer break broadcasts — the widgets replay buffer is now size-bounded so oversized buffers can't fail a broadcast.
- !so shoutouts fixed end to end — native Twitch shoutouts fire alongside the chat message, the shoutout message is editable and can be exposed on the public page, the bot badge renders correctly, @ mentions link properly, and native-shoutout failures now surface instead of failing silently.
- Consistent !so template variables — shoutout templates now use the same $() syntax as the rest of Chatters, so placeholders behave as expected.
- Duplicate channel.update messages collapsed — Modomation now merges back-to-back category/title update notifications into a single chat message instead of spamming duplicates.
## 🔧 Backend
- Lore consolidation reliability — consolidateLore now retries and bounds its work so timeouts are no longer incorrectly marked as complete.
- Docs candidate re-open clock fixed — daily discovery no longer resets the re-open timer indefinitely, so doc candidates progress as intended.
This release rebuilds Goal widgets as independent per-instance widgets, adds Plus Program tracking to Numbers, and rolls out the new $(var) variable syntax across Rewards and Modomation.
## ✨ Features
- Goal widgets rebuilt as independent per-instance widgets — each Goal instance now carries its own config, plus a per-goal tracking name, an optional thousands-grouping toggle, and a distinct theme background panel.
- Plus Program tracking in Numbers — a new view estimates Twitch Plus Points, and the metric is available to widgets.
- Manual Bits goal — Numbers → Goals gained a manually-tracked Bits goal.
- Per-choice poll votes — Modomation channel.poll.end templates now expose each choice's vote count.
## 🐛 Bug Fixes
- Plus Points accuracy — Plus Points now track Twitch's monthly accrual rather than the active-sub total, with Prime detection and real-time tier-upgrade crediting.
- Goal and scene rendering — fixed bar/radial/thermometer goal variants, scene composite clipping, gallery/scene association, stuck Hype Train/Alerts widgets in the Stage sidebar, and false widget-limit reporting.
- Planner improvements — Kanban cards open in a tap-to-edit detail modal, and board permissions are managed from the Planner Overview.
- Masquerade exit banner added back to the unified dashboard.
- Ticker event-type filter — the Ticker widget can now filter by event type and shows a full-width live preview.
- EventSub health view — Settings restored per-module scope display alongside an EventSub health panel.
- Lead Moderators — mod-only chat commands no longer deny Lead Moderators.
- AI event handling — AI worker EventSub work now stays alive under the router's waitUntil.
- Docs — Modomation Polls & Predictions documentation no longer missing.
## 🎯 Quality of Life
- $(var) variable syntax — Rewards and Modomation adopted the $(var) syntax of Chatters with a silent migration of existing configs, and the variable pickers were updated to match. Changes updated in Docs.
- Higher widget limits — per-scene goals raised from 4 to 6 and the overall widget-instance cap raised to 9.
- Simpler navigation — removed the redundant Browser Sources page (redirects to Scenes) and the deprecated Numbers Widgets tab.
- Community Discord link surfaced across web surfaces.
## 🔧 Backend
- EventSub reliability — fixed the subscription-listing query and added repair endpoints across all modules, auto-bootstrapped chatters subscriptions, and declared the required Twitch scopes.
- AI docs pipeline — fixed generation starvation with a TTL re-open, a reject transition, and higher throughput.
- Shared helper — added shared $(var) substitution with legacy-{var} normalization.
- SEO — lengthened short title tags across public pages.
This release rebuilds the widgets studio with live previews and **AI-powered
custom widget generation, adds Catalyst Scenes and richer Numbers**
analytics, and lands a large docs-automation and reliability pass.
## ✨ Features
- AI-powered custom widgets — describe a widget in plain language and generate it, with a real event contract and live editor preview.
- Catalyst Scenes — scene management with a grid zone picker and a clickable anchor grid on the canvas.
- Top Chatters in Numbers — a new leaderboard page with a time-frame selector, per-chart zoom modal, and a Hype Train Level chart.
- Snooze the next ad on raid in Modomation.
- Snap-to-grid card resizing on the home dashboard, with navigable card-header chips.
- Promo codes at checkout.
## 🐛 Bug Fixes
- Widgets — alerts now play in order without freezing (muted auto-retry for blocked video), overlays render transparent, and goal/counter/ticker/leaderboard sizing, anchor origins, and subathon-timer dedup are corrected.
- AutoMod ML suggestions now generate again; counter-command filter and hype-train goal curve fixed.
- Goal card shows correct per-metric values, uses a segmented selector, and no longer clips with multiple goals.
- Discord scheduled events handle 429s (Retry-After + backoff) and 403 Missing Permissions.
- OBS browser-source URLs now point at the real Worker routes, and Numbers supports the 90-day chart range.
## 🎯 Quality of Life
- Live previews for every widget — alerts, chat, ticker, leaderboard, goal, counter, hype-train, subathon-timer, and AI persona now preview exactly as they render on stream and honor theme, accent, font, and size.
- Redesigned custom-widget Fields editor with discoverable media upload and surfaced media-load errors.
- Restored lead-mod promotion UI in Settings, and added Discord to the onboarding tour.
- Rewrote every module docs page as a full, code-grounded reference.
## 🔧 Backend
- Docs automation pipeline — a D1-backed candidate queue, a Cloudflare Workflow generation engine, code-change and traffic-driven discovery, and an admin review queue with prompt-based requests and refine-with-feedback.
- Tier-limit enforcement across rewards, widgets, and chatters.
- Rewards performance — cut per-chat-message D1 reads to stop timeout errors, and moved Helix rate limiting into an atomic Durable Object.
- Widgets hardening — cross-channel ownership guards, sanitizer/CSS safety, DO replay/dedup races, and a CI parity guard.
- Status flap-damps health probes and surfaces upstream Cloudflare incidents.
# StreamerCatalyst v1.1.1
A maintenance release that makes release announcements instant and adds a
one-click Reddit post helper for new releases.
## 🚀 Release notifications via GitHub webhook
- Instant release fan-out — a GitHub release webhook now drives everything
release-related, replacing change-detection polling. The public release-notes
page, the in-dashboard "new release" notification, and Discord auto-posts all
update the moment a release is published instead of on a delay.
- Push-based Discord posts — new releases post immediately (no more
up-to-15-minute lag); the existing poll stays as a fallback, and the two are
coordinated so a release is never missed or double-posted.
- Admin Reddit post helper — a new admin page formats each release into a
ready-to-post Reddit submission (GitHub links and PR references stripped, a
link to the full notes appended) with copy buttons and a one-click deep link
to your subreddit's submit form. No Reddit API keys required.
# StreamerCatalyst v1.1.0
This release introduces a brand-new Discord community bot, a major docs & search overhaul (Cloudflare AI Search + a universal command palette), a public system status page, and a broad round of security hardening.
## 🤖 Discord Community Bot (new Worker)
A full Discord integration, built out across phases, that brings your Twitch activity straight into your server.
- Go-live & event announcements — auto-post when you go live, plus subs, cheers, raids, and resubs, with sub-state tracking.
- Hype Train announcements — including Golden Kappa / Treasure trains, with per-type announcement config and subs+bits results.
- Slash commands — register them right from the dashboard (no CLI), with /docs documentation search, /sc stats stream KPIs, and /release notes fetched on demand.
- Self-service button roles — let members assign their own roles.
- Clip & VOD posting and Twitch schedule → Discord events sync.
- Opt-in auto-posting of releases and system status to your server.
- Dashboard module redesign — role pings, server snapshot, engagement logging, and a refreshed (mobile-friendly) UI.
- Docs & polish — a Discord bot guide, the bot surfaced on every pricing/billing tier, and several embed/substitution fixes.
Foundational work
## 📚 Docs & Search
- Migrated docs RAG to Cloudflare AI Search and shipped a universal command palette (Cmd/Ctrl-K) for keyboard-first navigation.
- Docs assistant now has inline citation links with real titles, in-app deep links, and Enter-to-ask from the palette.
- Channel entity search in the command palette, spanning Modomation, Stream Planner, and Rewards/Events.
- Docs CMS in the admin console — author content with live preview and a rebuild trigger, pulled into the Astro build via CI.
- In-app docs drawer for contextual documentation without leaving the dashboard.
## 🟢 System Status Page
- Public status page at /status with per-Worker health checks and 90-day uptime history.
- Reliability fixes — removed on-request status fan-out, retry health probes to stop cold-start flapping, and stopped Numbers/Modomation from flapping to "down" on a cold D1 probe.
- Discord Worker monitoring added to the status page.
- Uptime-history Analytics Engine query fixed and now self-diagnoses.
## 🔒 Security Hardening
- Guarded all unprotected /internal/* routes with X-Internal-Token.
- Enforced mod role permissions on Modomation API routes.
- Patched stored-XSS and open-redirect in the notification bell.
- Hardened OAuth — bound OAuth state to a browser cookie and tightened SameSite=Strict.
- Added AI burst rate-limits.
- Worker backend code review plus fixes for medium- and low-severity findings.
## ✨ New Features
- !timer countdown command for Chatters, backed by per-channel Durable Object alarms (replacing the cron sweep).
- Full GFM Markdown support in release notes.
- Live email preview in the admin broadcast composer.
- Global invite-only mode toggle for admins.
- Hype Train EventSub v2 migration (numbers + modomation + re-subscribe sweep).
## 🔍 SEO, Marketing & Docs
- SEO/social meta tags and sitemap generation, plus meta descriptions for /pricing and the SPA shell.
- Refreshed logged-out landing page — Discord bot, docs site, and cleaned-up footer links.
- Mermaid infrastructure diagrams (overall + per-Worker).
- Docs clarification — Lead Mod is also auto-detected from the chat badge.
## 🐛 Bug Fixes
- Fixed Discord hype-train results not capturing subs/bits.
- Fixed the docs assistant to call AI Search chatCompletions() instead of aiSearch().
- Removed a duplicate DISCORD_WORKER binding that broke the web deploy.
- Fixed Discord module mobile overflow and go-live embed image sizing.
# StreamerCatalyst v1.0.0 🎉
We’re 1.0. This release is the biggest update in StreamerCatalyst’s history — a complete rethink of the dashboard, an entirely new module, an overhauled widget system, and hundreds of quality-of-life improvements across the board. Here’s what’s new.
## A Brand-New Dashboard
The StreamerCatalyst dashboard has been rebuilt from the ground up as a fast, unified app. Everything lives in one place — no more jumping between separate pages for each module.
- Instant navigation between all your modules (Chatters, Rewards, Numbers, Widgets, AI, Stream Planner, Modomation) from a single sidebar.
- Drag to reorder your sidebar modules and subtabs so the tools you reach for most are always at your fingertips.
- Optimistic UI — actions like toggling commands, updating reward notes, and changing statuses now feel instant instead of waiting for a round trip.
- Mod-friendly session support throughout the dashboard, so mods get the right view without seeing account-level settings they shouldn’t.
- New onboarding tour walks you through setting up each module step by step, including a tailored path for mods.
- Pages load significantly faster thanks to lazy-loaded module routes and smarter asset caching.
## 🆕 Numbers Module
A completely new module focused on stream analytics and live stats.
What it tracks:
- Followers, subscribers (by tier), bits, hype trains, raids, and gift subs — all per-session and historically.
- A Subscribers tab with collapsible tier cards so you can see your T1/T2/T3 breakdown at a glance.
- Streak tracking — consecutive stream-day streaks with goals derived from your Goals system. Streaks now update live mid-stream.
Goals: Set targets for any metric and track progress in real time, right inside the dashboard and on your overlays.
## 🎨 Widgets — Completely Overhauled
The Widgets module is now its own fully-featured system with a dedicated editor, a Scenes canvas, and nine polished native widget types. Every widget has received an Ember visual redesign with multiple variants.
### Native Widget Types
| Widget | What it does |
|---|---|
| Alerts | Strip, Burst, and Ribbon variants for sub/follow/bits/raid alerts |
| Ticker | Scrolling recent-events rail (Ember Rail + Stack variants) |
| Leaderboard | Top earners, supporters, or custom metrics |
| Counter | Live number display with streak mode and customizable title/subtitle |
| Goal Progress | Bar, Radial, and Thermometer variants tied to your rewards goals |
| Chat Display | Role-aware chat overlay with full emote rendering |
| Hype Train | Theater and Streak/Contribution-feed variants |
| Subathon Timer | Slab, Ring, and Stack variants with pause/resume controls and auto-pause when you go offline |
| AI Persona Bubble | Refined, Cinema, and Minimal variants for AI responses |
### The Widget Editor
- CodeMirror 6 syntax highlighting for HTML, CSS, and JavaScript.
- Version history with a visual diff viewer — restore any past version in one click.
- Publish / Draft / Revert workflow so you can safely iterate without breaking your live overlay.
- Schema + Test Values panel to configure your widget’s settings fields and test them instantly.
- Errors tab with card-style error logs and source badges to help you debug custom widgets fast.
- SE import — paste your StreamElements HTML, CSS, JS, and data.json files (or a zip) to migrate existing widgets with minimal changes.
### Catalyst Scenes
Group multiple widgets into a Scene and get a single browser source URL for your streaming software. The canvas lets you drag widgets to reposition them, and Scene tabs support rename, duplicate, delete, and drag-to-reorder.
### Real-Time Delivery
Widget events are now delivered over WebSocket for near-zero latency. No more polling.
### Custom Widgets & the SC_API Runtime
Build your own widgets using the StreamerCatalyst runtime API, which gives custom widgets access to Twitch events, counters, the Helix proxy, and AI completions (tier-gated). The SE_API shim maintains backward compatibility for imported StreamElements widgets.
## 🤖 Chatters Bot — Major Expansion
The Chatters module has grown into a full-featured chat bot.
### Commands
- Full CRUD dashboard — create, edit, enable/disable, and delete commands without touching code.
- Bulk import from Nightbot, StreamElements, and Fossabot with a preview-before-apply flow.
- AI command generation — describe what you want in plain English and let the AI write the command template, with validation and multiple passes to get it right.
- Character counter on command response inputs so you never accidentally write a message that’s too long for chat.
- Test pane with editable target user, arguments, and rendered output preview — including support for op-from-argument commands.
### Template Variables & Expressions
- $(eval) — a sandboxed expression evaluator supporting arithmetic, conditionals, Math.random(), and variable bindings.
- $(counter NAME op) — persistent counters you can increment, decrement, set, and read from commands. Counter values are preserved across sessions.
- $(counter NAME top) outputs a leaderboard of the top users above zero.
- Auto-reduce on bits and gifted-sub events.
- Chat announcements when a threshold is hit.
- Operation can come from a chat argument (e.g., !points add).
- $(eval) can now read a saved counter value and branch on it.
- Full template variable resolution in command dispatch ($(touser), $(user), $(args), and more).
### Counters Management Page
View, edit, add, and delete all your named counters in one place. Channel-level counters (of channel) are also supported.
### Auto Chats
Scheduled and keyword-triggered automated messages with full variable resolution, configurable delivery modes, and a minimum interval of 1 minute.
### Quotes System
Add, retrieve, and manage chat quotes with an enable/disable toggle.
### Cooldowns, Permissions & Regulars
Per-command cooldowns, badge-based permission levels, and a Regulars list give you fine-grained control over who can trigger what.
## 🏆 Rewards (now called “Events”)
The Rewards module has been renamed Events throughout the dashboard and overlay system to better reflect what it actually tracks.
### New Trigger Types
- Follow — reward viewers when they follow the channel.
- Chat phrase — trigger a reward when someone types a specific phrase.
- Channel Redemption — fire rewards when channel points are redeemed (with a per-rule hourly rate limit).
- New Sub / Resub — reward subscribers on sign-up or renewal.
- Raid — trigger rewards when you’re raided.
- Meta (cross-rule) triggers — fire a reward based on activity across multiple other rules.
### More Goodies
- Per-user redemption tracking and a Leaderboard tab to see your top supporters.
- Goal Target field on events — link an event to a goal for automatic widget milestone tracking.
- Archived events — retire old events without deleting them.
- Hierarchical sidebar nav within the Rewards module for easier tab switching.
- Event Totals summary card and Total Earned stat card on the overview.
- Manual grants now support specifying bits or gifted-sub amounts and mirror the behavior of real events, including {tier} and {count} template tokens.
- Duplicate redemptions are deduplicated atomically, even when events overlap.
- Chat notifications for multi-earn bits/gifted-sub rules are now collapsed into a single message.
## 🗂️ Stream Planner Upgrades
- Kanban board view is now the default, with drag-and-drop on desktop and touch devices.
- Card detail modal — click any card for a full editing view with inline field updates.
- Custom text columns — add your own columns beyond the built-in status lanes.
- CSV import wizard — bring in your existing planning spreadsheets with preview and status normalization.
- Owner typeahead with suggestions that persist across sessions.
- Per-column quick-add card in the Kanban view for faster entry.
## 🧠 AI Improvements
- Custom AI persona commands replace the old !mimic and !caricature commands, giving you full control over how the AI responds as channel personas.
- Pre-computed command slots — common AI command responses are synthesized ahead of time so responses arrive instantly in chat.
- Lore extraction and synthesis now run concurrently, cutting AI processing time significantly.
- AI command generation uses extended thinking for better-structured output, with full-template validation and multiple passes.
- AI command generation timeout extended to 45 seconds with a retry flow and loading state so you always get a result.
## 📖 Documentation Site
StreamerCatalyst now has a dedicated documentation site at docs.streamercatalyst.com, built with Astro and Starlight.
- Authored guides for auth, billing, commands, endpoints, and widgets.
- AI Assistant — ask questions in plain English and get answers sourced from the docs corpus (powered by Cloudflare Vectorize and Workers AI). Your subscription tier determines daily query limits.
- Pagefind text search as a fallback for those who prefer traditional search.
- The AI/text search toggle is saved per user.
- Log in with your StreamerCatalyst account directly from the docs site.
## 💳 Simplified Billing
Per-module billing has been replaced with a clean four-tier subscription system — one plan covers your whole StreamerCatalyst account. The tiers are designed to scale with your channel, with Partner+ as the top tier.
## 🪪 Bot Identity Options
Choose how StreamerCatalyst appears in your chat:
- Shared StreamerCatalyst bot — ready to go with no setup.
- Custom bot account — connect your own Twitch bot account.
- Broadcaster account — send messages as yourself.
## Performance
This release includes a large batch of behind-the-scenes speed work:
- Parallel KV reads across the rewards and chatters workers.
- Deferred KV writes pushed to waitUntil so they don’t block responses.
- CryptoKey caching in the shared crypto utility — no more re-importing the key on every request.
- Widget fanout parallelized to reduce queue lag when events fire.
- EventSub cleanup cron now runs hourly instead of every minute.
- Excess earn-chat sends spill to a D1 queue drained by cron, preventing message loss under load.
- Paginated lists for earned rewards and giveaway entries so large datasets don’t slow the dashboard.
## Bug Fixes & Stability
Hundreds of fixes shipped in this release. Some highlights:
- CORS is now centralized and applied consistently across all error paths and API gates.
- Token scopes are preserved correctly during refresh — no more silent scope downgrades.
- EventSub subscriptions auto-reconcile on dashboard load and auto-subscribe when rules are saved.
- Subscribe and resub events are deduplicated to prevent double-processing.
- Rewards fire correctly for each threshold multiple in non-cumulative mode.
- Goal widget correctly handles events with more than 20 earned rewards, multi-period events, and custom date range portions.
- Auto Chat intervals now correctly enforce a 1-minute minimum.
- App access tokens are used for moderation EventSub subscriptions, fixing auth issues for multi-channel moderators.
Thank you for being part of StreamerCatalyst. v1.0 is just the beginning — we can’t wait to show you what’s next.
## What's Changed
* fix: add user:read:emotes scope and surface re-auth prompt by @github-actions[bot]
* feat: Auto Shoutouts dashboard UI by @github-actions[bot]
* feat: add Auto Shoutout backend for modomation by @github-actions[bot]
* fix: surface meaningful errors from resolveUsername (closes) by @github-actions[bot]
* fix: close syncChatMessageSubscription and implement getAutoShoutoutData by @github-actions[bot]
* fix: improve resolveUsername error messages and observability by @github-actions[bot]
* fix: prevent repeated auto-shoutouts when stream.online sub is missing by @github-actions[bot]
* feat: AutoMod read API client with KV caching by @github-actions[bot]
* feat: moderation EventSub capture and subscription management by @github-actions[bot]
* feat(modomation): ML Phase 3 — AI AutoMod tuning suggestions (resolves PR conflicts) by @iJakeSays
* feat: surface AutoMod ML suggestions in Modomation dashboard (closes) by @iJakeSays
* fix: wait for review workflows before resolving conflicts by @iJakeSays
* fix: add actions: read permission for workflow run polling by @iJakeSays
* feat: implement serial sub-issue queue to prevent branch conflicts by @iJakeSays
* fix: rewrite queue-next-sub-issue as shell script by @iJakeSays
* fix: sort queued issues with jq instead of unsupported --sort flag by @iJakeSays
* fix: use app token for channel.shoutout.create EventSub subscriptions by @github-actions[bot]
* fix: use app token for all channel event EventSub subscriptions by @github-actions[bot]
* fix: auto-subscribe moderation EventSub on ml_capture toggle, add missing OAuth scopes by @github-actions[bot]
* feat: add moderation subscription repair UI and endpoint by @github-actions[bot]
* feat: stream-planner worker scaffold with D1 schema and platform integration by @github-actions[bot]
* feat: board CRUD, dashboard UI, and D1 integration for stream-planner by @github-actions[bot]
* fix: provision planner-db D1 and PLANNER_KV before stream-planner deploy by @iJakeSays
* fix: set real Cloudflare resource IDs in stream-planner wrangler.toml by @iJakeSays
* feat: board item CRUD API and table UI by @github-actions[bot]
* feat: Stream Planner platform list customization by @github-actions[bot]
* feat: Twitch username validation and owner typeahead (stream planner) by @github-actions[bot]
* feat: stream planner assignment and completion notifications by @github-actions[bot]
* feat: add sorting, filtering, and view persistence to stream planner board by @github-actions[bot]
* fix: correct escaped quotes in stream planner IIFE script block by @github-actions[bot]
* fix: break stream planner login redirect loop by @github-actions[bot]
* fix: double-escape regex backslashes in stream planner IIFE by @github-actions[bot]
* fix: add stream_planner to module validation whitelists by @github-actions[bot]
* feat: add feedback widget to stream planner by @github-actions[bot]
* feat: stream planner access control permission system by @github-actions[bot]
* feat: per-user permission overrides for stream planner by @github-actions[bot]
* feat: per-board permission overrides for stream planner by @github-actions[bot]
* SCDS files by @iJakeSays
* Update docs for 7-worker architecture and archive legacy planning files by @iJakeSays
* SCDSv2 stories and content by @iJakeSays
* feat: add shared design tokens module and design-system assets by @github-actions[bot]
* feat: add shared/sidebar.js — unified sidebar component by @github-actions[bot]
* feat: replace header/nav with sidebar on platform dashboard by @github-actions[bot]
* feat: migrate AI, Rewards, Chatters dashboards to shared sidebar by @github-actions[bot]
* feat: migrate platform secondary pages to Ember design tokens by @github-actions[bot]
* feat: migrate shared widgets to SCDS design tokens by @github-actions[bot]
* feat: replace header/nav with sidebar on modomation and stream-planner by @github-actions[bot]
* feat: migrate AI and Chatters dashboards to design tokens by @github-actions[bot]
* feat: apply Ember design tokens to rewards dashboard by @github-actions[bot]
* feat: apply Ember design tokens to Modomation and Stream Planner dashboards by @github-actions[bot]
* fix: persist Stream Planner enabled state across navigation by @github-actions[bot]
* feat: show default system prompts for AI commands by @github-actions[bot]
* fix: close mobile drawer on collapse button tap by @github-actions[bot]
* feat: replace billing page nav with unified sidebar by @github-actions[bot]
* fix: notification bell label and mobile panel positioning by @github-actions[bot]
* fix: notification panel opens upward with close button by @github-actions[bot]
* fix: notification panel left-aligned to prevent sidebar cutoff by @github-actions[bot]
* fix: stop collapse button bubbling to brand handler by @github-actions[bot]
* feat: display Twitch avatar in sidebar broadcaster card by @github-actions[bot]
* fix: reverse planner→platform sync direction (closes) by @github-actions[bot]
* fix: copy profileimageurl into mod session by @github-actions[bot]
## What's Changed
* Added observability and smart placement settings to all workers tomls by @iJakeSays
* fix: apply D1 schema before deploy for modomation and rewards by @iJakeSays
* feat(modomation): VIP management foundation — schema, config, Helix helpers, API by @github-actions[bot]
* feat(modomation): VIP chat commands (!addvip, !addtempvip, !addpermvip, !removevip) by @github-actions[bot]
* feat(modomation): auto-grant VIP on subscription tier threshold by @github-actions[bot]
* feat(modomation): VIP expiry cron job and stream-count decrement by @github-actions[bot]
* feat(modomation): VIP Dashboard UI — User Management tab by @github-actions[bot]
* feat(modomation): add contextual hints to VIP config fields by @github-actions[bot]
* feat(modomation): show all channel VIPs and add manual VIP management by @github-actions[bot]
* fix(modomation): fix stale token and add scope-aware VIP error messages by @github-actions[bot]
* feat(modomation): rename Automations tab to Channel Redemptions by @github-actions[bot]
* fix: expand notification body on click for link-less notifications by @github-actions[bot]
* feat: migrate AI Worker to Gemma 4 26B with thinking mode by @github-actions[bot]
* feat: expand AI message buffer to 300 & synthesis interval to 100 by @github-actions[bot]
* feat: add channel lore system (manual, auto, draft) by @github-actions[bot]
* feat: global lore extraction pipeline from chat buffer by @github-actions[bot]
* feat: inject channel lore into AI persona synthesis and commands (clo… by @iJakeSays
* feat: add Channel Lore management tab to AI dashboard by @github-actions[bot]
* fix: handle OpenAI-compatible response format from Gemma 4 models by @github-actions[bot]
* feat: separate sub_tier from base role to fix persona role overwrites by @github-actions[bot]
* fix: remove inaccurate subtenuremonths from AI personas by @github-actions[bot]
* fix: derive sub tier from subscriber badge ID for T2/T3 detection by @github-actions[bot]
* fix: increase command cooldown TTL to meet Cloudflare KV minimum by @github-actions[bot]
* fix: strip [emote:X] tags from Twitch chat output by @github-actions[bot]
* fix(rewards): filter eventsub results by broadcasteruserid by @iJakeSays
* fix(modomation): use user token for poll/prediction/hype train eventsub by @iJakeSays
* Add staging environment for all 6 Cloudflare Workers by @iJakeSays
* Deploy eventsub-router after module workers to fix service binding or… by @iJakeSays
* Add staging environment for all 6 Cloudflare Workers by @iJakeSays
* feat: add Sub, Tier, Follower columns to Current VIPs table by @github-actions[bot]
* feat: add Sub, Tier, Follower columns to Current VIPs table (closes) by @iJakeSays
* fix: use user token for channel.chat.message EventSub subscription by @iJakeSays
* fix: use user token for channel.chat.message EventSub subscription by @iJakeSays
* fix(modomation): surface chat subscription status in VIP config by @iJakeSays
* fix(modomation): surface chat subscription status in VIP config by @iJakeSays
* Add KV diagnostic logging to trace !addvip failures by @iJakeSays
* Extend diagnostics: log token presence and sendChatMessage failures by @iJakeSays
* Extend diagnostics: log token presence and sendChatMessage failures by @iJakeSays
* Move dbg:g to before parseCommand, add dbg:h after getValidToken by @iJakeSays
* Move dbg:g to before parseCommand, add dbg:h after getValidToken by @iJakeSays
* Claude/fix addvip command 5 w tml by @iJakeSays
* Fixed !addvip and !removevip command handling by @iJakeSays
* fix: hide unsynthesised personas from list by default by @github-actions[bot]
* fix: extend lead mod KV cache TTL from 24h to 90 days by @github-actions[bot]
## What's Changed
* Update CLAUDE.md: reflect CI/CD deploy, modomation worker, cumulative… by @iJakeSays
* Fix cumulative rules only awarding 1 reward per event regardless of c… by @iJakeSays
* Strip GitHub links from release notes by @iJakeSays
* fix(rewards): auto-disable events past end_at by @iJakeSays
* feat(modomation): add Channel Events rules section by @iJakeSays
* Ignore Shared Chat events from participant channels by @iJakeSays
* fix: add apex domain to connect-src CSP in module workers by @iJakeSays
* feat(modomation): add subscription events + Subs, Bits & Hypetrains tab by @iJakeSays
* feat(modomation): add channel.cheer bits automation by @iJakeSays
* feat(modomation): add hype train EventSub automations by @iJakeSays
* feat(modomation): add Polls & Predictions tab with poll event types by @github-actions[bot]
* feat(modomation): add poll and prediction event rules by @github-actions[bot]
## New Contributors
* @github-actions[bot] made their first contribution
## What's Changed
* Fix SyntaxError in notification bell script breaking +Add Rule button by @iJakeSays
* Fix permanent rate-limit lockout in checkRateLimit by @iJakeSays
* Fix TDZ crash preventing events tab and +Add Rule from loading by @iJakeSays
* Fix rule and event forms not appearing when opened by @iJakeSays
* Fix Mark as Claimed always disabled + pendingLoaded TDZ by @iJakeSays
* Fix TDZ for leaderboard, report, and widgets tab state vars by @iJakeSays
* Backfill cumulative gift totals when cumulative mode is enabled by @iJakeSays
* Implement cumulative tracking for bits rules by @iJakeSays
* Retroactively create earned_rewards when cumulative mode is enabled by @iJakeSays
* Fix wrong param count in backfillCumulativeTotals by @iJakeSays
## What's Changed
* fix(cors): add admin subdomain to OPTIONS preflight allowlist by @iJakeSays
* Add mobile audit scripts for detecting layout bugs by @iJakeSays
* fix(admin): allow horizontal scroll on wide tables on mobile by @iJakeSays
* fix(ai): correct mobile layout min-height to prevent body overflow by @iJakeSays
* fix(modomation): correct mobile layout min-height to prevent body overflow by @iJakeSays
* feat(admin): proper mobile experience with drawer nav by @iJakeSays
* fix: hamburger drawer nav links hidden on mobile by @iJakeSays
* fix(rewards): stack event datetime pickers on mobile by @iJakeSays
* fix: admin drawer nav links vertical on mobile by @iJakeSays
## What's Changed
* fix(releases): sort newest-first, remove private GitHub links by @iJakeSays
* fix(admin): derive module list dynamically in Channels view by @iJakeSays
* fix(billing): add nav menu and feedback widget by @iJakeSays
* fix(notifications): notify for all new releases; fix click navigation by @iJakeSays
* fix(modomation): add feedback widget to dashboard by @iJakeSays
* Fix CI by pre-installing wrangler to bypass version validation by @iJakeSays
* fix(admin): remove redundant /admin prefix on admin subdomain by @iJakeSays
* Claude/debug persona building ch dj q by @iJakeSays
* fix(modomation): add global-nav, sidebar, and notification bell by @iJakeSays
* Align Claude Code branch with main by @iJakeSays
* security: harden API & infrastructure across all workers by @iJakeSays
* Create Billing Exemption API and UI by @iJakeSays
* ci: add modomation worker to deploy workflow by @iJakeSays
* Add workflow dispatch trigger and fix feedback submission issues by @iJakeSays
* fix(csp): add apex domain to connect-src for feedback widget by @iJakeSays
* fix(platform): add modomation to admin channels table by @iJakeSays
* feat(platform): refine admin billing overview with grouped MRR table by @iJakeSays
## What's Changed
* Show redeemed-by user in admin invites table by @iJakeSays
* bring main into my current claude branch by @iJakeSays
* Notification system: core infrastructure, API, and bell UI by @iJakeSays
* Admin console: hub overview + dedicated section pages by @iJakeSays
* Add notification triggers: release, masquerade, mod, billing by @iJakeSays
* Add admin.streamercatalyst.com subdomain route and update links by @iJakeSays
* Update wrangler to v4 in "Deploy to Cloudflare" action by @iJakeSays
## What's Changed
* Add StreamerCatalyst AI implementation plan by @iJakeSays
* Code review fixes (9 issues) by @iJakeSays
* Claude/read init prompt 3pos p by @iJakeSays
* Add Cloudflare setup guide covering all deployment steps by @iJakeSays
* Fix: KV storage jurisdiction not supported on Cloudflare Workers KV by @iJakeSays
* Fill in real KV namespace IDs by @iJakeSays
* Add remaining implementation plan by @iJakeSays
* Security hardening: fix XSS, tighten cookies, add security headers by @iJakeSays
* Refactor rewards module to threshold-based rules; add admin console by @iJakeSays
* Claude/mcp ios connection eef gh by @iJakeSays
* Add README by @iJakeSays
* Improve persona eligibility, bot filtering, and add test commands by @iJakeSays
* rewards: subathon rewards tracker with cumulative gifts, earn limits, chat notifications, report & widget scaffolding by @iJakeSays
* Disable modules immediately on expiry; clean up EventSub after 24h by @iJakeSays
* Add sub-header nav to admin console by @iJakeSays
* Add dynamic EventSub routing research plan by @iJakeSays
* Claude/debug persona building ch dj q by @iJakeSays
* Fix mod session display inconsistencies in module dashboards by @iJakeSays
* Claude/read init prompt 3pos p by @iJakeSays
* Add feedback widget to admin console by @iJakeSays
* feat: add Cloudflare deploy workflow on merge to main by @iJakeSays
* feat(ai): include Twitch role context in persona synthesis by @iJakeSays
## New Contributors
* @iJakeSays made their first contribution