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.
npm install pixel-analytics
# ou
pnpm add pixel-analyticsimport { 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// 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>;
}// 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 });
}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);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})`);- Sem cookies — usa
sessionStoragepara sessoes - Respeita o header
DNTdo browser - Rate limiting por IP no coletor
- Validacao de origem (CORS)
sendBeaconpara envio confiavel em saida de pagina- Funciona em SPAs com pushState/popState
MIT © 2026 Tox
built by tox