Skip to content

Changelog - v0.1.0 - 01.22.2026

Date: 01.22.2026
Environment: dev
Version: v0.1.0

Added

  • Location permission request system
    • New src/lib/locationPermission.js module for requesting and checking geolocation permissions
    • Functions for querying permission state, requesting permissions, and handling opt-outs
    • getUserLocation() function that respects location tracking preferences and handles errors gracefully
    • Permission state checking in ProfileSettings with visual indicator
  • Location tracking opt-out handling
    • User can disable location tracking entirely via disableLocationTracking() function
    • Persists location tracking preference in localStorage
    • Onboarding now asks users to accept location tracking and requests permission if accepted
    • Dashboard and LightLanternModal respect location tracking preferences
  • Real geolocation on app load
    • Dashboard's loadInitialVenues() now checks location tracking status before requesting location
    • LightLanternModal respects location tracking preferences with user-friendly error message
    • Graceful fallback for users who decline location permission
    • Support for both production (real GPS) and development (spoofed location) modes
  • Multi-layered cache strategy with purge-on-deploy: Implemented comprehensive caching system that balances performance with instant updates
    • Short TTL (5 minutes) for HTML files with stale-while-revalidate for better UX
    • Automatic cache purging of HTML files on deployment via GitHub Actions
    • Emergency full purge script (scripts/purge-cache.sh) for critical situations with confirmation prompts
    • Reads credentials from .env.local automatically with helpful error messages
    • Comprehensive cache strategy documentation in docs/engineering/deployment/CACHE_STRATEGY.md covering all four cache layers, troubleshooting, and best practices
  • Selective purge strategy: Only HTML files purged on deployment (not static assets) for efficiency and cost optimization

Changed

  • Enhanced CreateNewProfile onboarding flow
    • Now requests location permission when user opts in to location tracking
    • Uses new requestLocationPermission() function to show browser permission prompt
    • Calls enableLocationTracking() to save preference to localStorage
    • Improved user experience with clear feedback on permission status
  • ProfileSettings privacy tab enhancements
    • Integrated location permission state display
    • Added location tracking toggle that properly manages preferences
    • Shows current permission state to user (granted/denied/prompt)
  • Dashboard venue loading improvements
    • Added location tracking check before requesting user location
    • Provides informative message if location tracking is disabled
    • Falls back to real geolocation after development spoofing code
  • Real-time location requirement messaging
    • Onboarding (CreateNewProfile.jsx) now clearly states real-time location is required to light lanterns and is separate from 48-hour history
    • Lantern lighting modal (LightLanternModal.jsx) displays a banner explaining 100m proximity verification and distinction from history retention
    • Profile settings (ProfileSettings.jsx) clarifies the separation between real-time access and 48-hour check-in history
  • Decoupled retention preference from geolocation access
    • Removed blocking logic tied to "location tracking disabled" so geolocation can still be used to load venues and light lanterns
    • Retention toggle now affects only storing recent check-ins (48 hours), not access to real-time geolocation
  • Updated deployment workflows to use single CLOUDFLARE_ZONE_ID secret (custom domains share same zone)
  • HTML cache headers updated from max-age=0 to max-age=300, stale-while-revalidate=60 for better CDN utilization

Fixed

  • Location permission flow now properly integrated throughout app
  • Users can now opt out of location tracking entirely
  • Real geolocation is used on load in production mode (not static spoof)
  • Scroll position preservation across all view changes and page navigations
    • Created setViewWithScrollSave wrapper function that automatically saves scroll position when leaving home view (for local view changes)
    • Scroll position is captured synchronously using setView functional update to access current view state
    • All setView calls throughout Dashboard now use setViewWithScrollSave for consistent behavior within component
    • Cross-page navigation (profile/frens) now saves scroll position to cache state before window.location.hash change
    • Scroll listener now skips updates when view !== 'home' to prevent overwriting saved scroll position during view transitions
    • Scroll position is restored when returning to home view using requestAnimationFrame for proper DOM timing
    • Added previousViewRef to track view transitions and detect when user returns to home
    • Fixes scroll position divergence that occurred when scroll listener would fire with 0px after navigating to venue detail
    • Two-layer approach: localScrollPositionRef for same-component navigation, cachedVenues state for cross-page navigation

Removed

Security

  • Location permission now requested with enableHighAccuracy: false for better privacy/battery on initial requests
  • Location tracking can be completely disabled by users via privacy settings
  • Permissions policy in headers still restricts geolocation to same-origin requests only
  • Lantern lighting enforces proximity (100m) verification using real-time location; this check is independent of the 48-hour history setting

Built with VitePress