{"id":29452555,"url":"https://github.com/miguel-devops/chatbot-demo","last_synced_at":"2026-04-13T03:04:01.362Z","repository":{"id":319560438,"uuid":"1066142691","full_name":"Miguel-DevOps/chatbot-demo","owner":"Miguel-DevOps","description":"An educational blueprint for evolving a full-stack chatbot (PHP, React) from prototype to production using clean architecture and strategic refactoring.","archived":false,"fork":false,"pushed_at":"2026-02-09T22:11:17.000Z","size":739,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-10T02:10:02.118Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Miguel-DevOps.png","metadata":{"files":{"readme":"README.es.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-29T04:51:44.000Z","updated_at":"2026-02-09T22:11:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"7a67a9ff-1286-4066-bc54-daa74712ceae","html_url":"https://github.com/Miguel-DevOps/chatbot-demo","commit_stats":null,"previous_names":["miguel-devops/chatbot-demo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Miguel-DevOps/chatbot-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miguel-DevOps%2Fchatbot-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miguel-DevOps%2Fchatbot-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miguel-DevOps%2Fchatbot-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miguel-DevOps%2Fchatbot-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Miguel-DevOps","download_url":"https://codeload.github.com/Miguel-DevOps/chatbot-demo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miguel-DevOps%2Fchatbot-demo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31737850,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-12T22:19:12.206Z","status":"online","status_checked_at":"2026-04-13T02:00:06.623Z","response_time":93,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","automation","backend","chatbot","frontend","multilingual","open-source","php","portable","react","tailwindcss","typescript","vite","wordpress"],"created_at":"2025-07-13T22:09:02.960Z","updated_at":"2026-04-13T03:04:01.356Z","avatar_url":"https://github.com/Miguel-DevOps.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🤖 Chatbot Demo\n\n**Un blueprint educativo de chatbot que demuestra arquitectura de software evolutiva**  \n_Código limpio • Pruebas exhaustivas • Estrategia progresiva de despliegue_\n\n[![MIT License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)](./LICENSE)\n[![CI/CD Pipeline](https://img.shields.io/badge/CI%2FCD-GitHub%20Actions-blue?style=for-the-badge\u0026logo=githubactions)](#)\n[![Tests](https://img.shields.io/badge/Tests-99%20Passing-brightgreen?style=for-the-badge)](#pruebas-y-calidad)\n[![Architecture Status](https://img.shields.io/badge/Status-Blueprint%20Educativo-orange?style=for-the-badge)](#vision)\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n![React](https://img.shields.io/badge/React-19.2-20232A?style=for-the-badge\u0026logo=react\u0026logoColor=61DAFB)\n![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178C6?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)\n![PHP](https://img.shields.io/badge/PHP-8.1+-777BB4?style=for-the-badge\u0026logo=php\u0026logoColor=white)\n![Slim Framework](https://img.shields.io/badge/Slim-Framework%204-719E40?style=for-the-badge)\n![Docker](https://img.shields.io/badge/Docker-Ready-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white)\n\n\u003c/div\u003e\n\n## 📋 Índice\n\n- [🎯 Visión del proyecto](#-visión-del-proyecto)\n- [⚡ Inicio rápido](#-inicio-rápido)\n- [🏗️ Niveles de despliegue y arquitectura](#️-niveles-de-despliegue-y-arquitectura)\n- [🗺️ Hoja de ruta estratégica](#️-hoja-de-ruta-estratégica)\n- [🏛️ Decisiones arquitectónicas clave](#️-decisiones-arquitectónicas-clave)\n- [📊 Observabilidad y monitorización](#-observabilidad-y-monitorización)\n- [🔧 Configuración y seguridad](#-configuración-y-seguridad)\n- [📚 Documentación](#-documentación)\n- [🧪 Pruebas y calidad](#-pruebas-y-calidad)\n- [🤝 Contribuir](#-contribuir)\n- [📄 Licencia](#-licencia)\n- [📄 English Documentation](./README.md)\n\n## 🎯 Visión del proyecto\n\nEste proyecto actúa como un **blueprint educativo** para evolucionar una aplicación de chatbot desde una prueba de concepto hasta un despliegue empresarial. Muestra arquitectura limpia, pruebas exhaustivas y patrones de evolución arquitectónica mediante **restricciones intencionales** que reproducen retos reales de desarrollo.\n\n**Enfoque educativo:** En lugar de presentar una solución «perfecta», esta base de código incluye limitaciones arquitectónicas deliberadas que crean oportunidades de aprendizaje para una evolución sistemática. Cada restricción enseña lecciones concretas sobre escalabilidad, gestión de estado y consideraciones de despliegue.\n\n**Estado actual:** Totalmente funcional con alta calidad de código (99 tests pasando, 95%+ cobertura), pruebas exhaustivas y prácticas modernas de desarrollo. Preparado para desarrollo, demostraciones y despliegues educativos, con una ruta clara hacia producción empresarial.\n\n## ⚡ Inicio rápido\n\n### 🐳 Método 1: Docker (recomendado)\n\nLa forma más rápida de ejecutar toda la aplicación:\n\n```bash\n# Clona y arranca\ngit clone https://github.com/Miguel-DevOps/chatbot-demo.git\ncd chatbot-demo\ncp .env.example .env\n# Edita .env con tu GEMINI_API_KEY\n\n# Inicia todo con Docker\ndocker-compose up --build\n```\n\n**Accesos:**\n\n- Frontend: http://localhost:3000\n- API: http://localhost:8080\n- Documentación API: http://localhost:8080/docs\n\n### 🛠️ Método 2: Instalación manual (educativa)\n\nPara desarrolladores que quieren entender la pila:\n\n**Requisitos previos:**\n\n```bash\n# Versiones requeridas\nPHP \u003e= 8.1.0 (extensiones: json, mbstring, pdo, sqlite3, curl, openssl)\nNode.js \u003e= 18.0.0\npnpm \u003e= 8.0.0\n```\n\n**Instalación:**\n\n```bash\n# 1. Instala dependencias\ncomposer install --working-dir=api\npnpm install\n\n# 2. Configura entorno\ncp .env.example .env\n# Edita .env con tu configuración\n\n# 3. Arranca servidores de desarrollo\npnpm dev                                    # Frontend (http://localhost:5173)\n# Note: php -S está depreciado - usa Docker para desarrollo apropiado\n```\n\n\u003e 🚨 **DEPRECIADO**: `php -S` crea divergencia de entornos y ya no se recomienda. Usa `docker-compose up` para desarrollo que coincida con producción.\n\n## 🏗️ Niveles de despliegue y arquitectura\n\n### 📊 Matriz de estrategia de despliegue\n\n| **Nivel**     | **Caso de uso**          | **Infraestructura**    |             **Estado** | **Almacenamiento de estado** | **Contenido**       |\n| ------------- | ------------------------ | ---------------------- | ---------------------: | ---------------------------- | ------------------- |\n| **Nivel 0**   | Desarrollo/Demo          | Docker Compose         |           ✅ **Listo** | Archivos SQLite              | Archivos Markdown   |\n| **Nivel 0.5** | Hosting compartido / VPS | Apache/Nginx + FPM     | 🟡 **Requiere Fase 2** | MySQL/PostgreSQL             | Base de datos       |\n| **Nivel 1**   | VPS dedicado             | Docker + Base de datos | 🟡 **Requiere Fase 2** | Base de datos externa        | Base de datos / CMS |\n| **Nivel 2**   | Empresa / Cloud-native   | Kubernetes + Redis     | 🔴 **Requiere Fase 3** | Cluster Redis                | Headless CMS        |\n\n### 🏛️ Arquitectura objetivo (Nivel 2)\n\n```mermaid\ngraph TB\n    subgraph \"Frontend\"\n        React[React App] --\u003e CDN[CDN]\n    end\n    \n    subgraph \"Load Balancer\"\n        LB[Nginx/ALB] --\u003e API1[API Pod 1]\n        LB --\u003e API2[API Pod 2]\n        LB --\u003e API3[API Pod N]\n    end\n    \n    subgraph \"Capa de estado\"\n        API1 --\u003e Redis[(Redis Cluster)]\n        API2 --\u003e Redis\n        API3 --\u003e Redis\n    end\n    \n    subgraph \"Contenido \u0026 AI\"\n        API1 --\u003e CMS[Headless CMS]\n        API1 --\u003e Gemini[Google Gemini]\n        API2 --\u003e CMS\n        API3 --\u003e CMS\n    end\n    \n    subgraph \"Observabilidad\"\n        API1 --\u003e Monitoring[Prometheus/Grafana]\n        API2 --\u003e Logs[ELK/Loki]\n        API3 --\u003e Tracing[Jaeger]\n    end\n```\n\n### 🚨 Advertencias de despliegue\n\n**Nivel 0 (actual):** Ideal para desarrollo, demos y aprendizaje. **No es apto para producción** por dependencias en el sistema de archivos.\n\n**Nivel 0.5 - Retos:** El hosting compartido requiere configurar correctamente permisos de archivos, PHP-FPM y conectividad a base de datos. La dependencia actual en SQLite impide el escalado horizontal.\n\n**Preparación para producción:** Los niveles 1+ requieren completar la Fase 2 (abstracción de estado) y la Fase 3 (contenedorización/orquestación).\n\n## 🗺️ Hoja de ruta estratégica\n\n### ✅ Fase 1: Fundación (Completa)\n\n- **Arquitectura limpia:** Principios SOLID, inyección de dependencias, cumplimiento PSR\n- **Pruebas exhaustivas:** Unitarias + Integración + E2E con cobertura objetivo alta\n- **Pila moderna:** React 19, TypeScript 5.9, PHP 8.1+, Slim Framework 4\n- **CI/CD:** Tests automatizados, auditorías de seguridad, validación OpenAPI\n- **Experiencia de desarrollador:** Hot reload, tipado, linting, formato de código\n\n### 🚧 Fase 2: Abstracción de estado (En progreso)\n\n**Objetivo:** Eliminar dependencias en el sistema de archivos para habilitar Nivel 0.5-1\n\n**Tareas críticas:**\n\n- **Interfaz StateStore:** Extraer limitador de tasas de SQLite para soportar Redis/MySQL\n- **Interfaz ContentStore:** Migrar la base de conocimiento de archivos a base de datos/CMS\n- **Migraciones de base de datos:** Implementar Phinx o similar para gestión de esquemas\n- **Gestión de configuración:** Externalizar valores hardcodeados a variables de entorno\n\n**Habilita:** Hosting compartido, despliegue en VPS, preparación para escalado horizontal\n\n### 📋 Fase 3: Madurez operacional (Planificada)\n\n**Objetivo:** Despliegue empresarial con observabilidad y seguridad\n\n**Características:**\n\n- **Contenerización:** Builds multi-stage Docker, manifiestos Kubernetes\n- **Observabilidad:** Logging estructurado, métricas (Prometheus), trazas distribuidas\n- **Seguridad:** OAuth2/OIDC, gestión de JWT, marco de validación de entradas\n- **Automatización:** Helm, GitOps, escalado automático\n\n## 🏛️ Decisiones arquitectónicas clave\n\n| **Tecnología**            | **Elección**          | **Alternativa**  | **Compromiso**                                                                                 |\n| ------------------------- | --------------------- | ---------------- | ---------------------------------------------------------------------------------------------- |\n| **Framework backend**     | Slim 4                | Laravel/Symfony  | Sacrificamos rapidez de scaffolding por transparencia arquitectónica y cumplimiento PSR        |\n| **Frontend**              | React 19 + TypeScript | Vue/Angular      | Aceptamos curva de aprendizaje por seguridad en tiempo de compilación y madurez del ecosistema |\n| **Gestión de estado**     | TanStack Query        | Redux/Zustand    | Adoptamos complejidad de cache para sincronización automática de server state                  |\n| **Contenedor DI**         | PHP-DI                | DI del framework | Elegimos lo explícito sobre lo implícito para mejor testabilidad y trazabilidad                |\n| **Estrategia de pruebas** | PHPUnit + Vitest      | Ecosistema único | Mantuvimos separación de responsabilidades a costa de complejidad de herramientas              |\n\n\u003e **ADRs completas:** Decisiones arquitectónicas detalladas con contexto y rationale se documentan en `/docs/ADRs/` (en progreso)\n\n## 📊 Observabilidad y monitorización\n\n### 🚀 **Stack completo de observabilidad**\n\nEl proyecto incluye una infraestructura de observabilidad lista para producción con recolección de métricas, visualización y trazabilidad distribuida.\n\n#### **🎯 Inicio rápido con observabilidad**\n\n```bash\n# Desarrollo con stack completo de monitorización\npnpm dev:monit:up\n\n# Producción con observabilidad\npnpm prod:monit:up\n\n# Acceder a las interfaces de monitorización\nopen http://localhost:3000    # Grafana (admin/admin)\nopen http://localhost:9090    # Prometheus\nopen http://localhost:16686   # Jaeger UI\n```\n\n#### **📈 Arquitectura de monitorización**\n\n```\nCapa de aplicación:\n┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐\n│   Nginx Proxy   │───▶│  Chatbot API    │───▶│ OpenTelemetry  │\n│     :80/443     │    │    :9000        │    │   Collector     │\n└─────────────────┘    └─────────────────┘    └─────────────────┘\n                                │                       │\n                                ▼                       ▼\nRecolección métricas:      ┌─────────────────┐    ┌─────────────────┐\n                          │   Prometheus    │    │     Jaeger      │\n                          │     :9090       │    │    :16686       │\n                          └─────────────────┘    └─────────────────┘\n                                │\n                                ▼\nVisualización:             ┌─────────────────┐\n                          │    Grafana      │\n                          │     :3000       │\n                          └─────────────────┘\n```\n\n#### **🔍 Métricas disponibles**\n\n**Métricas de rendimiento API:**\n\n- `chatbot_api_http_requests_total` - Contador de requests por endpoint, método, estado\n- `chatbot_api_http_request_duration_seconds` - Histogramas de latencia de requests\n- Tasa de requests por segundo (promedio 5 minutos)\n- Tasas de error por endpoint y código de estado\n\n**Métricas del sistema:**\n\n- Uso de memoria y límites\n- Utilización de CPU\n- Uso de disco y I/O\n- Throughput de red\n\n#### **📊 Dashboards preconfigurados**\n\n**Dashboard resumen API** (`/monitoring/grafana/dashboards/`)\n\n- Tasa de requests HTTP y latencia\n- Seguimiento de tasas de error (respuestas 4xx, 5xx)\n- Top endpoints por tráfico y latencia\n- Utilización de recursos del sistema\n\n**Métricas en tiempo real disponibles:**\n\n```bash\n# Probar el endpoint de métricas\ncurl http://localhost/api/v1/metrics\n\n# Consultar Prometheus directamente\ncurl \"http://localhost:9090/api/v1/query?query=chatbot_api_http_requests_total\"\n```\n\n#### **📋 Servicios del stack de monitorización**\n\n| **Servicio**                | **Puerto** | **Propósito**                          | **Estado**   |\n| --------------------------- | ---------- | -------------------------------------- | ------------ |\n| **Prometheus**              | 9090       | Recolección y almacenamiento métricas  | ✅ **Listo** |\n| **Grafana**                 | 3000       | Visualización y dashboards métricas    | ✅ **Listo** |\n| **Jaeger**                  | 16686      | Visualización trazabilidad distribuida | ✅ **Listo** |\n| **OpenTelemetry Collector** | 4317/4318  | Hub recolección trazas y métricas      | ✅ **Listo** |\n\n#### **🎯 Estado actual de observabilidad**\n\n**✅ Completamente implementado:**\n\n- Recolección completa de métricas desde endpoints API\n- Scraping Prometheus en tiempo real (intervalos 10s)\n- Dashboards Grafana preconfigurados\n- Monitorización health checks\n- Métricas request/response con etiquetas\n- Monitorización recursos contenedores\n- Descubrimiento automático de servicios\n\n**🚧 Infraestructura lista (necesita instrumentación app):**\n\n- Trazabilidad distribuida con Jaeger\n- Recolección trazas OpenTelemetry\n- Métricas de negocio personalizadas\n- Seguimiento avanzado de errores\n\n**Variables de entorno observabilidad:**\n\n```bash\n# Configuración observabilidad\nOTEL_SERVICE_NAME=chatbot-api          # Nombre servicio para trazas\nOTEL_TRACES_ENABLED=true               # Habilitar trazabilidad distribuida\nOTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318  # Endpoint collector\n```\n\n## 🔧 Configuración y seguridad\n\n### 🌍 Variables de entorno\n\n**Requeridas:**\n\n```bash\nGEMINI_API_KEY=tu_clave_google_gemini_aqui\nLOG_LEVEL=info\nCORS_ORIGINS=\"http://localhost:3000,http://localhost:5173\"\n```\n\n**Fase 2 (próximamente):**\n\n```bash\n# Configuración de base de datos\nDATABASE_URL=\"mysql://usuario:pass@host:puerto/dbname\"\nSTATE_STORE_TYPE=\"database\"  # sqlite|database|redis\nCONTENT_STORE_TYPE=\"database\"  # filesystem|database|cms\n\n# Limitador de tasa\nRATE_LIMIT_REQUESTS=100\nRATE_LIMIT_WINDOW=3600\n```\n\n### 🔒 Configuración de servidor para producción\n\n#### Nginx + PHP-FPM (recomendado)\n\n```nginx\nserver {\n    listen 443 ssl http2;\n    server_name your-domain.com;\n    \n    # SSL (Certbot / Let's Encrypt)\n    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;\n    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;\n    \n    # CRÍTICO: root debe apuntar a api/public\n    root /var/www/chatbot-demo/api/public;\n    index index.php;\n    \n    # Cabeceras de seguridad\n    add_header X-Frame-Options \"SAMEORIGIN\" always;\n    add_header X-Content-Type-Options \"nosniff\" always;\n    add_header Referrer-Policy \"no-referrer-when-downgrade\" always;\n    add_header Content-Security-Policy \"default-src 'self' http: https: data: blob: 'unsafe-inline'\" always;\n    \n    # Bloquear archivos sensibles\n    location ~ /\\.(env|git) { deny all; }\n    location ~ \\.(json|lock|md)$ { deny all; }\n    \n    # Procesado PHP\n    location ~ \\.php$ {\n        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;\n        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;\n        include fastcgi_params;\n    }\n    \n    # URLs limpias\n    location / {\n        try_files $uri $uri/ /index.php?$query_string;\n    }\n}\n```\n\n#### Apache + mod_php\n\n```apache\n\u003cVirtualHost *:443\u003e\n    ServerName your-domain.com\n    DocumentRoot /var/www/chatbot-demo/api/public\n    \n    # SSL\n    SSLEngine on\n    SSLCertificateFile /etc/letsencrypt/live/your-domain.com/cert.pem\n    SSLCertificateKeyFile /etc/letsencrypt/live/your-domain.com/privkey.pem\n    SSLCertificateChainFile /etc/letsencrypt/live/your-domain.com/chain.pem\n    \n    # Bloquear acceso a directorios padre\n    \u003cDirectory \"/var/www/chatbot-demo\"\u003e\n        Require all denied\n    \u003c/Directory\u003e\n    \n    \u003cDirectory \"/var/www/chatbot-demo/api/public\"\u003e\n        AllowOverride All\n        Require all granted\n        \n        # URLs limpias\n        RewriteEngine On\n        RewriteCond %{REQUEST_FILENAME} !-f\n        RewriteCond %{REQUEST_FILENAME} !-d\n        RewriteRule . /index.php [L]\n    \u003c/Directory\u003e\n\u003c/VirtualHost\u003e\n```\n\n### 🛡️ Lista de comprobación de seguridad\n\n**Desarrollo:**\n\n- [ ] Nunca commitear archivos `.env`\n- [ ] Usar claves distintas por entorno\n- [ ] Activar `error_reporting=0` en PHP de producción\n\n**Producción:**\n\n- [ ] Configurar HTTPS con certificados válidos\n- [ ] Permisos de ficheros adecuados (`644` archivos, `755` directorios)\n- [ ] Bloquear acceso a ficheros sensibles (`.env`, `.git`, etc.)\n- [ ] Usar PHP-FPM en lugar de `mod_php` cuando sea posible\n- [ ] Implementar limitación de peticiones a nivel de servidor web\n\n## 📚 Documentación\n\n### 📖 Documentación Disponible\n\n**Visión general del proyecto:**\n\n- **[README.es.md](./README.es.md)** - Documentación principal en español\n- **[README.md](./README.md)** - Versión en inglés\n\n**Evolución arquitectónica:**\n\n- **[ARCHITECTURE_EVOLUTION_ES.md](./docs/evolution/ARCHITECTURE_EVOLUTION_ES.md)** - Plan de evolución arquitectónica (Español)\n- **[ARCHITECTURE_EVOLUTION_EN.md](./docs/evolution/ARCHITECTURE_EVOLUTION_EN.md)** - Architectural evolution plan (English)\n\n**Estructura del proyecto:**\n\n- **[PROJECT_STRUCTURE.md](./docs/PROJECT_STRUCTURE.md)** - Guía de organización y estructura de archivos\n\n**Documentación de API:**\n\n- **Especificación OpenAPI**: [openapi.yml](../openapi.yml) - Especificación completa de la API\n- **Documentación interactiva**: Disponible en `/api/docs` al ejecutar localmente\n\n### 🏗️ Documentación arquitectónica\n\n- **Registros de Decisiones Arquitectónicas (ADRs)**: En `/docs/architecture/` (en desarrollo)\n- **Guías de despliegue**: Varias estrategias de despliegue documentadas\n- **Guías de desarrollo**: Instrucciones para contribuidores y configuración\n\n### 🔍 Encontrar información\n\n- Usa la tabla de contenidos al inicio de cada README\n- Revisa el directorio `docs/` para documentación especializada\n- Consulta comentarios en el código para detalles de implementación\n- Visita el [repositorio de GitHub](https://github.com/Miguel-DevOps/chatbot-demo) para issues y discusiones\n\n## 🧪 Pruebas y calidad\n\n### 🔬 Estrategia de pruebas\n\n**Pirámide de pruebas:**\n\n- **Unitarias:** `pnpm test` (Frontend) + `composer test` (Backend) — rápidas e aisladas\n- **Integración:** Validación de contratos API mediante OpenAPI\n- **E2E:** `pnpm test:e2e` — flujos completos de usuario\n\n**Puertas de calidad:**\n\n```bash\n# Validaciones pre-commit\npnpm lint \u0026\u0026 pnpm typecheck    # Calidad de código\npnpm test                      # Tests unitarios\ncomposer test                  # Tests backend\n\n# Auditoría de seguridad\npnpm audit \u0026\u0026 composer audit   # Vulnerabilidades en dependencias\n```\n\n**Objetivos de cobertura:**\n\n- Lógica de negocio: 90%+ (Servicios, Controladores)\n- Componentes UI: 80%+ (Interacciones, estados de error)  \n- Integración: 100% (Contratos API, servicios externos)\n\n## 🤝 Contribuir\n\n### 🎯 Áreas de alta prioridad\n\n| **Prioridad**  | **Área**                         | **Habilidades**              | **Impacto**                         |\n| -------------- | -------------------------------- | ---------------------------- | ----------------------------------- |\n| 🔥 **Crítico** | Fase 2: Abstracción de estado    | PHP, SQL, Patrones de diseño | Habilita despliegue Nivel 0.5-1     |\n| 🔥 **Crítico** | Producción con Docker            | DevOps, Docker, Nginx        | Contenedores listos para producción |\n| ⭐ **Alto**    | Migraciones de BD (Phinx)        | PHP, Diseño de BD            | Gestión de esquemas                 |\n| ⭐ **Alto**    | Interfaz de gestión de contenido | PHP, APIs, Integración CMS   | Contenido escalable                 |\n| 💡 **Medio**   | Manifiestos Kubernetes           | K8s, Helm, DevOps            | Despliegue empresarial              |\n| 💡 **Medio**   | Observabilidad                   | Monitorización, Logging      | Excelencia operacional              |\n\n### 🏗️ Guía para contribuyentes\n\n**Antes de empezar:**\n\n1. **Piensa en interfaces:** Diseña abstracciones que permitan intercambiar tecnologías\n2. **Pruebas primero:** Escribe tests fallidos antes de implementar\n3. **Configuración externa:** Nada hardcodeado — todo configurable\n4. **Documenta:** Actualiza ADRs para decisiones arquitectónicas\n\n**Flujo de desarrollo:**\n\n```bash\n# 1. Fork y clona\ngit clone https://github.com/Miguel-DevOps/chatbot-demo.git\ncd chatbot-demo\n\n# 2. Crea rama de características\ngit checkout -b feature/database-abstraction\n\n# 3. Desarrollo con pruebas\n./scripts/test.sh    # Validar cambios\n\n# 4. Envía PR con:\n#    - Descripción clara\n#    - Tests actualizados\n#    - Documentación\n#    - Notas sobre posibles breaking changes\n```\n\n**Áreas por nivel de experiencia:**\n\n- **Principiante:** Mejoras UI, cobertura de tests, documentación\n- **Intermedio:** Implementación de interfaces, gestión de configuración\n- **Avanzado:** Diseño arquitectónico, infraestructura, observabilidad\n\n## 📄 Licencia\n\nLicencia MIT - ver [LICENSE](./LICENSE) para detalles.\n\n**Uso educativo recomendado:**\n\n- ✅ Usar como referencia para evolución arquitectónica\n- ✅ Fork para talleres y formación\n- ✅ Adaptar patrones a proyectos propios\n- ✅ Referenciar en blogs técnicos y documentación\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n_Este proyecto sirve como documento vivo para la evolución arquitectónica. Se aceptan contribuciones._\n\n[![GitHub](https://img.shields.io/badge/GitHub-Miguel--DevOps-black.svg)](https://github.com/Miguel-DevOps)\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-blue.svg)](https://linkedin.com/in/miguel-lozano-devops)\n\n_Construido con ❤️ para la comunidad de desarrolladores_\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiguel-devops%2Fchatbot-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiguel-devops%2Fchatbot-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiguel-devops%2Fchatbot-demo/lists"}