mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-11 17:30:00 +02:00
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>
402 lines
9.9 KiB
Markdown
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! 🚀
|