Fork of tommyxchow/frosty with TwitchAdSolutions (vaft) adblock https://frostyapp.io
Find a file
Tommy Chow f19da4151c
migrate web to next 16 template and redesign landing page (#526)
* migrate web to next-template stack (next 16, react 19, tailwind 4)

replace all infrastructure with next-template conventions:
- next.js 14 -> 16 (turbopack default, typed routes, react compiler)
- react 18 -> 19
- tailwind css 3 -> 4 (css-first config, oklch theme system)
- eslint 8 (.eslintrc) -> 9 (flat config with stricter rules)
- add shadcn/ui, base-ui, cva component primitives
- upgrade theme toggle to light/dark/system dropdown
- migrate hardcoded neutral classes to semantic oklch tokens
- drop unused @tailwindcss/forms, autoprefixer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* add no-misused-promises config for async JSX handlers, warn on array index keys

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* base-vega

* sync frosty web with next-template runtime and claude tooling for cloudflare parity

* gitignore .dev.vars per cloudflare best practice

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* add observability configuration to wrangler.jsonc

* remove marquee emote background from hero section

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* improve CLAUDE.md and AGENTS.md files across project

Remove redundant root CLAUDE.md (kept in .claude/ instead), add Commands
and Source Structure sections to Flutter AGENTS.md, clarify global vs
feature store placement, and fill gaps in web AGENTS.md (shadcn base-vega
style, constants.ts, no-array-index-key rule, commit conventions).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* switch shadcn theme from neutral to violet, replace twitch-purple with primary token

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* initial redesign

* auto-infer nativeButton in Button wrapper when render prop is used

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* replace skeleton carousel with real screenshots and video, add responsive phone scaling and mobile menu

- Replace PhoneSkeleton with PhoneFrame/PhoneMedia using actual app screenshots and video
- Fluid phone sizing via aspect-ratio with responsive max-h/max-w caps
- Non-circular carousel with swipe gestures, dot indicator, and hover opacity boost
- Video plays only when focused, pauses when off-screen
- Collapse header actions into dropdown menu on mobile, add Contact link
- Viewport-height layout with no scrolling on any screen size
- Remove footer, move contact to header

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* improve header consistency, carousel layout, and responsive centering

- add icons to all header buttons (Contact, Donate, GitHub)
- switch theme toggle to ghost variant for consistency
- bump header collapse breakpoint from md to lg
- move carousel arrows to overlay positions with animated enter/exit
- hide arrows at first/last slide
- fix vertical centering of phone+description group across all screen sizes
- add smooth blur+slide transition for description text

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* add contact dropdown with copy email toast

- replace direct mailto link with dropdown: send email or copy email
- install sonner for toast notifications, show top-center on copy
- extract emailAddress constant for clipboard use
- add copy option to mobile hamburger menu too

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* replace mobile hamburger menu with icon buttons

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* redesign hero copy, badge-style download buttons, and mobile layout

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* add consistent padding and object-contain to carousel media

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* add emote physics background to hero section

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* move container styling to hero panel, refresh emote set with 2025 trending picks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* add staggered entrance animations and remove grid gap

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* add 30-day cache headers for video and logo assets

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* add emote collisions and aspect-ratio tracking, refine hero layout

Emote physics: add particle-particle elastic collisions, per-particle
width measurement for correct aspect ratios, new emotes (aga, WW, o7,
FLASHBANG, LULW, Deadass), bump count to 30. Layout: absolute-position
header with z-20, increase mobile carousel ratio to 2fr/4fr, reserve
min-h-10 for description text, remove panel rounding.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix carousel lint warnings: useSyncExternalStore, ref naming, stable keys

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* add seo metadata, sitemap, and robots.txt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* add privacy link to header and footer credit

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* update privacy policy content and restyle with mono layout

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* reorder header nav and add mobile hamburger menu

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refresh web dependencies and smooth footer credit hover transition

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 19:53:43 -08:00
.claude migrate web to next 16 template and redesign landing page (#526) 2026-02-17 19:53:43 -08:00
.github merge instructions into AGENTS.md 2026-01-11 16:59:33 -08:00
android bump agp 8.11.1, kotlin 2.2.20, gradle 8.14 to match flutter 3.38.9 defaults 2026-02-08 20:13:35 -08:00
assets release v5.0.5 2026-01-09 02:32:59 -05:00
ios migrate web to next 16 template and redesign landing page (#526) 2026-02-17 19:53:43 -08:00
lib fix 7TV emote mutations on computed map, fix search store disposer leak, fix typo 2026-02-08 20:34:49 -08:00
test overhaul tests 2026-02-07 00:51:22 -08:00
web migrate web to next 16 template and redesign landing page (#526) 2026-02-17 19:53:43 -08:00
.gitignore add claude code settings and update gitignore 2026-01-06 01:18:15 -05:00
.mcp.json migrate web to next 16 template and redesign landing page (#526) 2026-02-17 19:53:43 -08:00
.metadata Upgrade Flutter/Dart and dependencies (#265) 2023-05-30 21:10:04 -04:00
AGENTS.md migrate web to next 16 template and redesign landing page (#526) 2026-02-17 19:53:43 -08:00
analysis_options.yaml v5 (#463) 2026-01-01 22:28:17 -05:00
firebase.json Re-run flutterfire configure and fix plugin versions 2024-08-13 00:03:53 -07:00
LICENSE Create LICENSE 2022-01-11 15:29:38 -05:00
pubspec.lock upgrade dependencies, fix null-aware element lint 2026-02-08 20:13:35 -08:00
pubspec.yaml overhaul tests 2026-02-07 00:51:22 -08:00
README.md Remove PayPal donate link 2024-04-28 00:02:00 -07:00

Showcase of the Frosty app with screenshots in a masonry grid

Badge showing the CI status. Badge showing the number of open issues. Badge showing the date of the last commit. Badge showing the current license of the repo. Badge showing the version of the latest release.

Download

Apple App Store badge. Google Play Store badge.

Why

The official Twitch mobile app doesn't support emotes from 7TV, BetterTTV (BTTV), and FrankerFaceZ (FFZ) — third-party extensions for Twitch used by millions. As a result, only emote text names are rendered rather than their actual image or GIF, making the chat unreadable in many channels.

Features

  • Support for 7TV, BetterTTV, and FrankerFaceZ emotes and badges
  • Browse followed streams, top streams, and top categories
  • Autocomplete for emotes and user mentions
  • Light, dark, and black (OLED) themes
  • Search for channels and categories
  • See and filter chatters in a channel
  • Local chat user message history
  • Theater and fullscreen mode
  • Watch live streams with chat
  • Picture-in-picture mode
  • Block and report users
  • Emote menu
  • Sleep timer
  • And more...

For a more detailed overview, visit frostyapp.io.

Development setup

  1. Install Flutter.

  2. Clone this repo (e.g., git clone https://github.com/tommyxchow/frosty.git).

  3. Go to the Twitch dev console and register a new application to retrieve a Client ID and Client Secret.

  4. Use --dart-define to set the clientId and secret environment variables with your Client ID and Client Secret.

  5. Run flutter pub get to fetch all the dependencies.

  6. Choose an emulator or device and run the app!

Important

Frosty uses MobX for state management. Please refer to the documentation about code generation, otherwise your changes within MobX stores may not be applied.

Donate

If you appreciate my work and would like to donate/tip, you can through:

Otherwise, downloading Frosty, leaving a review, or starring this repository is more than enough to show support. Thank you!

License

Frosty is licensed under AGPL-3.0-or-later.