diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..d0531cc --- /dev/null +++ b/.env.example @@ -0,0 +1,56 @@ +# ============================================================================= +# Environment Configuration +# ============================================================================= +# Copy this file to .env.local and fill in your actual values +# Never commit .env.local to version control +# ============================================================================= + +# ----------------------------------------------------------------------------- +# SYSTEM & DEPLOYMENT +# ----------------------------------------------------------------------------- +NIXPACKS_NODE_VERSION=22 + +# ----------------------------------------------------------------------------- +# DATABASE +# ----------------------------------------------------------------------------- +# PostgreSQL connection string +DATABASE_URL="postgresql://user:password@localhost:5432/grounds" + +# ----------------------------------------------------------------------------- +# APPLICATION URLS +# ----------------------------------------------------------------------------- +# Base URL of the application (client-accessible) +NEXT_PUBLIC_SITE_URL="https://localhost:3000" + +# Auth callback URL +NEXT_PUBLIC_APP_URL="https://localhost:3000" + +# ----------------------------------------------------------------------------- +# BETTER AUTH +# ----------------------------------------------------------------------------- +# Better Auth configuration +# URL must match your app URL (with protocol) +BETTER_AUTH_URL="https://localhost:3000" + +# Secret key for signing tokens (generate with: openssl rand -base64 32) +BETTER_AUTH_SECRET="your-secret-key-here" + +# ----------------------------------------------------------------------------- +# AUTHENTICATION +# ----------------------------------------------------------------------------- +# Google OAuth credentials (required) +GOOGLE_CLIENT_ID="" +GOOGLE_CLIENT_SECRET="" + +# Discord OAuth credentials (required) +DISCORD_CLIENT_ID="" +DISCORD_CLIENT_SECRET="" + +# ----------------------------------------------------------------------------- +# STORAGE (S3 COMPATIBLE) +# ----------------------------------------------------------------------------- +# S3-compatible credentials for file storage +S3_ACCESS_KEY_ID="" +S3_SECRET_ACCESS_KEY="" +S3_BUCKET_NAME="" +S3_PUBLIC_URL="" \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5ef6a52..7b8da95 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ yarn-error.log* # env files (can opt-in for committing if needed) .env* +!.env.example # vercel .vercel diff --git a/README.md b/README.md index abe67ea..bd383f4 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,11 @@ An open-source, community-driven database for Steam Deck (OLED & LCD) and Steam Machine compatibility, performance metrics, and settings. -[//]: # "Add shields here if available: e.g., license, contributors, last commit" +> **Note:** DeckyVault is currently under active development. The site is live at [deckyvault.xyz](https://deckyvault.xyz) but features are being built incrementally. Stay tuned! ## Why DeckyVault? -Gaming on the Steam Deck is incredible, but finding reliable, detailed answers about whether a game will run well—or how to optimize it—can be frustrating. Existing resources are often fragmented, outdated, or lack the depth the community needs. +Gaming on the Steam Deck is incredible, but finding reliable, detailed answers about whether a game will run well — or how to optimize it — can be frustrating. Existing resources are often fragmented, outdated, or lack the depth the community needs. **DeckyVault** aims to solve this by being the definitive, community-first hub for Steam Deck performance data. @@ -33,36 +33,49 @@ Gaming on the Steam Deck is incredible, but finding reliable, detailed answers a ## Tech Stack -- **[Next.js](https://nextjs.org)** — React framework for production -- **[React](https://react.dev)** — UI library +- **[Next.js 16](https://nextjs.org)** — React framework (App Router) +- **[React 19](https://react.dev)** — UI library - **[TypeScript](https://www.typescriptlang.org)** — Type safety -- **[Tailwind CSS](https://tailwindcss.com)** — Utility-first styling *(verify in your local setup)* +- **[Tailwind CSS v4](https://tailwindcss.com)** — Utility-first styling +- **[Elysia](https://elysiajs.com)** — Backend API framework +- **[Drizzle ORM](https://orm.drizzle.team)** — Type-safe database queries +- **[PostgreSQL](https://www.postgresql.org)** — Primary database +- **[better-auth](https://better-auth.com)** — Authentication (Google & Discord OAuth) +- **[Tiptap](https://tiptap.dev)** — Rich text editor +- **[Motion](https://motion.dev)** — Animations +- **[AWS S3](https://aws.amazon.com/s3/)** — File storage +- **[Bun](https://bun.sh)** — Package manager & runtime ## Getting Started -First, clone the repository and install dependencies: +Clone the repository and install dependencies: ```bash -npm install -# or -yarn install -# or -pnpm install +bun install ``` -Then, run the development server: +Copy the environment file and configure your values: ```bash -npm run dev -# or -yarn dev -# or -pnpm dev +cp .env.example .env.local ``` -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. +Run the development server: -You can start editing the pages by modifying files in the `app/` directory. The page auto-updates as you edit the file. +```bash +bun run dev +``` + +Open [http://localhost:3000](http://localhost:3000) to see the result. + +## Scripts + +| Command | Description | +|---------|-------------| +| `bun run dev` | Start development server (HTTPS) | +| `bun run build` | Create production build | +| `bun run start` | Start production server | +| `bun run lint` | Run ESLint | ## Contributing @@ -73,7 +86,7 @@ We welcome contributions of all kinds! Whether you want to: - Improve the design - Contribute code -Feel free to open an [issue](../../issues) or submit a [pull request](../../pulls). +Feel free to open an [issue](https://github.com/AdrianBonpin/deckyvault/issues) or submit a [pull request](https://github.com/AdrianBonpin/deckyvault/pulls). If you're interested in helping develop or design the project, don't hesitate to reach out! diff --git a/app/favicon.ico b/app/favicon.ico deleted file mode 100644 index 718d6fe..0000000 Binary files a/app/favicon.ico and /dev/null differ diff --git a/app/globals.css b/app/globals.css index a2dc41e..2695c1e 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,26 +1,17 @@ @import "tailwindcss"; -:root { - --background: #ffffff; - --foreground: #171717; -} - @theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); -} + /* Colors */ + --color-background: #100b14; + --color-foreground: #180161; + --color-primary: #eb3779; + --color-secondary: #571b8b; + --color-accent: #fb793c; + --color-text: #ebe4f1; -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} + /* Defaults */ + --default-transition-duration: 0.3s; -body { - background: var(--background); - color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; + /* Fonts */ + --font-sans: var(--font-lexend); } diff --git a/app/icon.png b/app/icon.png new file mode 100644 index 0000000..1fec42f Binary files /dev/null and b/app/icon.png differ diff --git a/app/layout.tsx b/app/layout.tsx index 976eb90..5fbf250 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,33 +1,93 @@ -import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; -import "./globals.css"; +import type { Metadata } from "next" +import { Lexend } from "next/font/google" +import "./globals.css" +import Script from "next/script" -const geistSans = Geist({ - variable: "--font-geist-sans", - subsets: ["latin"], -}); - -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], -}); +const font = Lexend({ + variable: "--font-lexend", + subsets: ["latin"], +}) export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", -}; + metadataBase: new URL("https://deckyvault.xyz"), + title: { + default: "DeckyVault - Steam Deck Benchmarks & Settings", + template: "%s | DeckyVault", + }, + description: + "A fast, modern browser for finding game benchmarks, settings, and guides for Steam Deck OLED, Steam Deck LCD, and Steam Machine.", + keywords: [ + "Steam Deck", + "benchmarks", + "settings", + "performance", + "FPS", + "gaming", + "Steam Machine", + "Proton", + "FSR", + "compatibility", + ], + authors: [ + { name: "Adrian Bonpin", url: "https://github.com/AdrianBonpin" }, + ], + creator: "@adrianbonpin", + openGraph: { + type: "website", + locale: "en_US", + url: "https://deckyvault.xyz", + siteName: "DeckyVault", + title: "DeckyVault - Steam Deck Benchmarks & Settings", + description: + "A fast, modern browser for finding game benchmarks, settings, and guides for Steam Deck OLED, Steam Deck LCD, and Steam Machine.", + images: [ + { + url: "/opengraph-image", + width: 1200, + height: 630, + alt: "DeckyVault - Steam Deck Benchmarks & Settings", + }, + ], + }, + twitter: { + card: "summary_large_image", + title: "DeckyVault - Steam Deck Benchmarks & Settings", + description: + "A fast, modern browser for finding game benchmarks, settings, and guides for Steam Deck OLED, Steam Deck LCD, and Steam Machine.", + creator: "@adrianbonpin", + images: ["/twitter-image"], + }, + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + "max-video-preview": -1, + "max-image-preview": "large", + "max-snippet": -1, + }, + }, +} export default function RootLayout({ - children, + children, }: Readonly<{ - children: React.ReactNode; + children: React.ReactNode }>) { - return ( - - {children} - - ); + return ( + + + {children} +