# JAILGAMES

Sitio web estático para publicar y descargar juegos indie del estudio JAILGAMES.
Generado con **Eleventy (11ty)** y servido con **Nginx en Docker**.

---

## Requisitos previos

- **Node.js 18+** (para el build local)
- **Docker** + **Docker Compose** (para despliegue)

---

## Instalación

```bash
npm ci
```

---

## Desarrollo local

```bash
npm run serve
```

Abre [http://localhost:8080](http://localhost:8080) en el navegador.
Eleventy reconstruye automáticamente al guardar cambios.

---

## Build estático

```bash
npm run build
```

El resultado queda en `_site/`. Para limpiar:

```bash
npm run clean
```

---

## Añadir un juego nuevo

1. **Crear el archivo YAML** del juego:
   ```
   src/games/<slug>.yaml
   ```
   Copiar de un juego existente y modificar los campos. El `slug` es el identificador URL (solo letras minúsculas, números y guiones).

2. **Crear la carpeta de imágenes:**
   ```
   static/games/<slug>/
   ```
   Copiar: `logo.png` (o `.svg`), `screenshot-1.png`, `screenshot-2.png`, ...

3. **Crear la carpeta de descargas:**
   ```
   downloads/<slug>/
   ```
   Copiar los binarios: `<slug>-v<version>-<plataforma>.<ext>`

4. **Verificar** que las rutas en el YAML coinciden exactamente con los archivos copiados.

5. **Regenerar el sitio:**
   ```bash
   npm run build
   ```

6. **Verificar localmente:**
   ```bash
   npm run serve
   ```
   Abrir [http://localhost:8080](http://localhost:8080) y comprobar el juego nuevo.

7. **Reconstruir el contenedor Docker:**
   ```bash
   docker compose up --build -d
   ```

---

## Despliegue en producción (servidor con Traefik + Portainer)

Usa `docker-compose.portainer.yml`. El flujo de trabajo es:

**1. Preparar el servidor (primera vez):**
```bash
# En el servidor, crear la estructura de volúmenes
mkdir -p /var/volumes/web_jailgames/html
mkdir -p /var/volumes/web_jailgames/nginx

# Copiar la configuración de Nginx
cp nginx.conf /var/volumes/web_jailgames/nginx/default.conf
```

**2. Build y subida del sitio (cada actualización):**
```bash
# En tu máquina de desarrollo
npm run build

# Subir _site/ al servidor (ajusta usuario e IP)
rsync -avz --delete _site/ usuario@servidor:/var/volumes/web_jailgames/html/

# Subir descargas (binarios de juegos)
rsync -avz downloads/ usuario@servidor:/var/volumes/web_jailgames/html/downloads/
```

**3. Desplegar en Portainer:**
- En Portainer → Stacks → Add stack
- Pegar el contenido de `docker-compose.portainer.yml`
- Ajustar el dominio en las labels de Traefik si es necesario
- Deploy

El sitio quedará disponible en `https://jailgames.sustancia.synology.me`.

---

## Alternativa: dentro de Apache existente

Si prefieres añadirlo como un VirtualHost más en tu Apache actual, solo necesitas copiar `_site/` al directorio del servidor y configurar el VirtualHost. No hace falta contenedor extra.

```bash
# Build local
npm run build

# Copiar al volumen de Apache (ajusta la ruta)
rsync -avz --delete _site/ usuario@servidor:/var/volumes/apache/html/jailgames/
rsync -avz downloads/ usuario@servidor:/var/volumes/apache/html/jailgames/downloads/
```

Luego añade en Apache:
```apache
<VirtualHost *:80>
    ServerName jailgames.sustancia.synology.me
    DocumentRoot /usr/local/apache2/htdocs/jailgames

    <Directory /usr/local/apache2/htdocs/jailgames>
        Options -Indexes
        AllowOverride None
        Require all granted

        # Rutas limpias (equivalente al try_files de Nginx)
        FallbackResource /jailgames/404.html
    </Directory>
</VirtualHost>
```

---

## Despliegue local (desarrollo)

```bash
docker compose up --build -d
```

Acceder en [http://localhost](http://localhost).

---

## Estructura de carpetas

```
jailgames/
├── src/
│   ├── _data/site.json        # Datos globales del sitio
│   ├── _includes/
│   │   ├── base.njk           # Layout base HTML
│   │   ├── game-card.njk      # Tarjeta de juego (home)
│   │   └── game-page.njk      # Ficha individual de juego
│   ├── games/                 # Un archivo YAML por juego
│   ├── css/style.css          # Estilos globales
│   ├── js/main.js             # JS mínimo (lightbox)
│   ├── index.njk              # Página principal
│   ├── game.njk               # Generador de fichas individuales
│   └── 404.njk                # Página de error 404
├── static/
│   ├── logo/                  # Logo del sitio
│   └── games/<slug>/          # Imágenes de cada juego
├── downloads/<slug>/          # Binarios descargables
├── _site/                     # Build generado (no versionar)
├── .eleventy.js               # Configuración de Eleventy
├── package.json
├── Dockerfile
├── docker-compose.yml
└── nginx.conf
```
