Files
NightSpire/README.md
T
Inna 94f9731b2c Google Analytics 4, con interruptor y respetando el consentimiento
Se añade GA4 (gtag.js) con el componente oficial `@next/third-parties`, que es lo
que recomienda el doc de Next 16 y carga el mismo gtag pero tras la hidratación.

DOS interruptores:
1. `NEXT_PUBLIC_GA_ID` en el .env (no versionado). Vacío o sin poner = no se carga
   nada. Documentada en el README.
2. El consentimiento del visitante. El sitio YA tenía un banner con la categoría
   «Analíticas» que se puede rechazar: soltar gtag en el <head> lo habría
   convertido en mentira, y con visitantes en la UE, en un problema legal.

Para lo segundo se expone `useConsent(categoría)` desde CookieConsent, que además
reacciona en caliente: `writeConsent`/`revokeConsent` ya disparaban el evento
`ns:consentchange`, así que la analítica entra en cuanto se acepta y desaparece
si se revoca, sin recargar. Arranca en `false` a propósito: hasta confirmar el
consentimiento no se carga nada.

Verificado en el build: sin consentimiento no hay ni rastro de googletagmanager
en el HTML, y la condición compilada es `id && consent ? <GoogleAnalytics/> : null`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 19:49:00 +00:00

84 lines
3.8 KiB
Markdown

# Nova WoW
Portal web para un servidor de World of Warcraft 3.4.3 basado en AzerothCore.
- **Framework:** Next.js 16 (App Router) + Tailwind, en `web-next/`
- **Idiomas:** ES/EN con next-intl
- **Bases de datos (MySQL):** `django_wow` (la del portal), `acore_auth`, `acore_characters`,
`acore_world` y `acore_web` (el foro)
> La base del portal se sigue llamando `django_wow` por motivos históricos: el portal era una app
> Django, jubilada el 2026-07-15. Sus tablas llevaban el prefijo `home_` (el nombre de la app) y se
> renombraron sin él (`home_stripelog` → `stripelog`). Next las consulta con SQL directo, sin ORM.
---
## 1. Puesta en marcha (desarrollo)
```bash
git clone https://git.nightspire.gg/Inna/NovaWoW.git
cd NovaWoW/web-next
npm install
# crear .env.local con las variables de la sección 2
npm run dev # http://127.0.0.1:3000
```
## 2. Configuración (`web-next/.env.local`)
**No se versiona** (contiene secretos).
| Variable | Descripción |
|---|---|
| `DB_USER` / `DB_PASSWORD` / `DB_HOST` / `DB_PORT` | Credenciales MySQL (compartidas por las 5 BBDD) |
| `DB_NAME_DEFAULT` | BD del portal (`django_wow`) |
| `DB_NAME_AUTH` / `DB_NAME_CHARACTERS` / `DB_NAME_WORLD` / `DB_NAME_WEB` | BBDD de AzerothCore y del foro |
| `SESSION_SECRET` | Firma de la sesión |
| `SITE_URL` | Raíz pública del sitio. **De aquí cuelgan todos los enlaces e imágenes de los correos**, así que cambiar de dominio es tocar solo esta variable |
| `EMAIL_*` | SMTP (hoy Proton Mail, `smtp.protonmail.ch:587` con STARTTLS). `EMAIL_HOST_USER` es además el remitente, y Proton exige que coincida con la dirección del token |
| `AC_SOAP_*` | Conexión SOAP a AzerothCore (envío de ítems, etc.) |
| `STRIPE_*` / `SUMUP_*` | Pasarelas de pago |
| `NEXT_PUBLIC_TURNSTILE_SITE_KEY` / `TURNSTILE_SECRET_KEY` | Captcha de Cloudflare |
| `ADMIN_EMAILS` / `ADMIN_GMLEVEL` | Acceso al panel de administración |
| `CRON_SECRET` | Protege el endpoint de reconciliación de SumUp |
| `NEXT_PUBLIC_GA_ID` | Google Analytics 4 (p. ej. `G-XXXXXXXXXX`). **Vacío o sin poner = analítica desactivada**, no se carga nada. Además, aunque esté puesta, solo se carga si el visitante acepta la categoría «Analíticas» del banner de cookies. Al ser `NEXT_PUBLIC_*` se incrusta en el build: activar o desactivar exige `npm run build` + reinicio |
## 3. Producción
- **Servicio:** `novawow-next.service``next start -p 3001`
- **Proxy:** Caddy. `nightspire.gg` redirige a `www.nightspire.gg`, que va a `127.0.0.1:3001`;
`next.nightspire.gg` apunta al mismo sitio.
- **Timer:** `novawow-dpoints-reconcile.timer` llama cada 2 min a `/api/dpoints/reconcile`
(SumUp no manda webhooks, así que se reconcilia sondeando).
```bash
cd web-next && npm run build && systemctl restart novawow-next
```
## 4. Estructura
```
web-next/
app/[locale]/ páginas (una carpeta por ruta)
components/ componentes React
lib/ acceso a datos y lógica (SQL directo, sin ORM)
messages/ traducciones ES/EN
public/ estáticos, incluido el tema nw-ryu
sql/db2/ utilidades para leer los DB2 del cliente 3.4.3
docs/ documentación (foro, migración a 3.4.3)
sql/ esquemas y semillas (foro, precios, etc.)
```
## 5. Notas
- En 3.4.3 **no existe `item_template`**: los datos de ítems salen de los `.db2` del cliente
(ver `web-next/sql/db2/`).
- La tienda vive en `/store-<realm>` en minúsculas (p. ej. `/store-trinity`); `/store` a secas da 404.
- Los correos se construyen en `web-next/lib/emails.ts`: una sola maqueta compartida por las 8
plantillas, con todas las URLs derivadas de `SITE_URL`.
## 6. Seguridad
- Los secretos que estuvieron hardcodeados en el historial de git deben **rotarse**: contraseña de
MySQL/SOAP, credenciales SMTP y claves de Stripe/SumUp.
- Ni `.env.local` ni ningún fichero con secretos se versionan.