Getting started

Architecture

A Go ingest API, a Next.js dashboard, Postgres, and four MIT client packages. One compose file. No extra workers.

Vector 5 is a monorepo: apps/api (Go), apps/web (Next.js dashboard + marketing), apps/docs (this site), and MIT packages under packages/.

Repository layout

PathRoleLicence
apps/apiGo binary v5d — ingest, classify, rollup, query, authAGPL-3.0
apps/webDashboard, marketing site, waitlistAGPL-3.0
apps/docsDocumentation (docs.vector5.ai)AGPL-3.0
packages/trackerv5.js — ~1 KB browser scriptMIT
packages/middlewareNext / Express / Hono / Workers / NodeMIT
packages/mcpstdio MCP server, six toolsMIT
packages/skillsReady-made agent promptsMIT

What happens on a pageview

  1. The browser posts { d, n, u, r, h, w, p, utm_* } to /api/event via sendBeacon.
  2. The API looks up the site, loads today's salt, parses the UA, classifies the actor, looks up country, hashes the visitor, discards the IP.
  3. The row is written to events. Hourly/daily rollups update in-process.
  4. If the visitor was GPTBot, this step never happened — the middleware posted /api/hit instead, with jsExecuted = false.

Storage

Postgres 17. Events and agent hits are partitioned by month. Dashboard queries hit rollups. A storage interface is left so ClickHouse can be added later; it is not required. See ADR 0002.

Auth modes

  • V5_AUTH_MODE=admin — single operator from .env. Default for self-host and local.
  • V5_AUTH_MODE=supabase — hosted / multi-user. JWT from your Supabase project.

API keys (v5_live_…) are created under Settings and sent as Authorization: Bearer. They are scoped to the team and work for every read route plus MCP.

Something off? Open an issue · Edit on GitHub