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.jsmodule 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
- New
- 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
- User can disable location tracking entirely via
- 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
- Dashboard's
- 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-revalidatefor 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.localautomatically with helpful error messages - Comprehensive cache strategy documentation in
docs/engineering/deployment/CACHE_STRATEGY.mdcovering all four cache layers, troubleshooting, and best practices
- Short TTL (5 minutes) for HTML files with
- Selective purge strategy: Only HTML files purged on deployment (not static assets) for efficiency and cost optimization
Changed
- Enhanced
CreateNewProfileonboarding 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
- Onboarding (
- 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_IDsecret (custom domains share same zone) - HTML cache headers updated from
max-age=0tomax-age=300, stale-while-revalidate=60for 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
setViewWithScrollSavewrapper function that automatically saves scroll position when leaving home view (for local view changes) - Scroll position is captured synchronously using
setViewfunctional update to access current view state - All
setViewcalls throughout Dashboard now usesetViewWithScrollSavefor consistent behavior within component - Cross-page navigation (profile/frens) now saves scroll position to cache state before
window.location.hashchange - 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
previousViewRefto 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:
localScrollPositionReffor same-component navigation,cachedVenuesstate for cross-page navigation
- Created
Removed
Security
- Location permission now requested with
enableHighAccuracy: falsefor 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