The story
Why Pyxis exists
The introduction post explains why it was built and what it never stores.
Open-source product analytics
Pyxis shows which features get used, where a sign-up loses people and which requests fail. It stores no cookie, no IP address, no user agent and nothing personal, and each of those rules lives in code, covered by tests.
No sign-up. Invented data. It opens straight on the dashboard.
Overview
Top pages
/dashboard2,030/1,409/orders1,211Privacy
Five things an ordinary analytics tag would send, and what is left of each one. The browser cuts first; the API checks again before anything reaches the database.
Page addressIn the browser
An ordinary tag would send:https://shop.example/orders/48213?email=ana@example.com&utm_source=news
What is left:/orders/:id · utm_source=news
IP addressAt the API: country and state, then the address is dropped. The city is never read.
An ordinary tag would send:203.0.113.7
What is left:BR · BR-BA
BrowserAt the API: classified, then dropped
An ordinary tag would send:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0 Safari/537.36
What is left:desktop · Chrome · Windows
Event propertyAt the API: anything shaped like an email, a phone number or a tax id
An ordinary tag would send:"coupon": "ana@example.com"
What is left:dropped
VisitIn the browser: no cookie, nothing that links two tabs
An ordinary tag would send:cookie: visitor_id=8f2c41d0…; Max-Age=34560000
What is left:sessionStorage · ends with the tab
A browser that sends “do not track” (Global Privacy Control or Do Not Track) switches the tracker off before anything is queued. Events are deleted after 13 months.
Dashboard
Eight screens, each built around one question. Every card opens that screen in the live demo.
How many visits, conversions and failed writes this period, against the one before?
Open in the demoWhich channels, sources and campaigns bring visits that convert?
Open in the demoWhich devices, browsers, countries and states do visits come from?
Open in the demoWhich events and screens get used, and how does one property break down?
Open in the demoWhere does a sign-up lose people, and how long does each step take?
Open in the demoWhich routes of your API fail, how often and how slowly?
Open in the demoWhich visits did one thing, filtered by page, event, channel, device or failure?
Open in the demoWhat did one visit, or one signed-in person, do, in order?
Open in the demoInstall
One package and two lines. Page views are recorded on their own; a named event is one call.
npm install pyxis-analyticsimport { init, track } from 'pyxis-analytics';
init({ key: 'pyxis_pk_…', endpoint: 'https://api.pyxis-analytics.dev' });
track('signup_completed', { method: 'email_code' });Keys are issued by whoever runs the API, and there is no public sign-up today. All three repositories are MIT-licensed, the AWS infrastructure (Terraform) included.
In production
Neither site needs a cookie to be measured.
Engineering
Architecture
Compared
| Aspect | Pyxis | Typical cookie-based tag |
|---|---|---|
| Cookie on your visitors | None | An id cookie, usually kept for months |
| IP address | Read for country and state, never stored | Depends on the tool and its settings |
| Links the visits of an anonymous visitor | Never: a visit is one tab | Yes, through the cookie |
| Third parties | None | Depends on the tool; sometimes an ad network |
| Source code | MIT, on GitHub | Varies |
“Typical” describes a common setup, not any one product.
FAQ
No. A visit’s id lives in the tab’s sessionStorage and ends when the tab closes. Cookies exist only in the Pyxis dashboard itself, for the people who use it, never on the sites it measures.
No. CloudFront tells the API the country and the state of each request; the address itself is never written anywhere, and the city is never read.
Only for people signed in to your site, through your own internal id, never an email. Anonymous visits are never linked: not across tabs, not across days.
Global Privacy Control and Do Not Track switch the tracker off, and a site can offer its own switch with optOut() and trackingStatus().
Thirteen months, then a daily job deletes it. A person’s events can be exported or erased from your backend at any time.
The code is MIT-licensed on GitHub. Today keys are issued by whoever runs the API; there is no public sign-up.
The story
The introduction post explains why it was built and what it never stores.