feat: v2026.0.98 changelog, version bump, regenerated sitemap
This commit is contained in:
@@ -2,6 +2,27 @@
|
|||||||
|
|
||||||
All notable changes to DeckyVault will be documented in this file.
|
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
|
## [2026.0.971] - 2026-05-09
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
@@ -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`
|
||||||
@@ -30,6 +30,7 @@ function buildStaticEntries(): SitemapEntry[] {
|
|||||||
return [
|
return [
|
||||||
{ loc: BASE_URL, changefreq: "weekly", priority: 1.0 },
|
{ loc: BASE_URL, changefreq: "weekly", priority: 1.0 },
|
||||||
{ loc: `${BASE_URL}/games`, changefreq: "daily", priority: 0.8 },
|
{ 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}/devices`, changefreq: "monthly", priority: 0.6 },
|
||||||
{ loc: `${BASE_URL}/updates`, changefreq: "weekly", priority: 0.5 },
|
{ loc: `${BASE_URL}/updates`, changefreq: "weekly", priority: 0.5 },
|
||||||
{ loc: `${BASE_URL}/contact`, changefreq: "yearly", priority: 0.3 },
|
{ loc: `${BASE_URL}/contact`, changefreq: "yearly", priority: 0.3 },
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "deckyvault",
|
"name": "deckyvault",
|
||||||
"version": "2026.0.97",
|
"version": "2026.0.98",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev --experimental-https --webpack",
|
"dev": "next dev --experimental-https --webpack",
|
||||||
|
|||||||
@@ -10,6 +10,11 @@
|
|||||||
<changefreq>daily</changefreq>
|
<changefreq>daily</changefreq>
|
||||||
<priority>0.8</priority>
|
<priority>0.8</priority>
|
||||||
</url>
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://localhost:3000/dashboard</loc>
|
||||||
|
<changefreq>daily</changefreq>
|
||||||
|
<priority>0.7</priority>
|
||||||
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://localhost:3000/devices</loc>
|
<loc>https://localhost:3000/devices</loc>
|
||||||
<changefreq>monthly</changefreq>
|
<changefreq>monthly</changefreq>
|
||||||
|
|||||||
Reference in New Issue
Block a user