HELPERG (opens in a new tab) Ecosystem

WebmasterID logoWebmasterID
Arquitetura

Superfície pequena, bases de nível de infraestrutura.

A WebmasterID é um monorepo com pnpm e Turborepo, com TypeScript estrito em todo o lado. Cada peça é propositadamente pequena e substituível; nada é magia. Esta página percorre o sistema de ponta a ponta.

As peças

Seis peças que compõem o produto.

  • Rastreador do navegador

    Script IIFE pequeno (cerca de 3 KB minificado), carregado a partir de /tracker.iife.min.js. Dispara page_view no primeiro desenho da página, liga-se a history.pushState, replaceState e popstate para a navegação de uma SPA, e expõe uma API tipada em window.WebmasterID.

  • API de ingestão

    Fastify em funções da Vercel. Valida os eventos com Zod, classifica a origem de tráfego, deteta bots de IA e de pesquisa, anonimiza o IP e persiste em Postgres. Aceita tanto application/json como text/plain.

  • PostgreSQL através do Supabase

    Esquema Drizzle com tabelas separadas para events e bot_visits. As chaves secretas wmsk_ são guardadas apenas como hashes SHA-256. O valor em texto simples é mostrado uma única vez, na criação do site, e nunca mais.

  • Deteção de bots de IA e de pesquisa

    Os rastreadores reconhecidos (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, Applebot, Bingbot, Meta-ExternalAgent, CCBot e outros) vão para bot_visits, nunca para events. Os agregados humanos mantêm-se limpos.

  • Painel do operador

    Painel Next.js renderizado no servidor. O filtro de site e de intervalo de datas viaja nos parâmetros do URL.

  • API de eventos de servidor

    POST /api/server/events aceita eventos de servidor para servidor com um token Bearer wmsk_ validado contra o respetivo hash SHA-256. Permite registar eventos que o navegador nunca veria.

Transporte

Um caminho de rede discreto.

  • Porquê text/plain

    O navigator.sendBeacon com um corpo de texto define o Content-Type como text/plain;charset=UTF-8, um tipo MIME da lista segura de CORS. Sem preflight, sem superfície de CORS com credenciais e sem negociação com as camadas de CORS da plataforma.

  • Porquê alojar o rastreador na mesma origem

    O rastreador é servido a partir da origem do site de marketing. Quem preferir pode alojá-lo por sua conta; o fragmento de instalação é uma única etiqueta <script> com dois atributos data-*.

  • Porquê anonimizar o IP

    O último octeto dos IPv4 é colocado a zero e os IPv6 são truncados para /48. Resolução suficiente para detetar vagas de bots e uma geografia aproximada; insuficiente para identificar uma pessoa concreta.

  • Porquê não há cookies

    A WebmasterID não tem o conceito de visitante recorrente entre sites. Não há nada que o produto fizesse com um cookie que não consiga fazer sem ele, por isso não há cookie.

Fragmento de instalação

Uma única etiqueta de script.

Instalar a WebmasterID é acrescentar uma etiqueta <script> com dois atributos de dados: data-wmid (o site_id) e data-endpoint (o URL de ingestão). Os sites que a instalam continuam responsáveis pelo seu próprio fluxo de consentimento; a WebmasterID não envolve o rastreador num SDK de consentimento por predefinição.

O ficheiro do rastreador é servido com um cabeçalho Cache-Control de cinco minutos e é o mesmo artefacto que se constrói a partir do pacote packages/tracker-js deste monorepo.