The guest button was nearly invisible (grey text, fontSize 13 on dark
background). Now uses white70, fontSize 15, TextButton with proper
tap padding. Also guards wishlist toggle on event detail page.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New file: lib/core/auth/auth_guard.dart
Static AuthGuard class with isGuest flag and requireLogin() helper
that shows a login prompt bottom sheet when guests try protected actions.
login_screen.dart / desktop_login_screen.dart:
Added "Continue as Guest" button below sign-up link.
Sets AuthGuard.isGuest = true, then navigates to HomeScreen.
api_client.dart:
_buildAuthBody() and GET auth check no longer throw when token is missing.
If no token (guest), request proceeds without auth — backend decides.
home_screen.dart:
Bottom nav guards: tapping Contribute (index 2) or Profile (index 3)
as guest shows login prompt instead of navigating.
auth_service.dart:
AuthGuard.setGuest(false) called on successful login AND register
so guest flag is always cleared when user authenticates.
Guest CAN: browse home, calendar, search, filter, view event details.
Guest CANNOT: contribute, view profile, book events (prompts login).
VideoPlayerController.networkUrl(Uri.parse('assets/login-bg.mp4')) silently
fails because 'assets/login-bg.mp4' is not a valid HTTP URL — the video
never initializes and the login screen shows a plain black background.
Fix: switch to VideoPlayerController.asset() and register the file in
pubspec.yaml. The MP4 is gitignored (22 MB) and kept local for builds.
- Improved event detail page with carousel, map, and layout fixes
- Updated login screen with video background and glassmorphism
- API client development mode with mock responses
- Theme manager and main app updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>