Routes

Route groups

Group Purpose

app/(auth)/

Unauthenticated shell — /login, /signup

app/(dashboard)/

Authenticated shell with sidebar, header and WorkspaceGate

app/docs/

Fumadocs renderer for the in-app MDX documentation

app/auth/

OAuth callback handling

app/sentry-example-page/

Sentry verification page

Dashboard routes

Route Contents

/

Overview — recent calls and daily statistics

/activity

Unified activity feed

/agents

Redirects to /agents/list

/agents/list

AI agent management — create, edit, version, duplicate

/agents/analysis

Every CallAiAgentAnalysisResult, with filters and CSV export

/agents/issues

Flattened analysis issues, with prompt-suggestion actions

/calls

All calls, with the full filter set and the batch re-analyse dialog

/calls/{id}

Call detail — transcript, recording, analysis, and history for the same number

/campaigns

Call campaigns only

/campaigns/{id}

Campaign detail — targets, calls, coverage. Redirects to /email-campaigns/{id} when type is email

/contacts

Contact list

/contacts/{id}

Contact detail — calls, emails, activities, phones, stats

/email-campaigns

Email campaigns with engagement statistics

/email-campaigns/{id}

Email campaign detail — recipients, variations, statistics

/email-campaigns/templates

Reusable campaign-less templates

/email-campaigns/variations

Cross-campaign variation library

/email-campaigns/sending

Domains and sending accounts

/emails

Email inbox and threads

/phone-numbers

Outbound number pool, purchase and the SMS toggle

/profile

Current user’s profile

/reengagement

Daily re-engagement list (Call summary and Results link to reports)

/reports

Report index

/reports/daily-stats

Daily call statistics with totals

/reports/funnel

Funnel chart

/reports/sankey-chart

Disposition flow

/reports/daily-agent-performance

Per-agent performance

/reports/phone-number-pickup-rate

Pickup rate per number

/reports/email-campaign-daily

Email engagement per day

/reports/reengagement-daily

Re-engagement call summary (daily, segment, funnel)

/reports/reengagement-contacts

Re-engagement contact list with dialled filter and list history

/reports/reengagement-results

Re-engagement supplier status counts (API, access, Payability)

/sales-reps

Rep management

/sales-reps/{id}

Rep detail with their calls

/sales-reps/{id}/tasks

That rep’s follow-up tasks

/sellers

Seller list (sidebar hidden)

/sellers/{id}

Seller detail with its contacts

/suppliers

Payability supplier list — search plus a Filters side pane for API, access, cancelation, status, and payability status; columns include stage, legal signed, and contract signed

/suppliers/{id}

Supplier detail with status, contact, and sync fields

/sequences

Contact sequence enrollments

/sequences/{id}

Enrollment detail — step timeline with response payloads

/sequences/templates

Sequence templates

/sequences/templates/new

Template builder

/sequences/templates/{id}

Template editor

/settings

Workspace settings — General preferences and a Config tab for configs key/value rows

/targets

Redirects to /targets/phone-numbers

/targets/phone-numbers

Phone registry (TargetPhoneNumbers)

/targets/emails

Placeholder for a future email-targets view

/tasks

Follow-up task board

/test-cases

Agent regression test cases

/test-cases/{id}

Test case detail and run results

/workspace

Member management — owners and admins only

Redirect behaviour

From To, and why

/agents

/agents/list — the index has no content of its own

/targets

/targets/phone-numbers — the phone registry is the only implemented view

/campaigns/{id} where type = email

/email-campaigns/{id} — the voice dashboard cannot render an email campaign, and a shared campaign id makes the wrong URL easy to reach

/login, /signup with a session

/ — handled in middleware

Any protected route without a session

/login?redirectedFrom=<path> — handled in middleware

/targets/emails is deliberately a placeholder: email recipients are campaign-scoped and live under Email campaigns, so a cross-campaign email-target view has no obvious semantics yet.

Public routes

Route Note

/login, /signup

Unauthenticated only

/auth/callback

OAuth redirect target

/docs/**

The in-app documentation site, readable without a session

/api/webhooks/**

Provider callbacks, excluded from middleware entirely

/api/unsubscribe

Recipients are not users, so this must be public

GET /api/mcp

Capability discovery, unauthenticated by design