countline

Each stroke is one of our 48 static hosts, read on 13 October 2026 at 16:43. Strokes inked: 0. Not one of them could report a sale.

Count the Sale, Never the Person

countline is one file for a static shop.

It counts each visit, each checkout click and each paid order.

It sets no cookie and keeps nothing on the device.

Meta, Google and TikTok hear of a sale only after the visitor says yes to jambline.

The Line

Drop countline.js into the site's public/ folder and put this in the head of every page. The site slug is the one Galley already knows the site by.

<script defer src="/countline.js"
  data-count-site="paintedmoons"
  data-count-beacon="https://galley-weld.vercel.app/api/v1/beacon"></script>

Then two marks. The button that starts checkout carries data-count-sku. The page Stripe returns to carries data-count-session and data-count-amount, and the shop's own code fills the amount once its read of the order says paid. Until then the sale is not counted, so a refreshed or abandoned success page never adds one.

What Leaves the Page

CountWhenSent to Galley's beaconNever sent
The visitevery page loadsite, path, referrera cookie, an id, anything stored on the device
The checkout clicka click on the marked buttonsite, skuwho clicked
The paid orderthe success page sets the amountsite, sku, amount, currency, 16 hex characters of a SHA-256 of the session idthe session id itself, a name, an email
The pixelsthe paid order, after jambline's yesto Meta, Google and TikTok through jambline: value, currency, sku, the same hashanything at all before the yes

The hash lets a reader of Galley's counts tell one order from a refreshed page. It cannot be turned back into the session, and it is different on every shop.

Fit It

Check what a host carries today:

node bin/countline.mjs check https://paintedmoons.vercel.app

Fit a Vite, Astro or Next repo. The first run prints the diff; --write commits it on a branch and --pr opens the pull request:

node bin/countline.mjs install ../paintedmoons --site paintedmoons --write --pr

We pointed ads at pages that could not have told us what they sold, and our own shops were among them. The seed run of 13 October lists all 48 hosts, and the nine Painted studios that already read their orders back from Stripe are where the line pays first.

Two limits, stated. Galley's beacon counts paths today, so a checkout click or a sale rides in the path and adds one to the site's views until the beacon reads the event field. And adstudio's lead door needs a secret in the request, so data-count-lead points at the shop's own server route, which only a server-rendered success page has.