From 9f40f52aabf85bbe9bb17e8e5e8871c586c4d72a Mon Sep 17 00:00:00 2001 From: Adrian Bonpin Date: Sun, 28 Jun 2026 23:52:53 +0800 Subject: [PATCH 1/4] feat(plugin page): 3-act narrative layout + final screenshots MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Redesign 'See it in action' as a 3-act story with clearer flow: - Act 1: Get set up (3 cards: panel, pair, launch option) - Act 2: Capture performance (2 cards: recording, session-form) - Act 3: Share & compare (1 large featured card: entry-live) Gradient line connectors between acts imply flow; numbered badges moved from per-card to per-act so cards feel like supporting visuals. Add root smooth scrolling (scroll-smooth on ) for hash-link anchors. Add recording + session-form screenshots (in-game captures from Steam pause overlay), each rendered with the device-photo treatment (rounded + drop shadow) to match the other in-game-style shots. Flip all HAS_SCREENSHOT flags to true — the full gallery is now live. --- apps/web/app/layout.tsx | 2 +- apps/web/app/plugin/page-client.tsx | 203 +++++++++++++++++------- apps/web/public/plugin/recording.jpg | Bin 0 -> 62197 bytes apps/web/public/plugin/session-form.jpg | Bin 0 -> 60823 bytes 4 files changed, 150 insertions(+), 55 deletions(-) create mode 100644 apps/web/public/plugin/recording.jpg create mode 100644 apps/web/public/plugin/session-form.jpg diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx index 3db983a..e458e6b 100644 --- a/apps/web/app/layout.tsx +++ b/apps/web/app/layout.tsx @@ -90,7 +90,7 @@ export default function RootLayout({ return ( {/* DNS prefetch + preconnect for external image CDNs */} diff --git a/apps/web/app/plugin/page-client.tsx b/apps/web/app/plugin/page-client.tsx index ade9a4d..03047d2 100644 --- a/apps/web/app/plugin/page-client.tsx +++ b/apps/web/app/plugin/page-client.tsx @@ -61,7 +61,7 @@ const SCREENSHOTS: Shot[] = [ title: "Record while you play", caption: "Once in-game, open the panel and hit Start Recording. A live timer tracks your session. Stop when you're done benchmarking.", - file: "recording.png", + file: "recording.jpg", photo: true, }, { @@ -69,7 +69,7 @@ const SCREENSHOTS: Shot[] = [ title: "Review & submit", caption: "After stopping, review the captured FPS, 1% lows, and power draw. Add notes, then upload straight to DeckyVault — or export to a file.", - file: "session-form.png", + file: "session-form.jpg", photo: true, }, { @@ -87,8 +87,8 @@ const HAS_SCREENSHOT: Record = { "panel-overview": true, "pair-qr": true, "launch-option": true, - recording: false, - "session-form": false, + recording: true, + "session-form": true, "entry-live": true, } @@ -184,6 +184,40 @@ const STEPS = [ }, ] +// ── Screenshot acts ──────────────────────────────────── +// The "See it in action" gallery is structured as a 3-act narrative so the +// story flows: Set up → Capture → Share. Each act has a heading + a list of +// shots. The last act's shot is rendered larger as a visual payoff. +const ACTS: { + number: string + title: string + subtitle: string + shotIds: string[] + layout: "grid-3" | "grid-2" | "feature" +}[] = [ + { + number: "1", + title: "Get set up", + subtitle: "Three quick steps before your first benchmark.", + shotIds: ["panel-overview", "pair-qr", "launch-option"], + layout: "grid-3", + }, + { + number: "2", + title: "Capture performance", + subtitle: "Hit record, play, then review your stats.", + shotIds: ["recording", "session-form"], + layout: "grid-2", + }, + { + number: "3", + title: "Share & compare", + subtitle: "Your entry appears on the game's page for the community.", + shotIds: ["entry-live"], + layout: "feature", + }, +] + export function PluginPageClient() { const [copied, setCopied] = useState(false) @@ -365,61 +399,122 @@ export function PluginPageClient() { - {/* ── Screenshots gallery ──────────────────────────────── */} -
+ {/* ── See it in action: 3-act narrative ──────────────────────── */} +
-

- See it in action -

-

- A walkthrough of the plugin, from pairing to publishing. -

+
+

+ See it in action +

+

+ A walkthrough of the plugin, from pairing to publishing. +

+
-
- {SCREENSHOTS.map((shot, i) => ( - -
- {HAS_SCREENSHOT[shot.id] ? ( - // eslint-disable-next-line @next/next/no-img-element - {shot.title} - ) : ( -
- - - /plugin/{shot.file} - - - {shot.photo ? "device photo" : "screenshot"} coming soon - +
+ {ACTS.map((act, actIdx) => { + const shots = act.shotIds + .map((id) => SCREENSHOTS.find((s) => s.id === id)) + .filter((s): s is (typeof SCREENSHOTS)[number] => Boolean(s)) + + return ( +
+ {/* Act heading */} + +
+ {act.number}
+
+

+ {act.title} +

+

+ {act.subtitle} +

+
+
+ + {/* Shot grid for this act */} +
+ {shots.map((shot) => { + const isFeature = act.layout === "feature" + return ( + +
+ {HAS_SCREENSHOT[shot.id] ? ( + // eslint-disable-next-line @next/next/no-img-element + {shot.title} + ) : ( +
+ + + {shot.photo ? "device photo" : "screenshot"} not yet captured + +
+ )} +
+
+
+ {shot.title} +
+

+ {shot.caption} +

+
+
+ ) + })} +
+ + {/* Flow arrow between acts */} + {actIdx < ACTS.length - 1 && ( + +
+ )}
-
-
- - {i + 1} - - {shot.title} -
-

- {shot.caption} -

-
- - ))} + ) + })}
diff --git a/apps/web/public/plugin/recording.jpg b/apps/web/public/plugin/recording.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7c907a169844c9f936c21bbdd8a7169a59e85b0 GIT binary patch literal 62197 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
    7Yd&vWT4%ASOFR)YzdHfVg)Rsd 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 literal 0 HcmV?d00001 diff --git a/apps/web/public/plugin/session-form.jpg b/apps/web/public/plugin/session-form.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61f8942e78520323f8d54aaf3b0e746757899f35 GIT binary patch literal 60823 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 WINB4~4SPlt<*=T?4|ufSe)$J>N3v!B literal 0 HcmV?d00001 From 841cbfe0c6394692cee1309bf9a2aa0ef6ed0c1d Mon Sep 17 00:00:00 2001 From: Adrian Bonpin Date: Mon, 29 Jun 2026 00:01:57 +0800 Subject: [PATCH 2/4] feat(game page): add dismissible plugin CTA banner above Performance Entries Promotes the DeckyVault Decky plugin to Steam Deck owners browsing game pages. Soft primary-tinted card with Gamepad2 icon, value-prop copy, and 'Get the plugin' CTA linking to /plugin. Dismissible via localStorage (dv-plugin-cta-dismissed) so it stays gone across all games once closed. Controller-navigable (data-gamepad-focusable), responsive layout. --- apps/web/app/game/[id]/game-page-client.tsx | 51 +++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/apps/web/app/game/[id]/game-page-client.tsx b/apps/web/app/game/[id]/game-page-client.tsx index 82d63e2..941df4a 100644 --- a/apps/web/app/game/[id]/game-page-client.tsx +++ b/apps/web/app/game/[id]/game-page-client.tsx @@ -18,6 +18,7 @@ import { GaugeIcon, ChevronDownIcon, PencilIcon, + X as XIcon, } from "lucide-react" import Link from "next/link" import { useSession } from "@/lib/auth-client" @@ -641,6 +642,23 @@ export function GamePageClient({ ) const presetsRef = useRef(null) + // DeckyVault plugin CTA dismissal (persisted across games in localStorage) + const [showPluginCta, setShowPluginCta] = useState(false) + useEffect(() => { + if (typeof window === "undefined") return + if (localStorage.getItem("dv-plugin-cta-dismissed") !== "1") { + setShowPluginCta(true) + } + }, []) + const dismissPluginCta = () => { + setShowPluginCta(false) + try { + localStorage.setItem("dv-plugin-cta-dismissed", "1") + } catch { + // ignore + } + } + // On mount, auto-open preset from URL useEffect(() => { const presetId = searchParams.get("preset") @@ -1425,6 +1443,39 @@ export function GamePageClient({ className='px-4 md:px-[10svw]' >

    + {showPluginCta && ( +
    +
    +
    + +
    +
    +

    + Have a Steam Deck? Record benchmarks automatically with the DeckyVault Decky plugin — one tap, no manual screenshots. +

    +
    +
    +
    + + Get the plugin + + + +
    +
    + )}

    Performance Entries From b416f49e3d0f1fae0cca9a01ac69325aa286c326 Mon Sep 17 00:00:00 2001 From: Adrian Bonpin Date: Mon, 29 Jun 2026 00:10:01 +0800 Subject: [PATCH 3/4] feat(plugin): attach Steam Deck screenshots to performance submissions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The plugin can now attach up to 2 Steam Deck screenshots (Steam + R1) to a performance entry, uploaded together in one Submit tap. Backend: - Screenshot upload/delete endpoints now accept API key auth via requireRoleWithApiKeyFallback (was session-only), so the plugin's x-api-key header works. The 2-screenshot limit was already enforced server-side (MAX_SCREENSHOTS_PER_ENTRY = 2). Plugin Python (main.py): - list_screenshots(): scans ~/Pictures/Screenshots/ + Steam Client/ subfolder, skips the most_recent.jpg duplicate, returns recent shots - upload_screenshots(): hard-caps at 2, builds multipart/form-data with urllib, posts to /api/performance/:id/screenshots Plugin UI (session-form.tsx): - New Screenshots section (max 2) with a picker listing recent Steam screenshots (time + size), selected shots as removable rows - Submit flow: upload entry → get entry ID → upload selected screenshots → combined success message (partial-success if screenshots fail) --- apps/web/lib/api/screenshots.ts | 22 +- plugins/decky-vault/main.py | 109 +++++++++ .../src/components/session-form.tsx | 229 +++++++++++++++++- plugins/decky-vault/src/lib/api.ts | 17 ++ 4 files changed, 366 insertions(+), 11 deletions(-) diff --git a/apps/web/lib/api/screenshots.ts b/apps/web/lib/api/screenshots.ts index 7a597b8..91d5b9d 100644 --- a/apps/web/lib/api/screenshots.ts +++ b/apps/web/lib/api/screenshots.ts @@ -2,20 +2,36 @@ import { Elysia, t } from "elysia" import { db } from "@/lib/db/index" import { performanceEntries, entryScreenshots, storageObjects } from "@/lib/db/schema" import { eq, sql } from "drizzle-orm" -import { requireRole } from "@/lib/auth/guard" +import { requireAuthWithApiKeyFallback } from "@/lib/auth/api-key-guard" import { uploadObject, deleteObject, getR2PublicUrl, isR2Configured } from "@/lib/storage" import { processScreenshot, isAllowedMimeType } from "@/lib/image-processing" const MAX_SCREENSHOTS_PER_ENTRY = 2 const MAX_UPLOAD_SIZE = 10 * 1024 * 1024 // 10 MB raw +/** Auth that accepts either a session cookie or an x-api-key header, + * then enforces a role. Used so the Decky plugin (API key) and the web + * app (session) can both upload screenshots. */ +async function requireRoleWithApiKeyFallback( + headers: Headers, + roles: string[], +) { + const guard = await requireAuthWithApiKeyFallback(headers) + if (!guard.ok) return guard + const userRole = guard.user.role ?? "user" + if (!roles.includes(userRole)) { + return { ok: false as const, error: "Forbidden", status: 403 } + } + return guard +} + export const screenshotRoutes = new Elysia({ prefix: "/performance", detail: { tags: ["Performance"] } }) // ── Upload screenshots ───────────────────────────────────────── .post( "/:id/screenshots", async ({ params, request, set }) => { - const guard = await requireRole(request.headers, ["user", "contributor", "admin"]) + const guard = await requireRoleWithApiKeyFallback(request.headers, ["user", "contributor", "admin"]) if (!guard.ok) { set.status = guard.status return { error: guard.error } @@ -202,7 +218,7 @@ export const screenshotRoutes = new Elysia({ prefix: "/performance", detail: { t .delete( "/:id/screenshots/:sid", async ({ params, request, set }) => { - const guard = await requireRole(request.headers, ["user", "contributor", "admin"]) + const guard = await requireRoleWithApiKeyFallback(request.headers, ["user", "contributor", "admin"]) if (!guard.ok) { set.status = guard.status return { error: guard.error } diff --git a/plugins/decky-vault/main.py b/plugins/decky-vault/main.py index 8d926a4..838f4db 100644 --- a/plugins/decky-vault/main.py +++ b/plugins/decky-vault/main.py @@ -605,6 +605,115 @@ exec mangohud "$@" except Exception as e: return {"success": False, "error": str(e), "status": 0} + async def list_screenshots(self, limit: int = 12) -> dict: + """RPC: List recent Steam Deck screenshots from ~/Pictures/Screenshots/. + Returns {screenshots: [{path, name, mtime, size}], error?}. + Steam saves timestamped JPGs in a 'Steam Client' subfolder and keeps + a 'most_recent.jpg' symlink-like copy at the top level.""" + import glob + import time + try: + home = os.path.expanduser("~") + base = os.path.join(home, "Pictures", "Screenshots") + patterns = [ + os.path.join(base, "*.jpg"), + os.path.join(base, "*.png"), + os.path.join(base, "Steam Client", "*.jpg"), + os.path.join(base, "Steam Client", "*.png"), + ] + seen = set() + files = [] + for pat in patterns: + for f in glob.glob(pat): + if not os.path.isfile(f) or f in seen: + continue + # Skip the most_recent.jpg duplicate if a real timestamped + # copy exists — it's just a pointer to the latest one. + if os.path.basename(f) == "most_recent.jpg": + continue + seen.add(f) + try: + files.append({ + "path": f, + "name": os.path.basename(f), + "mtime": os.path.getmtime(f), + "size": os.path.getsize(f), + }) + except OSError: + continue + files.sort(key=lambda x: x["mtime"], reverse=True) + return {"screenshots": files[:limit]} + except Exception as e: + return {"screenshots": [], "error": str(e)} + + async def upload_screenshots(self, entry_id: str, screenshot_paths: list, api_key: str, base_url: str = "https://deckyvault.xyz") -> dict: + """RPC: Upload up to 2 screenshots to a performance entry as multipart/form-data. + Returns {success: bool, uploaded: int, error?: str, status?: int}. + The server enforces the 2-screenshot limit per entry.""" + import urllib.request + import urllib.error + import uuid + + # Hard cap at 2 — matches the website limit + paths = [p for p in screenshot_paths if p][:2] + if not paths: + return {"success": False, "error": "No screenshots selected"} + + try: + url = f"{base_url}/api/performance/{entry_id}/screenshots" + + # Build a multipart/form-data body manually (urllib has no helper) + boundary = "----DeckyVaultBoundary" + uuid.uuid4().hex + encoded = b"" + valid_paths = [] + for p in paths: + if not os.path.exists(p): + continue + valid_paths.append(p) + with open(p, "rb") as fh: + file_bytes = fh.read() + fname = os.path.basename(p) + ext = os.path.splitext(fname)[1].lower() + mime = "image/png" if ext == ".png" else ("image/webp" if ext == ".webp" else "image/jpeg") + encoded += ( + f"--{boundary}\r\n" + f'Content-Disposition: form-data; name="screenshots"; filename="{fname}"\r\n' + f"Content-Type: {mime}\r\n\r\n" + ).encode("utf-8") + encoded += file_bytes + encoded += b"\r\n" + encoded += f"--{boundary}--\r\n".encode("utf-8") + + if not valid_paths: + return {"success": False, "error": "No readable screenshot files"} + + req = urllib.request.Request( + url, + data=encoded, + headers={ + "Content-Type": f"multipart/form-data; boundary={boundary}", + "x-api-key": api_key, + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; rv:136.0) Gecko/20100101 Firefox/136.0", + "Accept": "application/json", + }, + method="POST", + ) + context = _get_ssl_context() + with urllib.request.urlopen(req, timeout=30, context=context) as response: + result = json.loads(response.read().decode("utf-8")) + uploaded = len(result.get("data", [])) if isinstance(result.get("data"), list) else 0 + return {"success": True, "uploaded": uploaded} + except urllib.error.HTTPError as e: + try: + err = json.loads(e.read().decode("utf-8")) + return {"success": False, "error": err.get("error", f"Server returned status {e.code}"), "status": e.code} + except Exception: + return {"success": False, "error": f"Server returned status {e.code}", "status": e.code} + except urllib.error.URLError as e: + return {"success": False, "error": f"Network error: {str(e.reason)}", "status": 0} + except Exception as e: + return {"success": False, "error": str(e), "status": 0} + async def test_api_key(self, api_key: str, base_url: str = "https://deckyvault.xyz") -> dict: """RPC: Test if an API key is valid by calling the dedicated verify endpoint. Returns {valid: bool, error: str?, userName?: str, userImage?: str}.""" diff --git a/plugins/decky-vault/src/components/session-form.tsx b/plugins/decky-vault/src/components/session-form.tsx index a2954bb..414bdd8 100644 --- a/plugins/decky-vault/src/components/session-form.tsx +++ b/plugins/decky-vault/src/components/session-form.tsx @@ -5,7 +5,6 @@ import { PanelSectionRow, DropdownItem, TextField, - Field, staticClasses, } from "@decky/ui" import { @@ -13,11 +12,20 @@ import { FaCloudUploadAlt, FaCheck, FaTimes, + FaImages, + FaPlus, + FaTrash, + FaSpinner, } from "react-icons/fa" import type { SessionData } from "../lib/store" import { buildImportPayload } from "../lib/store" import type { PluginSettings } from "../lib/store" -import { exportToFile, uploadToDeckyvault } from "../lib/api" +import { + exportToFile, + uploadToDeckyvault, + listScreenshots, + uploadScreenshots, +} from "../lib/api" interface SessionFormProps { session: SessionData @@ -46,6 +54,29 @@ const FRAME_GEN_OPTIONS = [ { label: "Other", data: "other" }, ] +const MAX_SCREENSHOTS = 2 + +interface ScreenshotFile { + path: string + name: string + mtime: number + size: number +} + +function formatShotTime(mtime: number): string { + const d = new Date(mtime * 1000) + const today = new Date() + const isToday = d.toDateString() === today.toDateString() + const time = d.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) + return isToday ? `Today ${time}` : `${d.toLocaleDateString()} ${time}` +} + +function formatSize(bytes: number): string { + if (bytes < 1024) return `${bytes} B` + if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} KB` + return `${(bytes / (1024 * 1024)).toFixed(1)} MB` +} + export default function SessionForm({ session, error, @@ -59,6 +90,41 @@ export default function SessionForm({ const [uploadStatus, setUploadStatus] = useState<"idle" | "loading" | "success" | "error">("idle") const [statusMessage, setStatusMessage] = useState("") + // ── Screenshot picker state ────────────────────────────── + const [selectedShots, setSelectedShots] = useState([]) + const [pickerOpen, setPickerOpen] = useState(false) + const [availableShots, setAvailableShots] = useState([]) + const [shotsLoading, setShotsLoading] = useState(false) + const [shotsError, setShotsError] = useState("") + + async function openPicker() { + if (selectedShots.length >= MAX_SCREENSHOTS) return + setPickerOpen(true) + setShotsLoading(true) + setShotsError("") + const result = await listScreenshots(12) + setShotsLoading(false) + if (result.error) { + setShotsError(result.error) + } + // Filter out already-selected paths + setAvailableShots(result.screenshots.filter((s) => !selectedShots.some((sel) => sel.path === s.path))) + } + + function addShot(shot: ScreenshotFile) { + if (selectedShots.length >= MAX_SCREENSHOTS) return + setSelectedShots((prev) => [...prev, shot]) + setAvailableShots((prev) => prev.filter((s) => s.path !== shot.path)) + if (selectedShots.length + 1 >= MAX_SCREENSHOTS) { + setPickerOpen(false) + } + } + + function removeShot(shot: ScreenshotFile) { + setSelectedShots((prev) => prev.filter((s) => s.path !== shot.path)) + setAvailableShots((prev) => [...prev, shot].sort((a, b) => b.mtime - a.mtime)) + } + async function handleExport() { if (!settings) return setError("") @@ -88,7 +154,7 @@ export default function SessionForm({ } setError("") setUploadStatus("loading") - setStatusMessage("") + setStatusMessage("Uploading entry…") const payload = buildImportPayload(session) const result = await uploadToDeckyvault( @@ -97,17 +163,41 @@ export default function SessionForm({ settings.baseUrl, ) - if (result.success) { - setUploadStatus("success") - setStatusMessage(`Uploaded! Entry ID: ${result.data?.id}`) - onAddToRecent(session) - } else { + if (!result.success) { setUploadStatus("error") setStatusMessage(result.error || "Upload failed") if (result.status === 404) { setStatusMessage("This game isn't in DeckyVault yet. Submit it on the website first, or export to file.") } + return } + + const entryId = result.data?.id + + // ── Upload screenshots if any are selected ─────────────── + if (selectedShots.length > 0 && entryId) { + setStatusMessage(`Entry uploaded. Adding ${selectedShots.length} screenshot${selectedShots.length > 1 ? "s" : ""}…`) + const shotResult = await uploadScreenshots( + entryId, + selectedShots.map((s) => s.path), + settings.apiKey, + settings.baseUrl, + ) + if (shotResult.success) { + setUploadStatus("success") + const n = shotResult.uploaded ?? selectedShots.length + setStatusMessage(`Uploaded! Entry + ${n} screenshot${n > 1 ? "s" : ""}`) + } else { + // Entry succeeded but screenshots failed — still a partial success + setUploadStatus("success") + setStatusMessage(`Entry uploaded (ID: ${entryId}). Screenshots failed: ${shotResult.error}`) + } + } else { + setUploadStatus("success") + setStatusMessage(`Uploaded! Entry ID: ${entryId}`) + } + + onAddToRecent(session) } return ( @@ -195,6 +285,129 @@ export default function SessionForm({ + {/* ── Screenshots (max 2) ────────────────────────────────── */} + 0 ? ` (${selectedShots.length}/${MAX_SCREENSHOTS})` : ""}`}> + +
    + Attach up to {MAX_SCREENSHOTS} Steam Deck screenshots (Steam + R1). They upload with your entry. +
    +
    + + {/* Selected screenshots */} + {selectedShots.map((shot) => ( + +
    + +
    +
    + {shot.name} +
    +
    + {formatShotTime(shot.mtime)} · {formatSize(shot.size)} +
    +
    + +
    +
    + ))} + + {/* Add button (hidden when at max) */} + {selectedShots.length < MAX_SCREENSHOTS && !pickerOpen && ( + + +
    + + Add Screenshot +
    +
    +
    + )} + + {/* Picker: list of recent Steam screenshots */} + {pickerOpen && ( + <> + +
    + Recent screenshots +
    +
    + + {shotsLoading && ( + +
    + Loading… +
    +
    + )} + + {shotsError && !shotsLoading && ( + +
    + {shotsError} +
    +
    + )} + + {!shotsLoading && !shotsError && availableShots.length === 0 && ( + +
    + No screenshots found. Take one with Steam + R1. +
    +
    + )} + + {!shotsLoading && availableShots.map((shot) => ( + + addShot(shot)}> +
    + +
    +
    + {formatShotTime(shot.mtime)} +
    +
    + {formatSize(shot.size)} +
    +
    + +
    +
    +
    + ))} + + + setPickerOpen(false)}> +
    + + Cancel +
    +
    +
    + + )} +
    + {/* ── Error display ──────────────────────────────────────── */} {error && ( diff --git a/plugins/decky-vault/src/lib/api.ts b/plugins/decky-vault/src/lib/api.ts index 97f676b..483e9b6 100644 --- a/plugins/decky-vault/src/lib/api.ts +++ b/plugins/decky-vault/src/lib/api.ts @@ -81,6 +81,23 @@ export const uploadToDeckyvault = callable<[ status?: number }>("upload_to_deckyvault") +export const listScreenshots = callable<[limit?: number], { + screenshots: Array<{ path: string; name: string; mtime: number; size: number }> + error?: string +}>("list_screenshots") + +export const uploadScreenshots = callable<[ + entryId: string, + screenshotPaths: string[], + apiKey: string, + baseUrl?: string +], { + success: boolean + uploaded?: number + error?: string + status?: number +}>("upload_screenshots") + export const testApiKey = callable<[apiKey: string, baseUrl?: string], { valid: boolean error?: string From 59ecb4e4a6a205ac9b3e6492062c48453ba188db Mon Sep 17 00:00:00 2001 From: Adrian Bonpin Date: Mon, 29 Jun 2026 00:10:07 +0800 Subject: [PATCH 4/4] feat(plugin page): robust SEO + sitemap inclusion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Richer metadata: 14 targeted keywords, explicit robots directives (index/follow + googleBot max-image-preview), full OpenGraph with OG image, twitter summary_large_image, authors/creator/publisher fields - 3 JSON-LD blocks: SoftwareApplication (version, downloadUrl, featureList, screenshot), FAQPage (4 install/usage Q&As), BreadcrumbList - Add /plugin to STATIC_PAGES sitemap (monthly, priority 0.7) - Update sitemap tests: static count 7→8, assert /plugin present - All 25 sitemap tests pass --- apps/web/app/__tests__/sitemap.test.ts | 7 +- apps/web/app/plugin/page.tsx | 125 ++++++++++++++++++++++--- apps/web/lib/sitemap-utils.ts | 2 + 3 files changed, 119 insertions(+), 15 deletions(-) diff --git a/apps/web/app/__tests__/sitemap.test.ts b/apps/web/app/__tests__/sitemap.test.ts index f5df060..e0e87a9 100644 --- a/apps/web/app/__tests__/sitemap.test.ts +++ b/apps/web/app/__tests__/sitemap.test.ts @@ -159,12 +159,12 @@ describe("Sitemap Generator (app/sitemap.ts)", () => { // ── sitemap({ id: 'static' }) ────────────────────────────────────── describe("sitemap({ id: 'static' })", () => { - it("returns 7 static page entries", async () => { + it("returns 8 static page entries", async () => { const mod = await import("@/app/sitemap") const result = await mod.default({ id: Promise.resolve("static") }) expect(Array.isArray(result)).toBe(true) - expect(result).toHaveLength(7) + expect(result).toHaveLength(8) }) it("first entry is homepage with priority 1.0", async () => { @@ -182,6 +182,7 @@ describe("Sitemap Generator (app/sitemap.ts)", () => { const urls = result.map((e: { url: string }) => e.url) expect(urls).toContain("https://deckyvault.xyz/games") expect(urls).toContain("https://deckyvault.xyz/compare") + expect(urls).toContain("https://deckyvault.xyz/plugin") }) it("includes lastModified on all entries", async () => { @@ -360,7 +361,7 @@ describe("Sitemap Generator (app/sitemap.ts)", () => { const mod = await import("@/app/sitemap") const result = await mod.default({ id: Promise.resolve("static") }) - expect(result).toHaveLength(7) + expect(result).toHaveLength(8) }) it("unknown id returns empty array", async () => { diff --git a/apps/web/app/plugin/page.tsx b/apps/web/app/plugin/page.tsx index 9892ca4..e2050c9 100644 --- a/apps/web/app/plugin/page.tsx +++ b/apps/web/app/plugin/page.tsx @@ -4,50 +4,147 @@ import { PluginPageClient } from "./page-client" export const dynamic = "force-dynamic" +const CANONICAL = "https://deckyvault.xyz/plugin" +const TITLE = "DeckyVault Plugin — Record & Upload Steam Deck Benchmarks" +const DESCRIPTION = + "Install the DeckyVault Decky Loader plugin to capture FPS, frame times, and power draw with MangoHud, then upload performance entries straight to DeckyVault from your Steam Deck. Free, open source, controller-friendly." + export const metadata: Metadata = { - title: "DeckyVault Plugin — Record & Upload Steam Deck Benchmarks", - description: - "Install the DeckyVault Decky Loader plugin to capture FPS, frame times, and power draw with MangoHud, then upload performance entries straight to DeckyVault from your Steam Deck.", + title: TITLE, + description: DESCRIPTION, keywords: [ "decky loader plugin", + "deckyvault plugin", "steam deck plugin", + "steam deck benchmark tool", "mangohud", + "mangohud steam deck", + "steam deck performance logging", + "steam deck fps recorder", "steam deck benchmark", "performance logging", "deckyvault", + "steam deck tdp", + "steam deck frame times", + "decky plugin install", ], - alternates: { canonical: "https://deckyvault.xyz/plugin" }, + alternates: { canonical: CANONICAL }, + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + "max-image-preview": "large", + "max-snippet": -1, + "max-video-preview": -1, + }, + }, openGraph: { - title: "DeckyVault Plugin — Record & Upload Steam Deck Benchmarks", + title: TITLE, description: - "Capture FPS and power draw with MangoHud, then upload to DeckyVault straight from your Steam Deck.", - url: "https://deckyvault.xyz/plugin", + "Capture FPS and power draw with MangoHud, then upload to DeckyVault straight from your Steam Deck. QR-code pairing, one-tap upload, auto game detection.", + url: CANONICAL, siteName: "DeckyVault", type: "website", + locale: "en_US", + images: [ + { + url: "/opengraph-image", + width: 1200, + height: 630, + alt: "DeckyVault Plugin for Steam Deck", + }, + ], }, twitter: { card: "summary_large_image", - title: "DeckyVault Plugin", + title: "DeckyVault Plugin — Steam Deck Benchmark Recorder", description: - "Record Steam Deck performance and upload to DeckyVault with the Decky Loader plugin.", + "Record Steam Deck performance with MangoHud and upload to DeckyVault with the Decky Loader plugin. QR pairing, one-tap upload.", + images: ["/opengraph-image"], }, + category: "technology", + authors: [{ name: "DeckyVault", url: "https://deckyvault.xyz" }], + creator: "DeckyVault", + publisher: "DeckyVault", } +// ── Structured data ──────────────────────────────────────────────── +// SoftwareApplication describes the plugin itself; FAQPage captures the +// install/setup steps so search engines can surface rich results. + const jsonLd = { "@context": "https://schema.org", "@type": "SoftwareApplication", name: "DeckyVault Plugin", applicationCategory: "UtilitiesApplication", operatingSystem: "SteamOS", + softwareVersion: "1.0.0", offers: { "@type": "Offer", price: "0", priceCurrency: "USD" }, description: - "A Decky Loader plugin that records Steam Deck performance metrics with MangoHud and uploads them to DeckyVault.", - url: "https://deckyvault.xyz/plugin", + "A Decky Loader plugin that records Steam Deck performance metrics (FPS, frame times, power draw) with MangoHud and uploads them to DeckyVault.", + url: CANONICAL, + downloadUrl: + "https://github.com/AdrianBonpin/deckyvault/releases", + author: { + "@type": "Organization", + name: "DeckyVault", + url: "https://deckyvault.xyz", + }, + featureList: [ + "Capture FPS, frame times, and 1% lows with MangoHud", + "Measure CPU + GPU power draw with peripheral overhead", + "QR-code pairing with your DeckyVault account", + "One-tap upload of performance entries", + "Automatic game and Proton version detection", + "Controller-friendly Quick Access Menu UI", + ], + screenshot: "https://deckyvault.xyz/plugin/panel-overview.jpg", +} + +const faqLd = { + "@context": "https://schema.org", + "@type": "FAQPage", + mainEntity: [ + { + "@type": "Question", + name: "How do I install the DeckyVault plugin?", + acceptedAnswer: { + "@type": "Answer", + text: "Install Decky Loader on your Steam Deck, then either use 'Install Plugin from ZIP File' with the downloaded plugin ZIP, or 'Install Plugin from URL' with the direct download link from the GitHub release.", + }, + }, + { + "@type": "Question", + name: "Do I need to manually copy an API key?", + acceptedAnswer: { + "@type": "Answer", + text: "No. Open the plugin in the Quick Access Menu, tap 'Pair with Phone', and scan the QR code with your phone. Confirm on deckyvault.xyz and your account links automatically — the API key is created and saved for you.", + }, + }, + { + "@type": "Question", + name: "What does the plugin record?", + acceptedAnswer: { + "@type": "Answer", + text: "It captures FPS averages, frame times, 1% lows, and total power draw (CPU + GPU plus peripheral overhead) using MangoHud, along with the detected game, Steam App ID, and Proton version.", + }, + }, + { + "@type": "Question", + name: "Is the DeckyVault plugin free?", + acceptedAnswer: { + "@type": "Answer", + text: "Yes, the plugin is free and open source.", + }, + }, + ], } const breadcrumbs = buildBreadcrumbList([ { name: "Home", url: "https://deckyvault.xyz/" }, - { name: "Plugin", url: "https://deckyvault.xyz/plugin" }, + { name: "Plugin", url: CANONICAL }, ]) export default function PluginPage() { @@ -57,6 +154,10 @@ export default function PluginPage() { type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} /> +