Skip to content

v3: SolidStart 2, ChatBloom branding, 7TV/BTTV/FFZ chat overlay and CI - #1

Merged
fabianzimber merged 4 commits into
mainfrom
chore/modernize-stack
Sep 29, 2026
Merged

fabianzimber merged 4 commits into
mainfrom
chore/modernize-stack

Conversation

@fabianzimber

Copy link
Copy Markdown
Member

Brings the v3 rewrite to a working state. Four commits, each of which builds, typechecks and lints on its own:

  1. chore: ignore secrets, caches and local tooling. .gitignore now covers Cloudflare's .dev.vars, key files, logs, coverage, build caches and Claude Code's local .claude/ config.
  2. chore: move to SolidStart 2, rebrand as ChatBloom, relicense under AGPL. SolidStart 2 (Vite 8 + Nitro), SUID 0.19, TypeScript 7, Biome, pnpm 12, Node 24; shiftbloom branding for the /v3 setup page; AGPL-3.0-or-later.
  3. feat(chat): Twitch chat overlay with 7TV, BTTV and FFZ. /v3/chat/<channel> is a transparent OBS overlay that connects to anonymous Twitch chat and keeps every provider live:
    • 7TV: global/channel/personal emotes, zero-width emotes, badges and layered name paints (v4 GraphQL), with live updates over the v3 EventAPI
    • BTTV: emotes with live edits, prefix modifiers, Pro personal emotes, badges and username effects
    • FFZ: global/room/per-user sets, modifier effects, custom mod/VIP and bot badges, live edits over pubsub
    • Twitch badges via IVR, FFZ:AP and Chatterino badges, Shared Chat
  4. test: add unit tests and CI on the self-hosted runners. 46 node:test tests (pnpm test) and .github/workflows/ci.yml (install, typecheck, lint, test, build) on the Default self-hosted group. Pull requests from forks are skipped because the repo is public.

Verification

  • Every commit was built from a clean export with pnpm install --frozen-lockfile, then typecheck, lint, test and build.
  • The overlay was checked in a browser against live chat: emotes, badges and cosmetics from every provider rendered, including a 7TV paint and BTTV Midas/Supernova username effects.
  • The committed tree was scanned for credentials, private IPs/hostnames, local paths and account IDs; none were found. Test fixtures use anonymized viewer names and IDs.

Not in this PR

The Cloudflare Workers hosting setup (wrangler.jsonc, docs/DEPLOYMENT.md, security headers) is still being finished in another session. It will be added to this branch once it's done.

🤖 Generated with Claude Code

fabianzimber and others added 4 commits September 29, 2026 22:13
Adds Cloudflare's .dev.vars, key files, logs, coverage, build caches and
Claude Code's local .claude/ session config to .gitignore.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Stack: SolidStart 2 (Vite 8 + Nitro), SUID 0.19, TypeScript 7, Biome for
  linting and formatting, pnpm 12 with a lockfile and a patch for
  @suid/styled-engine, Node 24. Tailwind/PostCSS and unused components are
  gone; root.tsx/root.css became app.tsx/app.css.
- Hosting: Nitro's cloudflare-pages preset, with /v3 prerendered at build time.
- Branding: shiftbloom theme, header, hero, footer and brand components for
  the /v3 setup page, plus favicon, touch icon and OG image.
- License: AGPL-3.0-or-later.
- Renovate extends config:recommended.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
/v3/chat/<channel> renders a transparent OBS overlay that connects from the
browser to anonymous Twitch chat and to every emote and cosmetics provider,
keeping all of it live:

- 7TV: global, channel and personal emotes, zero-width emotes, badges and name
  paints (layered v4 model via the v4 GraphQL API; v3 EventAPI for live emote
  sets, cosmetics and entitlements)
- BTTV: emotes with live edits, prefix modifiers (w! h! v! z! c! l! r! p! s!),
  Pro personal emotes, badges and username effects
- FFZ: global, room and per-user sets, modifier flags, custom moderator/VIP and
  bot badges, live edits over FFZ's pubsub
- Twitch badges via IVR, FFZ:AP and Chatterino badges, Shared Chat source rooms

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 46 node:test tests for the IRC parser, tokenizer, emote effects, 7TV paints,
  provider API mapping (stubbed fetch) and every live-update socket (fake
  WebSocket). `pnpm test` runs them with Node's native TypeScript support, and
  `pnpm check` now includes it.
- .github/workflows/ci.yml runs install, typecheck, lint, test and build on the
  Default self-hosted runner group. Pull requests from forks are skipped
  because the repository is public.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updated@​suid/​material@​0.9.2 ⏵ 0.19.084 -910081 +181 +2100
Addednitro@​3.0.260903-beta981008289100
Updatedvite@​3.2.5 ⏵ 8.3.199 +5100 +468297100
Updated@​solidjs/​meta@​0.28.2 ⏵ 0.29.4100 +1100100 +782100
Updatedtypescript@​4.9.4 ⏵ 7.0.29910089 -1100100 +10
Updated@​solidjs/​router@​0.7.0 ⏵ 1.0.0100100100 +196 +9100
Updatedsolid-js@​1.6.9 ⏵ 1.9.15100100 +1610096 +2100
Added@​solidjs/​start@​2.0.5991009897100
Added@​biomejs/​biome@​2.5.1410010010098100

View full report

@fabianzimber
fabianzimber merged commit 1dc9882 into main Sep 29, 2026
3 of 4 checks passed
@fabianzimber
fabianzimber deleted the chore/modernize-stack branch September 30, 2026 09:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant