GameListr is a Next.js app for building video game tier lists. Users can search games through IGDB, drag titles into S-F tiers, check extra game info including HowLongToBeat data, and save lists to Firebase.
- Search for games by title through the
/api/searchroute backed by IGDB - Add games to a staging area, then drag them into tier rows
- View release date, rating, genres, platforms, and HowLongToBeat estimates
- Create private saved lists tied to a Firebase-authenticated user
- Browse saved lists and open a dedicated detail page for each one
- Delete saved lists from the dashboard
- Next.js 13 (Pages Router)
- React 18
- styled-components
- Firebase Authentication
- Cloud Firestore
- IGDB API
- HowLongToBeat lookup via the local
/api/hltbroute
- Install dependencies:
npm install- Create
.env.localwith the required values:
NEXT_PUBLIC_FIREBASE_API_KEY=
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
NEXT_PUBLIC_FIREBASE_PROJECT_ID=
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
NEXT_PUBLIC_FIREBASE_APP_ID=
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=
IGDB_CLIENT_ID=
IGDB_CLIENT_SECRET=- Start the dev server:
npm run dev- Open
http://localhost:3000
npm run dev
npm run build
npm run start
npm run lint/landing page/newlisttier-list editor/mylistsauthenticated user dashboard for saved lists/mylists/[listId]saved list detail page/auth/loginemail/password login/auth/signupemail/password signup
/api/searchgets a Twitch app token and queries IGDB for game metadata and cover art/api/hltblooks up playtime estimates from HowLongToBeat and caches results in memory
Saved lists are stored in Firestore under:
users/{uid}/lists/{listId}
Each list document contains:
nametierGamesstagedGamescreatedAtupdatedAt
- Auth state is shared through
context/StateContext.js - Firebase setup lives in
backend/Firebase.js - Firestore list helpers live in
backend/Database.js - There is no automated test suite in the repo right now
npm run lintcurrently opens Next.js ESLint setup because an ESLint config has not been committed yet