# Dashboard Tour

> A guided tour of the Contextator dashboard — signing in, the account menu, top bar, project list and detail, keyboard shortcuts, footer and the Users page.

- Updated: 2026-09-21
- Source: https://contextator.com/en/docs/dashboard-tour/
- Language: en-US
- Author: Muhammet Şafak

---
The dashboard at **http://localhost:3444/** is where everything is managed. It is a plain web page —
no build step, and it polls so you can watch indexing happen. It asks you to sign in first, and what
you see afterwards depends on your account.

---

## Signing in

Opening `/` sends you to `/login` unless you already have a session in that browser. Sign in with the
account the operator gave you; on a brand-new instance there is no account yet and you are sent to
`/setup` instead, to create the first one with the code from the server log. Both are covered in
[Accounts and Permissions](/en/docs/accounts-and-permissions/).

If your password is a temporary one, the dashboard sends you to `/change-password` and nothing else
works until you replace it.

What you see once you are in follows your role: a `root` or `admin` account sees every project and the
**Users** page, a `member` account sees only the projects it was added to, and buttons it may not press
are not drawn at all.

## Account menu

Top right, showing your name and a pill with your role:

| Item | What it does |
|------|--------------|
| **Change password** | Asks for your current password, then the new one twice. Saving it signs out your other sessions |
| **Users** | The account list — `root` and `admin` only. See [The Users page](#the-users-page) |
| **Sign out** | Ends this session on the server, not just in this browser |

## Top bar

The status pills tell you whether the server is healthy before you look at anything else:

| Pill | Meaning |
|------|---------|
| **Database up / down** | The embedded PostgreSQL is reachable |
| **Model ready / loading** | The embedding model is loaded. On a first start this says *loading* while it downloads — indexing and search do not work until it is ready |
| `local · Xenova/paraphrase-… · 384d` | The embedding provider, model and vector dimensions currently in use |
| `n open sessions` | MCP clients connected right now |
| `v0.2.0` | The running version |

## Project list (left)

Every project with its live status: `idle`, `indexing`, `queued` or `error`. Each row shows the number
of sources, the document and chunk counts and when it was last indexed. While a project indexes, the
row grows a progress bar with the current phase, files done and chunks embedded. A queued project tells
you which project it is waiting for.

- **Filter projects** — type to narrow the list.
- **New project** (or press `n`) — opens the creation dialog.

## Project detail (right)

### Header
The project name, its status, and the **MCP URL** with a copy button — this is the string you paste into
your agent's configuration. Next to it, the names of the project's sources.

Three actions:

| Button | What it does |
|--------|--------------|
| **Re-index** | Queues an incremental run: sync every source, re-embed only what changed |
| **Force re-index** | Drops every chunk of the project and rebuilds from scratch |
| **Delete** | Removes the project, its documents, chunks and files. Click twice to confirm |

While a run is in progress a callout shows the phase, the progress bar, how many files were unchanged
and how many chunks were embedded. If the last run failed, a red callout shows the error verbatim.

### Statistics
Documents (and across how many sources), chunks, when it was last indexed (with what that run changed),
and the embedding model. If the project was indexed with a different model than the server now runs,
a warning appears here and search is refused until you re-index.

### Document sources
One row per source: its mount name, where it comes from, its content type, document count, when it last
synced, and its own status. Each row carries:

| Action | Available for | What it does |
|--------|---------------|--------------|
| **Test** | git, Notion | Checks the connection without indexing anything |
| **Sync** | all | Queues an index run (every source syncs at the start of one) |
| **Edit** / **Files** | all | Opens the source dialog; for uploads, lists and manages the stored files |
| **Delete** | all | Removes the source, its documents and its files. Click twice to confirm |

**Add source** opens a dialog with one tab per kind — Local directory, Git repository, Upload files,
Obsidian vault, Notion. See [Document Sources](/en/docs/document-sources/).

### Members
Who reaches this project, beyond the `root` and `admin` accounts that reach every project and are
therefore not listed. Each row is a `member` account with a dropdown holding its project role —
**viewer** reads, **editor** changes sources, uploads files and re-indexes — and a **Remove** button.
**Add member** offers the active `member` accounts that are not on the project yet; if there are none
it points you at the Users page. Only `root` and `admin` can change any of it; everyone else sees the
list read-only. A note at the foot of the panel repeats that membership governs the dashboard, not the
MCP endpoint. See [Accounts and Permissions](/en/docs/accounts-and-permissions/).

### MCP access
A pill says which of the three modes this project's endpoint is in — **open**, readable by anyone who
can reach the URL; **token required**, the default for a newly created project; or **account required**,
where only an account that is a member of the project is answered, over OAuth 2.1 and re-checked on
every request. The panel flips
between them; **New token** mints one and shows its secret once, and **Revoke** cuts its client off
mid-session. Each row shows a token's
name, its leading characters, and when it was last used. Buttons you are not allowed to press are not
drawn: flipping the mode needs `manager` rights over the project, minting and revoking an editor's. See
[Projects](/en/docs/projects/).

### Connect an agent
Copy-paste snippets for Claude Code, Cursor, Claude Desktop and legacy SSE clients, filled in with this
project's real URL — and with the `Authorization` header already in place when the project requires a
token. See [Connecting AI Clients](/en/docs/connecting-ai-clients/).

### Tools exposed to the agent
A reminder of the three tools every project publishes: `search_docs`, `list_topics`, `read_document`.
See [MCP Tools](/en/docs/mcp-tools/).

### Index runs
The recent run history, newest first: when, incremental or force, what changed
(`12 unchanged · 3 updated · 1 removed`), and how long it took. Failed runs show their error. This
survives restarts, unlike the live progress view.

---

## Keyboard and small conveniences

- `n` opens **New project** (when no dialog is open).
- `Esc` closes a dialog.
- The selected project is in the URL hash (`#/my-project`), so you can bookmark or share a link to it.
- Destructive buttons require a second click, and the confirmation expires after a few seconds.
- Copy buttons fall back to a manual selection if the browser blocks the clipboard on a plain-HTTP LAN
  address.

## Footer

Every page of the dashboard ends with the same two-part footer. On the left, the copyright line with the
running version: *Copyright © 2026 Contextator v0.2.0 is a Tunedness production.* On the right, five
pages that open as ordinary URLs and need no account:

| Page | What it is |
|------|-----------|
| [`/about`](http://localhost:3444/about) | What Contextator is, how it works, and who builds it |
| [`/privacy`](http://localhost:3444/privacy) | What your installation stores, and the outbound calls the software can make |
| [`/cookies`](http://localhost:3444/cookies) | The one cookie there is — the session that keeps you signed in — and what it is not |
| [`/terms`](http://localhost:3444/terms) | Warranty disclaimer and what running an instance makes you responsible for |
| [`/license`](http://localhost:3444/license) | The AGPL in short, the full text at `/license.txt`, and the third-party components |

They are public on purpose: a legal notice only the operator can read is not a notice. They expose no
project data and reach neither the database nor the API.

## The Users page

Account menu → **Users** (`#/~users`), for `root` and `admin` accounts only. One row per account: its
username and display name, its role, whether it is **active**, **disabled** or has a **password change
pending**, how many projects it reaches, and when it last signed in.

| Button | What it does |
|--------|--------------|
| **New user** | Opens the creation dialog |
| **Edit** | Display name, e-mail, role, and the active switch |
| **Reset password** | Hands out a new temporary password, shown once, and signs that account out everywhere |
| **Disable** / **Enable** | A disabled account cannot sign in, and its open sessions end at once |
| **Delete** | Removes the account, its sessions and its memberships. Click twice to confirm |

**New user** asks for a username (lowercase, permanent), an optional display name and e-mail, a role —
`member` or `admin`, with `root` offered only to a root account — and a password. Leave the password
empty, or press **Generate**, and the server makes one. Either way it is shown **once**, in a dialog
with a copy button, and **Must change password at first sign-in** is ticked by default.

There is no separate button for ending someone's sessions: **Reset password**, **Disable** and
**Delete** each do it as part of what they are.

A button you may not press is greyed out and says why when you hover it — the last active root account,
your own row, or a root account when you are an admin. The full set of rules is on
[Accounts and Permissions](/en/docs/accounts-and-permissions/).
