+
{coverImage && !imgError ? (
Adrian Bonpin
+
+## Added
+
+### Updates Page
+- Updates page listing all version release notes
+- Update viewer with auto-extracted chapter navigation and reading progress bar
+- Markdown-based content pipeline (gray-matter + remark/rehype)
+- First update post converted from existing changelog
\ No newline at end of file
diff --git a/content/updates/2026-05-06-v2026.0.97.md b/content/updates/2026-05-06-v2026.0.97.md
new file mode 100644
index 0000000..90a0eae
--- /dev/null
+++ b/content/updates/2026-05-06-v2026.0.97.md
@@ -0,0 +1,42 @@
+---
+title: "PWA Support, Gamepad Navigation & Sitemap Reliability"
+date: "2026-05-06"
+version: "2026.0.97"
+summary: "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](https://deckyvault.xyz/contact) 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
\ No newline at end of file
diff --git a/content/updates/2026-05-09-v2026.0.971.md b/content/updates/2026-05-09-v2026.0.971.md
new file mode 100644
index 0000000..43605a1
--- /dev/null
+++ b/content/updates/2026-05-09-v2026.0.971.md
@@ -0,0 +1,18 @@
+---
+title: "Submit Bug Fix & Game Card Layout Fix"
+date: "2026-05-09"
+version: "2026.0.971"
+summary: "Fixed submit wizard crash when creating new game versions and game card height issue in grid views."
+---
+
+# Hello everyone!
+
+A quick patch release to fix two issues that were affecting the submit flow and the games list layout.
+
+As always, if you run into any issues, feel free to visit the [contact page](https://deckyvault.xyz/contact) to submit a report!
+
+> Adrian Bonpin
+
+## Fixed
+- Submit wizard crashed with `can't access property "id", (intermediate value).data is undefined` when creating a new game version — the frontend expected a `{ data: { id } }` wrapper but the API returns the created version object directly
+- Game Card height in grid views was extending beyond actual content, causing inconsistent row alignment
\ No newline at end of file