- ApiClient.uploadFile() — multipart POST to /v1/upload/file (60s timeout)
- ApiEndpoints.uploadFile — points to Node.js upload endpoint
- GamificationService.submitContribution() now uploads each picked image
to OneDrive via the server upload pipeline, then passes the returned
{ fileId, url, ... } objects as `media` in the submission body
(replaces broken behaviour of sending local device paths as strings)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Backend: Rewrote EventListAPI to query per-type with DB-level LIMIT
instead of loading all 734 events into memory. Added slim serializer
(32KB vs 154KB). Added DB indexes on event_type_id and pincode.
Frontend: Category chips now filter locally from _allEvents (instant,
no API call). Top Events and category sections always show all types
regardless of selected category. Added TTL caching for event types
(30min) and events (5min). Reduced API timeout from 30s to 10s.
Added memCacheHeight to all CachedNetworkImage widgets. Batched
setState calls from 5 to 2 during startup. Cached _eventDates getter.
Switched baseUrl to em.eventifyplus.com (Django via Nginx+SSL).
Added initialEvent param to LearnMoreScreen for instant detail views.
Resolved relative media URLs for category icons.
Co-Authored-By: Claude Opus 4.6 (1M context) <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).
- 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>