# Análisis inicial del proyecto — soporteHolanda

**Fecha:** 2026-07-23  
**Repositorio:** `git@gitlab.com:sistematlan/soporteholanda.git`  
**Rama actual:** `main`  
**Estado:** Proyecto en fase de arranque (scaffold + branding básico)

---

## 1. Resumen ejecutivo

**soporteHolanda** es una aplicación web nueva basada en **CodeIgniter 4** (starter app), orientada a un sistema de soporte. El repositorio aún no implementa dominio de negocio: no hay modelos, migraciones, autenticación, ni módulos funcionales. Lo que existe hoy es la base del framework, entorno Docker/Damp, assets de marca (logo y favicons) y **Tailwind CSS v4** para el frontend.

| Aspecto | Estado |
|--------|--------|
| Framework backend | CodeIgniter 4.7.4 — listo |
| Runtime / PHP | PHP ^8.2 (local 8.2.32; Docker 8.3) |
| Base de datos | Configurada (MySQLi), sin esquema de app |
| Frontend CSS | Tailwind CSS 4.3.3 — instalado y enlazado |
| UI / pantallas | Solo vista de inicio placeholder |
| Autenticación / roles | No implementado |
| API / integraciones | No implementado |
| Tests de negocio | Solo ejemplos del starter |
| Documentación de producto | Este documento (inicial) |

**Conclusión:** base técnica sólida para empezar a construir; el valor de negocio aún no está modelado en código.

---

## 2. Identidad y propósito

| Campo | Valor |
|-------|--------|
| Nombre del proyecto | soporteHolanda / soporteholanda |
| Organización (GitLab) | sistematlan |
| Dominio local (Damp) | `soporteholanda.test` |
| Base de datos local | `soporteholanda_db` |
| Título de app (env) | Configurado vía `app.title` |
| Idioma de UI (vista actual) | Español (`lang="es"`) |

El nombre y los logos (`logo_holanda.png`, `logo_holanda_nobg.png`) indican un producto de **soporte** asociado a la marca Holanda. No hay aún README de producto ni definición de módulos (tickets, usuarios, SLA, etc.).

---

## 3. Stack tecnológico

### 3.1 Backend

| Componente | Versión / detalle |
|------------|-------------------|
| PHP | ^8.2 (composer); 8.3 en imagen Docker |
| Framework | CodeIgniter 4 (`codeigniter4/framework` **v4.7.4**) |
| Servidor (Docker) | FrankenPHP 1 + Caddy (`dunglas/frankenphp:1-php8.3`) |
| Extensiones PHP (Docker) | intl, pdo_mysql, mysqli, zip, gd, exif, opcache, mbstring |
| Driver DB por defecto | MySQLi, charset `utf8mb4` |

### 3.2 Frontend

| Componente | Versión / detalle |
|------------|-------------------|
| Tailwind CSS | 4.3.3 |
| CLI de build | `@tailwindcss/cli` |
| Entrada CSS | `resources/css/app.css` |
| Salida CSS | `public/css/app.css` |
| Escaneo de clases | `app/Views/**/*.php`, `app/Controllers/**/*.php` |
| JS framework | Ninguno (sin React/Vue/Alpine) |
| Build tools | npm scripts `dev` / `build` |

### 3.3 DevOps y entorno local

| Componente | Detalle |
|------------|---------|
| Docker Compose | Servicio `app` en red externa `damp` |
| Dampfile | Proyecto FrankenPHP, dominio `soporteholanda.test` |
| Caddyfile | Document root `/app/public`, rewrites a `index.php` |
| Dockerfile | Build de imagen con extensiones y Caddy |
| Git | GitLab (sistematlan/soporteholanda) |

### 3.4 Testing

| Herramienta | Uso actual |
|-------------|------------|
| PHPUnit 10.5+ | Tests de ejemplo del starter |
| Faker | Dev dependency |
| vfsStream | Dev dependency |

Tests presentes:

- `tests/unit/HealthTest.php`
- `tests/database/ExampleDatabaseTest.php`
- `tests/session/ExampleSessionTest.php`

No hay tests de dominio de “soporte”.

---

## 4. Arquitectura actual

```
soporteHolanda/
├── app/                    # Código de aplicación (MVC CI4)
│   ├── Config/             # Configuración del framework (~45 archivos)
│   ├── Controllers/        # Home, BaseController
│   ├── Database/           # Migrations/ y Seeds/ (vacíos de lógica)
│   ├── Filters/            # Vacío (.gitkeep)
│   ├── Helpers/            # Vacío
│   ├── Libraries/          # Vacío
│   ├── Models/             # Vacío
│   ├── Views/              # welcome_message + errores CI4
│   └── Language/en/        # Validación en inglés (default starter)
├── public/                 # Document root (web)
│   ├── index.php
│   ├── css/app.css         # Tailwind compilado
│   ├── logo_holanda*.png
│   └── favicons / PWA icons
├── resources/css/          # Fuente Tailwind
├── tests/                  # PHPUnit (ejemplos)
├── vendor/                 # Composer (no versionado)
├── writable/               # cache, logs, session, uploads
├── docs/                   # Documentación del proyecto
├── docker-compose.yml
├── Dockerfile
├── Caddyfile
├── Dampfile
├── composer.json
└── package.json
```

### 4.1 Flujo de request

1. Caddy/FrankenPHP sirve desde `public/`.
2. Rutas no estáticas se reescriben a `public/index.php`.
3. `app/Config/Routes.php` define `GET /` → `Home::index`.
4. `Home` devuelve la vista `welcome_message`.
5. La vista carga Tailwind desde `public/css/app.css`.

### 4.2 Rutas

```php
// app/Config/Routes.php
$routes->get('/', 'Home::index');
```

Única ruta de aplicación. Sin grupos, filtros de auth ni API.

### 4.3 Controladores

| Clase | Responsabilidad |
|-------|-----------------|
| `BaseController` | Base abstracta; helpers/session aún comentados |
| `Home` | Renderiza la vista de inicio |

### 4.4 Seguridad (estado starter)

Filtros globales de CSRF, honeypot y secure headers **comentados** (default CI4). Filtros required del framework activos: `forcehttps`, `pagecache`, `performance`, `toolbar`.

Implicación: al añadir formularios y áreas privadas habrá que activar CSRF (y auth) de forma deliberada.

---

## 5. Configuración de entorno

### 5.1 Variables relevantes (`.env`)

Presentes y configuradas (valores omitidos en este documento):

- `CI_ENVIRONMENT`
- `app.baseURL`
- `app.title` (uso en vista de inicio)
- Conexión MySQL: hostname, database, username, password, DBDriver, port
- `encryption.key`

Plantilla base: archivo `env` del starter (sin personalizar en el repositorio de la misma forma que `.env` local).

### 5.2 Docker / Damp

- Contenedor: `soporteholanda`
- DB host en compose: `damp-db`
- Credenciales de desarrollo en compose: root/root (solo local)
- Red: `damp` (externa; depende del stack Damp)

---

## 6. Frontend y marca

### 6.1 Vista de inicio (`welcome_message.php`)

- HTML mínimo, idioma español.
- Título dinámico: `Inicio | <?= env('app.title') ?>`.
- Favicons y web manifest enlazados.
- Tailwind enlazado con `base_url('css/app.css')`.
- Cuerpo actual: texto placeholder `"vista de inicio"`.

### 6.2 Assets de marca

| Archivo | Uso aparente |
|---------|----------------|
| `public/logo_holanda.png` | Logo con fondo |
| `public/logo_holanda_nobg.png` | Logo sin fondo |
| Favicons / apple-touch / web-app-manifest | Iconografía del sitio |
| `public/site.webmanifest` | Aún con nombres genéricos (`MyWebSite` / `MySite`) |

### 6.3 Tailwind

Scripts npm:

```bash
npm run dev    # watch
npm run build  # minify → public/css/app.css
```

No hay componentes UI, layouts compartidos ni sistema de diseño documentado.

---

## 7. Historial de commits (hasta el análisis)

| Commit | Mensaje | Fecha |
|--------|---------|-------|
| `86bea09` | Initial commit | 2026-07-23 |
| `a3987c0` | Favicon update | 2026-07-23 |
| `050701a` | Tailwind installation | 2026-07-23 |

Proyecto creado el mismo día del análisis; ritmo de arranque de infraestructura y branding.

---

## 8. Madurez por capa

| Capa | Madurez | Comentario |
|------|---------|------------|
| Scaffold CI4 | Alta | Estructura estándar completa |
| Entorno Docker/Damp | Alta | Listo para desarrollo local |
| Branding estático | Media | Logos y favicons; manifest genérico |
| CSS / Tailwind | Media | Instalado; sin UI real |
| Capa de dominio | Nula | Sin modelos ni reglas de negocio |
| Persistencia de app | Nula | Sin migraciones de tablas de negocio |
| Auth / autorización | Nula | — |
| API / servicios | Nula | — |
| Tests de producto | Nula | Solo ejemplos CI4 |
| Documentación de producto | Baja | Solo este análisis + README del starter |

---

## 9. Riesgos y puntos de atención

1. **`README.md` genérico del starter** — no describe el producto soporteHolanda ni el setup real (Damp/Docker/Tailwind).
2. **`site.webmanifest` genérico** — conviene alinear nombre, theme y short_name con la marca.
3. **CSRF y filtros de seguridad desactivados** a nivel global (normal en starter; no olvidarlos al abrir formularios).
4. **Credenciales DB en `docker-compose.yml`** — aceptables en local; no reutilizar en producción.
5. **Idioma de Language/** solo `en` por defecto; la UI apunta a español — evaluar `app/Language/es` cuando haya validaciones/mensajes.
6. **`indexPage`** sigue en `index.php` en config; Caddy reescribe bien, pero conviene confirmar `baseURL` y URLs limpias en cada entorno.
7. **Sin layout base** (header/footer/nav) — las vistas futuras se beneficiarán de un layout compartido de CI4.
8. **Dependencia de red Docker `damp` externa** — el stack no arranca solo con `docker compose up` si Damp no está levantado.
9. **`package-lock.json` / node_modules** — `node_modules` ignorado; hay que ejecutar `npm install` y `npm run build` al clonar si se edita CSS.
10. **Sin definición de alcance funcional** en código o docs — riesgo de desarrollo sin límites claros.

---

## 10. Oportunidades de siguiente paso (recomendadas)

Orden sugerido para pasar de scaffold a producto:

1. **Definir alcance del MVP**  
   Ejemplos típicos de un “soporte”: tickets, usuarios, estados, prioridades, adjuntos, comentarios, catálogo de categorías, panel admin.

2. **Modelo de datos y migraciones**  
   Diseñar tablas y crear migraciones en `app/Database/Migrations`.

3. **Autenticación**  
   Login, sesión, roles (agente / admin / cliente) y filtros de acceso.

4. **Layout y UI base**  
   Layout CI4 + componentes Tailwind (nav, tablas, formularios, estados vacíos).

5. **Módulo principal (tickets o similar)**  
   CRUD, listados, detalle, filtros.

6. **Hardening**  
   CSRF global, secure headers, políticas de uploads, validación y permisos.

7. **Documentación operativa**  
   Actualizar README con setup Damp, DB, Tailwind y convenciones del equipo.

8. **Tests**  
   Reemplazar/ampliar ejemplos con tests de modelos y flujos críticos.

---

## 11. Comandos útiles (estado actual)

```bash
# Dependencias PHP
composer install

# Dependencias frontend y CSS
npm install
npm run dev      # desarrollo
npm run build    # producción

# Tests
composer test    # o: vendor/bin/phpunit

# CLI CodeIgniter
php spark

# Docker (requiere red damp)
docker compose up -d --build
```

---

## 12. Inventario de código de aplicación (no framework)

Archivos con lógica o UI de aplicación (excluyendo Config estándar y vistas de error del starter):

| Ruta | Notas |
|------|--------|
| `app/Controllers/Home.php` | Ruta `/` |
| `app/Controllers/BaseController.php` | Base sin customización real |
| `app/Views/welcome_message.php` | Placeholder + Tailwind |
| `resources/css/app.css` | Entrada Tailwind |
| `public/css/app.css` | CSS generado |
| `public/logo_holanda*.png` | Marca |
| Assets de favicon / manifest | Branding web |

**Volumen de dominio de negocio:** ~0% del código útil de producto; ~100% infraestructura y presentación mínima.

---

## 13. Conclusión

El proyecto **soporteHolanda** está en una **fase de bootstrap bien resuelta**:

- Stack moderno y coherente (CI4.7 + PHP 8.2/8.3 + FrankenPHP + MySQL + Tailwind 4).
- Entorno local Docker/Damp preparado.
- Identidad visual inicial (logos, favicons).
- CSS utility-first listo para UI.

Falta por completo la **capa de producto**: dominio, datos, auth, módulos de soporte y documentación de negocio. El siguiente hito natural es acotar el MVP y traducir ese alcance a migraciones, modelos y pantallas sobre el layout Tailwind.

---

*Documento generado como análisis técnico inicial. Debe actualizarse cuando se definan módulos, roles y el modelo de datos del sistema de soporte.*
