frosty/AGENTS.md

47 lines
2.4 KiB
Markdown
Raw Normal View History

2026-01-11 16:59:33 -08:00
# AGENTS.md
2026-02-07 01:02:47 -08:00
## Workflow
2026-01-11 16:59:33 -08:00
2026-02-07 01:02:47 -08:00
- In plan mode, interview thoroughly — ask about UI/UX, tradeoffs, and edge cases before coding
- When new code supersedes existing functionality, find and remove everything it makes redundant
- Favor parallel tool calls and subagents when tasks are independent
2026-01-11 16:59:33 -08:00
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 22:53:43 -05:00
## Commands
```bash
flutter pub get # Install dependencies
flutter run --dart-define=clientId=ID --dart-define=secret=SECRET # Run with Twitch credentials
flutter analyze # Static analysis (run after changes)
flutter test # Run tests (if changes touch testable logic)
dart run build_runner build # Regenerate .g.dart files (MobX/JSON models)
dart run build_runner build --delete-conflicting-outputs # Same, but clears stale outputs
```
## Source Structure
- `lib/apis/` — API services (all extend `BaseApiClient`)
- `lib/models/` — Data models (`@JsonSerializable` with `.g.dart` codegen)
- `lib/screens/{feature}/` — Feature screens with co-located `stores/` subdirectories
- `lib/stores/` — Global stores only (e.g., `global_assets_store.dart`)
- `lib/services/` — App-level services
- `lib/widgets/` — Shared widgets
- `lib/utils/` — Utility functions
2026-02-07 01:02:47 -08:00
## Architecture (non-obvious bits)
2026-01-11 16:59:33 -08:00
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 22:53:43 -05:00
- Feature stores live in `lib/screens/{feature}/stores/` — don't create new top-level store files (only `lib/stores/` holds global stores)
2026-02-07 01:02:47 -08:00
- All API services extend `BaseApiClient` (`lib/apis/base_api_client.dart`) — don't create standalone API classes
- MobX stores use a generated mixin pattern — see `lib/screens/settings/stores/auth_store.dart` for the canonical example
2026-02-07 00:46:01 -08:00
2026-02-07 01:02:47 -08:00
## Gotchas
2026-02-07 00:46:01 -08:00
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 22:53:43 -05:00
- After changing MobX stores or `@JsonSerializable` models, regenerate with `dart run build_runner build`. Never edit `.g.dart` files directly. Commit `.g.dart` files to source control.
2026-02-07 01:02:47 -08:00
- The secure storage cleanup in `main.dart` looks unnecessary but handles an Android/iOS edge case where secure storage persists after uninstall. Don't remove it.
- Use package imports (`import 'package:frosty/...'`), not relative imports
- Always include trailing commas
- Use single quotes
2026-01-11 16:59:33 -08:00
2026-02-07 01:02:47 -08:00
## Commits
2026-01-11 16:59:33 -08:00
2026-02-07 01:02:47 -08:00
Lowercase, no prefixes (e.g., `fix landscape bottom padding in chat bottom bar`). Keep commits tightly scoped.