
liberate the HasanAbi Twitch chat with a web tool thing, for general/second-screen/accessibility use, with stats, media and info hub + more - no build step, no install (though a PWA), no account needed to watch, settings and logs stored locally, recently missed chat back-filled if possible, and a super customisable UI
open the chat thing →
chat
- the feed
- reading the flow
- page-flip columns & page wrap the layouts below
- reverse flow, msg new line, zebra, separators, timestamp modes
- find bar + archive search user:/kind: filters, 30-day IndexedDB store
- scroll pause on hover, jump-to-live chip, scrollback to 100k
- presence
- send, reply & whisper optional twitch login, input history, drafts
- mention ping + live notification when the page is away
- highlight / block / hide keywords, words, users (vanish, stub or ghost)
- bots on a switch blammobot & fossabot vanish entirely
- marks & mods
- mod actions inline timeouts, bans, /clear - the struck rows ghost
- channel-point highlights glorp/F glows violet, mentions go amber
- ?mid permalinks click a timestamp to copy a link to that line
- gap seams silent stretches get a cause-tagged marker row
extras
- stream & media
- video embed draggable, dockable per layout, or off
- link cards hover previews, titles, tweet cards, yt & insta embeds
- link favicons + clean urls icons lead, chrome-free text
- stats
- msgs/sec sparkline hover reads each second; glorp spikes glow
- top chatters, badges, emotes & links over time windows
- storage audit what the page keeps and where
- the rest
- emote picker searchable grid, usage sort, age marks, zoom
- user cards pronouns, history, mod quick-actions
- shareable settings url every option is a param; theme slots & copy-settings
- update notice a reload bar when a new build lands
- the chrome
- title ticker the stream's title runs under the header
- status line live since, uptime, viewers, chat-mode requirements
- msgs/sec meter a live rate plus sparkline in the header
- pull-to-refresh drag the header down to reload
resources
- inside the page
- resources tab re Hasan, news, live tv, usa pol, organising, mutual aid
- libre tab free software, free culture, open data
- authors tab era-grouped reading lists, links to the source texts
- accessibility
- palettes × shade axis the themes below
- dyslexia fonts, weight, spacing & tracking controls
- screen-reader live region, reduced motion honoured
themes
three local custom theme slots available, copy settings to url for everything
layouts
2x2
3col
alt twitch chat
| this page | chatterino | chatterino7 | chatty | chatsen | frosty | dankchat | xtra | jchat | kapchat | raftchat | twitch-tui | any irc client | smarttv client | s0undtv | twitch app | twitch popout | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| runs on | web | win·lin·mac | win·lin·mac | win·lin·mac | ios·android | ios·android | android | android | web | web | web | terminal | anything | tv | tv | ios·android·tv·consoles | web |
| kind | all-in-one | the standard | fork | chat | chat-first | full client | chat only | full client | overlay | overlay | chat grid | terminal | irc | tv | tv | official | official |
| 3rd-party emotes | 7tv·bttv·ffz | 7tv·bttv·ffz | 7tv·bttv·ffz | 7tv·bttv·ffz | 7tv·bttv·ffz | 7tv·bttv·ffz | 7tv·bttv·ffz | 7tv·bttv·ffz | 7tv·bttv·ffz | bttv·ffz | 7tv·bttv·ffz | names only | names only | shows them | shows them | twitch only | twitch only |
| emote picker | searchable | yes | yes | yes | yes | yes | yes | yes | - | - | - | - | - | - | - | yes | - |
| badges | yes | yes | yes | yes | library | yes | yes | yes | - | - | - | - | - | - | - | yes | - |
| paints | - | - | yes | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| send | yes | yes | yes | yes | yes | yes | yes | yes | no | no | no | yes | yes | - | - | yes | yes |
| reply / threads | reply+whisper | threads | threads | - | - | - | - | - | - | - | - | - | - | - | - | yes | - |
| autocomplete | tab | yes | yes | yes | yes | yes | yes | yes | - | - | - | - | per client | - | - | yes | yes |
| watch | embed | no | no | no | no | yes | no | yes | no | no | no | no | no | yes | yes | yes | no |
| browse | - | - | - | - | - | yes | - | yes | - | - | - | - | - | yes | yes | yes | - |
| vods | - | - | - | - | - | yes | - | downloads | - | - | - | - | - | yes | yes | yes | - |
| chat replay | - | - | - | - | - | yes | - | yes | - | - | - | - | - | yes | yes | yes | - |
| multi-chan | merge | splits | splits | tabs | tabs | no | tabs | no | no | no | grid | no | buffers | no | no | no | no |
| notifs | mention+live | yes | yes | yes | yes | yes | yes | yes | - | - | - | - | highlights | - | - | yes | - |
| filters | highlight+hide | yes | yes | yes | - | yes | - | - | - | - | - | - | per client | - | - | yes | yes |
| search | find+30d | yes | yes | yes | - | - | - | - | - | - | - | - | logs | - | - | - | - |
| archive | 30d store | logs | logs | logs | - | - | - | - | - | - | - | - | logs | - | - | - | - |
| backfill | yes | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| link previews | cards+embeds | tooltip | tooltip | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| user cards | history+pronouns | yes | yes | yes | yes | yes | yes | yes | - | - | - | - | whois | - | - | yes | - |
| pronouns | yes | yes | yes | - | yes | yes | - | - | - | - | - | - | - | - | - | - | - |
| mod tools | quick | yes | yes | yes | - | - | - | - | - | - | - | - | cmds | - | - | yes | - |
| stats | msgs/sec+tops | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| resources | lists+links | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| layouts | 16 | splits | splits | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| custom | themes+fonts | themes | themes+paints | - | - | - | - | - | css | css | - | themes | per client | - | - | - | - |
| plugins | - | lua | lua | cmds | - | - | - | - | - | - | - | - | scripts | - | - | - | - |
| obs overlay | - | - | - | - | - | - | - | - | yes | yes | - | - | - | - | - | - | - |
| ads | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes | no |
| foss | agpl | gpl | gpl | gpl | gpl | gpl | gpl | yes | no | no | no | gpl | gpl | yes | yes | no | no |
multi-chan: merge = rooms in one feed · splits/tabs/grid = side by side · foss: license or public source · green = ticks the box
backend
Neocities ships a strict CSP (
connect-src 'self'), so no WebSocket to Twitch
IRC is possible. the page embeds a hidden iframe relay hosted on GitHub Pages (no CSP) and talks
postMessage to it: the frontend owns all presentation, the relay owns every outbound
connection. a Cloudflare worker, linkpeek, scrapes og/twitter/JSON-LD/oEmbed metadata
for link cards and stats titles.→ twitch-chat-relay: the relay
& worker source



























