Sobre el proyecto

OpenAnalytics es un producto de analítica web de código abierto distribuido como monorepo de pnpm, publicado bajo la licencia AGPL-3.0 y diseñado para autoalojarse en tu propio hardware. Su diseño se basa en la medición privada y sin cookies, con lecturas agregadas: no usa cookies, no realiza fingerprinting ni identificadores cross-site, y nunca almacena direcciones IP en crudo. La identidad del visitante es un hash con sal que rota cada noche, por lo que el rastro de un visitante dura solo una visita y nunca se extiende a toda la persona. Se respetan las señas Do Not Track y Global Privacy Control en el recolector antes de escribir cualquier dato, y la geolocalización a nivel de ciudad es opcional por sitio, resuelta contra una base de datos alojada localmente para que ninguna consulta salga de la máquina. Una instancia gestionada por los autores ejecuta el mismo código en getopen.so. El monorepo divide el producto en aplicaciones separadas: un pequeño snippet de rastreo para navegador cuyo presupuesto de bytes se aplica mediante CI; un recolector que valida, sanitiza, limita la velocidad y encola; un worker que vacía la cola en ClickHouse y maneja sesiones, rollups, exportaciones, correo electrónico y eliminaciones; una API de plano de control que cubre autenticación, sitios, claves, compartición, definiciones de eventos, embudos, widgets, ingresos, un asistente de IA y un servidor MCP; un gateway de consultas que es el único proceso autorizado para leer ClickHouse y que verifica envolventes de consultas firmadas Ed25519; una aplicación en tiempo real que provee el stream SSE detrás del panel en vivo; un dashboard construido con Next.js; y una CLI `oa` para configuración de sitios, estadísticas e inicio de sesión por dispositivo. Los paquetes compartidos abarcan lógica de dominio, esquemas de Postgres y ClickHouse con migraciones, Redis/Valkey, autenticación, contratos OpenAPI, observabilidad e integraciones. El almacenamiento se reparte en tres vías: Postgres para el plano de control, ClickHouse para eventos y rollups, y dos instancias de Valkey — una cola de eventos durable y un caché en tiempo real desechable. Las funcionalidades reportadas incluyen vistas de página, eventos personalizados y basados en atributos, sesiones, web vitals, embudos, retención por sitio, widgets embebibles, enlaces públicos de compartir, analítica de ingresos desde tu propia cuenta de Stripe, importación y exportación CSV/JSON, un servidor MCP y la CLI. El dashboard también muestra una lista en tiempo real de visitantes tomada de un caché de presencia, rastros de recorrido por visitante y un globo terráqueo en vivo opcional con ubicaciones a nivel de ciudad. Varias reglas arquitectónicas se aplican mediante CI en lugar de convención: la aplicación web solo puede importar el paquete de contratos compartidos, siendo el documento OpenAPI la única interfaz entre frontend y backend; ClickHouse es accesible únicamente a través del gateway de consultas; un cambio que supere el presupuesto de tamaño del tracker falla el build; y un job de CI verifica contra una base de datos real que el esquema de Postgres no contenga tablas de facturación. La autoalojación está documentada en SELF-HOSTING.md, usando un script generador y un único `docker compose up -d` con TLS automático. Requiere un host Linux con Docker, cuatro registros DNS (subdominios app, api, c y rt), aproximadamente 4 GB de RAM y 25 GB de disco libre. Los lanzamientos publican diez imágenes en ghcr.io, por lo que la instalación es un pull en lugar de un build; los hosts arm64 o las compilaciones por branch generan las imágenes localmente. `upgrade.sh` gestiona el paso entre versiones y toma la instantánea que `rollback.sh` necesita, ya que las migraciones no son reversibles y la única vía documentada de retorno es una restauración. Ejecutar desde el código fuente requiere builds previos a los runners de migración compilados. Solo el asistente de IA y el almacenamiento de objetos son opcionales; si no se configuran, esas funciones se desactivan automáticamente. Un conjunto de pruebas estilo CI se ejecuta sin infraestructura adicional. Los datos de geolocalización no van incluidos (el README indica que es una descarga de 60 MB que caduca en menos de un mes); un script auxiliar obtiene una base de datos de DB-IP, usada bajo CC BY 4.0. Las contribuciones se realizan mediante pull requests fusionados directamente en este repositorio, con una CLA única que deja los derechos de autor en el contribuyente. El código es AGPL-3.0, lo cual, según indica el README, obliga a cualquiera que ejecute una versión modificada como servicio de red a ofrecer el código fuente modificado a sus usuarios; el nombre del proyecto y el dominio del servicio alojado no forman parte de la concesión de la licencia.