Academy · Platform · Experience
Document workspace
In one line. The consumer Documents surface — the filtered, View-driven table your end-users live in every day. You’ll be able to. Read the layout, switch Views, sort/group/select rows, run bulk actions from the Options menu, and get a document into the system by uploading it. Where this lives. The Documents tab — a project’s root surface (
/{subscription}/{project}/, with the saved-View routes_view/:viewIdunderneath it).
Why it matters
This is the screen end-users open first and close last. Everything you build in Studio — the fields you extract, the Views you define, the upload connectors — surfaces here as columns, tabs, and rows. If you understand the Document Workspace, you understand what your solution actually feels like to the people using it. And almost every control on it is configurable per project and per role, so two projects rarely look identical — knowing which control is which lets you shape that experience deliberately (see Shaping the experience).
A note on vocabulary. A Collection is a typed home for one kind of record (see Core concepts). A View is a saved, filtered slice of a collection’s documents, with its own columns. The Document Workspace is where users consume Views; you define them in Studio. Keep “Lifecycle” (a document’s review stages) and “XFlow” (a processing pipeline) firmly apart — neither is what this screen is.
The Documents surface
The classic Documents surface is a two-pane split: a filter/folder pane on the left and the documents table on the right, separated by a draggable resizer. (The left/right order can be swapped per project, so don’t be surprised if you see it mirrored.)
DOCUMENT WORKSPACE (the Documents tab)
┌───────────────────────────────────────────────────────────────────────────┐
│ TOP NAV: Logo | Project | [Overview][Chat][Search][Documents][Invoices] │
├────────────────┬──────────────────────────────────────────────────────────┤
│ FILTER PANE │ TOOLBAR: [+ Invoice] [+ Add Data] [refresh] [activity] │
│ (~20%, collap- │ [grid/table] [date range] [Options menu] │
│ ses via tune) │ chips: [Status: New x] [Date: last 30d x] │
│ ├──────────────────────────────────────────────────────────┤
│ Views / │ stats widgets (optional strip) │
│ folders ├────────────────────────────────────────────┬─────────────┤
│ date range │ DOCUMENTS TABLE (columns from active View) │ activity │
│ label / meta │ [ ] Title Status Total Date │ panel │
│ filters │ [ ] Invoice_001 New $1,240 Jun-12 │ (optional) │
│ │ [ ] Invoice_002 Approved $880 Jun-11 │ │
│ │ [ ] Invoice_003 Processing… 64% Jun-13 │ │
│ │ … rows deep-link to the document detail … │ │
└────────────────┴────────────────────────────────────────────┴─────────────┘
The four regions:
- Top nav — the constant project chrome. The centre tab row shows one tab per surface the project enables: Overview/Dashboard, Chat, Search, one Documents/Collection tab per collection, plus one tab per saved View. The active View’s name also shows up near the project name. Which tabs appear is flag- and role-gated.
- Filter pane (left, ~20% of the width, collapsible via the tune toggle) — View and folder navigation, a date-range filter, and label/metadata filters. Hidden entirely on projects configured to hide it.
- Toolbar (top of the right pane) — actions over the whole list: add/upload, refresh, the activity panel, the grid/table switch, a date-range filter, and Options.
- Documents table (the body) — the rows themselves, with an optional right-hand activity panel and an optional stats widgets strip above.
What every control does
| Region | Control | What it does | Notes |
|---|---|---|---|
| Filter pane | Views / folders list | Switch between saved Views; folder Views expand sub-menus | Each View is a saved slice; _view/:viewId |
| Filter pane | Date range | Limit the list to documents in a date window | |
| Filter pane | Label / meta filters | Filter rows by an extracted field’s value | Drives the filter chips above the table |
| Filter pane | tune toggle | Collapse/expand the whole filter pane | Also reachable from the toolbar |
| Toolbar | + {Collection} | Add one new document to this collection | Label is the collection’s name, e.g. + Invoice |
| Toolbar | + Add Data | Open the add-data modal — upload files or connect a source | Flag-gated (the add-data launcher) |
| Toolbar | Refresh | Silently reload the list | Progress also updates live on its own |
| Toolbar | Activity toggle | Show the right-side Active / Recent / Failed panel | Failed items have an inline Retry |
| Toolbar | grid / table switch | Switch between the table and the card grid | Only when the project enables card view |
| Toolbar | date range | A date-range filter in the toolbar | Appears when the View’s query asks for it |
| Toolbar | Options (vertical-dots menu) | The bulk-action + View-settings hub (see below) | Most items are role/flag-gated |
| Above table | Filter chips | Show applied filters; click the x to remove, or reset all | Up to 4 shown inline |
| Above table | Stats widgets | Summary counts/charts for the current slice | Hidden when the project hides the stats pane |
| Table | Row | Click to open the document detail page | Deep-link to /:docId; can be disabled per project |
| Table | Row checkbox | Select rows for a bulk action | Multi-select feeds the Options actions |
| Table | Column header | Sort by that column | Columns, sort, and grouping are all View-defined |
| Table | Progress chip | A live “Processing… to done” indicator per row | Climbs to 100%, then the fields appear |
| Table | Row ⋮ menu | Per-document actions: Download and Audit trail (plus admin-only delete) | Audit trail opens the document’s timeline side-sheet — see Document detail |
The documents table, in depth
The single most important thing to understand: the table’s columns are not fixed — they come from the active View. A View declares a display name, an icon, a column set, a sort, and a grouping. Switch View and the same documents re-render with different columns. The columns you see are largely your extracted fields: if your collection’s schema pulls out invoice_total, vendor_name, and due_date, those appear as table columns (alongside built-ins like Title, Status, Score, and Date). This is the direct payoff of the schema you design in Collections and schema.
- Sorting — click a column header. Which columns are sortable, and the default sort, are set by the View.
- Grouping — rows can be grouped (e.g. by status or a lookup field); grouping is toggled from Options (Enable/Disable {Collection} Grouping) and configured by the View.
- The progress chip — when a document is still being worked, its row shows a live “Processing…” chip with a percentage that climbs in real time. When it reaches done, the extracted-field cells fill in and a status/score appears. A small automation-pending indicator marks rows where an agent is still running.
- Row selection — the leading checkbox selects rows. Selection is what most Options bulk actions operate on (some need at least two rows, e.g. creating a Doc Set).
- Opening a document — clicking a row deep-links to the document detail page, where the viewer and the extracted-data summary live (see Document detail). Row deep-linking can be disabled per project.
The Options menu — bulk actions plus View management
The Options menu (the vertical-dots button, top-right of the toolbar) is the workspace’s command hub. It’s grouped, and almost every item is gated by your role and the project’s flags — a read-only consumer sees a short menu; an admin sees the lot. The four groups:
| Group | Items | What they’re for |
|---|---|---|
| Doc Set | Create {Collection} Set (needs 2+ selected), Remove Set, Enable/Disable Set Edit | Treat several documents as one unit |
| View settings | Edit Columns, Edit Query (admin), Enable/Disable Row Deeplink, Edit View, Save View, Save View as, Allowed Roles, Delete View | Define and manage Views from the consumer side |
| Export / assignment | Export (download the list), Assign User, Assign State, Change Priority, Update {Lookup} Values, Rescore, Compare {Collection} | Move work and re-derive data in bulk |
| Action menus | Enable/Disable Grouping, Enable/Disable Training Mode, Show/Hide Filter Pane, Enable/Disable Download, Configure Widgets, Show/Hide Stats Pane, Update Collection Mappings (super-admin) | Toggle workspace features |
Tip. Export downloads exactly the slice you’re looking at — the current View’s columns, with your filters applied. Filter first, export second, and you get a clean spreadsheet of just the documents you care about.
Watch out. Save View overwrites the View you’re on. To keep the original and branch off, use Save View as — it forks a new named View instead. Delete View is destructive and admin-gated.
Saved Views — switching, folders, and where they come from
A View is a saved, filtered slice of a collection: a set of columns plus a filter/query, persisted together. Each non-default View shows up as its own tab in the top nav and lives at the route _view/:viewId (folder Views add a level: _view/:folderName/:viewId). The “Default” View is hidden from the tab row — it’s the unnamed baseline.
As an end-user, switching Views is how you change what you’re looking at:
- Click a View tab in the top nav, or pick a View in the filter pane — the table re-renders with that View’s columns and filters; the URL becomes
_view/:viewId. - Folder Views group related Views under a sub-menu — expand the folder, then pick a View inside it.
- To make a quick personal slice, set your filters, then Options > Save View as and name it. Allowed Roles controls who else can see a named View.
Under the hood. A View is stored as a
ColumnViewTemplate(ColumnViewId); the_view/:viewIdroutes are those saved templates. “Save View as” forks a new template.
Builders define Views in Studio; users consume them here. The handful of View-edit items in the Options menu let admins tweak a View from the consumer side, but the deliberate work of designing Views — which columns, which default filters, which roles — is a Studio task; that’s Shaping the experience. For now: know that the columns and tabs you see were defined elsewhere, and that you can switch between them freely.
Getting a document in: the upload flow
A document enters the workspace one of two ways from the UI — and many more via connectors, which you’ll meet later.
- Click + {Collection} (e.g. + Invoice) for a single document, or + Add Data to open the add-data modal, or simply drag files onto the list — a full-pane “Drop files to upload” target appears while you drag.
- The file uploads to the backend (large files are chunked). A new row appears immediately with a “Processing…” chip.
- The platform ingests it — fetch, assemble, then the intake agent extracts fields against the collection’s schema — streaming progress the whole time. The chip climbs to 100%.
- The extracted-field cells fill in, a status/score appears, and (for a Processing collection) the document enters its Lifecycle at the first stage.
Under the hood. That fetch, assemble, extract sequence is the collection’s ingestion pipeline. “Ingestion” is the umbrella term for getting a document from raw bytes to a fully indexed, field-extracted record. You don’t configure it here — you watch its result.
You then click the row to open the document detail page and review what was extracted (Document detail). To ask questions across many documents instead of opening one, use Chat and Search (Chat and search).
Behaviours to know
- Real-time progress. Rows update live — the “Processing…” chip climbs, fields appear, status flips — without a manual refresh. The Activity panel surfaces Active / Recent / Failed runs, and Failed rows offer an inline Retry.
- Heavy flag- and role-gating. Which tabs, toolbar buttons, and Options items appear depends on the project’s configuration and your role. A client/anonymous role sees far less than an admin. If a control on this page isn’t on your screen, it’s almost certainly gated off for your project or role — not missing. This is by design; shaping it is Shaping the experience.
- Grid vs table. Card-view projects render a grid instead of the table; the grid/table toggle switches between them when both are enabled.
- The Inbox is a special case. A human work-queue collection renders an Inbox list here instead of the standard table — same surface, different body. (Covered with Lifecycle/review.)
- Empty states. A brand-new or fully-filtered-out View shows an empty list; a project with no documents yet shows nothing until you upload one. If you filtered everything away, clear the chips (reset-all) to get your rows back.
Flag-gated. The + Add Data launcher, the card grid view, the activity panel, Similar Documents, and most Options bulk actions are individually gated. Treat their presence as project-specific, never guaranteed.
Try it yourself
On a project that has at least one document collection:
- Open the Documents tab and read the column headers — each extracted-field column is a field from your schema. Note two of them.
- Apply a label filter and a date range in the filter pane; watch the chips appear.
- Sort by a column, then switch to a different View tab and notice the columns change. The URL is now
_view/:viewId. - Options > Save View as, name it (e.g. My recent invoices), confirm it appears as a new tab, then switch back.
- Upload a document (drag a file onto the list) and watch the “Processing…” chip climb to done. When the fields appear, click the row to peek at the detail page.
- Open Options and note which items are greyed or absent — that’s your role and the project’s flags talking.
If the columns made sense as “my extracted fields”, and you could switch Views and upload a doc, you own this screen.
Where to go next
- Document detail — open a row: the viewer, the extracted-data summary, and the review/correct loop.
- Chat and search — ask questions across documents instead of reading them one by one.
- Shaping the experience — define the Views, columns, and flags that make this workspace look the way it does.
- Collections and schema — where the columns and fields come from.
Prefer learning inside the product? The same academy lives in the platform's Learn menu — every screen links to the chapter that explains it.
See the platform live