Find it. Continue it. — A game-tracking app to search games, log play sessions, and finish what you start.
Checkpoint is a passion project to make it easier to track your games, log play sessions, and actually complete your backlog. Search for games (powered by IGDB), add them to your list, log time and status (in progress, completed, dropped), and see trending and latest releases—all with a dark, gaming-themed UI.
| Category | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript |
| UI / Styling | Tailwind CSS 4, MUI (Material UI) 7 (date pickers, etc.) |
| Auth & Database | Supabase (Auth, Postgres, Storage) |
| Game Data | IGDB API via Twitch OAuth2 (for search, trending, latest) |
| Animation | Framer Motion |
| 3D / Splash | React Three Fiber + Three.js (optional / startup experience) |
| Fonts | next/font: Inter, Press Start 2P (Google), Knight Warrior (local OTF in public/fonts/) |
-
Authentication
- Email magic link (Supabase OTP) and OAuth (Google, Twitch)
- Auth callback handles both
code(OAuth) andtoken_hash(magic link) for sign-in - Verify-email flow with optional manual code entry; session check redirects if already signed in
-
Home
- Hero: “Find it. Continue it.” with IGDB search (query + filters: genre, rating, year)
- Status pills: Completed / In progress / Dropped counts
- Top Trending Games and Latest Releases sections (game cards, log/edit, wishlist)
-
Navigation
- Desktop: Centered nav (Home, Log Game, Game List, Profile) + user status chip (right)
- Mobile: Hamburger menu; slide-out panel with nav links and inline “Signed in as” + Sign out
- Nav links use a DualSense-style controller hover effect (CSS mask from local SVG)
-
Profile
- Dashboard: avatar (upload/remove), username edit, total hours, session stats, top games, weekly heat grid, sign out (with confirmation)
- Avatar and username from Supabase
profiles+ Storageavatars; home page also loads avatar from profiles when not in OAuth metadata
-
Log Game
- Form to log a game session: game info (from IGDB or manual), date, minutes played, status, personal rating
- Uses MUI date picker and app state for multi-session flow
-
Game List
- Board view of games by status (e.g. in progress, completed, dropped) with filters and links to log/edit
-
Games by status
- Dynamic route
/games/[status]for viewing games in a given status
- Dynamic route
-
Footer (global)
- About the developer (link to
/about#developer), © 2026 (yellow symbol, Inter font for glyph support), Contact (mailto:sujitaworks@gmail.com), Privacy Policy (/privacy)
- About the developer (link to
-
Static / Legal
/about— About Checkpoint + “About the developer” (Sujita Roy), anchor#developer/privacy— Privacy policy (Supabase, no selling data)
-
Responsive & UX
- Mobile-first layout; hamburger nav; footer and content stack on small screens
- Controller-shaped hover on nav items (DualSense SVG mask)
- Optional controller cursor and startup gate (Three.js) for a gaming feel
overflow-x: hiddenand full-width main content on mobile to avoid empty columns
checkpoint/
├── app/
│ ├── layout.tsx # Root layout: fonts, ControllerCursor, StartupGate, Footer
│ ├── page.tsx # Home: Nav, IgdbSearch, TrendingGames, LatestReleases
│ ├── about/page.tsx # About Checkpoint + developer
│ ├── privacy/page.tsx # Privacy policy
│ ├── auth/
│ │ ├── page.tsx # Sign-in (email OTP, Google, Twitch)
│ │ ├── verify/page.tsx # Verify email code / token_hash
│ │ └── callback/route.ts # OAuth + magic link callback
│ ├── profile/page.tsx # Profile dashboard (protected)
│ ├── log-game/page.tsx # Log game form (protected)
│ ├── gamelist/page.tsx # Game list board (protected)
│ ├── games/[status]/page.tsx # Games by status
│ ├── components/ # Nav, Footer, Auth, IgdbSearch, ProfileDashboard, etc.
│ ├── lib/supabase/ # Server/client Supabase clients, env helper
│ └── api/ # API routes: igdb/search, trending, latest; wishlist; logged-games
├── public/
│ ├── fonts/ # Knight Warrior OTF
│ └── dualsense-svgrepo-com.svg # Nav hover mask
├── package.json
├── next.config.ts
├── tailwind / postcss / tsconfig
└── README.md
Create a .env.local (or equivalent) in the project root:
| Variable | Description |
|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY or NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY |
Supabase anonymous/public key |
TWITCH_CLIENT_ID |
Twitch app client ID (for IGDB API token) |
TWITCH_CLIENT_SECRET |
Twitch app client secret (for IGDB API token) |
NEXT_PUBLIC_APP_URL |
(Optional) Canonical base URL for SEO and sharing (e.g. https://checkpointapp.pro). Defaults to https://checkpointapp.pro if unset. |
-
Auth
- Enable Email (magic link) and OAuth providers (Google, Twitch) as needed.
- In Authentication → URL Configuration, add redirect URLs:
https://your-domain.com/auth/callback(e.g.https://checkpointapp.pro/auth/callback)http://localhost:3000/auth/callbackfor local dev.
- To keep users signed in longer (e.g. days/weeks instead of logging out often), in Project Settings → API → JWT Settings (or Auth → JWT expiry), increase JWT expiry (default 3600 sec = 1 hour; max 604800 = 1 week). The app’s proxy refreshes the session and stores it in long-lived cookies (400 days); a longer JWT expiry reduces how often refresh is needed.
- Optionally customize the Magic Link email template (subject/body) in Email Templates.
-
Database
- Tables used:
profiles(e.g.id,avatar_url),game_sessions, wishlist/game-list tables as per your schema. Run migrations or SQL from your Supabase project.
- Tables used:
-
Storage
- Create a bucket
avatars(or match the name in code) for profile avatars; set RLS so users can read/write their own object under theiruser.idpath.
- Create a bucket
-
Clone the repo and install dependencies:
npm install
-
Add
.env.localwith the variables above. -
Run the dev server:
npm run dev
-
Open http://localhost:3000.
Build and start production:
npm run build
npm startThe app is deployable to Vercel (or any Node host). Set the same env vars in the deployment dashboard. Production domain example: checkpointapp.pro.
Sujita Roy — About the developer · Contact: sujitaworks@gmail.com
© 2026 All rights reserved.