- Dart 98.2%
- HTML 1.4%
- Swift 0.3%
| android | ||
| ios | ||
| lib | ||
| Old AI Stuff | ||
| packages/video_player_web_hls | ||
| test | ||
| web | ||
| .fvmrc | ||
| .gitignore | ||
| .metadata | ||
| analysis_options.yaml | ||
| devtools_options.yaml | ||
| localhost.crt | ||
| localhost.key | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| README.md | ||
| web_dev_config.yml | ||
KrossTV App
Christian sermon player for old live recordings — churches, themed series/playlists, and episodes with audio (and optional video).
Stack
- Flutter 3.44 + Dart 3.12
- Forui 0.25 (
FTheme.neutral.dark.touch, Lucide icons viaFLucideIcons) - Bloc state management
- go_router navigation with shell + sticky context bar
- just_audio + video_player
- Clean-ish architecture:
domain/data/features/core
UI primitives prefer Forui (FScaffold, FHeader, FButton, FCard, FTile/FTileGroup, FBadge, FTabs, FProgress / FDeterminateProgress / FCircularProgress, FBottomNavigationBar). Material is kept only where required (MaterialApp.router, audio_video_progress_bar seek scrubber, cached_network_image, video_player).
Appearance: light, dark, or follow system (default). Chosen during onboarding and editable anytime under Settings (bottom nav).
Run
cd sermon_vault
flutter pub get
flutter run # pick a device
flutter run -d chrome # web (fast iteration, hot reload)
flutter run -d linux # desktop dev (needs Linux toolchain)
Targets: Android and iOS are first-class. Chrome web is supported for development (hot reload with r / hot restart with R). Linux desktop is optional for QA. Requires Chrome installed, or set CHROME_EXECUTABLE if Flutter cannot find it.
Architecture
lib/
core/ # theme, router, DI, navigation cubit, prefs
domain/ # entities + repository contracts
data/ # mock church repo + prefs history repo
features/ # onboarding, home, church, series, player, history
web/ # Flutter web host (index.html, manifest, icons)
AppDependenciesis the composition root (manual DI).PlayerBlocandHistoryBlocare app-scoped so the mini-player and history stay in sync.- Sticky browse context lives in
NavigationCubit(church/series/episode chips above the bottom nav).
Adding content
Edit lib/data/repositories/mock_church_repository.dart.
Each episode needs a real audioUrl; videoUrl is optional.
Demo media uses CORS-enabled MP3/MP4 hosts on filadelfia.nfp.is so playback works in Chrome as well as on mobile (not a production CMS).
Tests
flutter test
flutter analyze
Notes / limitations
- Mock data only (no CMS/backend).
- Background audio service is not wired yet.
- Video mode uses
video_playerwhile audio progress is driven byjust_audio. - Web is a development target (mobile-first UI in the browser), not a polished desktop product surface.
- Large demo MP4s may buffer on first play.
- Requires Flutter ≥ 3.44 for Forui 0.25.
See IMPROVEMENTS.md for the Grok 4.5 remediation plan versus the earlier bootstrap.