diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e31dda..b80edd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,27 @@ All notable changes to DeckyVault will be documented in this file. +## [2026.0.98] - 2026-05-09 + +### Added +- Cloudflare R2 storage integration with upload, delete, and tracking +- Profile photo upload, customization, and deletion (stored in R2) +- Modular daily cron system at `/api/cron/daily` with storage cleanup and sitemap regeneration tasks +- Public data dashboard (`/dashboard`) with trending games, best new releases, and most tested/reported charts +- Advanced search filters on the search page (device, FPS, FSR, Proton, anti-cheat, playability) with saved filter presets +- Admin-only sitemap regeneration endpoint `POST /api/sitemap/regenerate` + +### Changed +- Game details page layout restructured: metadata moved inline with hero, system requirements expanded by default +- Improved game details controller navigation (gamepad focusable attributes) and mobile responsiveness +- Switched from dynamic (`force-dynamic`) sitemap generation to build-time static XML files + +### Technical +- Added `storage_objects` database table +- Added R2 client module (`lib/storage/`) +- Added `CRON_SECRET` and `R2_*` environment variables; deprecated `S3_*` variables +- Added `build:sitemap` script to `package.json` + ## [2026.0.971] - 2026-05-09 ### Fixed diff --git a/content/updates/2026-05-09-v2026.0.98.md b/content/updates/2026-05-09-v2026.0.98.md new file mode 100644 index 0000000..7d0a343 --- /dev/null +++ b/content/updates/2026-05-09-v2026.0.98.md @@ -0,0 +1,29 @@ +--- +title: "R2 Storage, Profile Photos, Dashboard, and UX Overhaul" +date: "2026-05-09" +version: "2026.0.98" +summary: "Cloudflare R2 storage with daily cleanup cron, profile photo uploads, public data dashboard, game details UX improvements, advanced search filters, and static sitemaps." +--- + +### Added + +- **Cloudflare R2 Storage**: Full R2 integration for file uploads with storage tracking, orphan detection, and daily cleanup cron +- **Profile Photos**: Upload, customize, and delete custom profile photos (stored in R2) +- **Daily Cron System**: Modular `/api/cron/daily` endpoint with task registry for storage cleanup, sitemap regeneration, and future tasks +- **Public Dashboard**: New `/dashboard` page with trending games, best new releases, and most tested/reported visualizations +- **Advanced Search Filters**: Full filter panel on search page (device, FPS range, FSR, Proton/Native, anti-cheat, playability) with saved filter presets +- **Admin Sitemap Regeneration**: `POST /api/sitemap/regenerate` for on-demand sitemap updates + +### Changed + +- **Game Details Page**: Restructured layout — metadata now inline with hero section, system requirements expanded by default, improved controller navigation and mobile responsiveness +- **Static Sitemaps**: Replaced dynamic per-request sitemap generation with build-time static XML files for zero-latency serving +- **Search Page**: Added collapsible filter panel with save/load filter presets + +### Technical + +- Added `storage_objects` database table for R2 object tracking +- Added `@aws-sdk/client-s3` R2 integration (S3-compatible API) +- Added `CRON_SECRET`, `R2_ACCOUNT_ID`, `R2_ACCESS_KEY_ID`, `R2_SECRET_ACCESS_KEY`, `R2_BUCKET_NAME`, `R2_PUBLIC_URL` environment variables +- Deprecated `S3_*` environment variables (replaced by `R2_*`) +- Removed dynamic sitemap generation in favor of `npm run build:sitemap` \ No newline at end of file diff --git a/lib/sitemap/generate-static.ts b/lib/sitemap/generate-static.ts index 5305d63..d22ec09 100644 --- a/lib/sitemap/generate-static.ts +++ b/lib/sitemap/generate-static.ts @@ -30,6 +30,7 @@ function buildStaticEntries(): SitemapEntry[] { return [ { loc: BASE_URL, changefreq: "weekly", priority: 1.0 }, { loc: `${BASE_URL}/games`, changefreq: "daily", priority: 0.8 }, + { loc: `${BASE_URL}/dashboard`, changefreq: "daily", priority: 0.7 }, { loc: `${BASE_URL}/devices`, changefreq: "monthly", priority: 0.6 }, { loc: `${BASE_URL}/updates`, changefreq: "weekly", priority: 0.5 }, { loc: `${BASE_URL}/contact`, changefreq: "yearly", priority: 0.3 }, diff --git a/package.json b/package.json index 6660140..2bfb6b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "deckyvault", - "version": "2026.0.97", + "version": "2026.0.98", "private": true, "scripts": { "dev": "next dev --experimental-https --webpack", diff --git a/public/sitemap.xml b/public/sitemap.xml index 711c035..762c05b 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -10,6 +10,11 @@ daily 0.8 + + https://localhost:3000/dashboard + daily + 0.7 + https://localhost:3000/devices monthly