---
title: "product"
description: "Dashboard/frontend product work — patient viewers, compute tooling, and other user-facing surfaces built on top of the infrastructure workstream's apps."
image: "https://docs.virdx.dev/img/virdx-social-card.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.virdx.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# product

Goal: user-facing product surfaces (currently the internal `dashboard`
app — patient imaging viewers, compute tooling, the blog) built on top of
`vxData` and the other infrastructure plumbing. No monthly report has ever
been filed for `product`; this page exists because a session recap landed
in `inbox/` before the workstream had a wiki home (`begin-work` step 4 was a
dead end until this page was added — 2026-08-06).

Most of the concrete how-to material for dashboard-frontend/dashboard-api
work still lives under
[infrastructure/sops/dashboard-app-dev-and-deploy.md](/knowledge/wiki/workstreams/infrastructure/sops/dashboard-app-dev-and-deploy)
(local dev, deploy, blog rendering) since that app is jointly owned with
infrastructure. This page tracks product-specific feature work instead.

## What's documented so far

- **Diffsim volume viewer**: the patient page's `DiffsimScanCard` used to
  render one `VolumeBrowser` (and one Niivue WebGL context) per
  `DiffsimScan` — hundreds per Essen01 patient. Collapsed to a single
  `VolumeBrowser` with a nested scan > volume sidebar via a new optional
  `groups?: VolumeGroup[]` prop; the flat `volumes` prop remains the source
  of truth for selection/sorting/filtering/search/prefetch
  (`virdx/mono#313` -> draft PR `virdx/mono#314`). Fixed a related
  `VolumeViewer` race along the way: the volume-load effect read `nvRef`
  before the canvas-keyed mount effect had run, so a viewer whose volume was
  already known on first render never retried and stuck on Niivue's own
  "loading..." screen.
  - Known local-dev trap this surfaced: `apps/vxdata-api`'s `just
    inject-mock` seeds diffsim volumes as plain `Volume` payloads instead of
    `DiffsimVolume`, so a freshly seeded diffsim scan shows zero volumes —
    see the "Local dev loop" gotchas in
    [vxData SDK + schema model](/knowledge/wiki/workstreams/infrastructure/sops/vxdata-sdk-and-schema-model).
  - To get a viewer-testable volume into a local stack: `POST /s3/presign`
    with `direction: "upload"`, `PUT` the bytes to the returned URL, and use
    the returned `s3://` path as the resource's `url`/`path_nii` — the
    presign response is authoritative for the key, don't assume a layout.
  - Headless Chromium renders Niivue canvases unreliably; use a headed
    browser for WebGL screenshot validation.

No `sops/` or `projects/` subdirectory exists yet for this workstream — add
them as more product work gets synthesized from `inbox/`.

Source: https://docs.virdx.dev/knowledge/wiki/workstreams/product/index.mdx
