From ca08024cb5f49e5e0f9d9eee94fe843f5f46a2fc Mon Sep 17 00:00:00 2001 From: Adrian Bonpin Date: Fri, 1 May 2026 10:15:13 +0800 Subject: [PATCH] feat: updates page and lint fixes --- app/(manage)/manage/games/games-client.tsx | 4 +- app/games/games-page-client.tsx | 22 +-- app/globals.css | 156 +------------------- app/page.tsx | 65 +++++--- app/updates/[slug]/page.tsx | 2 +- app/updates/page.tsx | 62 ++++---- bun.lock | 9 ++ components/comments/comment-section.tsx | 1 + components/saved-filters.tsx | 8 +- components/steam-reviews.tsx | 9 +- components/updates/update-card.tsx | 46 +++--- components/updates/update-viewer.tsx | 2 +- components/wizard/game-entry-wizard.tsx | 3 +- components/wizard/steps/anti-cheat-step.tsx | 4 +- components/wizard/steps/review-step.tsx | 2 +- components/wizard/steps/setup-step.tsx | 6 +- content/updates/2026-04-30-v2026.0.95.md | 9 ++ lib/api/community-suggestions.ts | 10 +- lib/api/games-listing.ts | 10 +- lib/api/games.ts | 45 +----- lib/api/playability.ts | 14 +- lib/api/steam-reviews.ts | 4 +- lib/steam/sync.ts | 4 +- next.config.ts | 4 + package.json | 1 + 25 files changed, 188 insertions(+), 314 deletions(-) diff --git a/app/(manage)/manage/games/games-client.tsx b/app/(manage)/manage/games/games-client.tsx index 5155b72..a7fba1c 100644 --- a/app/(manage)/manage/games/games-client.tsx +++ b/app/(manage)/manage/games/games-client.tsx @@ -169,7 +169,7 @@ export function GamesClient() { setSyncCompleted(true) setSelectedIds(new Set()) } - } catch (e) { + } catch { // Ignore parse errors } } @@ -255,7 +255,7 @@ export function GamesClient() { })) setSyncCompleted(true) } - } catch (e) { + } catch { // Ignore parse errors } } diff --git a/app/games/games-page-client.tsx b/app/games/games-page-client.tsx index 8cd92e2..6cde261 100644 --- a/app/games/games-page-client.tsx +++ b/app/games/games-page-client.tsx @@ -485,18 +485,18 @@ export function GamesPageClient({ sortBy: sort, }} onLoad={(filters) => { - setMinFps(filters.minFps || "") - setMaxFps(filters.maxFps || "") - setFsrSupport(filters.fsrSupport || false) - setProtonNative(filters.protonNative || "any") - setAntiCheatStatus(filters.antiCheatStatus || "any") - setPlayabilityStatus(filters.playabilityStatus || "") - setSteamReviewMin(filters.steamReviewMin || "") - setIsFree(filters.isFree || false) - setHasMultiplayer(filters.hasMultiplayer || false) - if (filters.genre) setSelectedGenres([filters.genre]) + setMinFps((filters.minFps as string) || "") + setMaxFps((filters.maxFps as string) || "") + setFsrSupport((filters.fsrSupport as boolean) || false) + setProtonNative((filters.protonNative as string) || "any") + setAntiCheatStatus((filters.antiCheatStatus as string) || "any") + setPlayabilityStatus((filters.playabilityStatus as string) || "") + setSteamReviewMin((filters.steamReviewMin as string) || "") + setIsFree((filters.isFree as boolean) || false) + setHasMultiplayer((filters.hasMultiplayer as boolean) || false) + if (filters.genre) setSelectedGenres([filters.genre as string]) else setSelectedGenres([]) - if (filters.device) setSelectedDevice(filters.device) + if (filters.device) setSelectedDevice(filters.device as string) else setSelectedDevice("") if (filters.sortBy) setSort(filters.sortBy as SortOption) }} diff --git a/app/globals.css b/app/globals.css index 142fc0b..a89ff66 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,4 +1,5 @@ @import "tailwindcss"; +@plugin "@tailwindcss/typography"; @theme inline { /* Colors */ @@ -9,158 +10,15 @@ --color-accent: #fb793c; --color-text: #ebe4f1; --color-border: color-mix(in srgb, var(--color-text) 20%, transparent); - --color-border-active: color-mix(in srgb, var(--color-text) 60%, transparent); + --color-border-active: color-mix( + in srgb, + var(--color-text) 60%, + transparent + ); /* Defaults */ --default-transition-duration: 0.3s; /* Fonts */ --font-sans: var(--font-lexend); -} - -.scrollbar-hide { - scrollbar-width: none; - -ms-overflow-style: none; -} -.scrollbar-hide::-webkit-scrollbar { - display: none; -} - -/* Markdown content styles */ -.update-content { - color: var(--color-text); -} - -.update-content h2 { - font-size: 1.5rem; - font-weight: 700; - margin-top: 2.5rem; - margin-bottom: 1rem; - color: var(--color-text); -} - -.update-content h3 { - font-size: 1.125rem; - font-weight: 600; - margin-top: 1.5rem; - margin-bottom: 0.75rem; - color: var(--color-text); -} - -.update-content p { - margin-bottom: 0.75rem; - line-height: 1.7; - color: rgba(235, 228, 241, 0.8); -} - -.update-content ul { - list-style-type: disc; - padding-left: 1.5rem; - margin-bottom: 1rem; -} - -.update-content ol { - list-style-type: decimal; - padding-left: 1.5rem; - margin-bottom: 1rem; -} - -.update-content li { - margin-bottom: 0.375rem; - line-height: 1.6; -} - -.update-content li > ul, -.update-content li > ol { - margin-top: 0.25rem; - margin-bottom: 0.5rem; -} - -.update-content a { - color: var(--color-primary); - text-decoration: none; - transition: opacity 0.2s; -} - -.update-content a:hover { - text-decoration: underline; - opacity: 0.8; -} - -/* Hide anchor link icons from rehype-autolink-headings by default */ -.update-content a[aria-hidden="true"] { - text-decoration: none; - margin-right: 0.375rem; - opacity: 0; - transition: opacity 0.2s; -} - -.update-content h2:hover a[aria-hidden="true"], -.update-content h3:hover a[aria-hidden="true"] { - opacity: 0.4; -} - -.update-content a[aria-hidden="true"]::before { - content: "#"; - font-size: 0.75rem; - font-weight: 400; -} - -.update-content code { - color: var(--color-accent); - background: rgba(235, 228, 241, 0.06); - padding: 0.125rem 0.375rem; - border-radius: 0.25rem; - font-size: 0.875rem; - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; -} - -.update-content pre { - background: rgba(235, 228, 241, 0.06); - padding: 1rem; - border-radius: 0.5rem; - overflow-x: auto; - margin-bottom: 1rem; -} - -.update-content pre code { - background: transparent; - padding: 0; -} - -.update-content strong { - font-weight: 700; - color: var(--color-text); -} - -.update-content hr { - border: none; - border-top: 1px solid var(--color-border); - margin: 2rem 0; -} - -.update-content blockquote { - border-left: 3px solid var(--color-primary); - padding-left: 1rem; - margin: 1rem 0; - color: rgba(235, 228, 241, 0.7); - font-style: italic; -} - -.update-content table { - width: 100%; - border-collapse: collapse; - margin-bottom: 1rem; -} - -.update-content th, -.update-content td { - border: 1px solid var(--color-border); - padding: 0.5rem 0.75rem; - text-align: left; -} - -.update-content th { - font-weight: 600; - background: rgba(235, 228, 241, 0.05); -} +} \ No newline at end of file diff --git a/app/page.tsx b/app/page.tsx index 55d43ee..259676b 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -33,16 +33,18 @@ export default function Landing() { return (
DeckyVault - beta + + beta + {"Find your game".split(" ").map((word, index) => ( {word} ))} {words[currentWord]} @@ -77,27 +79,27 @@ export default function Landing() { - + setSearchQuery(e.target.value)} onKeyDown={handleKeyDown} - className="flex-1 outline-none bg-transparent text-xl min-w-0" + className='flex-1 outline-none bg-transparent text-xl min-w-0' /> - + search @@ -105,26 +107,41 @@ export default function Landing() { - 2026 DeckyVault. + See what{"'"}s new. + + + + 2026 DeckyVault. + Github. + v{process.env.NEXT_PUBLIC_APP_VERSION}