Portal multijuegos con frontend React, backend Node/Express y panel admin para gestionar catálogo de juegos.
Estado actual: Quake 3 (CPMA) funciona con stats, ranking, partidas recientes, capturas/demos correlacionadas y asociación manual protegida por token.
Plataforma multi juego, con panel de admin activado por token, permite agregar juegos, cons sus datos y media, posee recolectar capturas y estados online, ranking basado en los estats que genera el mod el propio juego, con los resultados de partidas en curso e historico, la captura y la demo de forma automatica o manual (quake 3 cpma full funcional)
Multi-game platform, with token-activated admin panel, allows adding games, their data and media, has capture and online status collection, ranking based on the stats generated by the mod and the game itself, with results of current and historical matches, capture and demo automatically or manually (quake 3 cpma fully functional)
Desarrollado con amor por GitHub Copilot (Claude Sonnet 4.5 / Chat-GPT 5.3)
🤖 AI-Powered Development for the Quake 3 Community
Just coding 4 fun !!!
| Servidor Online | Ranking | Partidas Recientes | Galeria |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- Catálogo dinámico de juegos (alta, edición y baja desde
/admin) - Página por juego con imagen de tarjeta, fondo, descripción y estado
- Estado en tiempo real para Quake 3 cpma full funcional (
/api/server/status) - Stats CPMA desde XML (ranking global, partidas históricas, top jugadores)
- Correlación automática de capturas y demos por tipo/mapa/fecha
- Asociación manual de assets por partida (solo admin con token por url/admin)
- Deploy con Docker + Nginx + Certbot (HTTPS)
- Frontend: React 18, TypeScript, Tailwind, shadcn/ui, TanStack Query, Wouter
- Backend: Node.js, Express, Drizzle ORM, PostgreSQL
- Infra: Vite, Docker Compose, Nginx, Let's Encrypt
Usa .env.example como base.
NODE_ENV=production
PORT=5001
DOMAIN=tu-dominio-o-ip
DATABASE_URL=postgres://postgres:postgres@db:5432/app_db
CERTBOT_EMAIL=tu-email@gmail.com
# Seguridad admin
ADMIN_TOKEN=pon-un-token-largo-y-seguro
# Rutas base (multijuego)
# QUAKE1_BASE_PATH=G:\Games\Quake\id1
# QUAKE2_BASE_PATH=G:\Games\Quake2\baseq2
# QUAKE3_BASE_PATH=G:\Games\Quake3\baseq3
# QUAKE3_MOD_PATH=G:\Games\Quake3\cpma
# COUNTER16_BASE_PATH=G:\Games\Counter-Strike 1.6\cstrike
# CS2_BASE_PATH=G:\Games\cs2\cs2
# MINECRAFT_BASE_PATH=G:\Games\Minecraft
# Compatibilidad (si ya usas ruta única)
QUAKE_BASE_PATH=G:\Games\Quake3\cpma
# Overrides explícitos (opcionales)
# STATS_PATH=G:\Games\Quake3\cpma\stats
# SCREENSHOTS_PATH=G:\Games\Quake3\cpma\screenshots
# DEMOS_PATH=G:\Games\Quake3\cpma\demosOpción rápida (recomendada):
setup.batsetup.bat hace todo: pide DATABASE_URL (con default local localhost:5433), crea .env si falta, pide ADMIN_TOKEN (opcional), instala dependencias y crea/actualiza tablas.
npm install
init-db.bat
start-dev.batTambién puedes usar:
npm run devSi usas npm run dev, define DATABASE_URL antes de arrancar.
Primer arranque recomendado:
init-db.bat: crea/actualiza tablas en PostgreSQL usandoDATABASE_URL- Por defecto usa
postgres://postgres:postgres@localhost:5433/app_db
docker-compose up -d --buildRequisitos mínimos para HTTPS público:
- Dominio apuntando a tu IP pública
- Puertos 80 y 443 abiertos/forwarded al host
- Panel:
/admin - El token se activa/desactiva en el panel y se guarda en
localStoragecomoadminToken - Header requerido en endpoints protegidos:
x-admin-token - Si no es válido:
403
GET /api/admin/statusGET /api/admin/configGET /api/admin/gamesPOST /api/admin/gamesPUT /api/admin/games/:idDELETE /api/admin/games/:idPOST /api/match-assets
- Nueva pestaña
Levelshotsen/adminpara gestionar imágenes por mapa. - Flujo rápido: mapa + URL y
Guardar levelshot. - Carga local de imagen con explorador (
Buscar imagen) y subida al backend. - Preview antes de guardar (archivo local o URL manual).
- Sugerencias automáticas de mapas recientes sin override.
- Sugerencia de mapa actual (si está online y no tiene override).
- Atajos:
Mapa actual,Usar URL Lvlworld,Usar URL EFSERVERS,Usar URL Q3DF,Limpiar. - Guardado rápido con tecla
Enteren campo URL.
Fuentes de levelshots utilizadas:
https://lvlworld.com/levels/<mapa>/<mapa>lg.jpghttps://efservers.com/levelshots/<mapa>.jpghttps://ws.q3df.org/images/levelshots/512x384/<mapa>.jpg(recurso alternativo, puede bloquear hotlink/preview)
Endpoints admin levelshots:
GET /api/admin/levelshotsPOST /api/admin/levelshotsDELETE /api/admin/levelshots/:mapNamePOST /api/admin/levelshots/upload
Endpoints públicos levelshots:
GET /api/levelshots/:mapNameGET /api/levelshots-files/:filename
- Stats se sincronizan de XML CPMA a PostgreSQL (sync inicial + auto-sync en runtime)
- PostgreSQL guarda partidas completas, jugadores, equipos, armas, items y powerups
- Demos/capturas manuales pueden subirse al servidor y quedan asociadas en PostgreSQL
- Correlación automática por ventana temporal ±4 min
- Script de backfill:
npm run assets:auto-associateScript de sincronización completa de stats:
npm run stats:syncEndpoints principales:
GET /api/stats/matchesPOST /api/stats/ranking/globalGET /api/stats/serverGET /api/screenshots/matchGET /api/demos/match
5001ocupado: libera el puerto antes de iniciarDATABASE_URL must be set: defineDATABASE_URLo usastart-dev.bat- No aparecen juegos en home: backend viejo; reinicia servidor actualizado
- Stats vacíos: revisa rutas CPMA (
cpma, nocmpa) ySTATS_PATH - Certbot falla validación: verifica DNS + puertos 80/443
- Falla DB revisar puerto defaul 5432 para postgres
yim.servegame.com/
├── client/ # React Frontend
├── server/ # Node.js Backend
├── shared/ # Tipos y schemas
├── docker-compose.yml
├── nginx.conf
└── README.md
Desarrollado con amor por GitHub Copilot (Claude Sonnet 4.5 / Chat-GPT 5.3)
🤖 AI-Powered Development for the Quake 3 Community
Just coding 4 fun !!!



