Finding your way around — sidebar quick-access, /browse explorer, and stuck-files drill-in

Recent uploads + Saved searches in the sidebar; /browse for collections-tree → docs → metadata navigation; /extraction-issues to see exactly which files got stuck.

Updated 2026-05-08

Kodori's UI grew several spatial-navigation affordances in v0.7.99 that complement the global `/search` bar. Use whichever shape fits the question you're asking.

## Sidebar quick-access (D313)

Two new NavGroups live at the top of the (app) sidebar:

- **Recent uploads** — the last 8 documents you uploaded, ordered most-recent first. Filtered to `createdBy = me` so cross-user noise doesn't dilute the list. Tap a row to jump to `/doc/[id]`. - **Saved searches** — your top 5 saved queries (created via the "Save search" button on `/search`). Tap to re-run the query.

Both lists lazy-load on layout render so they don't block the rest of the nav from being interactive.

## /browse — three-pane explorer (D314 + D316)

If you came from FileHold, NetDocuments, or iManage, the tri-pane shape will feel familiar:

1. **Left pane: collections grouped by kind, rendered as a tree.** Cabinet (top-level org structure) / drawer (sub-section of a cabinet) / folder (generic) / matter (legal engagement, conflict-checked) / project (AEC or initiative scope) / custom (opaque). Kodori has no physical folder tree (D2 — collections-as-views) but the kinds + parent-child nesting give the same "click a thing on the left to drill in" affordance. Each section header has a "+ new" link that pre-fills the create form for that kind. 2. **Center pane: documents in the selected collection.** Sortable columns (name, sensitivity, retention class, modified). Click a doc to populate the right pane. On a brand-new tenant with zero collections, this pane shows a welcome card describing all six kinds with per-kind create CTAs. 3. **Right pane: metadata for the selected document.** First-class fields (sensitivity, retention, mime, hash) plus the `metadata` jsonb keys from the document.

URL state lives in `?collection=<id>&doc=<id>` so links and back/forward work — you can deep-link "the engagement letter inside the Smith matter" from agent chat or email.

Below `lg` breakpoint (tablet portrait, mobile) the panes stack into single-column. The same actions are available; the spatial layout is the only thing that changes.

### Collection kinds and how they nest (D316)

Six kinds, with allowed parent kinds in parentheses:

- **Cabinet** — top-level org structure. Cannot be nested. - **Drawer** — sub-section within a cabinet. Parent: cabinet. - **Matter** — legal engagement grouping with conflict-of-interest checks at create time. Parent: cabinet (optional — matters can also sit at the top level). - **Project** — scoped to a project or job (AEC, ops, internal initiative). Parent: cabinet (optional). - **Folder** — generic grouping. Parent: any (cabinet, drawer, folder, matter, or project). - **Custom** — opaque kind for tenant-specific taxonomies. Parent: any.

The parent picker on `/collections/new` only shows valid parents for the kind you've selected — pick "Drawer" and it'll show your cabinets; pick "Cabinet" and the picker is hidden entirely. If you switch the kind after picking a parent, the form auto-clears the selection if the new kind doesn't allow that parent.

In the `/browse` left pane, each collection appears in exactly one place — under its parent if it has one, or in its own kind's section if it's top-level. So a drawer named "Contracts" filed under cabinet "Acme Corp" appears nested under Acme Corp in the CABINETS section, not duplicated in DRAWERS.

## /doc/[id] — two-pane layout (D311.1)

Doc-detail pages now show the preview on the left and access / metadata / retention / audit / links on the right, in a two-pane layout at `lg+`. The preview pane is **sticky** — when you scroll the right pane to look at audit history or retention, the preview stays visible so you keep your visual anchor.

Below `lg` it falls back to single-column (preview-on-top, info-below) so mobile + tablet still work.

A tabbed refactor of the right pane (collapsing 15+ sections into ~6 tabs) is on the roadmap pending feedback on the 2-pane layout.

## /extraction-issues — drill into stuck files (D312)

If your dashboard shows "X stuck files" or "X unsupported files," the count is now a clickable link. `/extraction-issues` opens with three filter tabs:

- **Unsupported** — files whose MIME type doesn't match any registered extractor (rare formats, encrypted PDFs without a password, malformed inputs). - **Failed** — files that errored during extraction (transient infrastructure issues, oversized files past the per-extractor cap, corrupt content). - **Stuck** — files whose extraction has been queued but hasn't finished. Most stuck files clear themselves on the next extraction run; persistent stuck rows usually indicate a queue worker that crashed mid-job.

Rows are permission-trimmed — you only see files you have read access to. Click any row to jump to `/doc/[id]` for the full picture (and to surface the right action: re-run extraction, change MIME, contact support).

The dashboard counts now `<Link>` to the matching tab — one click from "you have N stuck files" to the actual list.

## Picking the right surface

- **Find a doc you just uploaded** → sidebar Recent uploads - **Re-run a query you've saved** → sidebar Saved searches - **Drill in spatially by matter or cabinet** → /browse - **Open the full doc-detail with preview + metadata** → /doc/[id] - **Investigate why files aren't extracting** → /extraction-issues - **Find by keyword + Bates + sensitivity + date** → /search (still the answer for free-text questions) - **Ask a natural-language question** → the agent (still the answer for "summarize all the change orders on the Wagner project")