Files
adrianbonpin cd72b7a948 refactor: convert to bun workspaces monorepo
- Move web app into apps/web/
- Create packages/shared/ with shared types
- Create plugins/decky-vault/ scaffold
- Root package.json manages workspaces only
2026-06-28 05:20:28 +08:00

2.9 KiB
Raw Permalink Blame History

title, date, version, summary
title date version summary
PWA Support, Gamepad Navigation & Sitemap Reliability 2026-05-06 2026.0.97 PWA with offline caching, gamepad navigation hook, sitemap reliability fixes, multi-genre filtering, and shareable filter URLs.

Hello everyone!

This release is a big one for reliability and quality-of-life. We've added PWA support so you can install DeckyVault on your device and use it offline, gamepad navigation for controller users, and a bunch of fixes around sitemap generation and filtering that should make the experience a lot more consistent.

As always, if you run into any issues, feel free to visit the contact page to submit a report!

Adrian Bonpin

Fixed

  • Sitemap.xml used ISR caching (revalidate = 3600) which poisoned the cache with empty responses on DB hiccups; switched to force-dynamic for per-request fresh generation
  • DB errors during sitemap generation were silently caught and returned as empty arrays (no games indexed); errors now propagate to observability with structured logging
  • Games with NULL syncStatus were excluded from sitemap due to SQL <> 'failed' returning NULL (not TRUE) for NULL values
  • Multi-genre selection in games filter panel only applied the first selected genre; now supports comma-separated OR-matching
  • FPS range filter included results from non-active devices; now scoped to the selected device filter when present

Added

  • PWA service worker with offline caching for game pages and images (stale-while-revalidate for HTML, cache-first for Steam CDN images)
  • Offline fallback page (offline.html) when navigating without network
  • Gamepad navigation hook (D-pad/left stick focus, A/B/X/Y buttons, context-aware actions)
  • Structured logging for sitemap generation metrics (games, devices, timestamps) via console.info JSON
  • Filter state synchronized to URL query parameters for shareable/bookmarkable filtered views
  • WCAG 2.1 AA touch targets (44×44px) on all games page filter controls

Changed

  • Web manifest icons now declare explicit 192px (maskable) and 512px (any) sizes
  • Viewport meta tag added with viewport-fit=cover and user-scalable=no for installed PWA feel
  • Apple mobile web app meta tags added for iOS home screen support
  • Loading a saved filter now auto-collapses the filter panel for visual feedback
  • Sitemap generation flattened into a single function in app/sitemap.ts (removed delegation to lib/sitemap/)

Technical

  • Removed lib/sitemap/fetch-dynamic-entries.ts, lib/sitemap/build-static-entries.ts, lib/sitemap/validate-image-url.ts
  • Removed app/api/revalidate-sitemap/ route (no longer needed with force-dynamic)
  • Added @serwist/next, @serwist/precaching, @serwist/sw, @serwist/strategies, @serwist/expiration, @serwist/routing, and serwist dependencies
  • Build script updated to use --webpack flag for @serwist/next compatibility