No cookies. Actually none.
Visitors are counted with a salted hash whose salt is destroyed after 48 hours — cross-day tracking is impossible for anyone, including you. No banner needed, by design rather than by disclaimer.
Pulse is privacy-first analytics you run yourself, on the Vercel and Supabase you already have. A ~1 KB script, no cookies, no consent banner — and a public stats page for building in public.
One deferred script tag — 928 bytes gzipped, measured and enforced in CI. Nothing touches your visitors except your own domain: no third-party pixel, no CDN, no fingerprinting library wearing a trench coat.
<script defer data-key="YOUR_KEY" src="https://pulse.devmello.xyz/px.js"></script>Visitors are counted with a salted hash whose salt is destroyed after 48 hours — cross-day tracking is impossible for anyone, including you. No banner needed, by design rather than by disclaimer.
Stripe webhooks, SDK events, and manual entries land in one pipeline. Refunds and lost disputes are stored as negatives and subtract from the totals, so the headline number stays honest.
Publish exactly the metrics you choose — exact, rounded, bucketed, or trends-only. Masking happens in the database: a hidden number is never serialized, so it can’t be fished out of the network tab.
Everything lives in your Supabase Postgres. Query it with SQL, export it, or delete it — there is no vendor between you and your numbers, and no per-event bill.
Realtime, funnels, custom events, sources, countries, and a portfolio roll-up across every project — all reading pre-computed rollups, so charts stay fast as data grows.
The public page is static and CDN-cached; a viral moment hits the CDN, not your database. The free tiers of Vercel and Supabase are enough.
Fork the repo, import it into Vercel, set two environment variables, run the migrations. Both free tiers are enough.
Your first pageview lands within seconds — realtime, sources, and countries from day one.
Flip on your public /stats page, embed the README badge, and build in public. Projects stay private by default.
Unique visitors are counted with a salted, daily-rotating hash. The IP is used to compute it and look up a country, then discarded. The salt is random per UTC day and destroyed after 48 hours — once it’s gone, that day’s hashes cannot be recomputed or reversed by anyone with any level of access.
The honest cost, which the public page states openly: two people behind one NAT on identical devices count once, one person on a phone and a laptop counts twice, and counting resets at UTC midnight. Pulse takes that trade over tracking you.
sha256( daily_salt + project_id + ip + user_agent )Every input except the salt is already in an ordinary HTTP request, and none of them is stored. project_id is in the hash so one visitor can’t be correlated across two sites on the same Pulse instance.
MIT licensed. Fork it, run it, sell things with it. If Pulse ever stops serving you, your data is already in your own Postgres.