- StatusBar now uses fixed positioning at viewport bottom (z-[99])
- Dropdown toggle uses skip_next_close guard to prevent close-then-reopen
- Global close listener uses click instead of pointerdown (fires after toggle)
- Theme/limit buttons use on:pointerdown instead of on:click for iOS compat
- Main content has pb-8 to prevent overlap with fixed statusbar
- Rebuilt tailwind.css
- Vendor coarsetime crate with portable-atomic fallback
- Use portable-atomic on targets without 64-bit atomics
- Patch crates.io to use local coarsetime
- Fixes MIPS build failure (AtomicU64 missing)
- Use hyper-client to avoid isahc/coarsetime (AtomicU64 on MIPS)
- Keep push notifications enabled for MIPS builds
- Update CI MIPS build to use default features
- Add push-notifications feature flag (enabled by default)
- Make web-push and openssl optional dependencies
- Conditionally compile push notification code
- Disable push notifications for MIPS builds in CI
- Fixes AtomicU64 error on 32-bit MIPS architecture
- x86_64/ARM builds still have full push notification support
- Platform detection utilities (is_ios, is_standalone, supports_push)
- iOS-specific meta tags and Apple touch icons
- Auto-detect iOS and show user-friendly message when not in standalone mode
- Enhanced Service Worker with iOS-compatible notification options
- Comprehensive iOS push notification documentation
- manifest.json scope for PWA compliance
- Only works when added to Home Screen (iOS Safari limitation)
- Backend: web-push integration with VAPID keys
- Push subscription endpoints (GET /api/push/public-key, POST /api/push/subscribe)
- In-memory subscription store
- Frontend: Auto-subscribe to push after notification permission granted
- Service Worker: Push event handler
- Send push notifications when torrents complete
- Works even when browser is closed
- iOS Safari doesn't support navigator.vibrate()
- Added feature detection before calling vibrate
- Prevents TypeError on iOS devices
- Haptic feedback still works on Android/Chrome
- Dialog's on:close was calling callback after scope disposal
- Caused 'could not get stored value' error in leptos_reactive
- on_close callback still properly called via handle_close and submit success
- Browser automatically closes notification after 5 seconds
- Manual close() was causing unreachable code error
- Changed to just create and let browser handle lifecycle
- Changed detection from status change to percent_complete threshold
- Added logging for status changes (debugging)
- More reliable completion detection
- Automatic reconnection with exponential backoff (1s to 30s max)
- Toast when connection is lost: 'Sunucu bağlantısı kesildi'
- Toast when reconnected: 'Sunucu bağlantısı yeniden kuruldu'
- Backend rTorrent notifications still work via SSE