Pulse

Traffic and revenue, on one page you can show anyone.

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.

acme.dev23 live · last 30 days
Visitors 18.2%
12,481
Pageviews 12.4%
28.9k
Revenue 6.4%
$3,214
  • github.com4.8K
  • Google3.1K
  • news.ycombinator.com2.3K
  • Direct / none1.9K

The whole integration

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>

What Pulse does

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.

Revenue is first-class

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.

A public stats page, built in

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.

Your database, your data

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.

The whole dashboard

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.

$0 at indie scale

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.

Up and running in an afternoon

  1. 1

    Deploy

    Fork the repo, import it into Vercel, set two environment variables, run the migrations. Both free tiers are enough.

  2. 2

    Paste the snippet

    Your first pageview lands within seconds — realtime, sources, and countries from day one.

  3. 3

    Publish (if you want)

    Flip on your public /stats page, embed the README badge, and build in public. Projects stay private by default.

Privacy as a property, not a promise

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.

Your analytics. Your database. Your call.

MIT licensed. Fork it, run it, sell things with it. If Pulse ever stops serving you, your data is already in your own Postgres.