Files
xtremflow/docs/archive/DEVELOPER_INTEGRATION_CHECKLIST.md
T
MichaelandClaude Fable 5 60d3f42901 feat: security hardening, streaming overhaul, design polish, tests
Security:
- Replace unsalted SHA-256 password hashing with bcrypt (lazy rehash on login)
- Add authenticated /api/xtream-api gateway: Xtream credentials are injected
  server-side and never sent to the frontend; /api/playlists no longer
  returns passwords
- Redact credentials from all logs (login body, proxy/FFmpeg/scheduler URLs)
- Add auth to recordings, EPG, season-passes and streaming routes
  (HttpOnly session cookie for hls.js; loopback bypass for local FFmpeg)
- Lock player postMessage to same-origin in both directions
- Vendor and pin hls.js 1.6.7 / mpegts.js 1.7.3 (drop CDN @latest)
- Fix rate limiter (client IP was never resolved), add login rate limit,
  restrict CORS, add CSP Report-Only, block private-IP SSRF targets,
  fix path traversal in recording log retrieval, chmod 777 -> 770
- Remove dead HiveService (seeded admin/admin into IndexedDB with SHA-256)
- Fix authMiddleware not populating 'user' context (getPlaylist ignored the
  logged-in user; admin purge always returned 403)

Streaming:
- New FfmpegSessionManager: process registry, idle reaper (4 min live /
  15 min VOD), orphan cleanup at startup, clean SIGTERM shutdown,
  fast-fail with stderr instead of 30 s timeout
- Quality selection (source/high/medium/low) for live and VOD; source mode
  streams with -c:v copy (zero transcoding); selector wired into the player
- Concurrent recordings (MAX_CONCURRENT_RECORDINGS, default 2); conflicts
  retry on the next tick instead of silently failing
- Lower live latency (HLS window 20 -> 10 segments, liveSync 10 -> 3)
- Fix recording log lookup (.mp4 vs .mkv mismatch)

Design:
- Replace hardcoded colors with AppColors tokens (12 files)
- web/theme.css syncs HTML players with the Flutter palette
- DPAD/keyboard navigation (arrow-key focus, player shortcuts)
- Tooltips on player icon buttons, Semantics on content cards
- Remove 7 dead widgets broken since the Stitch merge

Quality:
- bin/test/: 21 unit tests (bcrypt, redaction, traversal, SSRF, recording
  conflicts) plus a quality-selector widget test
- GitHub Actions CI (analyze + test + build web)
- Archive stale status docs into docs/archive/

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 10:07:18 +02:00

402 lines
9.9 KiB
Markdown

# XtremFlow Theme Redesign - Developer Checklist
## Pre-Integration Verification ✓
- [x] All theme files created and compiled
- [x] Color palette complete (50+ colors)
- [x] Typography system defined (15 styles)
- [x] Animations configured (5 durations + 4 curves)
- [x] Core widgets redesigned/created (8 widgets)
- [x] Documentation complete (3100+ lines)
- [x] Mobile theme configured
- [x] Glassmorphism effects implemented
- [x] Responsive grid system ready
- [x] Accessibility requirements met
---
## Files Created
### Theme Foundation
- ✅ `lib/core/theme/app_colors.dart` - Color system
- ✅ `lib/core/theme/app_theme.dart` - Theme data + typography
- ✅ `lib/mobile/theme/mobile_theme.dart` - Mobile variant
### New Widgets
- ✅ `lib/core/widgets/glass_container.dart` - GlassContainer + GlassCard
- ✅ `lib/core/widgets/hero_carousel.dart` - Redesigned carousel
- ✅ `lib/core/widgets/tv_channel_grid.dart` - Responsive grid + horizontal list
- ✅ `lib/core/widgets/tv_modern_card.dart` - Content card widget
- ✅ `lib/core/widgets/tv_nav_widgets.dart` - Navigation system (4 widgets)
### Redesigned Widgets
- ✅ `lib/features/iptv/widgets/channel_card.dart` - Channel card redesign
- ✅ `lib/core/widgets/hero_carousel.dart` - Full redesign
### Documentation
- ✅ `DESIGN_SYSTEM.md` - Complete design guide (1500+ lines)
- ✅ `THEME_INTEGRATION_GUIDE.md` - Integration manual (600+ lines)
- ✅ `THEME_REDESIGN_SUMMARY.md` - Executive summary (400+ lines)
- ✅ `THEME_VISUAL_SUMMARY.txt` - Visual overview with ASCII art
---
## Next Steps for Developers
### Phase 1: Review & Understanding (Est. 30 min)
- [ ] Read `THEME_INTEGRATION_GUIDE.md` section "Quick Start"
- [ ] Browse `DESIGN_SYSTEM.md` color palette section
- [ ] Review typography examples in `DESIGN_SYSTEM.md`
- [ ] Check widget showcase in `THEME_INTEGRATION_GUIDE.md`
### Phase 2: Update Screens (Depends on scope)
For each screen in `lib/features/iptv/screens/`:
- [ ] Replace old color references with `AppColors.*`
```dart
// Old
Color(0xFF6C63FF) → AppColors.primary
Color(0xFFAAAAAA) → AppColors.textSecondary
```
- [ ] Update text styles to use theme
```dart
// Old
style: TextStyle(fontSize: 20)
// New
style: Theme.of(context).textTheme.titleLarge
```
- [ ] Replace spacing values with constants
```dart
// Old
padding: EdgeInsets.all(16)
// New
padding: EdgeInsets.all(AppTheme.spacing16)
```
- [ ] Update animations to use theme durations
```dart
// Old
Duration(milliseconds: 300)
// New
AppTheme.durationMd
```
- [ ] Replace old widgets with new ones
```dart
// Old static cards → Use TvModernCard
// Old channel cards → Use new ChannelCard
// Hero section → Use HeroCarousel
// Lists → Use TvHorizontalList or TvChannelGrid
```
### Phase 3: Component Integration
For screens not yet using new widgets:
- [ ] `home_screen.dart` - Add HeroCarousel + TvHorizontalList sections
- [ ] `browse_screen.dart` - Switch to TvChannelGrid + TvTopNavBar
- [ ] `details_screen.dart` - Use TvModernCard for related content
- [ ] `player_screen.dart` - Update quality selector colors
- [ ] `settings_screen.dart` - Update to new button styles
- [ ] Mobile screens - Test responsive layouts
### Phase 4: Testing Checklist
Testing Requirements:
- [ ] **Desktop Web**
- [ ] Homepage loads correctly
- [ ] Colors match design system
- [ ] Hover animations work smoothly
- [ ] Text contrast is readable
- [ ] Responsive grid adjusts columns
- [ ] No visual glitches
- [ ] **Mobile Web/Android**
- [ ] Layout adapts to small screen
- [ ] Bottom navigation visible
- [ ] Touch targets ≥ 48px
- [ ] Scrolling is smooth
- [ ] No horizontal scroll
- [ ] Text is readable
- [ ] **Tablet**
- [ ] Landscape layout proper
- [ ] Grid shows 3-4 columns
- [ ] Navigation accessible
- [ ] Large text readable
- [ ] **Animations**
- [ ] Hover scale works (1.0 → 1.08)
- [ ] Fade transitions smooth (200ms)
- [ ] Loading spinners display
- [ ] No jank at 60fps
- [ ] **Colors & Contrast**
- [ ] All text ≥ 4.5:1 contrast
- [ ] Focus states visible
- [ ] Gradients render smoothly
- [ ] No color banding
### Phase 5: Performance Optimization
- [ ] Profile app with DevTools
- [ ] Check frame rate (target 60fps)
- [ ] Verify image caching works
- [ ] Test scroll performance (large lists)
- [ ] Check memory usage on low-end device
- [ ] Disable shadows during scroll if needed
### Phase 6: Deployment
Before deploying to production:
- [ ] Run static analysis (`flutter analyze`)
- [ ] Check all tests pass
- [ ] Verify no compile warnings
- [ ] Test on actual TV resolution (if possible)
- [ ] Get design team approval
- [ ] Create release notes
---
## Common Implementation Examples
### Using Colors
```dart
import 'lib/core/theme/app_colors.dart';
// Primary action
FloatingActionButton(
backgroundColor: AppColors.primary, // Cyan
child: Icon(Icons.play_arrow),
)
// Text hierarchy
Column(
children: [
Text('Title', style: TextStyle(color: AppColors.textPrimary)),
Text('Subtitle', style: TextStyle(color: AppColors.textSecondary)),
Text('Helper', style: TextStyle(color: AppColors.textTertiary)),
],
)
// Status indicator
Chip(
backgroundColor: AppColors.success,
label: Text('Available'),
)
```
### Using Spacing
```dart
import 'lib/core/theme/app_theme.dart';
// Standard padding
Padding(
padding: EdgeInsets.all(AppTheme.spacing16),
child: content,
)
// Asymmetric spacing
Container(
padding: EdgeInsets.symmetric(
horizontal: AppTheme.spacing32, // 32px left/right
vertical: AppTheme.spacing16, // 16px top/bottom
),
child: content,
)
// List spacing
ListView.separated(
itemCount: items.length,
separatorBuilder: (_, __) => SizedBox(height: AppTheme.spacing12),
itemBuilder: (_, index) => ItemCard(items[index]),
)
```
### Using Animations
```dart
import 'lib/core/theme/app_theme.dart';
// Fade transition
FadeTransition(
opacity: animation,
child: ContentWidget(),
)
// Scale animation
AnimatedScale(
scale: isHovered ? 1.05 : 1.0,
duration: AppTheme.durationMd,
curve: AppTheme.curveDefault,
child: Card(),
)
// Smooth page transition
Navigator.push(
context,
PageRouteBuilder(
transitionDuration: AppTheme.durationLg,
pageBuilder: (_, __, ___) => NextPage(),
transitionsBuilder: (_, anim, __, child) =>
ScaleTransition(scale: anim, child: child),
),
)
```
### Using Widgets
```dart
// Hero carousel for featured content
HeroCarousel(
items: featuredShows,
autoPlay: true,
height: 400,
)
// Channel grid
TvChannelGrid(
children: channels.map((ch) => ChannelCard(...)).toList(),
horizontalSpacing: 20,
verticalSpacing: 20,
)
// Modern content card
TvModernCard(
id: show.id,
title: show.title,
imageUrl: show.posterUrl,
rating: '8.7/10',
year: '2024',
onPlayTap: () => play(show),
)
// Top navigation
TvTopNavBar(
title: 'Browse',
onSearch: () => showSearch(),
notificationCount: 3,
)
```
---
## Troubleshooting
### Issue: Colors look wrong/washed out
**Solution:**
- Ensure `scaffoldBackgroundColor: AppColors.background` in theme
- Check for old color overrides in code
- Verify OLED display settings (pure black should be visible)
### Issue: Text is hard to read
**Solution:**
- Use `textPrimary` for main content
- Use `textSecondary` for secondary content (≥ 60% opacity)
- Never use `textTertiary` on dark backgrounds
- Check contrast ratio with tool
### Issue: Cards don't have glass effect
**Solution:**
- Use `GlassContainer`, not plain `Container`
- Ensure `BackdropFilter` is not constrained
- Check `blur` value (default 15.0)
### Issue: Animations are jerky/laggy
**Solution:**
- Use `AppTheme.durationMd` instead of hardcoded values
- Avoid nested `AnimationController`
- Profile with DevTools to find culprit
- Reduce animation complexity on low-end devices
### Issue: Responsive grid not adjusting
**Solution:**
- Use `TvChannelGrid` for automatic behavior
- Check `MediaQuery.of(context).size.width` breakpoints
- Ensure `Expanded` parent for full width
- Test on multiple screen sizes
---
## Support Resources
### Documentation Files
1. **THEME_INTEGRATION_GUIDE.md** - How to use the theme
2. **DESIGN_SYSTEM.md** - Complete reference guide
3. **THEME_REDESIGN_SUMMARY.md** - What changed and why
### Code Examples
- See `lib/features/iptv/widgets/channel_card.dart` for complex widget
- See `lib/core/widgets/tv_modern_card.dart` for card with states
- See `lib/core/widgets/hero_carousel.dart` for animations
### Quick Reference
```dart
// Colors
AppColors.primary // Main action (Cyan)
AppColors.textPrimary // Primary text (White)
AppColors.success // Success state
// Spacing
AppTheme.spacing16 // 16px standard
AppTheme.spacing32 // 32px TV margins
AppTheme.spacing8 // 8px small spacing
// Animation
AppTheme.durationMd // 300ms standard
AppTheme.curveDefault // easeInOutCubic
// Radius
AppTheme.radiusMd // 12px standard
AppTheme.radiusLg // 16px cards
AppTheme.radiusFull // 999px circles
```
---
## Timeline Estimate
| Phase | Task | Est. Time |
|-------|------|-----------|
| 1 | Review documentation | 30 min |
| 2 | Update 1-2 screens | 1-2 hrs |
| 3 | Update remaining screens | 2-4 hrs |
| 4 | Testing (desktop + mobile) | 2-3 hrs |
| 5 | Bug fixes + refinement | 1-2 hrs |
| 6 | Final QA + deployment | 1 hr |
| **Total** | | **8-13 hrs** |
---
## Sign-Off Checklist
Before considering this complete:
- [ ] All screens reviewed and updated
- [ ] All tests passing
- [ ] Desktop version looks premium
- [ ] Mobile version is responsive
- [ ] Animations smooth and responsive
- [ ] Color contrast WCAG AA compliant
- [ ] Performance optimized (60fps target)
- [ ] Documentation reviewed
- [ ] Design team approval
- [ ] Ready for production release
---
**Project Status:** 🟢 **READY FOR INTEGRATION**
**Last Updated:** 2026-03-26
**Design System Version:** 2.0 Apple TV Modern
**Quality Level:** Production Ready ✅
Let's make XtremFlow look premium! 🚀