---
path: /nisaba/manuscript
surface: customer
domain: nisaba
auth: signed-in
source: apps/oshun/web/src/app/nisaba/manuscript/page.tsx
status: walked
last_walked:
  '2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data
  (2xx), console/page-errors, expected content, screenshot verified; live
  screen-reader, touch, offline, and telemetry-delivery checks pending a manual
  AT pass. Evidence: WALKTHROUGH/results/runtime-sweep-2026-05-29.md; content
  re-verified 2026-06-03 against current source'
---

# Nisaba · the manuscript

## Purpose

Manuscript view for one folio (fixture: Vatic. gr. 1950, f. 24v, IV.viii–xii,
imaged Aug 2019). Surfaces a vellum scan with codex metadata, palaeographic
notes, and provenance.

## Entry points

- **Nisaba sub-nav** — verify the manuscript tab wiring on
  [`nisaba.md`](./nisaba.md)
- **Scholar mode** — see [`nisaba-scholar.md`](./nisaba-scholar.md) — links to
  specific manuscripts cited in the apparatus
- **Direct URL / bookmark** — yes

## Layout regions

`page.tsx` is a thin server component: `await getNisabaManuscript()` →
`<NisabaManuscript data={data} />`.

Inside `NisabaManuscript` (`nisaba.tsx`, line 728):

- **Web shell top** — `LCustomerNav active="library"`
- **Breadcrumb strip** — "Library › Nisaba › Manuscripts › Vatic. gr. 1950" /
  "folio 24v · IV.viii–xii · imaged Aug 2019"
- **Two-column body** (`gridTemplateColumns: '1.4fr 1fr'`):
  - **Left — The page** — `LEyebrow` "The page", `LDisplay` "Vatic. gr. 1950, f.
    24v" (with the `v` superscript styled in accent italic); decorative vellum
    panel (radial gradient + `Array.from({length: 18})` ruling lines and
    `Array.from({length: 24})` foxing marks, positioned with deterministic
    `(i * 41) % 100` / `(i * 67) % 100`)
  - **Right column** — codex metadata, palaeographic notes, provenance (verify
    exact layout in `nisaba.tsx` past line 800)

## States

- [ ] **Loaded** — `getNisabaManuscript()` resolves before render
- [ ] **Vellum panel rendering** — deterministic ruling lines + foxing marks
      drawn purely with CSS / positioning math; no images required
- [ ] **Metadata populated** — codex / palaeographic / provenance fields read
      from `data`
- [ ] **Reduced motion** — composes static markup
- [ ] **Standalone PWA / Offline** — verify whether the vellum panel renders
      without network (it should, since it's CSS-only)

## Interactions

### Breadcrumb strip

- [ ] **Library** — navigate to `/library`
- [ ] **Nisaba** — navigate to `/nisaba`
- [ ] **Manuscripts** — verify whether there's a manuscript index route
- [ ] **Vatic. gr. 1950** — non-interactive current manuscript label

### Vellum panel

- [ ] **Pan / zoom** — verify whether the page panel supports pan/zoom or is
      static in V1
- [ ] **Ruling lines / foxing marks** — non-interactive CSS decorations

### Right column

- [ ] **Metadata fields** — verify which fields are link-out (e.g., cataloguing
      record at the holding library)
- [ ] **Palaeographic notes** — verify cross-links to glossary entries
- [ ] **Provenance** — verify whether each provenance entry links to its source

## Data & contracts

- **Reads**: `getNisabaManuscript()` from `@/lib/lilith-data/nisaba-depth` —
  returns `NisabaManuscriptData` (verify shape: codex metadata, palaeographic
  notes, provenance entries)
- **Writes**: _None._
- **Realtime**: _None._
- **Caching**: server fetch
- **Auth/role check**: shell middleware

## Cross-references

- Sibling Nisaba routes:
  - [`nisaba.md`](./nisaba.md), [`nisaba-compare.md`](./nisaba-compare.md),
    [`nisaba-daily.md`](./nisaba-daily.md),
    [`nisaba-graph.md`](./nisaba-graph.md),
    [`nisaba-lexicon.md`](./nisaba-lexicon.md),
    [`nisaba-notebook.md`](./nisaba-notebook.md),
    [`nisaba-plan.md`](./nisaba-plan.md),
    [`nisaba-scholar.md`](./nisaba-scholar.md)
- Component sources:
  - `apps/oshun/web/src/components/lilith/nisaba.tsx` (`NisabaManuscript`
    line 728)
- Feature spec: [`V1/features.md#nisaba`](../../../V1/features.md#nisaba)

## Open questions / known gaps

- [ ] Confirm whether pan / zoom on the vellum panel is in scope for V1
- [ ] Document the manuscript breadcrumb chain — does a `Manuscripts` index
      exist?
- [ ] Document the BFF endpoint that hydrates manuscript metadata once it
      replaces the local fixture
- [ ] Confirm whether a real folio scan should replace the CSS-generated vellum
      specimen
