# PLAN DE ACCIÓN: CORRECCIÓN DE DEFAULTS HARDCODEADOS **Fecha inicio:** _[Pendiente]_ **Fecha fin:** _[Pendiente]_ **Estado:** 🔴 NO INICIADO --- ## 📋 OBJETIVO Eliminar defaults hardcodeados del código y establecer tabla `wp_apus_theme_components_defaults` como única fuente de verdad. --- ## ⏱️ TIEMPO ESTIMADO TOTAL - **FASE 1:** 2-3 horas (Limpiar código actual) - **FASE 2:** 1 hora (Crear tabla defaults) - **FASE 3:** 3-4 horas (Corregir algoritmo) - **TOTAL:** 6-8 horas --- ## 🔄 ESTADO DEL PLAN ``` FASE 1: Limpiar Código Actual [ ] 0/15 pasos completados FASE 2: Crear Tabla Defaults [ ] 0/4 pasos completados FASE 3: Corregir Algoritmo [ ] 0/8 pasos completados ``` **Progreso total:** 0/27 pasos (0%) --- # FASE 1: LIMPIAR CÓDIGO ACTUAL **Objetivo:** Eliminar código mal implementado antes de corregir algoritmo **Duración estimada:** 2-3 horas --- ## PASO 1.1: Backup de Código Actual **Duración:** 5 min - [ ] Crear branch de backup: `git checkout -b backup-antes-limpieza` - [ ] Hacer commit de estado actual: `git commit -am "backup: estado antes de limpieza de defaults"` - [ ] Push del backup: `git push origin backup-antes-limpieza` - [ ] Volver a main: `git checkout main` - [ ] Crear branch de trabajo: `git checkout -b fix/limpiar-defaults-hardcodeados` **Verificación:** Branch `backup-antes-limpieza` existe en GitHub --- ## PASO 1.2: Listar Archivos a Eliminar del Admin Panel **Duración:** 10 min - [ ] Ejecutar: `dir admin\assets\js\component-*.js 2>nul` (listar JS componentes) - [ ] Ejecutar: `dir admin\assets\css\component-*.css 2>nul` (listar CSS componentes) - [ ] Ejecutar: `dir admin\components\component-*.php 2>nul` (listar PHP componentes) - [ ] Ejecutar: `dir admin\includes\sanitizers\class-*-sanitizer.php 2>nul` (listar sanitizers) - [ ] Documentar lista de archivos encontrados abajo **Archivos encontrados:** ``` JS: - CSS: - PHP Componentes: - Sanitizers: - ``` --- ## PASO 1.3: Eliminar Archivos JS de Componentes **Duración:** 5 min - [ ] Eliminar: `admin/assets/js/component-navbar.js` (si existe) - [ ] Eliminar: `admin/assets/js/component-topbar.js` (si existe) - [ ] Eliminar: `admin/assets/js/component-hero.js` (si existe) - [ ] Eliminar: otros archivos `component-*.js` listados arriba - [ ] Verificar que NO quedan archivos: `dir admin\assets\js\component-*.js 2>nul` **Archivos eliminados:** _[Anotar aquí]_ --- ## PASO 1.4: Eliminar Archivos CSS de Componentes **Duración:** 5 min - [ ] Eliminar: `admin/assets/css/component-navbar.css` (si existe) - [ ] Eliminar: `admin/assets/css/component-topbar.css` (si existe) - [ ] Eliminar: `admin/assets/css/component-hero.css` (si existe) - [ ] Eliminar: otros archivos `component-*.css` listados arriba - [ ] Verificar que NO quedan archivos: `dir admin\assets\css\component-*.css 2>nul` **Archivos eliminados:** _[Anotar aquí]_ --- ## PASO 1.5: Eliminar Archivos PHP de Componentes **Duración:** 5 min - [ ] Eliminar: `admin/components/component-navbar.php` (si existe) - [ ] Eliminar: `admin/components/component-top-bar.php` (si existe) - [ ] Eliminar: `admin/components/component-hero.php` (si existe) - [ ] Eliminar: otros archivos `component-*.php` listados arriba - [ ] Verificar que NO quedan archivos: `dir admin\components\component-*.php 2>nul` **Archivos eliminados:** _[Anotar aquí]_ --- ## PASO 1.6: Eliminar Sanitizers de Componentes **Duración:** 5 min - [ ] Eliminar: `admin/includes/sanitizers/class-topbar-sanitizer.php` (si existe) - [ ] Eliminar: `admin/includes/sanitizers/class-navbar-sanitizer.php` (si existe) - [ ] Eliminar: otros archivos `class-*-sanitizer.php` listados arriba - [ ] Verificar que NO quedan archivos: `dir admin\includes\sanitizers\class-*-sanitizer.php 2>nul` **Archivos eliminados:** _[Anotar aquí]_ --- ## PASO 1.7: Limpiar class-admin-menu.php **Duración:** 10 min **Archivo:** `admin/includes/class-admin-menu.php` - [ ] Leer el archivo completo - [ ] Identificar líneas que encolaron CSS de componentes (wp_enqueue_style para component-*.css) - [ ] Identificar líneas que encolaron JS de componentes (wp_enqueue_script para component-*.js) - [ ] Eliminar todas las líneas encontradas - [ ] Verificar que método `enqueue_assets()` solo encola archivos del core (admin-panel.css, admin-app.js) **Líneas eliminadas:** _[Anotar números de línea]_ --- ## PASO 1.8: Limpiar admin/pages/main.php (Parte 1: Analizar) **Duración:** 15 min **Archivo:** `admin/pages/main.php` - [ ] Leer el archivo completo - [ ] Buscar secciones de tabs de navegación (ej: Top Bar, Navbar, etc.) - [ ] Buscar secciones de tab-pane con formularios de componentes - [ ] Documentar números de línea a eliminar abajo **Secciones encontradas:** ``` Tabs navegación: Líneas: _____ a _____ Tab-pane Top Bar: Líneas: _____ a _____ Tab-pane Navbar: Líneas: _____ a _____ Otros: Líneas: _____ a _____ ``` --- ## PASO 1.9: Limpiar admin/pages/main.php (Parte 2: Eliminar) **Duración:** 10 min **Archivo:** `admin/pages/main.php` Usando los rangos de líneas identificados en PASO 1.8: - [ ] Eliminar sección de tab navegación de componentes - [ ] Eliminar sección tab-pane de Top Bar - [ ] Eliminar sección tab-pane de Navbar - [ ] Eliminar otras secciones documentadas arriba - [ ] Verificar que NO quedan referencias a componentes - [ ] Dejar SOLO estructura base del admin panel **Verificación:** Buscar "top_bar", "navbar", "component" en el archivo - NO debe encontrar nada --- ## PASO 1.10: Limpiar admin/assets/js/admin-app.js **Duración:** 15 min **Archivo:** `admin/assets/js/admin-app.js` - [ ] Leer el archivo completo - [ ] Buscar métodos `renderTopBar()`, `renderNavbar()`, etc. - [ ] Buscar referencias a componentes en método `collectFormData()` - [ ] Buscar valores hardcodeados tipo: `'Accede a más de 200,000...'` - [ ] Eliminar todos los métodos y referencias encontradas - [ ] Verificar que NO quedan fallbacks hardcodeados (ej: `|| 'default value'`) **Líneas eliminadas:** _[Anotar aquí]_ --- ## PASO 1.11: Limpiar class-settings-manager.php (Parte 1) **Duración:** 10 min **Archivo:** `admin/includes/class-settings-manager.php` - [ ] Leer método `get_defaults()` completo - [ ] Identificar sección de defaults de componentes (top_bar, navbar, etc.) - [ ] Documentar líneas a eliminar **Defaults encontrados:** ``` top_bar: Líneas _____ a _____ navbar: Líneas _____ a _____ otros: Líneas _____ a _____ ``` --- ## PASO 1.12: Limpiar class-settings-manager.php (Parte 2) **Duración:** 15 min **Archivo:** `admin/includes/class-settings-manager.php` - [ ] Eliminar método `get_defaults()` COMPLETO (se reemplazará después) - [ ] Leer método `sanitize_settings()` - [ ] Eliminar secciones de sanitización de componentes - [ ] Verificar que NO quedan referencias a top_bar, navbar, etc. **Líneas eliminadas:** _[Anotar aquí]_ --- ## PASO 1.13: Limpiar Tema (header.php y otros) **Duración:** 20 min - [ ] Leer `header.php` completo - [ ] Buscar código que lea de Settings Manager para componentes - [ ] Buscar valores hardcodeados duplicados (ej: "Accede a más de 200,000...") - [ ] Documentar qué encontraste **Código encontrado en header.php:** ``` Líneas: _____ a _____ Descripción: _______________ ``` - [ ] Revisar otros archivos del tema si es necesario - [ ] Documentar archivos revisados **Archivos del tema revisados:** - [ ] header.php - [ ] footer.php - [ ] _______ **Decisión:** ¿Eliminar código configurable del tema o dejarlo? _[Decidir con usuario antes de eliminar]_ --- ## PASO 1.14: Limpiar Base de Datos **Duración:** 5 min - [ ] Conectar a base de datos (phpMyAdmin o terminal) - [ ] Ejecutar: `SELECT * FROM wp_apus_theme_components;` - [ ] Documentar componentes encontrados: **Componentes en DB:** ``` component_name: ___________ component_name: ___________ ``` - [ ] Ejecutar: `DELETE FROM wp_apus_theme_components;` (vaciar tabla) - [ ] Verificar: `SELECT COUNT(*) FROM wp_apus_theme_components;` (debe ser 0) **Registros eliminados:** _____ --- ## PASO 1.15: Commit de Limpieza **Duración:** 5 min - [ ] Ejecutar: `git status` (ver todos los cambios) - [ ] Ejecutar: `git add .` - [ ] Ejecutar commit: ```bash git commit -m "fix: eliminar implementación incorrecta de componentes - Eliminar archivos JS/CSS/PHP de componentes mal implementados - Limpiar class-admin-menu.php de encolamiento de componentes - Limpiar admin/pages/main.php de secciones de componentes - Limpiar admin-app.js de métodos y defaults hardcodeados - Limpiar class-settings-manager.php de get_defaults() y sanitizers - Vaciar tabla wp_apus_theme_components Preparación para implementar arquitectura correcta con tabla defaults. Ref: PROBLEMA-DEFAULTS-HARDCODEADOS-ALGORITMO.md" ``` - [ ] Ejecutar: `git push origin fix/limpiar-defaults-hardcodeados` --- ## ✅ CHECKLIST FASE 1 COMPLETA - [ ] Backup creado en branch separado - [ ] Archivos de componentes eliminados (JS, CSS, PHP, Sanitizers) - [ ] class-admin-menu.php limpiado - [ ] admin/pages/main.php limpiado - [ ] admin-app.js limpiado - [ ] class-settings-manager.php limpiado - [ ] Tema revisado - [ ] Base de datos vaciada - [ ] Commit y push realizados **Estado FASE 1:** ⬜ Pendiente | 🟡 En progreso | ✅ Completada --- # FASE 2: CREAR TABLA DE DEFAULTS **Objetivo:** Implementar tabla `wp_apus_theme_components_defaults` en base de datos **Duración estimada:** 1 hora --- ## PASO 2.1: Crear Script SQL **Duración:** 10 min - [ ] Crear archivo: `admin/includes/migrations/create-defaults-table.sql` - [ ] Copiar SQL de `PROBLEMA-DEFAULTS-HARDCODEADOS-ALGORITMO.md` (líneas 418-437) - [ ] Verificar sintaxis SQL **Contenido del archivo:** ```sql CREATE TABLE IF NOT EXISTS wp_apus_theme_components_defaults ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, component_name VARCHAR(50) NOT NULL COMMENT 'Nombre del componente', config_key VARCHAR(100) NOT NULL COMMENT 'Clave de configuración', config_value TEXT NOT NULL COMMENT 'Valor por defecto extraído del tema', data_type ENUM('string','integer','boolean','array','json') NOT NULL, version VARCHAR(20) DEFAULT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY unique_default_config (component_name, config_key), INDEX idx_component_name (component_name), INDEX idx_config_key (config_key) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ``` --- ## PASO 2.2: Ejecutar SQL en Base de Datos **Duración:** 5 min **Método 1: phpMyAdmin** - [ ] Abrir phpMyAdmin - [ ] Seleccionar base de datos del tema - [ ] Ir a pestaña SQL - [ ] Copiar contenido de `create-defaults-table.sql` - [ ] Ejecutar SQL **Método 2: Terminal/CMD** - [ ] Conectar a MySQL/MariaDB - [ ] Ejecutar: `USE nombre_base_datos;` - [ ] Copiar y ejecutar SQL **Verificación:** - [ ] Ejecutar: `SHOW TABLES LIKE 'wp_apus_theme_components_defaults';` - [ ] Debe retornar la tabla --- ## PASO 2.3: Verificar Estructura de Tabla **Duración:** 5 min - [ ] Ejecutar: `DESCRIBE wp_apus_theme_components_defaults;` - [ ] Verificar columnas: - [ ] id (BIGINT) - [ ] component_name (VARCHAR 50) - [ ] config_key (VARCHAR 100) - [ ] config_value (TEXT) - [ ] data_type (ENUM) - [ ] version (VARCHAR 20) - [ ] created_at (DATETIME) - [ ] updated_at (DATETIME) - [ ] Verificar índices: - [ ] PRIMARY KEY (id) - [ ] UNIQUE (component_name, config_key) - [ ] INDEX (component_name) - [ ] INDEX (config_key) --- ## PASO 2.4: Commit de Creación de Tabla **Duración:** 5 min - [ ] Ejecutar: `git add admin/includes/migrations/create-defaults-table.sql` - [ ] Ejecutar commit: ```bash git commit -m "feat(db): crear tabla wp_apus_theme_components_defaults - Tabla para almacenar valores por defecto de componentes - Estructura normalizada (un row por campo) - Índices para optimizar búsquedas - Script SQL reutilizable en create-defaults-table.sql Ref: PROBLEMA-DEFAULTS-HARDCODEADOS-ALGORITMO.md" ``` - [ ] Ejecutar: `git push origin fix/limpiar-defaults-hardcodeados` --- ## ✅ CHECKLIST FASE 2 COMPLETA - [ ] Script SQL creado en `admin/includes/migrations/create-defaults-table.sql` - [ ] SQL ejecutado en base de datos - [ ] Tabla `wp_apus_theme_components_defaults` existe - [ ] Estructura verificada (8 columnas, 3 índices) - [ ] Commit y push realizados **Estado FASE 2:** ⬜ Pendiente | 🟡 En progreso | ✅ Completada --- # FASE 3: CORREGIR ALGORITMO **Objetivo:** Modificar archivos del algoritmo para usar tabla defaults en lugar de hardcodear valores **Duración estimada:** 3-4 horas --- ## PASO 3.1: Modificar PASO 12 del Algoritmo (Parte 1: Analizar) **Duración:** 15 min **Archivo:** `_planeacion/apus-theme/admin-panel-theme/100-modularizacion-admin/00-algoritmo/12-F03-IMPLEMENTACION-IMPLEMENTAR-ADMIN-JS.md` - [ ] Leer archivo completo - [ ] Identificar líneas con objeto `DEFAULT_CONFIG` (aprox líneas 43-51, 169-177) - [ ] Identificar líneas con fallbacks en método `render()` (aprox líneas 117-129) - [ ] Identificar líneas con botón reset (aprox líneas 196-204) - [ ] Documentar cambios necesarios **Líneas a modificar:** ``` DEFAULT_CONFIG: Líneas _____ a _____ Fallbacks render(): Líneas _____ a _____ Botón reset: Líneas _____ a _____ ``` --- ## PASO 3.2: Modificar PASO 12 del Algoritmo (Parte 2: Eliminar DEFAULT_CONFIG) **Duración:** 20 min **Archivo:** `12-F03-IMPLEMENTACION-IMPLEMENTAR-ADMIN-JS.md` - [ ] Eliminar sección que instruye crear objeto `DEFAULT_CONFIG` - [ ] Eliminar ejemplo de código con `const DEFAULT_CONFIG = {...}` - [ ] Agregar nota: "❌ NO crear objeto DEFAULT_CONFIG - Los defaults vienen de DB vía AJAX" **Texto a agregar:** ```markdown ## ❌ IMPORTANTE: NO Crear Objeto DEFAULT_CONFIG **PROHIBIDO crear objeto con defaults hardcodeados en JavaScript.** Los valores por defecto vienen de la base de datos vía AJAX. Settings Manager lee de tabla `wp_apus_theme_components_defaults`. ``` --- ## PASO 3.3: Modificar PASO 12 del Algoritmo (Parte 3: Corregir Fallbacks) **Duración:** 20 min **Archivo:** `12-F03-IMPLEMENTACION-IMPLEMENTAR-ADMIN-JS.md` - [ ] Modificar sección del método `render()` - [ ] Eliminar ejemplos con fallbacks: `config.field || 'default value'` - [ ] Reemplazar por: `config.field` (sin fallback) - [ ] Agregar nota explicando que AJAX SIEMPRE retorna datos completos (DB + defaults merged) **Ejemplo ANTES (INCORRECTO):** ```javascript bgColorInput.value = config.custom_styles?.bg_color || '#000000'; ``` **Ejemplo DESPUÉS (CORRECTO):** ```javascript bgColorInput.value = config.custom_styles?.bg_color; // NO fallback necesario - Settings Manager ya hace merge con defaults de DB ``` --- ## PASO 3.4: Modificar PASO 12 del Algoritmo (Parte 4: Botón Reset) **Duración:** 15 min **Archivo:** `12-F03-IMPLEMENTACION-IMPLEMENTAR-ADMIN-JS.md` - [ ] Modificar sección del botón "Reset to Defaults" - [ ] Cambiar de `loadConfig(DEFAULT_CONFIG)` a llamada AJAX - [ ] Agregar código para llamar endpoint que retorna defaults de DB **Código a agregar:** ```javascript // Botón Reset to Defaults resetBtn.addEventListener('click', function() { if (confirm('¿Restaurar valores por defecto?')) { // Llamar AJAX para obtener defaults de DB axios.get(apusAdminData.ajaxUrl, { params: { action: 'get_component_defaults', component: 'component_name', nonce: apusAdminData.nonce } }) .then(response => { loadConfig(response.data); // Guardar defaults como config personalizada saveForm(); }); } }); ``` --- ## PASO 3.5: Crear NUEVO PASO en Algoritmo (Poblar Defaults) **Duración:** 30 min - [ ] Crear archivo: `_planeacion/.../00-algoritmo/07B-F02-DISENO-POBLAR-DEFAULTS-DB.md` - [ ] Ubicación: DESPUÉS de PASO 7, ANTES de PASO 8 **Contenido del archivo:** ```markdown # PASO 7B: POBLAR TABLA DE DEFAULTS **Prerequisito:** PASO 7 completado (código configurable documentado) ## Objetivo Insertar valores por defecto del componente en tabla `wp_apus_theme_components_defaults`. ## 7B.1 Leer Valores Extraídos - Abrir archivo del PASO 6: `03-DOCUMENTACION-ESTRUCTURA-DATOS.md` - Identificar TODOS los campos con sus valores por defecto - Valores de textos/URLs: Del código hardcodeado actual - Valores de colores/estilos: Del CSS original del componente ## 7B.2 Generar Script SQL Crear archivo: `[componente]/defaults-insert.sql` Formato: INSERT INTO wp_apus_theme_components_defaults (component_name, config_key, config_value, data_type, version) VALUES ('[component_name]', 'enabled', '1', 'boolean', '2.1.4'), ('[component_name]', '[field1]', '[valor]', 'string', '2.1.4'), ... ## 7B.3 Ejecutar SQL - Conectar a base de datos - Ejecutar script SQL - Verificar: SELECT * FROM wp_apus_theme_components_defaults WHERE component_name='[nombre]'; ## 7B.4 Verificar - [ ] Todos los campos del PASO 6 tienen row en tabla defaults - [ ] Valores coinciden con los extraídos del código/CSS actual - [ ] data_type es correcto para cada campo ``` --- ## PASO 3.6: Modificar PASO 14 del Algoritmo (Eliminar get_defaults) **Duración:** 30 min **Archivo:** `_planeacion/.../00-algoritmo/14-F04-CIERRE-GIT-COMMITS.md` - [ ] Leer sección "14.4 Modificar Settings Manager (CRÍTICO)" - [ ] Leer subsección "Modificación 1: Agregar Defaults (línea ~146)" - [ ] Eliminar TODO el ejemplo del método `get_defaults()` con array hardcodeado (líneas ~88-123) - [ ] Reemplazar por instrucciones para leer de tabla defaults **Texto a eliminar:** ```php public function get_defaults() { return array( 'version' => APUS_ADMIN_PANEL_VERSION, 'components' => array( 'component_name' => array( 'enabled' => true, // ... defaults hardcodeados ) ) ); } ``` **Texto a agregar:** ```markdown ### Modificación: Settings Manager Lee de Tabla Defaults **❌ NO crear método get_defaults() con array hardcodeado** Los defaults ya están en tabla `wp_apus_theme_components_defaults` (insertados en PASO 7B). Settings Manager debe leer de DB, NO tener defaults hardcodeados. Ver método `get_component_config()` que hace merge automático: 1. Lee config personalizada de `wp_apus_theme_components` 2. Si no existe → Lee defaults de `wp_apus_theme_components_defaults` ``` --- ## PASO 3.7: Modificar DB Manager (Agregar get_component_defaults) **Duración:** 30 min **Archivo:** `admin/includes/class-db-manager.php` - [ ] Leer archivo completo - [ ] Buscar método `get_component($component_name)` - [ ] Copiar método y modificar para leer de tabla `_defaults` - [ ] Agregar nuevo método **Código a agregar:** ```php /** * Get component default values from defaults table * * @param string $component_name * @return array */ public function get_component_defaults($component_name) { global $wpdb; $table_name = $wpdb->prefix . 'apus_theme_components_defaults'; $results = $wpdb->get_results( $wpdb->prepare( "SELECT config_key, config_value, data_type FROM $table_name WHERE component_name = %s", $component_name ), ARRAY_A ); if (empty($results)) { return array(); } // Convertir rows a array asociativo $config = array(); foreach ($results as $row) { $config[$row['config_key']] = $this->cast_value( $row['config_value'], $row['data_type'] ); } return $config; } /** * Cast value to correct type based on data_type * * @param mixed $value * @param string $type * @return mixed */ private function cast_value($value, $type) { switch ($type) { case 'boolean': return (bool) $value; case 'integer': return (int) $value; case 'array': case 'json': return json_decode($value, true); default: return $value; } } ``` --- ## PASO 3.8: Modificar Settings Manager (get_component_config) **Duración:** 20 min **Archivo:** `admin/includes/class-settings-manager.php` - [ ] Buscar método `get_component_config($component_name)` - [ ] Modificar para leer de tabla defaults si no hay config personalizada **Código ANTES:** ```php public function get_component_config($component_name) { $settings = $this->get_settings(); $defaults = $this->get_defaults(); // ← Método hardcodeado return wp_parse_args( $settings['components'][$component_name] ?? array(), $defaults['components'][$component_name] ?? array() ); } ``` **Código DESPUÉS:** ```php public function get_component_config($component_name) { // 1. Intentar leer config personalizada $user_config = $this->db_manager->get_component($component_name); if (!empty($user_config)) { return $user_config; // Usuario ya personalizó } // 2. Si no hay personalización, leer defaults de tabla $defaults = $this->db_manager->get_component_defaults($component_name); if (!empty($defaults)) { return $defaults; // Usar defaults de DB } // 3. Error: componente sin defaults error_log("APUS Theme: No defaults found for component: {$component_name}"); return array(); } ``` --- ## ✅ CHECKLIST FASE 3 COMPLETA - [ ] PASO 12 modificado (eliminado DEFAULT_CONFIG y fallbacks) - [ ] PASO 7B creado (poblar defaults en DB) - [ ] PASO 14 modificado (eliminado get_defaults hardcodeado) - [ ] DB Manager modificado (agregado get_component_defaults) - [ ] Settings Manager modificado (lee de tabla defaults) - [ ] Todos los cambios commiteados **Estado FASE 3:** ⬜ Pendiente | 🟡 En progreso | ✅ Completada --- ## 🎯 RESUMEN FINAL Una vez completadas las 3 fases: ### ✅ Lo que se logró: 1. Código actual limpiado (sin implementaciones incorrectas) 2. Tabla `wp_apus_theme_components_defaults` creada y funcionando 3. Algoritmo corregido (sin defaults hardcodeados en JS/PHP) 4. DB Manager y Settings Manager leen de tabla defaults ### 🚀 Próximos pasos: 1. Ejecutar algoritmo CORREGIDO para primer componente (ej: Navbar) 2. Pasos 1-13: Generar documentación 3. PASO 7B: Insertar defaults en DB 4. PASO 14: Implementar código real 5. PASO 15-16: Testing y cierre --- **Última actualización:** _[Fecha]_ **Estado general:** ⬜ Pendiente | 🟡 En progreso | ✅ Completado