Changelogs
Rebranding: sitios de voto, nota legal, prefijo uw->ns y repo renombrado
15 de julio de 2026 a las 15:28adevopg · 6f52d32
Sitios de voto: los 4 apuntaban a las fichas de UltimoWoW en los rankings con SUS ids (Gtop100 94649, pingUsername 91402, etc.). No era cosmética: cada voto de nuestros jugadores subía a UltimoWoW en el ranking. Se cambian nombre e ids por un 236588 de relleno, así el enlace deja de acreditar a otro servidor. Las fichas reales de NightSpire están por crear; entonces habrá que poner sus ids. Nota legal: decía "Error 404 es la empresa que representa el servicio", heredado de ultimowow. Al renombrar la marca pasaba a afirmar que una empresa ajena representa a NightSpire, lo cual es falso. Se quita la empresa en ES y EN. Prefijo uw- (de UltimoWoW) -> ns-: 100 identificadores en 11 ficheros (clases CSS, ids de formulario, eventos y la cookie de consentimiento, que pasa a ns_cookie_consent; a los usuarios les reaparecerá el aviso una vez). Se comprobó antes que el CSS del tema no define ninguna clase uw-, así que no rompe estilos. btn-ns-form y ns-cookie-btn-customize se usan sin estar definidas, pero ya era así antes del cambio: eran clases muertas. Repo de Gitea renombrado Inna/NovaWoW -> Inna/NightSpire (era la marca vieja más visible de /changelogs, que forma la URL de cada commit). Gitea redirige la URL antigua con 301. Se actualizan el remoto y lib/changelog.ts.
Rebranding a NightSpire en toda la web
15 de julio de 2026 a las 15:15adevopg · 579396c
Marca, dominios y correos: UltimoWoW/Nova WoW -> NightSpire, cualquier URL de esos dominios -> https://www.nightspire.gg y los correos -> consultas@nightspire.gg. 98 sustituciones en 16 ficheros de textos de usuario (messages/, app/, components/). Assets: logo largo de cabecera y vídeo sustituidos por los de NightSpire (el logo nuevo es 214x28, igual que el viejo, así que no hace falta tocar el CSS). Redes: apuntan a las cuentas de NightSpire, tanto en el pie de la web como en el de los correos (que seguían enlazando a las de NovaWoW desde el porte del diseño). Cookie de sesión novawow_session -> nightspire_session. Cierra la sesión de todos los conectados una vez; se asume ahora, recién hecho el cutover. Ficheros del tema renombrados: novawow-style.css -> nightspire-style.css y novawow-main-logo-transparent.webp -> nightspire-main-logo-transparent.webp, para que la marca vieja no quede ni en las rutas. El foro externo (foro.ultimowow.com) pasa a ser el nuestro: <Link> a /forum, que respeta el idioma y no abre pestaña nueva. NO se tocan y es a propósito: - Los comentarios que nombran AzerothCore: describen el comportamiento REAL del core (límite de 12 ítems por correo, convención de baneos, SOAP...). Cambiarlos a NightSpire los volvería falsos. Además AzerothCore no aparece en la web: las 14 menciones son todas comentarios de código. - El regex de brandify() sigue buscando los nombres VIEJOS: son los que hay escritos en las noticias de la BD. - lib/changelog.ts REPO='Inna/NovaWoW': es la ruta real del repo en Gitea.
Quitar el prefijo home_ de las 41 tablas del portal
15 de julio de 2026 a las 14:49adevopg · cccc703
El prefijo venía del nombre de la app Django (`home`), jubilada y borrada hoy, así que ya no significaba nada: home_stripelog -> stripelog. La BD se sigue llamando django_wow por historia (renombrarla es otra operación). Comprobado antes de tocar nada: 0 colisiones con nombres existentes, 0 palabras reservadas (contrastado contra las 260 de MySQL), sin vistas ni triggers que dependieran de ellas. El RENAME va en una sola sentencia porque así es atómico, y MySQL reapunta solo las 4 claves ajenas entre estas tablas. 170 referencias actualizadas en 37 ficheros. Se dejó a propósito sql/drop_home_securitytoken_authuser_fk.sql sin tocar: es una migración ya aplicada y reescribirla sería falsear el historial. De paso salió un fallo previo: prices.ts consultaba `home_restoreitemprice`, una tabla que NO existe. El try/catch de priceFrom se comía el error y devolvía siempre el precio por defecto, así que el precio de restaurar objetos nunca fue configurable. Se deja documentado en el código; crear la tabla es otra decisión. Verificado tras aplicar: 0 tablas home_, las 51 siguen ahí, y el conteo exacto de filas cuadra con el volcado previo (store_item 3068, item_data 44873, stripelog 35, store_order 26, noticia 50). La web responde 200 en todas las rutas y la portada carga las noticias sin errores.
Jubilar Django: borrar el portal antiguo, la web ya la sirve Next
15 de julio de 2026 a las 14:39adevopg · 5fd006a
El cutover se hizo hoy: Caddy manda www.nightspire.gg a :3001 (Next), así que Django se quedó sin dominio y sin uso. Se comprobó antes de borrar que nada dependía de él: ninguna referencia a :8001 en Caddy, el timer de reconciliación llama a Next, DJANGO_API_BASE no lo leía ni una línea del código (se quita también de la unidad de systemd), web-next/public es autónomo (736 ficheros reales, 0 symlinks) y no hay ni una referencia a /static/. Con Django parado la web siguió dando 200 en todas las rutas. Se va: home/, novawow/, forum/, wotlk_db/, frontend/ (las islas React que Next sustituyó), static/, staticfiles/, manage.py, requirements.txt, db.sqlite3 y el Docker de Django. Se quedan docs/ y sql/: no son código Django sino documentación y esquemas, y sql/forum_schema.sql describe la BD acore_web que Next usa hoy. La BASE DE DATOS no se toca. django_wow y sus 41 tablas home_* son ahora de Next, que las consulta con SQL directo. El nombre se queda por historia. README reescrito: describía cómo montar un Django que ya no existe (venv, manage.py migrate, gunicorn, Docker).
Correos: portar el diseño del tema y unificarlos en lib/emails.ts
15 de julio de 2026 a las 14:33adevopg · 9390eef
Los correos usaban un shell inline distinto en cada remitente. Ahora salen todos de una sola maqueta, la de security_token, portada de las plantillas de Django. De las 7 de Django solo security_token y activation traían el diseño; las otras 5 eran HTML soso. Las plantillas de Django eran un volcado del DOM de Gmail. Al portarlas se quitó lo que no era diseño: los enlaces iban envueltos en el rastreador de Mailjet (079xk.mjt.lu), que además redirigía a ultimowow.com en vez de a nosotros; había un píxel de apertura, un "Click on me" oculto y atributos que mete Gmail al mostrar el correo. Las imágenes apuntaban al proxy de Gmail (ci3.googleusercontent.com), no a nuestro /static/, así que el diseño se rompía el día que Google dejara de servirlas. Ninguna URL va a fuego: todas cuelgan de SITE_URL, así que cambiar de dominio es tocar el .env. En un correo han de ser absolutas (se abre desde Gmail), así que se construyen a partir de esa variable. El logo nw-mail-logo.png daba 404: solo existía el .webp del tema, que es el de UltimoWoW (león negro + letras "UW"). El auténtico de NovaWoW, un león de acero sin letras, sobrevivía únicamente en la caché de Gmail y se recuperó de ahí (600x320 RGBA, íntegro). Verificado renderizando el original y el nuestro en un navegador y comparando: cuadran pixel a pixel. Eso destapó dos fallos que se corrigen aquí: faltaba la etiqueta <h1> de apertura, y el estilo de los párrafos de datos era el de la letra pequeña del pie (11px/17px) en vez del real (14px/21px). El activation de Django mandaba la contraseña en texto plano; aquí no se manda. mail.ts: leía EMAIL_USE_SSL pero ignoraba EMAIL_USE_TLS, así que en el puerto 587 el STARTTLS era oportunista y, si el servidor no lo ofrecía, nodemailer enviaba en claro. Ahora requireTLS lo hace obligatorio.


