Aggregates curated video game lists from journalists, critics, and the community into a single ranked dataset.
- Users can submit their own lists or transcribe ranked source lists.
- The site computes aggregate rankings across lists and categories.
- Membership tiers control list creation limits (admins are unrestricted).
Live: openvideogamedata.github.io — API: openvideogamedata.onrender.com
- Frontend: React + Vite (
client/) - Backend: ASP.NET Core Web API (.NET 8)
- Database: PostgreSQL
- Auth: Google Identity Services + JWT Bearer + Refresh Tokens
- Payments: Stripe (membership)
- External API: IGDB
-
Install .NET 8 SDK and Node.js 22+.
-
Configure backend environment variables:
Variable Description PGSQL_CONNECTIONPostgreSQL connection string IGDB_CLIENTIDIGDB client ID IGDB_CLIENTSECRETIGDB client secret GOOGLE_CLIENT_IDGoogle OAuth client ID JWT_SECRETJWT signing secret STRIPE_SECRET_KEYStripe secret key STRIPE_WEBHOOK_SECRETStripe webhook signing secret CLIENT_BASE_URLFrontend base URL (for Stripe redirects) -
Run the backend:
dotnet run
-
Create
client/.env.development:VITE_GOOGLE_CLIENT_ID=your_google_client_id VITE_API_BASE_URL=https://localhost:5124 -
Run the frontend:
cd client && npm install && npm run dev
Backend: https://localhost:5124 — Frontend: http://localhost:5173
- Frontend opens Google sign-in popup and receives an ID token.
POST /api/auth/googlevalidates the token and returns a JWT + refresh token.- Frontend stores both tokens in
localStorage. - On expiry,
POST /api/auth/refreshissues a new JWT + refresh token. POST /api/auth/logoutrevokes the refresh token.
dotnet tool install --global dotnet-ef
dotnet ef migrations add YourMigrationName
dotnet ef database update- Must represent a journalist or critic opinion, not a personal list.
- Must be enumerated and ranked.
- Must not be based on another aggregate list.
- Maximum of 15 games per list.
This is the full workflow for researching, validating, and publishing new editorial sources for any game list.
Use the /find-new-sources Claude Code skill to automate the search:
/find-new-sources <platform>
For example: /find-new-sources ps5, /find-new-sources gamecube.
The skill will:
- Read
open_data/<list>/about.csvand the corresponding JSON inclient/public/lists/critic/to detect already-registered sources. - Run web searches across editorial outlets, blocking registered domains.
- Fetch each candidate URL to verify it meets all eligibility criteria.
- Create a
temp_<sitename>.mdfile insideopen_data/<list>/for each source that passes.
A source must pass all of the following:
| Criterion | Detail |
|---|---|
| Numbered/ranked list | Must use sequential position numbers (1, 2, 3…), not genre categories |
| Journalist/critic opinion | Must represent editorial judgment — not user votes, sales data, or download counts |
| Not an aggregate | Must not re-rank games by Metacritic, OpenCritic, or any other aggregate score |
| Does not change daily | Must be a stable editorial list, not a live leaderboard |
| All-time | Must not be restricted to a specific year (e.g. "Best of 2024") |
| Max 15 games | Only the top 15 positions are extracted if the source has more |
For each temp_<sitename>.md that was created, add the source list via the admin interface or directly in the database. Each entry needs:
SourceListUrl— the full URL from the.mdfile- The game positions (1–15) mapped to game IDs
Scores are computed automatically as 16 - position (rank 1 = 15 pts, rank 15 = 1 pt).
After the new sources are registered in the database, regenerate the static JSON files consumed by the frontend:
cd ListSyncer && dotnet runThe syncer connects to the live API at https://openvideogamedata.onrender.com, fetches all lists, and writes updated JSON files to client/public/lists/. It prints a summary like:
[FINAL ] best-games-of-the-playstation-5 → ATUALIZADO (13 → 18 fontes)
[CRITIC] best-games-of-the-playstation-5 → ATUALIZADO (11 → 16 listas)
Concluído: 0 criado(s) | 2 atualizado(s) | 253 ignorado(s)
The syncer also runs automatically every Monday at 04:00 UTC via GitHub Actions.
git add client/public/lists/
git commit -m "Sync: add new critic sources for <list>"The temp_*.md files in open_data/ are working notes and can be deleted after the sources are confirmed in the database.
MIT