Sobre o projeto

O OpenAnalytics é um produto de análise web open-source distribuído como monorepo pnpm, licenciado sob AGPL-3.0 e projetado para ser auto-hospedado no seu próprio hardware. Seu design é privacy-first, com medição sem cookies e leitura apenas agregada: sem cookies, sem fingerprinting, sem identificadores cross-site, e endereços IP brutos nunca são armazenados. A identidade do visitante é um hash com salt que é renovado toda noite, então o rastro de um visitante dura apenas uma visita e nunca mais que isso. Do Not Track e Global Privacy Control são honrados no coletor antes de qualquer dado ser escrito, e a geolocalização em nível de cidade é opt-in por site, resolvida contra um banco de dados no host para que nenhuma consulta saia da máquina. Uma instância hospedada pelos autores roda o mesmo código em getopen.so. O monorepo divide o produto em aplicações separadas: um snippet de rastreamento no navegador cuja orçamento de bytes é fiscalizado pela CI; um coletor que valida, sanitiza, limita taxa e enfileira; um worker que drena a fila para ClickHouse e trata sessões, rollups, exportações, e-mails e exclusões; um plano de controle API que cobre auth, sites, chaves, compartilhamento, definições de eventos, funis, widgets, receita, um assistente de IA e um servidor MCP; um gateway de consultas que é o único processo permitido a ler ClickHouse e que verifica envelopes de assinatura Ed25519; um app em tempo real que fornece a stream SSE por trás do painel ao vivo; um dashboard Next.js; e uma CLI `oa` para configuração de sites, estatísticas e login por device flow. Pacotes compartilhados cobrem lógica de domínio, schemas de Postgres e ClickHouse com migrações, Redis/Valkey, auth, contratos OpenAPI, observabilidade e integrações. O armazenamento é dividido em três partes: Postgres para o plano de controle, ClickHouse para eventos e rollups, e duas instâncias Valkey — uma fila de eventos durável e um cache de tempo real descartável. As funcionalidades reportadas incluem visualizações de página, eventos personalizados e baseados em atributos, sessões, web vitals, funis, retenção por site, widgets incorporáveis, links públicos de compartilhamento, análise de receita da sua própria conta Stripe, importação e exportação CSV/JSON, um servidor MCP e a CLI. O dashboard também mostra uma lista ao vivo de visitantes vinda de um cache de presença, trilhas de jornada por visitante e um globo ao vivo opcional de localizações em nível de cidade. Diversas regras arquiteturais são fiscalizadas pela CI em vez de por convenção: o app web só pode importar o pacote de contratos compartilhado, com o documento OpenAPI como única interface entre frontend e backend; o ClickHouse é acessível apenas pelo gateway de consultas; uma mudança que exceda o orçamento do tracker falha o build; e um job de CI afirma, contra um banco real, que o schema do Postgres não contém tabelas de billing. A auto-hospedagem é documentada em SELF-HOSTING.md, usando um script generator e um único `docker compose up -d` com TLS automático. Requer um host Linux com Docker, quatro registros DNS (subdomínios app, api, c e rt), aproximadamente 4 GB de RAM e 25 GB de disco livre. Os releases publicam dez imagens em ghcr.io, então a instalação é um pull, não um build; hosts arm64 ou builds de branch compilam as imagens localmente. `upgrade.sh` faz a transição entre releases e cria o snapshot que `rollback.sh` precisa, já que as migrações não são reversíveis e o caminho documentado de volta é um restore. Rodar a partir do source requer builds antes dos runners de migração compilados. Somente o assistente de IA e object storage são opcionais; quando não configurados, essas superfícies se desabilitam. Um suite de testes estilo CI roda sem infraestrutura. Dados de geolocalização não vêm empacotados (o README nota que é um download de 60 MB que fica obsoleto em um mês); um script helper busca um banco DB-IP, usado sob CC BY 4.0. Contribuições são feitas via pull requests mesclados diretamente no repositório, com um CLA único que mantém os direitos autorais com o contribuidor. O código é AGPL-3.0, o que, segundo o README, obriga qualquer um que execute uma versão modificada como serviço de rede a oferecer o source modificado aos seus usuários; o nome do projeto e o domínio do serviço hospedado não fazem parte da concessão da licença.