Files

197 lines
14 KiB
Markdown
Raw Permalink Normal View History

# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
---
## [2.0.1] - 2026-04-10
Patch release — hotfix for Google Sign-In broken in 2.0.0.
### Fixed
- **Sign in with Google** (`lib/screens/login_screen.dart`): Resolved authentication failure introduced in 2.0.0. Google OAuth flow now completes correctly and exchanges tokens with Django `POST /accounts/google-auth/` as expected.
---
## [2.0.0] - 2026-04-10
Public release milestone. Full backend integration, real image upload pipeline, complete personal profile system, and production Android build infrastructure.
### Added
- **Real image upload pipeline** (`lib/core/api/api_client.dart`): `uploadFile()` method uses `http.MultipartRequest` with explicit MIME type detection from file extension. Supports JPEG, PNG, WebP, MP4, MOV. Files upload to Node.js `/api/v1/upload/file` → OneDrive via Microsoft Graph API, returning a shareable anonymous link.
- **Contribute image upload to OneDrive** (`lib/features/gamification/services/gamification_service.dart`): `submitContribution()` now uploads all selected images before submitting the event form. Uploaded file metadata (including OneDrive share URL) is passed as `media` array in the contribution payload — replacing the broken device-path-as-string approach.
- **Upload endpoint constant** (`lib/core/api/api_endpoints.dart`): `ApiEndpoints.uploadFile` pointing to `$_nodeBase/v1/upload/file`.
- **Full personal info form in Edit Profile sheet** (`lib/screens/profile_screen.dart`):
- First Name, Last Name fields
- Email (read-only, locked from direct edit)
- Phone number field
- District picker with 183-day change cooldown — shows next-change date when locked
- Place, Pincode, State, Country fields
- All fields loaded from SharedPreferences cache and API on open; saved via `PATCH /api/user/update-profile/`
### Changed
- **App version** displayed in Settings → About updated to `2.0(b)` (`lib/screens/settings_screen.dart`).
- **All "(demo)" labels replaced with "(coming soon)"** across the app:
- `settings_screen.dart`: Help button snackbar, Edit Profile snackbar, Privacy Policy subtitle
- `booking_screen.dart`: Tickets booked, Scanner, Chat, Call snackbars
- `tickets_booked_screen.dart`: Scanner, Chat/WhatsApp, Call snackbars
- `calendar_screen.dart`: Notifications snackbar
- **`pubspec.yaml` version bumped** to `2.0.0+20` (version name `2.0.0`, build code `20`).
### Fixed
- **Android build version override** (`android/app/build.gradle.kts`): Removed hardcoded `versionCode = 17` and `versionName = "1.6.1(p)"` — both now read from `flutter.versionCode` / `flutter.versionName` (sourced from `pubspec.yaml`). This was causing Play Store rejections ("version code 17 already used") on every release build.
- **`http_parser` dependency added** (`pubspec.yaml`): Required for explicit `MediaType` MIME typing in `MultipartRequest`. Without it, file uploads defaulted to `application/octet-stream` and were rejected by the Node.js multer middleware.
### Infrastructure
- **Production AAB built and signed** with `upload-keystore-new.jks` — build 20, version name `2.0` — submitted to Google Play Console.
- **`build.gradle.kts` signing config** reads `KEYSTORE_PASSWORD`, `KEY_ALIAS`, `KEY_PASSWORD` from `gradle.properties` or environment variables (no secrets in source).
---
## [1.6.1] - 2026-04-04
Phase 4 — animation polish and final feature gaps. Flutter app reaches full feature parity with Consumer Web App v1.4.9.
### Added
- **BouncingLoader widget** (`lib/widgets/bouncing_loader.dart`): 3-dot bouncing animation with staggered 200 ms delays using `Curves.bounceOut`. Replaces `CircularProgressIndicator` in home, contribute, and review screens. Accepts `color`, `dotSize`, and `spacing` parameters.
- **DiceBear Notionists avatars on review cards** (REV-001): `CachedNetworkImage` fetches `api.dicebear.com/9.x/notionists/svg?seed={username}`. Falls back to coloured initial letter `CircleAvatar` on error or while loading.
- **Server-side event search** (HOME-007): Search modal now sends `q` param to `EventsByPincodeView`; client-side filter stays for instant `onChanged` feedback while server results load on submit. Cache is bypassed for search queries. Django backend updated with `Q(title__icontains=q) | Q(description__icontains=q)` OR filter.
- **`flutter_staggered_animations: ^1.1.1`** added to pubspec.
### Changed
- **Review list stagger animation** (REV-003): `AnimationLimiter` + `AnimationConfiguration.toStaggeredList` wraps review cards with 375 ms slide-up + fade-in per item.
- **Review submit success spring animation** (REV-004): Checkmark icon now animates with `ScaleTransition` driven by `Curves.elasticOut` (600 ms) instead of a static icon swap.
- **Hero transitions on event cards** (UX-005): `Hero(tag: 'event-hero-{id}')` wraps event images in home screen and matching destination in learn more screen — enabling shared-element transitions.
- **FadeTransition on learn more screen** (UX-005): Screen body fades in with `Curves.easeIn` (350 ms) after event data loads.
- **AnimatedList stagger on leaderboard** (UX-005): `SliverList` entries animate with `AnimationConfiguration.staggeredList` — 375 ms slide-up + fade-in per row.
---
## [1.6.0] - 2026-04-04
Phase 3 — 26 medium-priority gaps. Profile editing, contributor profiles, share cards, booking promo codes, and UX system components.
### Added
- **Eventify ID badge** (AUTH-003): Verified badge displayed on profile and contributor cards for accounts with confirmed identity.
- **DiceBear TierAvatarRing** (`lib/widgets/tier_avatar_ring.dart`): Tier-coloured ring around profile avatars using DiceBear seed — Bronze/Silver/Gold/Platinum/Diamond colours.
- **Profile photo upload to server** (AUTH-006 / PROF-002): `PATCH /api/user/update-profile/` multipart endpoint; photo picker + crop flow integrated.
- **District picker** (PROF-004): 14 Kerala districts selectable from a bottom sheet; stored against user profile.
- **183-day profile cooldown lock** (AUTH-005): Username and display name locked for 183 days after last change; countdown shown in edit form.
- **Kerala pincodes JSON** (`assets/data/kerala_pincodes.json`) (LOC-003): Full offline pincode dataset covering all 14 districts; powers location-aware event discovery without API round trips.
- **Promo code input on booking** (BOOK-003): `POST /bookings/apply-promo/` endpoint; inline validation with success/error state in booking bar.
- **Contributor profile screen** (`lib/screens/contributor_profile_screen.dart`) (CTR-004/005): Public view of any contributor's stats, tier, events submitted, and achievements.
- **Share rank card** (`lib/features/share/share_rank_card.dart`) (SHARE-001/002): Generates a shareable tier/EP card image; `share_plus` used for native share sheet.
- **Share status button on contributor dashboard** (CTR-003): `OutlinedButton.icon` with `Share.share()` near tier/EP display.
- **GlassCard widget** (`lib/widgets/glass_card.dart`) (UX-003): Reusable frosted-glass surface used across gamification and profile screens.
- **EventifyBottomSheet** (`lib/widgets/eventify_bottom_sheet.dart`) (UX-004): Standardised bottom sheet with drag handle, rounded corners, and safe-area inset.
- **Featured events carousel** (HOME-004): Auto-scrolling hero carousel for featured/sponsored events on home screen.
- **Event image gallery** (EVT-001): Full-screen `PageView` carousel inside learn more screen with dot indicator.
### Changed
- **Real gamification data** (GAM-003/004/006): EP/RP transaction history, tier progression, and leaderboard all wired to live Node.js API — mock data removed.
- **Leaderboard card district display** (LDR-003): District badge shown per rank row; district filter pill row added above leaderboard.
- **Achievement badge display + unlock animation** (ACH-002/003): Badges rendered from API; confetti-style animation plays on first unlock.
- **Review responses** (REV-002): Organiser reply thread displayed below each review card.
- **Profile bio and social links** (PROF-001): Edit form includes bio textarea and links for Instagram, Twitter, LinkedIn.
---
## [1.5.1] - 2026-04-04
Phase 2 — 11 high-priority gaps. Authentication hardening, location services, real gamification data hookup, skeleton loading, and booking flow fixes.
### Added
- **Email OTP verification** (AUTH-004): 6-digit OTP sent on registration; verification screen blocks app access until confirmed.
- **Password reset flow** (AUTH-002): Forgot-password → OTP → new password screens; Django `POST /accounts/password-reset/` endpoint integrated.
- **Location permission + haversine distance sorting** (LOC-001/002): `geolocator` requests permission at startup; events sorted by straight-line distance from user's GPS coordinate.
- **Skeleton loading with shimmer** (UX-001): `shimmer: ^3.0.0` added; event feed, leaderboard, and profile screens show shimmer placeholders while data loads.
- **Contributor stats real API** (CTR-001): EP/RP balance and tier fetched from Node.js gamification endpoint on dashboard load.
- **Achievement progress tracking** (ACH-001): Progress bars and completion state fetched from API; local mock removed.
- **Profile stats row** (PROF-003): Likes / Posts / Views counts fetched from user profile API and displayed in profile header.
### Changed
- **Search modal with server pincode detection** (HOME-001/002/003): Search bottom sheet auto-detects user pincode; category filter chips filter from API results.
- **Real tier and EP display** (GAM-002/005): Contributor dashboard shows live tier and EP from Node.js API; tier badge in profile header updated to match.
- **District filter on leaderboard** (LDR-002): Leaderboard district pills populated from API; selecting filters rank table in real time.
- **Booking bar fixes** (EVT-003/BOOK-004): Fixed ticket-count stepper; booking confirmation screen correctly shows booking reference.
---
## [1.5.0] - 2026-04-04
Phase 1 — critical gaps. Live backend integration replacing all mock/stub data, payment checkout, and OAuth.
### Added
- **Gamification API integration**: EP, RP, leaderboard, and achievements wired to live Node.js endpoints at `app.eventifyplus.com/api/v1/` — all mock `GamificationService` data replaced.
- **Razorpay checkout** (BOOK-001): Native Razorpay SDK integrated; `POST /bookings/create/` → order creation → Razorpay payment sheet → `POST /bookings/verify/` webhook.
- **Google OAuth login** (AUTH-001): `google_sign_in` flow; tokens exchanged with Django `POST /accounts/google-auth/` endpoint.
- **Notification panel** (NOTIF-002/003/004): `DraggableScrollableSheet` notification drawer with 4 colour-coded notification types (booking, event, system, promo); mark-individual-read and mark-all-read actions.
---
## [1.4.0] - 2026-03-18
### Added
- **Desktop Contribute Dashboard**: Full desktop layout for the Contribute screen, matching the web version at eventifyplus.com/contribute
- "Contributor Dashboard" title with 3-tab navigation (Contribute, Leaderboard, Achievements)
- Two-column submit event form — Event Title + Category side-by-side, Date + Location side-by-side
- Contributor Level gradient card with 5-tier milestone progress bar (Bronze → Silver → Gold → Platinum → Diamond)
- Sub-navigation row: My Events / Submit Event / Reward Shop
- Desktop Leaderboard with All Time / This Month toggle, district pills, podium, and full rank table
- Desktop Achievements with 3-column badge grid, progress bars, and lock icons
- Inline Reward Shop with RP balance badge and shop item cards
- **Gamification Feature Module** (`lib/features/gamification/`):
- `GamificationProvider` — ChangeNotifier-based state management
- `GamificationService` — mock data for EP, RP, leaderboard entries, achievements, and shop items
- Models: `LeaderboardUser`, `Achievement`, `ShopItem`, `ContributorStats`
- **Bottom Sheet Date Filters**: Home screen event-category filter chips now open in a modal bottom sheet on mobile
- Web runner script (`run_web.sh`) for local Flutter web development server
### Changed
- **Profile Screen**: Completely redesigned to match the web app layout — gradient header card, avatar, stats row (Likes / Posts / Views), and tabbed content
- **Profile Card Animations**: Smooth entrance animations matching the React web component
- **Contribute Screen (Mobile)**: Full 4-tab rebuild — Contribute, Leaderboard, Achievements, Shop — with animated glass-glider tab bar indicator
- **Login Screen**: Updated UI design aligned with the web version
- **Event Detail Screen**: Layout updates and improved API data binding
- **Theme**: Refreshed dark/light mode colour palette and surface colours
- **API Client**: Updated base URL and endpoint paths in `lib/core/api/api_endpoints.dart`
- **Fonts**: Integrated full Gilroy font family (Light, Regular, Medium, SemiBold, Bold, ExtraBold — with italic variants)
- **Responsive Layout**: Improved breakpoint handling; desktop threshold set at 820 px
### Fixed
- Profile card pixel-perfect alignment with the web version
- Calendar screen date-range filter and location search integration
- District dropdown naming conflict in leaderboard (`_lbDistricts` vs. `_districts`)
- Green points colour (#16A34A) on desktop leaderboard matching web (was blue #0F45CF on mobile)
---
## [1.3.0] - 2026-02-xx
### Added
- Leaderboard tab and Achievements tab added to the Contribute screen
- Bouncy sliding glass-glider animation for Contribute tab bar
---
## [1.2.0] - 2026-01-xx
### Added
- Responsive dual-layout system with 820 px breakpoint
- Date filtering on the Home screen event feed
- Location search integration
- Calendar screen bug fixes and improvements
---
## [1.1.0] - 2025-12-xx
### Added
- Initial screens: Login, Home, Events, Profile, Calendar, Search, Booking
- Desktop variants: `DesktopLoginScreen`, `HomeDesktopScreen`
- Flutter launcher icons and native splash screen
- Gilroy font integration (initial)
- `shared_preferences` session caching