{
  "projectPath": "C:\\xampp\\htdocs\\xzonassite",
  "slug": "c-xampp-htdocs-xzonassite",
  "updatedAt": "2026-06-30T01:40:31.496Z",
  "phases": {
    "knowledge": {
      "status": "done",
      "completedAt": "2026-06-30T01:34:26.780Z",
      "name": "Conocimiento",
      "summary": "Explorando la estructura y archivos clave del proyecto para consolidar conocimiento preciso.\n# xzonassite — Conocimiento consolidado del proyecto\n\n> **Proyecto:** `C:\\xampp\\htdocs\\xzonassite` · **Dominio:** [xzonasvalencia.com](https://xzonasvalencia.com)  \n> **Última consolidación:** 2026-06-30 · Optimizado para Serena / knowledge local\n\n---\n\n## 1. Resumen ejecutivo\n\nPortal web de alto volumen para **anuncios eróticos en Valencia por zonas y categorías** (escorts, masajes, travestis, etc.), con SEO local agresivo y panel de gestión para anunciantes y administradores. Stack principal: **PHP 8.",
      "fullText": "Explorando la estructura y archivos clave del proyecto para consolidar conocimiento preciso.\n# xzonassite — Conocimiento consolidado del proyecto\n\n> **Proyecto:** `C:\\xampp\\htdocs\\xzonassite` · **Dominio:** [xzonasvalencia.com](https://xzonasvalencia.com)  \n> **Última consolidación:** 2026-06-30 · Optimizado para Serena / knowledge local\n\n---\n\n## 1. Resumen ejecutivo\n\nPortal web de alto volumen para **anuncios eróticos en Valencia por zonas y categorías** (escorts, masajes, travestis, etc.), con SEO local agresivo y panel de gestión para anunciantes y administradores. Stack principal: **PHP 8.2 + MySQL (mysqli, sin ORM) + JavaScript vanilla/jQuery**, front legacy con bundles minificados (`npm run minify:custom`, `build:grid-core`). Arquitectura híbrida: cientos de endpoints `api_*.php` en raíz, migración progresiva a `/api/v1/`, panel admin en `gestion-anuncios-anunciantes/`, chat PWA en `chat-unified-pwa/`. Configuración y secretos vía **`.env`** (`DB_*`, `SMTP_*`, `GOOGLE_*`, `OPENAI_*`). Despliegue oficial **GitHub Actions → SiteGround** (`develop`→staging, `main`→producción); producción **no se opera por SSH desde el agente** — solo herramientas UI del panel con informe `XZONAS_AGENT_REPORT`. QA obligatorio: `composer lint:php`, `analyse:phpstan`, `analyse:psalm`, `qa:full`.\n\n---\n\n## 2. Glosario\n\n| Término | Definición |\n|---------|------------|\n| **Anuncio** | Ficha publicada por un anunciante (fotos, texto, zona, categoría, visibilidad, chat). Tabla central del negocio. |\n| **Anunciante** | Usuario registrado que publica y gestiona anuncios (`ACCESO-ANUNCIANTE`, `MIS-ANUNCIOS`, `areaPrivada.php`). |\n| **Usuario / visitante** | Usuario final que navega, guarda favoritos y usa chat (`ACCESO-USUARIO`, `accesoWebUsers.php`). |\n| **Zona** | Barrio/distrito de Valencia para filtrar anuncios (ej. Ruzafa, Benimaclet). Geo + SEO local. |\n| **Categoría** | Tipo de servicio (chicas, chicos, travestis, masajes…). Impacta URLs SEO y filtros del grid. |\n| **Grid** | Cuadrícula Pinterest-style de anuncios en home y landings. API: `api_anuncios_grid.php` / `api_mobile_grid_v2.php`. |\n| **Créditos** | Moneda interna del anunciante para renovaciones, boosts y posicionamiento. |\n| **Boost / destacado** | Pago en créditos para subir visibilidad temporal del anuncio en el grid. |\n| **Renovación** | Extensión de vigencia del anuncio (manual o cron HTTP). Ranking en `includes/renovacion_ranking.php`. |\n| **Hub SEO** | Landing temática (`escorts-valencia`, `putas-valencia-valencia`, etc.) enrutada por `hub-seo-router.php` y `.htaccess`. |\n| **Panel / gestión** | `gestion-anuncios-anunciantes/` — backend admin, herramientas, SEO autopilot, métricas. |\n| **Herramientas frontend** | Pantallas en `gestion-anuncios-anunciantes/herramientas/` ejecutables en prod por el operador (sin SSH). |\n| **XZONAS_AGENT_REPORT** | Bloque copiable `=== XZONAS_AGENT_REPORT ===` … `=== END_XZONAS_AGENT_REPORT ===` para diagnóstico prod. |\n| **conectaDB / conectaBBDD** | Dos cadenas de conexión mysqli paralelas (portal vs panel); misma BD, implementaciones distintas. |\n| **XZONASSESSID** | Cookie/sesión propia del portal (además de OAuth Google/Apple). |\n| **Thumbs t0/t1/t2** | Variantes de imagen generadas al subir (`archivos/uploadImg.php`, `api/generate-thumbnails.php`). |\n| **SiteGround** | Hosting compartido de producción. Sin Node.js persistente; crons vía HTTP con token en header. |\n| **Serena** | MCP/LSP del agente (`.serena/project.yml`). Símbolos PHP/TS, memorias, edición quirúrgica. |\n\n---\n\n## 3. FAQ dev\n\n### ¿Cómo arranco en local?\n1. XAMPP (Apache + MySQL) apuntando a `C:\\xampp\\htdocs\\xzonassite`.  \n2. Copiar `.env.example` → `.env` (o `.env.local` para XAMPP con `root` sin password).  \n3. `composer install` y `npm install`.  \n4. Verificar `archivos/conexion/conexion.php` carga `config.php` correctamente.\n\n### ¿Dónde está la configuración de BD y secretos?\n- **`config.php`** (raíz): carga `.env` + `.env.local`, define constantes `DB_*`.  \n- **`archivos/conexion/conexion.php`**: conexión mysqli del portal.  \n- **`gestion-anuncios-anunciantes/funciones/`**: `conectaBBDD()` del panel.  \n- Nunca hardcodear claves; `.env` está en `.gitignore` y excluido del rsync.\n\n### ¿Cómo despliego a producción?\n- Flujo oficial: **`docs/deployment/github-siteground-cicd.md`**.  \n- `develop` → staging automático; `main` → producción.  \n- Workflows: `.github/workflows/deploy-siteground-*.yml`.  \n- Exclusiones: `ops/deploy/rsync-exclude.txt` (no sube `.env`, `uploads/`, `docs/`, etc.).  \n- Rollback: workflow `rollback-production-by-tag.yml`.  \n- **Ramas activas en repo:** `Dev`, `develop`, `master` (verificar cuál es la de release actual).\n\n### ¿Cómo opera el agente en producción sin SSH?\n- **Prohibido** pedir `php ops/*.php` o migraciones por terminal en SiteGround.  \n- **Obligatorio:** pantalla en `gestion-anuncios-anunciantes/herramientas/` → operador ejecuta en navegador → pega `XZONAS_AGENT_REPORT`.  \n- Docs: `docs/PROTOCOLO_HERRAMIENTAS_FRONTEND_OPERADOR.md`, `AGENTS.md`, `.serena/memories/xzonassite_operacion_sin_ssh.md`.\n\n### ¿Qué QA ejecuto tras cambiar código?\n```bash\ncomposer lint:php          # PHPCS\ncomposer analyse:phpstan   # análisis estático\ncomposer analyse:psalm     # análisis estático\ncomposer qa:full           # los tres anteriores\nnpm run minify:custom      # si tocas JS custom\nnpm run build:grid-core    # si tocas grid\nphp -l archivo.php         # syntax check puntual\n```\nEn tareas rápidas: al menos el check más cercano al área modificada.\n\n### ¿Cómo funcionan las APIs?\n- **Legacy:** `api_*.php` en raíz (ej. `api_anuncios_grid.php`, `api_detalle_anuncio.php`).  \n- **Nueva capa:** `/api/v1/` con wrappers de compatibilidad (`api/v1/README.md`).  \n- **CMS/SEO/admin:** `api_cms_*.php`, `api_seo_*.php`.  \n- Convención: `require_once` de `conexion.php`, headers JSON, `htmlspecialchars` en salida HTML.\n\n### ¿Cómo funciona auth y sesiones?\n- Sesión portal: **XZONASSESSID** + variables por rol.  \n- Admin panel: triple flag legacy (`admin_autenticado`, `adminAutorizado`, `admin_authenticated`).  \n- OAuth: Google ✅; Apple (código existe, credenciales opcionales).  \n- CSRF estricto en media; ver `.serena/memories/csrf_media_estricto_2026-02-19.md`.\n\n### ¿Dónde toco SEO y rutas?\n- **`.htaccess`** (~1300 líneas): canónicas, 301, hubs SEO, seguridad, PWA.  \n- **`hub-seo-router.php`**, landings en `seo-pages/`, sitemaps.  \n- Head term canónico: `/putas-valencia-valencia`. Host sin `www`.  \n- Crons HTTP: token en header `X-Cron-Token` o `Authorization: Bearer` (`includes/cron_gate.php`), **nunca** `?token=` en URL.\n\n---\n\n## 4. Checklist onboarding\n\n- [ ] Clonar repo en `C:\\xampp\\htdocs\\xzonassite` (o ruta XAMPP equivalente).\n- [ ] Leer `README.md` y `AGENTS.md` (5 min).\n- [ ] Configurar `.env` / `.env.local` con credenciales DB local.\n- [ ] `composer install` + `npm install`.\n- [ ] Verificar Apache sirve `https://localhost/xzonassite/` (o vhost propio).\n- [ ] Revisar índice agente: `docs/cursorCHATagent/README_INDICE.md`.\n- [ ] Consultar `docs/cursorCHATagent/TAREA_REGISTRO.md` antes de implementar (anti-duplicados).\n- [ ] Activar Serena en Cursor; revisar `.serena/project.yml` (QA, ignored_paths).\n- [ ] Ejecutar `composer qa:full` una vez para validar entorno.\n- [ ] Mapear áreas clave: `includes/`, `gestion-anuncios-anunciantes/`, `api/`, `js/`, `css/bundles/`.\n- [ ] Entender dualidad DB: `conectaDB()` vs `conectaBBDD()` — no unificar sin plan.\n- [ ] Memorizar regla prod: **herramientas UI, no SSH**.\n- [ ] Revisar `.htaccess` solo la sección relevante (no leer entero salvo tarea SEO).\n- [ ] Conocer deploy: `docs/deployment/github-siteground-cicd.md`.\n- [ ] No escanear recursivamente `vendor/`, `node_modules/`, `Core/`, `Dinamic/` sin petición explícita.\n- [ ] Logs grandes: `Get-Content -Tail 80` o lectura parcial; nunca `error.log` completo si >200 KB.\n\n---\n\n## 5. Prompts guardados\n\n### Bugfix\n\n```\n[Bugfix] En xzonassite (PHP 8.2), el endpoint api_XXX.php devuelve [error].\nArchivos sospechosos: [lista]. Analiza causa en includes/conexion y dependencias.\nImplementa fix mínimo sin romper rutas legacy. Ejecuta composer lint:php y php -l.\nResume: causa, cambio, riesgo de regresión.\n```\n\n```\n[Bugfix grid móvil] El grid en home no carga anuncios en iOS.\nRevisa api_anuncios_grid.php, js/grid-unificado-patch.js y build grid-core.\nTras editar JS: npm run build:grid-core. No tocar vendor/.\n```\n\n### Feature\n\n```\n[Feature] Añadir [funcionalidad] al panel gestion-anuncios-anunciantes/herramientas/.\nUI: Bootstrap 5 + admin-standalone-shell.css, cards con KPIs.\nSi requiere datos de prod: generar bloque XZONAS_AGENT_REPORT copiable.\nConsulta TAREA_REGISTRO.md antes de codificar.\n```\n\n```\n[Feature API] Nuevo endpoint en api/v1/ para [recurso].\nMantener wrapper legacy api_XXX.php → /api/v1/XXX.\nPrepared statements, JSON UTF-8, validación entrada. QA: composer analyse:phpstan.\n```\n\n### Refactor\n\n```\n[Refactor acotado] Unificar lógica duplicada entre [archivo A] y [archivo B].\nAlcance: solo estos archivos. Sin cambiar firmas públicas ni $_GET legacy.\nUsa find_referencing_symbols (Serena) antes/después. composer qa:full al cerrar.\n```\n\n```\n[Refactor .htaccess] Reorganizar bloque [nombre] en .htaccess sin cambiar comportamiento.\nVerifica 301 canónicas y hubs SEO existentes. Documenta reglas movidas en comentario.\n```\n\n### Deploy\n\n```\n[Deploy] Preparar cambios para staging (rama develop).\nLista archivos tocados, riesgos prod, y si requieren acción post-deploy (GSC, cron, caché).\nNo ejecutar deploy; solo checklist y verificación dry_run según github-siteground-cicd.md.\n```\n\n```\n[Rollback] El deploy de [fecha] rompió [X]. Identifica commit/tag anterior seguro.\nIndica pasos workflow rollback-production-by-tag.yml y qué validar tras rollback.\n```\n\n### QA\n\n```\n[QA full] Ejecuta composer qa:full y npm run minify:custom.\nReporta errores por archivo con línea. Corrige solo los bloqueantes del área [módulo].\nNo ampliar scope a warnings preexistentes no relacionados.\n```\n\n```\n[QA SEO post-deploy] Tras subir cambios SEO, checklist:\nsitemap-index.xml en GSC, landings paginación, manifest PWA, CrUX 28d.\nUsa docs/refactor-fullstack-2026-06/ como referencia. Sin SFTP manual salvo contingencia.\n```\n\n```\n[Auditoría salud] Ejecuta composer audit:site-health y audit:pagespeed local.\nResume hallazgos P0/P1. Para prod usa herramienta frontend del panel, no php ops/* en SiteGround.\n```\n\n---\n\n## Referencias rápidas (paths)\n\n| Recurso | Ruta |\n|---------|------|\n| Config / env | `config.php`, `.env` |\n| Conexión DB portal | `archivos/conexion/conexion.php` |\n| Funciones portal | `includes/functions.php` |\n| Panel admin | `gestion-anuncios-anunciantes/` |\n| Herramientas operador | `gestion-anuncios-anunciantes/herramientas/` |\n| Routing SEO | `.htaccess`, `hub-seo-router.php` |\n| APIs v1 | `api/v1/` |\n| Chat PWA | `chat-unified-pwa/` |\n| Deploy CI/CD | `docs/deployment/github-siteground-cicd.md` |\n| Protocolo agente | `AGENTS.md`, `docs/PROTOCOLO_HERRAMIENTAS_FRONTEND_OPERADOR.md` |\n| Serena config | `.serena/project.yml` |\n| Memorias Serena | `.serena/memories/xzonassite_estado.md` (estado feb; verificar vs repo actual) |\n\n---\n\n## Disciplina del agente (resumen Serena)\n\n1. Analizar antes de editar (`get_symbols_overview`, `find_symbol`, `find_referencing_symbols`).  \n2. Cambios quirúrgicos: `replace_symbol_body`, `insert_at_line`, `replace_lines`.  \n3. Si el requisito es ambiguo → preguntar, no asumir.  \n4. Tras cambios PHP/TS relevantes → QA indicado.  \n5. Prod SiteGround → UI operador + `XZONAS_AGENT_REPORT`, nunca SSH.  \n6. Lectura selectiva; no escanear masivamente git ni archivos modificados sin petición.  \n7. No grep recursivo en `vendor/`, `node_modules/`, `Core/`, `Dinamic/` salvo petición explícita.\n\n---\n\n*Documento listo para copiar a Serena (`write_memory`) o knowledge local del proyecto.*"
    },
    "explore": {
      "status": "done",
      "completedAt": "2026-06-30T01:40:31.495Z",
      "name": "Explorar",
      "summary": "Explorando el proyecto: estructura, entry points, stack y dependencias.\n# Análisis EXPLORAR — xzonassite (xzonasvalencia.com)\n\n> **Nota:** Serena está configurada en `.serena/project.yml` (PHP + TypeScript, QA documentado), pero **no hay servidor OAuth activo** en esta sesión móvil; el análisis se basa en lectura directa de archivos y estructura.\n\n---\n\n## 1. Estructura de carpetas (máx. 2 niveles)\n\nMonolito PHP de **~450 `.php` en raíz**, ~61 carpetas de primer nivel y submódulos funcionales dispersos.\n\n```\nxzonassite/\n├── api/                    # APIs agrupadas + router v1\n├── archivos/     ",
      "fullText": "Explorando el proyecto: estructura, entry points, stack y dependencias.\n# Análisis EXPLORAR — xzonassite (xzonasvalencia.com)\n\n> **Nota:** Serena está configurada en `.serena/project.yml` (PHP + TypeScript, QA documentado), pero **no hay servidor OAuth activo** en esta sesión móvil; el análisis se basa en lectura directa de archivos y estructura.\n\n---\n\n## 1. Estructura de carpetas (máx. 2 niveles)\n\nMonolito PHP de **~450 `.php` en raíz**, ~61 carpetas de primer nivel y submódulos funcionales dispersos.\n\n```\nxzonassite/\n├── api/                    # APIs agrupadas + router v1\n├── archivos/               # Uploads, conexión BD, controladores legacy\n├── assets/                 # Leaflet, estáticos\n├── ajax/                   # Endpoints AJAX ligeros\n├── chat-unified-pwa/       # Chat PWA (usuarios/anunciantes)\n├── chatbot/                # Bot y APIs de mensajería\n├── cron/                   # Tareas programadas (suscripciones, etc.)\n├── css/ js/ img/ fonts/    # Front legacy (~587 JS)\n├── gestion-anuncios-anunciantes/  # Panel admin (76 items)\n├── includes/               # Núcleo compartido (275 items: cms, mailer, helpers…)\n├── landings/ seo-pages/    # Landings SEO estáticas/dinámicas\n├── migrations/ ops/ scripts/  # SQL, deploy, auditorías, QA\n├── seosupertool/           # Herramientas SEO internas\n├── storage/ cache/ logs/   # Runtime, caché, logs\n├── tools/ herramientas/    # Minify, scanners, utilidades\n├── vendor/                 # Composer (Google, Stripe, QA)\n├── docs/ credentials/ private/  # Docs internas, secretos (bloqueados en prod)\n└── [~450 *.php en raíz]    # Páginas públicas + api_*.php legacy\n```\n\n**Submódulos relevantes:**\n\n| Carpeta | Rol |\n|---------|-----|\n| `gestion-anuncios-anunciantes/` | Panel admin, herramientas, SEO autopilot, `panel-backend/` |\n| `includes/` | Sesión, grid, tracking, CMS, mailer (MeekroDB), compatibilidad |\n| `ops/` | CI/auditorías, `baileys-bridge` (WhatsApp), migraciones, lab IA |\n| `chat-unified-pwa/` | PWA chat mobile-first |\n| `api/v1/` | Router API moderno (parcialmente adoptado) |\n\n**Ausencia notable:** `composer.json` declara PSR-4 `XzonasValencia\\` → `src/`, pero **`src/` no existe** en el árbol actual.\n\n---\n\n## 2. Entry points\n\n### Web pública\n\n| Entry | Función |\n|-------|---------|\n| `index.php` | Home: sesión, age gate, detección móvil/desktop, grid de anuncios |\n| `detalleFicha.php` | Ficha de anuncio (`/detalle-anuncio/{id}`) |\n| `filter-page.php` | Filtros SEO (`/filtro/{slug}`) |\n| `hub-seo-router.php` | Hubs SEO (`/escorts-valencia`, `/escorts-*-valencia`, etc.) |\n| `404.php`, `coming-soon.php` | Errores y mantenimiento |\n| `ACCESO-*.php`, `alta01*.php`, `MIS-ANUNCIOS.php` | Acceso usuarios/anunciantes |\n| `seo-pages/*.html` + `landings/` | Landings SEO por barrio/término |\n| `sitemap-*.php`, `robots-serve.php` | Sitemaps e indexación |\n\n### Routing\n\n- **`.htaccess`** (~1.290 líneas): canonical HTTPS, hubs SEO, redirecciones 301/410, sitemaps, bloqueo `private/`/`docs/`, passthrough APIs.\n- Reglas críticas: `RewriteRule ^api/v1/` y `^api_.*\\.php$` en raíz.\n\n### APIs\n\n| Capa | Ubicación | Volumen |\n|------|-----------|---------|\n| **Router v1** | `api/v1/index.php` | `/health`, `/categorias`, `/municipios`, `/zonas`, `/anuncios`, `/anuncios/:id` |\n| **APIs en carpeta** | `api/*.php` | ~35 endpoints (tracking, mobile, CMS, thumbnails…) |\n| **Legacy raíz** | `api_*.php` | **~213 archivos** (fragmentación alta) |\n| **Unificado** | `api/unified-endpoint.php` | Tracking + compliance LO 10/2022 |\n| **Mobile** | `api/mobile-api-simple.php`, `api_mobile_grid_v2.php` | Grid móvil |\n| **CMS** | `api_cms_*.php` (raíz) | Editor, SEO, bloques, preview |\n| **Chat PWA** | `chat-unified-pwa/api/*.php` | Mensajes, sesión, presencia |\n| **Panel** | `gestion-anuncios-anunciantes/api/` | Backend admin |\n\n### Admin / operaciones\n\n| Entry | Rol |\n|-------|-----|\n| `gestion-anuncios-anunciantes/index.php` | Dashboard admin (~7k líneas) |\n| `admin-panel.php`, `admin_offers.php` | Paneles auxiliares |\n| `ops/site-health-audit.php` | Auditoría de salud del sitio |\n| `cron/dunning_suscripciones.php` | Cobros recurrentes |\n\n---\n\n## 3. Stack\n\n| Capa | Tecnología |\n|------|------------|\n| **Backend** | PHP **≥8.2**, estilo procedural + clases puntuales |\n| **BD** | **MySQL/MariaDB** vía `mysqli` + **PDO** (`archivos/conexion/conexion.php`, MeekroDB en `includes/meekrodb/`) |\n| **Front** | JS legacy (~587 archivos), build con **Terser**; detección móvil (`Mobile_Detect`) |\n| **Admin UI** | Bootstrap 5 (CDN), PWA admin |\n| **Mapas** | Leaflet (`assets/leaflet/`) |\n| **Chat** | PWA propia + `chatbot/` + bridge **Baileys** (Node 20, Express) |\n| **Pagos** | **Stripe** (`stripe/stripe-php`), webhook Coinbase |\n| **Analytics/SEO** | **Google Analytics Data**, Google API Client, GSC, IndexNow, sitemaps dinámicos |\n| **Email** | SMTP propio (`mail.xzonasvalencia.com`) |\n| **IA** | OpenAI (`.env`), `api/middleware-ia/`, portal lab en `ops/lab-ia-portal/` |\n| **Hosting/CI** | **SiteGround**, despliegue **GitHub Actions** → `main` |\n| **Config** | `.env` + `.env.local`, `config.php` centralizado |\n| **QA** | PHPCS, PHPStan (nivel 6), Psalm |\n\n---\n\n## 4. Dependencias clave\n\n### `composer.json` (raíz)\n\n```json\n\"require\": {\n  \"php\": \">=8.2\",\n  \"google/analytics-data\": \"^0.23.1\",\n  \"google/apiclient\": \"2.17\",\n  \"google/apiclient-services\": \"0.365\",\n  \"stripe/stripe-php\": \"^17.6\"\n}\n```\n\n**Dev:** PHPCS, PHPStan, Psalm, Slevomat coding standard.\n\n**Scripts QA:** `lint:php`, `analyse:phpstan`, `analyse:psalm`, `qa:full`, `audit:site-health`, `validate:js-min`.\n\n### `package.json` (raíz)\n\n```json\n\"scripts\": {\n  \"minify:custom\": \"node tools/minify-custom.js\",\n  \"build:grid-core\": \"node tools/build-grid-core-bundle.js\",\n  \"build:css-grid\": \"node tools/build-css-grid-bundle.js\"\n}\n```\n\n**Dev:** eslint, terser, typescript, typescript-language-server.\n\n### Otros\n\n| Archivo | Uso |\n|---------|-----|\n| `ops/baileys-bridge/package.json` | WhatsApp: `@whiskeysockets/baileys`, express |\n| `includes/mailer/composer.json` | PHPMailer (subproyecto) |\n| `seosupertool/composer.json` | Herramientas SEO |\n| `ops/multiagent-supervisor/requirements.txt` | Python (supervisor multiagente, docs/ops) |\n\n### Variables `.env` típicas\n\n`DB_*`, `SMTP_*`, `GOOGLE_*`, `OPENAI_*`, `CORS_*`, `ENCRYPT_KEY`, `XZONAS_LAB`, `BASE_URL`.\n\n---\n\n## 5. Riesgos / deuda técnica visible\n\n| Riesgo | Detalle |\n|--------|---------|\n| **Arquitectura híbrida** | Conviven ~213 `api_*.php` legacy, router `api/v1/` incompleto y endpoints unificados; migración documentada pero **sin checkboxes completados** |\n| **`src/` vacío** | PSR-4 declarado sin implementación → autoload moderno sin uso real |\n| **`.htaccess` masivo** | >1.200 líneas de reglas SEO/seguridad; alto coste de mantenimiento y riesgo de regresiones |\n| **Archivos gigantes** | `gestion-anuncios-anunciantes/index.php` (~7k líneas), `index.php` con mucha lógica inline (mantenimiento, sesión, SEO, 404) |\n| **BD dual** | Mezcla `mysqli` + PDO + MeekroDB según módulo |\n| **PHPStan relajado** | Ignora variables indefinidas y tipos en código legacy |\n| **Secretos en repo/worktree** | `.env`, `.env.bak`, `.env.claude`, `.env.local` presentes; `bypass_secret` hardcodeado en `index.php` |\n| **Superficie de ataque amplia** | Cientos de endpoints PHP expuestos; algunos bloqueados en `.htaccess` pero muchos activos |\n| **Git muy sucio** | Cientos de archivos modificados simultáneamente → difícil revisar cambios y desplegar con confianza |\n| **Subproceeds Node/Python** | `ops/baileys-bridge`, multiagent-supervisor, docs con proyectos anidados → dependencias y despliegue heterogéneos |\n| **Caché/logs en repo** | `cache_runtime/`, logs, backups mezclados con código fuente |\n\n---\n\n## Resumen ejecutivo\n\n**xzonassite** es un **marketplace/local SEO de anuncios en Valencia** (escorts, masajes, etc.) construido como **monolito PHP 8.2** con front JS legacy, panel admin extenso, chat PWA, capa SEO agresiva (hubs, landings, sitemaps) y decenas de integraciones (Google, Stripe, SMTP, IA, WhatsApp).\n\nEl **entry point principal** es `index.php` + **`.htaccess` como router real**. Las APIs están **muy fragmentadas** (213 legacy vs. router v1 emergente). El proyecto tiene **disciplina QA configurada** (Composer + npm) pero la **deuda arquitectónica** (legacy masivo, ausencia de `src/`, archivos monolíticos) es el principal riesgo operativo.\n\n¿Quieres que profundice en algún subsistema concreto (chat PWA, panel admin, APIs móvil o SEO)?"
    }
  },
  "prompts": [],
  "notes": []
}
