Files
Eventify-frontend/CHANGELOG.md
Sicherhaven 5e00e431e3 docs: split 2.0.0 and 2.0.1 in CHANGELOG
2.0.0 = main release (image upload, profile form, coming-soon sweep, build fix)
2.0.1 = hotfix for Sign in with Google regression

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 15:39:37 +05:30

14 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog.


[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