Arquitectura Abierta
TECH­NO­LO­GIES

Pulse está construido íntegramente sobre software de código abierto y funciona sin servidor backend. Cada conjunto de datos tiene fuente pública, cada algoritmo es auditable y toda la plataforma se despliega como sitio estático — sin base de datos, sin claves de API, con infraestructura mínima.

01 — Arquitectura
Una app estática que actúa como base de datos
Navegador
SvelteKit TypeScript Leaflet.js D3.js DuckDB WASM svelte-i18n jsPDF
Compilación
@sveltejs/adapter-static Vite Node.js scripts GitHub Actions
Alojamiento
Cloudflare Pages Cloudflare R2 conflictus.org
Activos
Parquet / NDJSON GeoJSON / PMTiles Static JSON Wikimedia Commons
SvelteKit
Framework de aplicación. Compilado a un sitio completamente estático mediante adapter-static. Sin servidor Node.js en ejecución — toda la app se sirve desde un CDN como HTML, CSS y JS.
DuckDB WASM
Motor de análisis en el navegador. DuckDB compilado a WebAssembly se ejecuta directamente en el navegador del usuario, consultando más de 392.000 eventos de conflicto en formato Parquet con SQL — sin servidor, sin API, consultas en menos de 100 ms.
Leaflet + D3
Cartografía y visualización. Leaflet gestiona el mapa mundial interactivo con teselas oscuras de CartoDB y superposiciones GeoJSON personalizadas. D3 impulsa los diagramas de acordes, las barras de densidad temporal y los grafos de redes.
02 — Flujo de Datos
De CSVs brutos a conocimiento consultable
01
UCDP GED
Más de 392.000 eventos de conflicto georreferenciados, 1989–2024. CSV del Programa de Datos sobre Conflictos de Uppsala → NDJSON → Parquet. Enriquecido con narrativas escritas por personas para 1.771 conflictos. Consultado en el navegador mediante DuckDB WASM.
02
COW Project
4 conjuntos de datos: MIDs, Guerras Interestatales, Guerras Civiles, Guerras Extraestatales · 1816–2010. CSVs de Correlates of War procesados por scripts de Node.js en JSON enriquecido con coordenadas, cifras de fallecidos, perfiles de actores y narrativas trilingües (EN/ES/FR).
03
ICB Dataset
512 crisis internacionales, 1918–2015. Datos de Comportamiento Internacional en Crisis enriquecidos con narrativas de antecedentes, contexto de prealerta y resúmenes de desenlace. Traducidos al español y al francés.
04
SIPRI MILEX
Series temporales de gasto militar, más de 170 países, 1949–2023. Exportaciones Excel del Instituto Internacional de Investigación para la Paz de Estocolmo procesadas en JSON por país para gráficos de perfiles y comparaciones globales.
05
CShapes 2.0
Fronteras estatales históricas, 1816–2019. Secuencias de polígonos GeoJSON para cada cambio de frontera estatal desde el Congreso de Viena. Renderizadas en el Mapa Crónica para mostrar el mundo tal como era en cualquier año dado.
06
UNDP HDR
Índice de Desarrollo Humano, 1990–2024. Informes anuales del Programa de las Naciones Unidas para el Desarrollo procesados en series temporales por país, mostrados junto con datos de conflicto en los perfiles de país.
07
CSIS Korea Chair
Más de 550 eventos en la Península de Corea, 1950–presente. Conjunto de datos de la Cátedra de Corea del Centro de Estudios Estratégicos e Internacionales, que cubre provocaciones, diplomacia e incidentes militares. Completamente traducido a ES/FR con narrativas curadas y línea de tiempo anotada.
08
CSIS Arctic
244 eventos de actividad militar en el Ártico. Seguimiento del CSIS de ejercicios militares, construcción de infraestructuras e incidentes en la región ártica — Rusia, OTAN y China — mostrados en un mapa de proyección polar dedicado con contexto geopolítico.
09
CSIS SCS · inspirational
Disputas territoriales en el Mar del Sur de China. La Iniciativa de Transparencia Marítima de Asia del CSIS utilizada como referencia e inspiración para el teatro del Mar del Sur de China de Pulse — inventario de islas artificiales, mapas de ocupación y líneas de tiempo de incidentes que cubren la disputa de las nueve líneas.
03 — Infraestructura
Despliegue sin servidor en el edge
Cloudflare Pages
Alojamiento Estático
La app compilada completa — HTML, JS, CSS y JSON estático — servida desde el CDN global de Cloudflare. Sin servidor de origen. TTFB inferior a 50 ms en todo el mundo.
Cloudflare R2
Almacenamiento de Archivos Grandes
Los archivos que superan el límite de 25 MB de Cloudflare Pages residen en R2: DuckDB WASM (33 MB), Parquet de eventos de conflicto (35 MB) y conjuntos de datos de eventos por país para Afganistán, Siria y Ucrania.
GitHub Actions
CI/CD
Cada push a master activa el pipeline de compilación de producción: se eliminan las rutas del editor, /v2 pasa a ser la raíz, se eliminan los archivos grandes y se despliega mediante Wrangler.
Wikimedia Commons
CDN de Imágenes
Fotografías históricas y actuales servidas directamente desde la infraestructura de Wikimedia a través de la API Special:FilePath. Gratuito, con licencia y almacenado en caché en el edge.
CartoDB Basemaps
Teselas de Mapa
Capas de teselas oscuras y claras para el Mapa Crónica, servidas desde el CDN de teselas de CartoDB. Teselas vectoriales PMTiles para detalle a nivel de ciudad de alta resolución almacenadas en R2.
conflictus.org
Dominio
Dominio personalizado gestionado en Cloudflare DNS con SSL automático. Nombrado por la metáfora de la radiación geopolítica invisible pero medible — conflictos que contaminan mucho después de terminar.
04 — Internacionalización
Traducción humana, no producción automática
3
Idiomas · EN · ES · FR
2K+
Narrativas traducidas
512
Crisis ICB traducidas
550
Eventos de Corea traducidos
svelte-i18n
Cadenas de interfaz — todas las etiquetas, navegación y textos de la UI gestionados en archivos de locale en.json es.json fr.json. El idioma persiste entre sesiones mediante localStorage.
Inline i18n
Las narrativas de datos usan un formato de objeto {en, es, fr} almacenado directamente en cada registro JSON. Una utilidad personalizada resolveText() selecciona el idioma correcto en el momento del renderizado. Las traducciones están protegidas por un hook de precommit que evita sobrescrituras accidentales.
05 — Código Abierto
Construido sobre hombros de gigantes
Fuentes de datos
Todos los conjuntos de datos primarios — UCDP, COW, SIPRI, UNDP, ICB, CShapes — están disponibles gratuitamente bajo licencias académicas o abiertas. Pulse no reclama la propiedad de los datos subyacentes; proporciona la infraestructura para hacerlos accesibles.
Filosofía
Sin muros de pago. Sin cuentas. Sin rastreadores. Pulse se carga íntegramente en el navegador, consulta datos localmente a través de DuckDB WASM y no envía datos de usuario a ningún servidor. La plataforma está diseñada para funcionar sin conexión una vez en caché.