## Catalogo global ### GET /games.json Devuelve el catalogo completo de novelas publicadas. ```json { "games": [ { "slug": "demo", "title": "The Question", "subtitle": "Demo oficial de Ren'Py", "engine": "renpy", "description": "...", "cover": "/games/demo/web-presplash.jpg", "version": "7.0", "author": "Ren'Py Team", "createdAt": "2026-06-14T10:35:09Z", "entryPoint": "/games/demo/index.html", "coopCoep": true } ], "updatedAt": "2026-06-14T22:07:10Z", "version": "1.0" } ``` ## Metadatos por juego ### GET /games//game.json Generado por `build-novela.sh`. Contiene metadatos y configuracion del motor. | Campo | Tipo | Descripcion | |-------|------|-------------| | `slug` | string | Identificador URL-friendly | | `title` | string | Titulo mostrado | | `subtitle` | string | Subtitulo opcional | | `engine` | string | Motor: renpy, unity, web, onscripter, umineko-ru | | `description` | string | Descripcion corta | | `cover` | string | URL de la portada | | `version` | string | Version del juego | | `author` | string | Autor | | `createdAt` | string ISO | Fecha de publicacion | | `entryPoint` | string | URL para jugar | | `coopCoep` | boolean | Si requiere headers COOP/COEP | ## meta.json de entrada Archivo opcional en `/opt/novelas/projects//meta.json`: ```json { "title": "Mi Novela", "subtitle": "Subtitulo", "description": "Descripcion.", "author": "Autor", "version": "1.0", "cover": "/games/mi-novela/cover.jpg" } ``` ## Headers HTTP ### COOP/COEP (solo Ren'Py) ``` Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp ``` Se aplican mediante snippets en `/etc/nginx/snippets/novelas-games/.conf`. ## Cache - `games.json` y `game.json`: `no-store, no-cache, must-revalidate`. - Assets estaticos: `public, immutable`, 30 dias.