- Add debug section for banned IPs with refresh button
- Implement fetchBannedIPs() function to display banned IPs in table
- Add adminUnban() function for unbanning IPs from UI
- Show IP, ban time, reason, banned by, and unban action in table
- Add banned_ips database table with IP, timestamp, reason, and banned_by fields
- Implement IP ban checking in deviceTrack to block banned connections
- Add admin API endpoints: /api/admin/ban/:ip, /api/admin/unban/:ip, /api/admin/disconnect/:ip, /api/admin/refresh/:ip
- Add GET /api/banned endpoint to retrieve banned IPs list
- Return 403 error page for banned IP connections
Implement automatic cache warming when users first connect to views.
Pre-renders all URLs in a view to eliminate initial load latency.
Also adds periodic warmup for active devices and removes cache TTL
refresh on cache hits to preserve original expiration timing.
- Replace localStorage.clear() with CDP Storage.clearDataForOrigin to avoid SecurityError on about:blank (opaque origin)
- Add idleTimeout to Bun.serve config to prevent 10s timeout during queued renders
- Add timeout fallback for networkidle0 in renderSSR and renderScreenshotFrame to handle sites that never reach idle state
- Add recursive CSS @import resolver with font service filtering
- Preserve media attribute when inlining CSS
- Implement browser pool with 2 browsers × 8 pages each
- Add page pool with acquire/release lifecycle and page reset between uses
- Add render cache with TTL-based expiry and pre-warming before rotation boundaries
- Add in-memory view cache to avoid repeated DB reads
- Add per-IP rate limiting (2s cooldown)
- Add concurrent render limit (16 max)
- Refactor database functions with `db` prefix for clarity
- Add CONFIG object for all tunable parameters
- Add In