# OliverCG Website — Contexto del Proyecto

Web personal/profesional de OliverCG, desarrollador y consultor web con base en Granada.  
URL en producción: **https://olivercg.engineer**

---

## Stack técnico

| Capa | Tecnología |
|---|---|
| Backend | PHP puro (sin framework) |
| Frontend | HTML5, CSS3, JavaScript (jQuery) |
| Base de datos | MySQL (acceso vía PDO) |
| Servidor web | Apache + `.htaccess` |
| Idiomas | Español (por defecto) + Inglés (`/en/`) |
| Formularios | PHPMailer |
| Analytics | Google Tag Manager (GTM-KSFDXMD) |
| Captcha | reCAPTCHA Enterprise |
| Cookies | Cookie-Script CDN |
| Chat | Odoo Live Chat (oliver-cg.odoo.com) |

---

## Estructura de archivos

```
/
├── index.php                  # Homepage
├── head.php                   # <head> global compartido
├── header.php                 # Navegación global
├── footer.php                 # Footer global + scripts JS
├── 404.php                    # Página de error
├── pagina-en-mantenimiento.php
│
├── [slug-de-servicio].php     # Páginas de servicios (ES)
│   ├── desarrollo-prestashop.php
│   ├── diseno-desarrollo-tienda-online.php
│   ├── mantenimiento-web.php
│   ├── mantenimiento-prestashop.php
│   ├── mejoras-ciberseguridad.php
│   ├── seo-local-en-apple-y-google-maps.php
│   ├── consultoria-web.php
│   ├── consultoria-empresarial.php
│   ├── peritaje-informatico.php
│   ├── kit-digital.php
│   ├── formador-profesional.php
│   ├── shopify-partners.php
│   ├── odoo-erp-partners.php
│   └── reparar-homepod.php
│
├── blog.php                   # Listado blog (ES)
├── blog/                      # Artículos individuales del blog
├── portafolio-oliver-cg.php   # Portfolio
├── proyectos/                 # Páginas individuales de proyectos
│
├── en/                        # Espejo completo en inglés
│   ├── index.php
│   ├── blog/
│   ├── include/
│   └── [slug-en].php
│
├── include/                   # Lógica PHP del servidor
│   ├── conexionBD.php         # ⚠️ Credenciales DB — NO commitear
│   ├── contact-form.php
│   ├── contact-form-attachment.php
│   ├── contact-form-reservation.php
│   ├── formulario.php
│   ├── enviar-correo.php
│   ├── subscribe-form.php
│   ├── event-register-form.php
│   └── php-mailer/            # Librería PHPMailer
│
├── locale/                    # Arrays de traducciones por página
│   ├── es.php / en.php        # (general)
│   └── [pagina]-es.php / -en.php
│
├── css/
│   ├── plugins.css            # CSS de plugins (Inspiro theme)
│   ├── style.css              # CSS base del tema
│   ├── custom.css             # ⭐ Personalizaciones propias
│   ├── fonts.css
│   └── theme.css
│
├── js/
│   ├── jquery.js
│   ├── plugins.js
│   ├── functions.js
│   └── custom.js              # ⭐ JS personalizado
│
├── images/                    # Assets visuales (~226 archivos)
├── plugins/                   # Plugins JS (zoom, etc.)
├── webfonts/                  # Fuentes Font Awesome
├── wp-content/                # ⚠️ Directorio residual (revisar si eliminar)
│
├── .htaccess                  # Reglas Apache (HTTPS, URLs limpias, 301s)
├── robots.txt
├── sitemap.xml
├── site.webmanifest
└── creacion-automatica-sitemap.php  # Generador de sitemap
```

---

## Convenciones clave

### Internacionalización (i18n)
- Todas las cadenas de texto van en archivos `locale/`.
- Cada página tiene su propio archivo locale: `locale/[slug].php` (ES) y `locale/en/[slug].php` (EN).
- Los arrays disponibles son `$langArray` (textos) y `$urlArray` (URLs).
- El directorio `/en/` es un espejo completo de las páginas en inglés.

### URLs
- Las URLs no llevan extensión `.php` (eliminada vía `.htaccess`) y terminan en `/`.
- Patrón: `https://olivercg.engineer/[servicio]/`
- Inglés: `https://olivercg.engineer/en/[service]/`

### Plantilla de página
Todas las páginas siguen este patrón:
```php
<?php
require "locale/es.php";
require "locale/[pagina].php";
include "include/conexionBD.php"; // si necesita DB
$langArray['current_url_es'] = ...;
$langArray['current_url_en'] = "https://..." . "/en/[slug]/";
include "head.php";
?>
<!-- HTML de la página -->
<?php include "footer.php"; ?>
```

### Base de datos
- Motor: MySQL con charset utf8mb4.
- Tabla principal de contenidos: `ocg_cms_lang` (id_lang: 1=ES, 2=EN).
- `id_lang = 1` → ES, `id_lang = 2` → EN.
- Conexión vía PDO en `include/conexionBD.php`.

---

## Flujo de despliegue

- El repositorio es el código fuente en producción (despliegue directo vía Git al servidor).
- No hay entorno de staging documentado.
- Un solo commit inicial ("Initial commit") — sin historial de cambios granular.

---

## Notas importantes

- `include/conexionBD.php` contiene credenciales hardcodeadas → está en `.gitignore`.
- `error_log` aparece en múltiples directorios → `.gitignore` lo excluye.
- `places_cache.json` es un caché dinámico de la API de Google Places → `.gitignore`.
- El Schema.org en `head.php` referencia `olivercg.es` en lugar de `olivercg.engineer` (bug a corregir).
- El tag `og:image` está comentado como TODO en `head.php`.
- La carpeta `wp-content/` parece un residuo — confirmar si se puede eliminar.
