8 Commits

4 changed files with 1743 additions and 10 deletions

57
codex/VERSIONADO_IA.md Normal file
View File

@@ -0,0 +1,57 @@
# Versionado IA - UB24/Elementor
## Rama de trabajo
- `ai/ub24-builder-v1`
## Regla de trabajo
1. Cada cambio funcional se guarda en un commit separado.
2. Cada commit se registra con su hash.
3. Cada commit debe incluir comando de reversión rápida.
## Registro de hashes
### Baseline
- Commit: `cb99f26`
- Objetivo: crear rama y política de versionado para trabajo IA.
- Revert:
- `git revert <hash>`
- o volver a commit previo: `git reset --hard <hash_anterior>` (solo si se aprueba explícitamente)
## Convención de mensaje
- `feat(builder): ...`
- `fix(builder): ...`
- `refactor(builder): ...`
- `chore(versioning): ...`
## Flujo con Gitea
1. Trabajo local en `ai/ub24-builder-v1`.
2. Push continuo a `origin/ai/ub24-builder-v1`.
3. Merge cuando validemos en local y Raspberry.
### Correccion historial
- Commit: `fe8657e`
- Objetivo: revertir commit no deseado y mantener separacion de cambios.
- Revert:
- `git revert fe8657e`
### Fix local Elementor
- Commit: `22e564e`
- Objetivo: robustecer arranque local y carga de themes en Windows (BOM + logs seguros).
- Revert:
- `git revert 22e564e`
### Fase 1 Builder (visual pro)
- Commit: `1c04f04`
- Objetivo: consolidar estilos reutilizables y subir calidad visual en hero, features, cards y contact del preview.
- Revert:
- `git revert 1c04f04`
## URL local canonica (unificada)
- Base local: `http://127.0.0.1:5001`
- Builder local: `http://127.0.0.1:5001/elementor/1`
- Regla: usar siempre `127.0.0.1` (no `localhost`) en scripts, pruebas y documentacion local.
## Control de rama (local/remoto)
- Rama local activa: `ai/ub24-builder-v1`
- Upstream remoto: `origin/ai/ub24-builder-v1`
- Estado al registrar: local `ahead 5`
- Politica: seguir commits atomicos y luego `git push origin ai/ub24-builder-v1` por lote validado.

View File

@@ -40,7 +40,7 @@ def handle_404(e):
@app.errorhandler(Exception)
def handle_exception(e):
print(f" EXCEPCIÓN: {e}")
print(f"ERROR: EXCEPCION: {e}")
return jsonify({'success': False, 'error': str(e)}), 500
# Middleware
@@ -51,5 +51,5 @@ def add_header(response):
return response
if __name__ == '__main__':
print(f"🚀 GKACHELE SaaS Modular iniciado en puerto {PORT}")
print(f"GKACHELE SaaS Modular iniciado en puerto {PORT}")
app.run(debug=True, host='0.0.0.0', port=PORT)

View File

@@ -22,8 +22,8 @@ def scan_available_themes():
continue
try:
with open(config_path, 'r', encoding='utf-8') as f:
config = json.load(f)
with open(config_path, 'r', encoding='utf-8-sig') as f:
config = json.load(f)
themes[theme_dir] = {
'id': theme_dir,
@@ -38,7 +38,7 @@ def scan_available_themes():
'preview': f'/themes/{theme_dir}/preview.jpg' if os.path.exists(os.path.join(theme_path, 'preview.jpg')) else None
}
except Exception as e:
print(f"⚠️ Error cargando template {theme_dir}: {e}")
print(f"WARNING: Error cargando template {theme_dir}: {e}")
continue
return themes
@@ -50,10 +50,10 @@ def get_theme_config(theme_id):
return None
try:
with open(config_path, 'r', encoding='utf-8') as f:
return json.load(f)
except Exception as e:
print(f"⚠️ Error cargando config de {theme_id}: {e}")
with open(config_path, 'r', encoding='utf-8-sig') as f:
return json.load(f)
except Exception as e:
print(f"WARNING: Error cargando config de {theme_id}: {e}")
return None
def get_themes_by_rubro(rubro, user_plan='base'):
@@ -127,7 +127,7 @@ def render_gkachele_template(theme, content, site_id=None, user_id=None):
menus = get_site_menus(site_id, user_id)
widgets = get_site_widgets(site_id, user_id)
except Exception as e:
print(f"⚠️ Error obteniendo menús/widgets: {e}")
print(f"WARNING: Error obteniendo menus/widgets: {e}")
theme_template = ''
theme_path = os.path.join(THEMES_DIR, theme, 'template.html')

File diff suppressed because it is too large Load Diff