Skip to content

Tox1469/pixel-analytics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CI License Release Stars


pixel-analytics

Analytics leve e privacy-first — rastreie pageviews, eventos e sessões sem cookies, sem fingerprinting e com respeito ao DNT (Do Not Track). Ideal para apps que precisam estar em conformidade com LGPD/GDPR.

Instalação

npm install pixel-analytics
# ou
pnpm add pixel-analytics

Uso

Rastreamento no cliente (browser)

import { createTracker } from 'pixel-analytics';

const tracker = createTracker({
  siteId: 'meu-site',
  endpoint: '/api/analytics',
  respectDoNotTrack: true,
  sessionTimeout: 30 * 60 * 1000, // 30 minutos
  debug: process.env.NODE_ENV === 'development',
});

// Rastrear pageview manual
tracker.pageview();

// Rastrear evento customizado
tracker.track('clique_botao', {
  botao: 'cta-hero',
  pagina: '/home',
  variante: 'A',
});

// Auto-rastrear SPAs (Next.js, React Router, etc.)
const cleanup = tracker.autoTrackPageviews();
// Chame cleanup() quando o componente for desmontado

Integração Next.js

// app/layout.tsx
'use client';
import { useEffect } from 'react';
import { createTracker } from 'pixel-analytics';

const tracker = createTracker({
  siteId: process.env.NEXT_PUBLIC_SITE_ID!,
  endpoint: '/api/analytics',
});

export default function RootLayout({ children }) {
  useEffect(() => {
    return tracker.autoTrackPageviews();
  }, []);

  return <html>{children}</html>;
}

Coletor no servidor (API Route)

// app/api/analytics/route.ts
import { createCollector, InMemoryStorageAdapter } from 'pixel-analytics/collector';

const adapter = new InMemoryStorageAdapter();
const collector = createCollector({
  storageAdapter: adapter,
  allowedOrigins: ['https://meusite.com.br'],
  rateLimitPerIp: 100,
});

export async function POST(req: Request) {
  const body = await req.json();
  const ip = req.headers.get('x-forwarded-for') ?? '127.0.0.1';
  const origin = req.headers.get('origin');

  const { status, message } = await collector.handleRequest(body, ip, origin);
  return Response.json({ message }, { status });
}

Dashboard e consultas

import { createDashboard, buildDateRange } from 'pixel-analytics/dashboard';

const dashboard = createDashboard(adapter);
const { from, to } = buildDateRange('7d');

const resumo = await dashboard.getSummary({
  siteId: 'meu-site',
  from,
  to,
});

console.log(`Pageviews: ${resumo.totalPageViews}`);
console.log(`Sessoes: ${resumo.totalSessions}`);
console.log(`Top pages:`, resumo.topPages);
console.log(`Top referrers:`, resumo.topReferrers);

Agregação de série temporal

import { aggregateByPeriod, formatMetricChange } from 'pixel-analytics/dashboard';

const porSemana = aggregateByPeriod(resumo.timeSeries, 'week');

const { changePercent, trend } = formatMetricChange(
  resumo.totalPageViews,
  semanaPassada.totalPageViews
);
console.log(`Variacao: ${changePercent}% (${trend})`);

Diferenciais

  • Sem cookies — usa sessionStorage para sessoes
  • Respeita o header DNT do browser
  • Rate limiting por IP no coletor
  • Validacao de origem (CORS)
  • sendBeacon para envio confiavel em saida de pagina
  • Funciona em SPAs com pushState/popState

Licença

MIT © 2026 Tox

built by tox

About

Privacy-first, cookieless web analytics tracker

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors