Routes
The dashboard URL map. Public pages need no account, workspace pages live under your project slug, and the relay API powers every screen — same-origin and session-authenticated.
Public pages
/signinSign in with Google (or email in dev mode).
/registerCreate an account, then pick or create a workspace.
/pricingFree vs Pro limits with checkout links.
/onboardingGuided setup: project, keys, first events.
/legal/privacyPrivacy policy.
/legal/termsTerms of service.
Workspace
Everything under /[slug] belongs to one project — slug is the URL-safe project name from creation (e.g. /acme-inc/analytics).
/[slug]Workspace overview: KPIs, chart and top breakdowns.
/[slug]/analyticsFull analytics dashboard with filters, segments and CSV export.
/[slug]/comparisonPeriod-over-period deltas for every metric.
/[slug]/eventsPaginated raw event log with type badges and context.
/[slug]/funnelsFunnel builder with step conversion and drop-off.
/[slug]/submissionsSubmissions browser — every captured field value.
Settings
/[slug]/settings/generalProject name, slug and timezone.
/[slug]/settings/trackingInstall snippet, auto-track toggles and masked fields.
/[slug]/settings/domainsAllowed hostnames — tracking ignores everything else.
/[slug]/settings/apiPublishable and secret keys: create, reveal once, rotate, revoke.
/[slug]/settings/webhooksEndpoints, event subscriptions and delivery logs.
/[slug]/settings/utm-templatesNamed, reusable UTM parameter sets.
/[slug]/settings/appearanceDashboard display preferences.
/[slug]/settings/billingUsage meters, plan and invoices.
/[slug]/settings/billing/plansPlan picker with Pro checkout.
Relay API
The dashboard never calls trepi from the browser. Screens hit these same-origin routes with the session cookie; the server forwards to the API with the project secret. Third-party integrations should use the API reference with an sk_… instead — relay routes are not a public API.
/api/auth/[...nextauth]/api/chat/api/chat/command/api/chat/context/api/checkout/api/onboarding/api/onboarding/step/api/portal/api/projects/api/projects/by-slug/api/projects/[id]/api/projects/[id]/[metric]/api/projects/[id]/api-keys/api/projects/[id]/api-keys/[keyId]/api/projects/[id]/domains/api/projects/[id]/funnels/api/projects/[id]/funnels/[fid]/api/projects/[id]/rotate-secret/api/projects/[id]/submissions/api/projects/[id]/utm-templates/api/projects/[id]/utm-templates/[tid]/api/projects/[id]/views/api/projects/[id]/views/[vid]/api/projects/[id]/webhooks/api/projects/[id]/webhooks/[webhookId]/api/projects/[id]/webhooks/[webhookId]/deliveries/api/webhooks/polarOne exception
/api/webhooks/polar is not session-guarded — it receives Polar billing webhooks and verifies their signature instead.