Knowledge Layer de Copa
Arquitectura técnica para sincronizar copaair.com → Markdown → S3, sin tareas editoriales adicionales.
Seis decisiones reducen el diseño a un solo proceso
El objetivo es un job efímero, idempotente y de bajo consumo; no un servicio permanente.
Fuente de descubrimiento
Sitemaps válidos de www.copaair.com, con allowlist de storefronts y reglas canónicas.
Cadencia
Batch diario incremental; no se dispara por cada publicación.
Extracción
HTTP + parser de contenido por defecto; navegador headless solo como fallback.
Ejecución
Contenedor/job programado que escala a cero entre ejecuciones, coordinado con Aníbal, María + Infra/SRE.
Publicación
S3 privado, prefijo de objetos ai/, publicación automática y routing corporativo.
Opciones descartadas
Campo Markdown en Directus y hook por publish: agregan acoplamiento y esfuerzo operativo innecesario.
Arquitectura propuesta
Una cadena controlada desde descubrimiento hasta publicación. Directus sigue operando normalmente, pero no integra un campo ni un hook nuevo.
1. Sitemap
URLs públicas, locales, canonical y estado de descubrimiento.
lastmod cuando sea confiable
2. Crawler interno
Filtros, fetch, reintentos y fallback headless.
ETag · Last-Modified
3. Transformación
Contenido principal → Markdown determinista + metadatos.
content_hash
4. Publicación
Upsert y bajas en S3, luego exposición por routing corporativo.
/ai/ · /llms.txt
El sync diario procesa cambios, no todo el sitio a ciegas
Cada ejecución debe ser determinista: con la misma entrada produce el mismo Markdown y el mismo estado.
Descubrir
- Leer sitemap index y sitemaps hijos.
- Validar que no estén vacíos o corruptos.
- Comparar con manifest anterior.
Filtrar
- Hostname y storefront allowlist.
- Excluir parámetros, noindex y duplicados.
- Normalizar canonical y locale.
Obtener
- HTTP condicional cuando sea posible.
- Backoff, timeout y límite de concurrencia.
- Headless solo por excepción.
Transformar
- Extraer contenido principal.
- Limpiar navegación, footer y UI.
- Validar Markdown y calcular hash.
Publicar
- Upsert solo si el hash cambió.
- Retirar keys huérfanas.
- Guardar manifest, métricas y release ID.
Contrato Markdown: legible, estable y trazable
Reglas de transformación
- Un archivo por URL canónica, preservando locale y path.
- Un H1; jerarquía H2/H3 sin saltos; listas y tablas simples.
- Eliminar menús, consent banners, CTAs repetidos y componentes sin contenido.
- Convertir enlaces a URLs absolutas y conservar texto descriptivo.
- Agregar fuente, idioma, timestamps y hash de contenido.
- No inferir ni enriquecer hechos: el Markdown refleja la página pública.
--- source_url: https://www.copaair.com/es-pa/… canonical_url: https://www.copaair.com/es-pa/… locale: es-PA source_updated_at: 2026-08-04T… generated_at: 2026-08-05T… content_hash: sha256:… --- # Título de la página Resumen factual del contenido principal. ## Información relevante - Hecho visible en la fuente - Enlace descriptivo y absoluto ## Fuente [Ver página canónica](https://www.copaair.com/es-pa/…)
S3 guarda objetos; el dominio expone las rutas públicas
En S3 no existe una carpeta real: ai/ es el prefijo de los object keys. El bucket permanece privado detrás del origen/routing aprobado.
Objeto en S3
s3://<bucket>/ai/es-pa/viajes/pagina.mds3://<bucket>/llms.txtManifest interno sugerido: ai/_system/manifest.json.
URL pública
https://www.copaair.com/ai/es-pa/viajes/pagina.mdhttps://www.copaair.com/llms.txtCloudFront o reverse proxy resuelve el origen; el nombre final del bucket no aparece públicamente.
Acceso
Bucket privado, service identity con mínimo privilegio y OAC/patrón equivalente.
Release
Upsert idempotente, versioning, release ID y rollback al último manifest válido.
Discovery
llms.txt en la raíz enlaza el índice del Knowledge Layer; no sustituye sitemap ni robots.
Nota: llms.txt es una propuesta emergente, no un estándar universal; se implementa como señal complementaria y archivo de navegación legible.
In-house significa control del tráfico, la identidad y la evidencia
El job sigue haciendo requests controlados a copaair.com; la diferencia es que no depende de un proveedor externo ni expone un endpoint público.
Tráfico
User-Agent identificable, baja concurrencia, ventana off-peak, timeout y exponential backoff.
Red
Ejecución en runtime corporativo aprobado; egress/allowlist y origen acordados con SRE.
Identidad
Service account sin credenciales humanas y permisos limitados al prefijo/objetos necesarios.
Contenido
Allowlist de host/rutas, sin autenticación, PII, resultados de búsqueda o parámetros.
Resiliencia
Reintentos acotados, circuit breaker por anomalías y cero bajas cuando el input no es confiable.
Auditoría
Logs estructurados por URL, hash, acción, status, duración y release ID.
Métricas mínimas
Responsabilidades y colaboración
Digital Marketing desarrolla y opera la herramienta; Aníbal, María + Infra/SRE habilitan la infraestructura y el routing necesarios.
| Equipo / responsables | Participación |
|---|---|
| Digital Marketing | Construir el crawler y la transformación, mantener las reglas de URL y el contrato Markdown, ejecutar QA y operar el proceso diario. |
| Aníbal, María + Infra/SRE | Habilitar S3, identidad/IAM, versioning, scheduler/runtime y routing hacia copaair.com/ai/, con los controles de red y acceso correspondientes. |
| Equipos editoriales | Continúan publicando en Directus como hoy; no agregan campos, hooks ni tareas recurrentes para sostener el Knowledge Layer. |