Changelogs

i18n con next-intl: raíz multilenguaje (es por defecto, /en) + textos externalizados

12 de julio de 2026 a las 22:31

adevopg · 032bd00

- next-intl 4 (compatible Next 16): routing (es default en RAÍZ sin prefijo, en con /en, localePrefix 'as-needed'), middleware, request config, navigation helpers. - Estructura app/[locale]/ (layout con <html lang>, NextIntlClientProvider, metadata SEO por idioma vía generateMetadata; page home con getTranslations). - Catálogos messages/es.json y en.json: TODOS los textos de la UI (nada hardcodeado en los .tsx, se usan con t()). Verificado: / -> español (lang=es, título ES), /en -> inglés (lang=en, título EN), datos SSR desde MySQL. Añadir idioma = locale en routing + messages/<loc>.json.




Full-stack Next.js: la home lee MySQL directamente (sin Django)

12 de julio de 2026 a las 22:23

adevopg · c36b543

Pivote a Next.js full-stack (Django saldrá del todo en el cutover). Next accede a las mismas BD MySQL que Django: - lib/db.ts: pools mysql2 (django_wow + acore_*), singleton en globalThis, creds en web-next/.env.local (gitignored, copiadas del .env de Django). - lib/home.ts: getNoticias (home_noticia), getServerStatus (home_serverselection + online desde acore_characters + TCP check + expansión por gamebuild, incl. Classic). - app/page.tsx: home SSR que llama a lib/home (ya NO a la API Django). Se elimina lib/api.ts. Verificado: con el servicio Django PARADO, la home de Next sigue sirviendo 200 con datos reales -> lee MySQL directo, Django fuera del circuito.




Fase 0 SPA/SSR: scaffold Next.js 16 (App Router) + Tailwind v4 + home SSR

12 de julio de 2026 a las 22:17

adevopg · 478a3bb

Inicia la reescritura del frontend a una app Next.js con SSR (Django pasará a ser API JSON). No toca producción: Django sigue sirviendo www; Next corre aparte en :3001. - web-next/: Next.js 16 App Router, TypeScript, Tailwind CSS v4, alias @/*. - lib/api.ts: cliente de la API Django (SSR -> 127.0.0.1:8001; navegador -> /api relativo vía Caddy). - app/page.tsx: home con SSR por petición (force-dynamic) que hace fetch de /api/home/news/ y /api/home/status/ y renderiza noticias + estado con Tailwind. - app/layout.tsx: lang=es + SEO (title/description/keywords/OpenGraph) por el Metadata API de Next (renderizado en servidor). - Servicio systemd novawow-next (next start -p 3001, DJANGO_API_BASE). Nota Next 16 (breaking): params/searchParams son Promise (await); fetch no se cachea por defecto. Verificado: SSR sirve HTML con datos reales de Django y SEO en el <head>; producción Django intacta.




Limpieza: elimina los 15 JS handlers jQuery reemplazados por las islas React

12 de julio de 2026 a las 22:06

adevopg · 81d599e

Borra los handlers de nw-js-handlers/ de los formularios ya migrados a TSX, que ninguna plantilla referencia: login, register, change_password, change_email, security_token, customize, change_race, change_faction, level_up, gold, transfer_character, revive, unstuck, rename_guild, vote_points. También quita el <script> inline de Stripe redundante en rename_guild (lo carga frontend/stripe.ts). Se conservan los aún referenciados por páginas NO migradas o stubs: my_account (paneles plegables), rename_response (rename_cancel), promo_code, trade_points, recruit, store (store_response, store_novawow_response, create_check). Verificado: check OK, la web sigue funcionando; los JS borrados dan 404 y los en uso 200.




Fase 3 (isla): recuperar ítems (restore_items) en React/TSX, flujo de 2 pasos

12 de julio de 2026 a las 22:01

adevopg · 68cfe75

restore_items_view ahora responde JSON cuando la petición es AJAX (X-Requested-With): GET con character_name -> {items}; POST recover_id -> {success, message}. Se conserva el flujo legacy (redirect+messages) para no-AJAX. RestoreItemsForm.tsx: paso 1 elegir personaje y buscar ítems borrados (SOAP), paso 2 elegir ítem y recuperarlo; refresca la lista tras recuperar. La vista pasa character_names por json_script. Verificado: check OK, render de la isla, redirige a login sin sesión.





SÍGUENOS EN