BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
Calendario de lanzamientos de videojuegos con datos de IGDB y seguimiento de los juegos que te interesan
Translation pending
GamesJavaScript · CSSGitHub @rodri-a91OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Calendario mensual de lanzamientos de videojuegos (PC, PlayStation, Xbox y Switch) con datos de IGDB. Permite marcar cada juego como me interesa, reservado, comprado o no me interesa. Los juegos más esperados (hype de IGDB) se destacan, y en Mi lista ves todos los que sigues, sean del mes que sean (p. ej. los que te interesaban y aún no has comprado).
Se instala como app (PWA) y se despliega en Vercel, con Supabase como base de datos y autenticación.
navegador ──► /api/calendar?month=YYYY-MM ──► Supabase (caché) ──► IGDB
│ ──► /api/games?ids=1,2,3 ─────────► Supabase (caché) ──► IGDB
│ ──► /api/game?id=123 ─────────────► Supabase (caché) ──► IGDB
│ (Vercel)
└──► Supabase (tracked_games, con RLS)
/api/calendar devuelve el calendario de un mes agrupado por juego.
Sigue un cache-aside: si el mes se descargó hace menos de 12 h lo lee de
Supabase; si no, lo pide a IGDB, lo guarda y borra las fechas que IGDB ya no
devuelve. Si IGDB falla, sirve la caché aunque esté caducada. Encima, el CDN
de Vercel guarda la respuesta (1 h, y hasta 24 h más mientras revalida), así
que el calendario puede llegar a tener unas 37 h de antigüedad./api/games devuelve juegos concretos con todas sus fechas, para Mi
lista. Los que llevan más de 12 h sin comprobarse los actualiza antes desde
IGDB, para que un retraso se vea aunque nadie abra el mes antiguo; si IGDB
falla, sirve la caché. Solo atiende juegos que ya están en ella; los demás se
muestran con el nombre y la carátula guardados en tracked_games./api/game devuelve la ficha de un juego (resumen, géneros, compañías,
capturas, tráiler), que se abre al pulsar una tarjeta o una fila. Se pide a
IGDB bajo demanda y se guarda 7 días en game_details. Solo atiende juegos
que ya están en la caché del calendario.| Archivo | Qué hace |
|---|---|
index.html, styles.css, app.js | Interfaz (sin build ni framework) |
theme-init.js | Aplica el tema claro u oscuro antes de pintar |
releases.js | Fecha principal, grupos de Mi lista y orden de fechas de la ficha (funciones puras) |
config.js | URL y anon key públicas de Supabase |
api/calendar.js | Endpoint del calendario de un mes |
api/games.js | Endpoint de juegos por id (Mi lista) |
api/game.js | Endpoint de la ficha de un juego |
lib/igdb.js | Descarga de IGDB y caché en Supabase |
lib/transform.js | Transformaciones de datos (funciones puras) |
lib/igdbToken.js | Token de Twitch, guardado en Supabase |
lib/supabase.js | Cliente de Supabase con la service_role key |
schema.sql | Tablas y políticas RLS (no se despliega) |
vercel.json | Cabeceras de seguridad (CSP y otras) |
test/ | Tests (no se despliegan, ver .vercelignore) |
Supabase: crea un proyecto y ejecuta schema.sql en el SQL Editor.
Crea tu usuario en Authentication → Users: la app solo tiene inicio de sesión, no registro.
Desactiva también el registro en la configuración de Authentication: la pantalla no lo ofrece,
pero con la anon key pública cualquiera podría crearse una cuenta llamando a la API.
Twitch/IGDB: registra una aplicación en https://dev.twitch.tv/console/apps (tipo Confidential) para obtener el Client ID y el Client Secret.
config.js: pon la URL y la anon key de Supabase. Son públicas;
nunca pongas aquí la service_role key. Pon también la URL en
connect-src de la CSP, en vercel.json.
Vercel: importa el repositorio y define estas variables de entorno:
| Variable | Origen |
|---|---|
SUPABASE_URL | Supabase → Project Settings → API |
SUPABASE_SERVICE_ROLE_KEY | Ídem (secreta: ignora el RLS) |
TWITCH_CLIENT_ID | Consola de Twitch |
TWITCH_CLIENT_SECRET | Consola de Twitch (secreta) |
Requiere Node 22 o superior.
npm test
Usan el test runner de Node (node:test), sin dependencias. Cubren las
funciones puras de lib/transform.js y releases.js; no tocan la red ni
Supabase.
game_time_to_beats (tiempos que envían
los jugadores de IGDB), así que solo hay datos de juegos ya publicados.
No se usa HowLongToBeat: no tiene API y su robots.txt prohíbe el
acceso automatizado sin permiso de Ziff Davis."Oct 20, 2026" es
exacta; "Q4 2026", "2026" o "TBD" son aproximadas.release_region (1 Europa, 2 Norteamérica, 5 Japón,
8 mundial…). El antiguo campo region está obsoleto y ya no viene relleno.