entreprenoid measures traffic at your server boundary, so it counts the clients that never run JavaScript — and serves them a clean markdown twin from the same middleware.
import { entreprenoid } from "@entreprenoid/analytics/express";
app.use(entreprenoid());
Nothing loads in a visitor's browser. No client script, no cookies.
See it. Every request classified at the boundary: AI crawlers, fetchers, search bots, agent browsers, humans — with the evidence and the confidence behind each answer.
Fix it. The same middleware serves a markdown twin when a client asks for one, so an agent reads your content instead of your markup.
Accept, never on identityMarkdown goes to a client that asks for it — by requesting .md or sending
Accept: text/markdown. Never because of who we think it is.
Serving different content by User-Agent is cloaking, it forces
Vary: User-Agent and destroys shared caching, and it lets a spoofable string
decide what a visitor receives. A browser always gets the page.
No request bodies. No cookies. No authorization headers. No raw query strings. No form values.
A visitor's IP address is used for coarse geography, rate limiting and crawler verification, and it is retained on the stored request — deleted with that request, on the site's own retention schedule, which the site owner chooses. Each request also carries a site-scoped, daily-rotating pseudonym and a two-letter country code, which are what the aggregates group on.