Side-by-Side Split — 5 Variations

Five layout variations of the side-by-side split transcription concept. All share the core idea: PDF scan on one side, editable transcript on the other, with collaborative presence. They differ in information architecture, scroll behavior, and how the connection between scan and text is communicated.

Familienarchiv
Exploration — Round 2
2026-04-04 · @leonievoss
Design space

All five variations place the PDF scan and transcript editor next to each other. The key design decisions that differentiate them are: (1) how scroll positions stay linked between the two panels, (2) where the toolbar and presence indicators live, (3) how paragraph boundaries are expressed, and (4) what happens with the existing bottom panel (metadata, discussion, history).

A

Side-by-side split variations

PDF left, transcript right. Draggable divider. Each variation explores a different approach to linking the scan with the text and organizing the editing UI.

Document detail → Transcribe mode · WRITE_ALL permission

V1 — Plain split, synchronized scroll

V1
The simplest version: a clean vertical split. Both panels scroll independently but are linked — scrolling the transcript moves the PDF to the corresponding region and vice versa. A thin turquoise position marker on the PDF's right edge shows what the transcript cursor maps to. The toolbar sits at the top of the transcript panel. Bottom panel stays below the whole split.
50/50 default split, resizable — toolbar in transcript header, bottom panel retained below both panels.
Desktop · 1040px
MR
Brief von Heinrich an Martha, 14. Mai 1943
HR
Heinrich R.
MR
Martha R.
✎ Transkribieren
Annotieren
Liebe Martha,
Dein Heinrich
Bearbeiten
Vorschau
Verlauf
Du
Oma Inge
Onkel Klaus
1
Liebe Martha,
2
 
3
ich schreibe Dir heute aus dem Lazarett
4
in Breslau. Mach Dir keine Sorgen,
5
es geht mir den Umständen
6
entsprechend gut. Der Arzt sagt
7
[unleserlich]
8
Wochen noch dauern wird.
9
 
10
Die Kinder sollen wissen, dass ich
11
an sie denke. Sag dem kleinen Fritz,
12
er soll auf seine Mutter aufpassen.
13
 
14
In ewiger Liebe,
15
Dein Heinrich
✓ Gespeichert 15 Zeilen Zeile 6, Spalte 34 Oma Inge · Z. 3–4
Metadaten
Transkription
Diskussion 3
Verlauf

V1 · Plain split, synchronized scroll

/* Simplest variant. Two panels, synced scroll, turquoise position marker on PDF edge.
 * Scroll sync: transcript scroll position (normalized 0-1) maps to PDF scroll position.
 * Bidirectional: scrolling PDF also moves the transcript highlight.
 * Debounced sync (50ms) to avoid jitter. User can break sync by scrolling the "other" panel
 * (a small "re-sync" button appears in the toolbar).
 * Bottom panel survives as-is below the split — Transcription tab shows "editing inline" hint. */
ElementValueNotes
Split layout
PDF panelflex:1, min-width:300pxExisting PdfViewer, scroll-synced
Transcript panel380px default, min:280px, max:60vwResizable via drag handle
Position marker3px wide, turquoise, right edge of PDFHeight = (visible transcript lines / total) * PDF height
Scroll syncBidirectional, debounced 50ms"Re-sync" button if user scrolls independently
Toolbar
Height32px, bg:surface, border-bottomEdit/Preview/History + presence right
Presence dots5px circles, user-color, name besideMax 4 visible, +N overflow

V2 — Split with minimap and comment gutter

V2
Builds on V1 with two additions: a minimap on the far right showing the full transcript at a glance (like VS Code), and a narrow comment gutter between line numbers and text where users can leave line-level comments. The minimap shows user cursors as colored dots and the current viewport as a translucent highlight. The gutter shows small speech-bubble icons on lines with comments.
Split + minimap (32px) + comment gutter (28px) — power-user variant with maximum contextual information.
Desktop · 1040px
MR
Brief von Heinrich an Martha, 14. Mai 1943
HR
Heinrich R.
MR
Martha R.
✎ Transkribieren
Liebe Martha,
Dein Heinrich
Bearbeiten
Vorschau
[unleserlich]
Du
Oma Inge
2
+
1
Liebe Martha,
2
 
3
ich schreibe Dir heute aus dem Lazarett
4
in Breslau. Mach Dir keine Sorgen,
5
es geht mir den Umständen
6
entsprechend gut. Der Arzt sagt
7
[unleserlich]
8
Wochen noch dauern wird.
9
 
10
Die Kinder sollen wissen, dass ich
11
an sie denke.
✓ Gespeichert Z. 6, Sp. 34 2 Kommentare offen
Metadaten
Diskussion 3
Verlauf

V2 · Split with minimap & comment gutter

/* Power-user variant. Adds two elements to V1:
 * 1. Minimap (32px, far right): compressed view of all transcript lines as 1px bars.
 *    Viewport highlight (turquoise tint rectangle). User cursor dots (colored, positioned by line).
 *    Click minimap to jump to that position.
 * 2. Comment gutter (28px, between line numbers and text):
 *    Empty circles on uncommented lines (show on hover only).
 *    Filled navy circles with count on lines that have comments.
 *    Click to open a comment popover (reuses existing CommentThread component).
 *    Line-level comments are a new comment type: annotationId=null, lineNumber=N.
 * Bottom panel: Transcription tab removed (now inline). Discussion tab shows document-level comments only. */
ElementValueNotes
Minimap
Width32px, bg:sand, border-left:lineSticky, does not scroll with transcript
Viewport barturquoise 20% opacity, 1px border turquoiseHeight proportional to viewport/total ratio
Line bars1px height, left:4px right:4px, border opacity .4Width proportional to line character count
Cursor dots4px circles, user-color, centered horizontallyPositioned at user's line offset
Comment gutter
Width28px, bg:page, border-right:lineIcons 14px circles, vertically aligned per line
Has commentsnavy bg, white text, font-size:6px countClick opens popover with CommentThread
Emptysand bg, border:line, "+" iconVisible on hover only to reduce noise

V3 — Paragraph-aware split

V3
The transcript side is organized into named paragraph blocks instead of a flat line list. Each paragraph has a small header ("Anrede", "Hauptteil", "Schluss") and a body area. The currently active paragraph is highlighted with a mint border, and the PDF auto-scrolls to show the corresponding region. Users click a paragraph to focus it. This gives structure to the transcription and makes it easier to divide work ("I'll do paragraph 3, you do paragraph 4").
Paragraph blocks with named sections — structured editor, active paragraph highlighted, PDF region linked.
Desktop · 1040px
MR
Brief von Heinrich an Martha, 14. Mai 1943
Du
Oma Inge
✎ Transkribieren
Liebe Martha,
Dein Heinrich
Bearbeiten
Vorschau
+ Abschnitt
✓ Gespeichert
§ 1 — Anrede
Liebe Martha,
§ 2 — Hauptteil
Oma Inge
ich schreibe Dir heute aus dem Lazarett in Breslau. Mach Dir keine Sorgen, es geht mir den Umständen entsprechend gut. Der Arzt sagt [unleserlich] Wochen noch dauern wird.
§ 3 — Familie
Du
Die Kinder sollen wissen, dass ich an sie denke. Sag dem kleinen Fritz, er soll auf seine Mutter aufpassen.
§ 4 — Schluss
In ewiger Liebe,
Dein Heinrich
+ Neuen Abschnitt hinzufügen
4 Abschnitte § 3 aktiv Oma Inge · § 2
Metadaten
Diskussion 3
Verlauf

V3 · Paragraph-aware split

/* Structured variant. Transcript is divided into named paragraph blocks.
 * Each paragraph:
 *   - Header: section number + label (editable) + presence indicator + checkmark if reviewed.
 *   - Body: contenteditable div, full paragraph text.
 *   - Active paragraph: mint border + box-shadow glow. PDF auto-scrolls to corresponding region.
 * PDF region highlight: dashed turquoise rectangle over the approximate area matching the active paragraph.
 *   (User can drag to adjust the PDF region mapping — stored as normalized Y coordinates.)
 * "+ Abschnitt" button in toolbar creates a new paragraph block at the end.
 * Paragraphs can be reordered via drag handle in the header.
 * This variant makes task division explicit: "I'll do §2, you do §3."
 * Trade-off: requires users to define paragraph boundaries upfront — less fluid than line-by-line. */
ElementValueNotes
Paragraph blocks
Block containerborder:1px line, radius:6px, overflow:hiddenActive: border-color:mint, box-shadow:0 0 0 1px mint
Headerbg:sand, py:3px px:8px, font:6px/600 uppercaseSection number + label + presence + status
BodyTinos 16px/1.7, padding:6px 10px, contenteditableUser-color left border when being edited
PDF regiondashed turquoise border, rgba(.05) fill, absoluteMapped via normalized Y coords per paragraph
Interactions
Add paragraphDashed border placeholder at bottomAlso via toolbar "+ Abschnitt" button
ReorderDrag handle in paragraph headerDraggable within the paragraph list
RenameDouble-click section label to editDefault labels: Anrede, Hauptteil, Schluss

V4 — Split with inline discussion threads

V4
Google Docs-style: the transcript is a plain text editor, but users can select a range of text and start a discussion thread on it. Threads appear as highlighted text with a small thread icon in the right margin. Clicking a thread opens a compact comment popover next to the highlighted text. This merges the "transcribe" and "discuss" workflows into one — family members can debate a difficult word ("Is this 'Breslau' or 'Braunau'?") right where it appears.
Split + inline text-anchored discussion threads — select text to start a thread, threads shown as highlights with margin icons.
Desktop · 1040px
MR
Brief von Heinrich an Martha, 14. Mai 1943
✎ Transkribieren
Liebe Martha,
Dein Heinrich
Bearbeiten
Vorschau
[unleserlich]
💬 Diskutieren
Du
Oma Inge
1
Liebe Martha,
2
 
3
ich schreibe Dir heute aus dem Lazarett
4
in Breslau. Mach Dir keine Sorgen,
5
es geht mir den Umständen
6
entsprechend gut. Der Arzt sagt
7
[unleserlich]
8
Wochen noch dauern wird.
9
 
10
Die Kinder sollen wissen, dass ich
11
an sie denke. Sag dem kleinen Fritz,
12
er soll auf seine Mutter aufpassen.
2
1
Diskussion — “Breslau” (Z. 4)
OI
Oma Inge
Ich bin mir sicher, das ist “Breslau” — Heinrich war im Lazarett dort stationiert.
DU
Du
Stimmt, danke! Lass ich so.
✓ Lösen
✓ Gespeichert 12 Zeilen 2 offene Diskussionen
Metadaten
Diskussion 5
Verlauf

V4 · Split with inline discussion threads

/* Google Docs-style inline threads. Key additions:
 * 1. Text-anchored threads: select a word/phrase → click "Diskutieren" → creates an orange-highlighted
 *    range with a numbered circle in the right margin.
 * 2. Click the margin circle to open/close a discussion popover at the bottom of the transcript panel.
 * 3. Thread popover: orange left border, user avatar + name + message, reply input, "Lösen" (resolve) button.
 * 4. Resolved threads: highlight removed, margin icon turns to a checkmark, thread hidden by default.
 * 5. Thread anchors survive text edits via character offset tracking (reanchor on edit).
 * This merges transcription + discussion into one workflow — no need to switch to Discussion tab
 * for transcription-specific questions like "Is this word X or Y?"
 * Thread data model: new table transcription_threads (document_id, anchor_start, anchor_end, resolved). */
ElementValueNotes
Thread highlights
Active highlightbg:rgba(orange,.15), border-bottom:2px orangeInline span wrapping the anchored text range
Margin icon16px circle, orange-tint bg, orange border, countPositioned absolute, aligned to the highlighted line
Resolvedhighlight removed, icon → gray checkmarkToggle "show resolved" in toolbar to review
Thread popover
Containerborder-top:line, bg:white, border-left:3px orangeDocked to bottom of transcript panel
Message14px avatar + 12px name bold + 13px bodyReuses existing CommentThread message pattern
Reply inputtext input + "Lösen" resolve buttonGreen resolve button right-aligned

V5 — Multi-page split with page navigator

V5
Optimized for multi-page letters (the common case — many letters are 2-4 pages). The transcript panel has a page navigator strip at the top showing page thumbnails. Clicking a page loads that PDF page on the left and scrolls the transcript to the corresponding section. The transcript is divided by [Seitenwechsel] markers that create clear page boundaries. A progress indicator shows how many pages are fully transcribed.
Split + page navigator strip + per-page progress — designed for 2-8 page letters, page-level task tracking.
Desktop · 1040px
MR
Brief von Heinrich an Martha, 14. Mai 1943
Fortschritt
2/3
Du
Oma Inge
✎ Transkribieren
Bearbeiten
Vorschau
[unleserlich]
✓ Gespeichert
✓ Seite 1 15 Zeilen · Oma Inge
Liebe Martha, ich schreibe Dir heute aus dem Lazarett in Breslau...
Seite 2 aktiv
16
Die Versorgung hier ist gut, besser als
17
an der Front. Wir bekommen täglich
18
Suppe und manchmal sogar Brot mit
19
Butter. Der Kamerad im Bett neben mir
20
kommt aus Leipzig und erzählt mir
21
von seiner Familie. Das gibt Trost.
22
 
23
Hoffentlich ist der kleine Fritz artig.
24
[unleserlich — 2-3 Zeilen]
Seite 3 noch leer
Klicke hier, um mit Seite 3 zu beginnen
Seite 2 von 3 24 Zeilen gesamt Oma Inge · Z. 16–17
Metadaten
Diskussion 3
Verlauf

V5 · Multi-page split with page navigator

/* Optimized for multi-page letters (the common case).
 * Page navigator: strip above PDF with page dots, arrow buttons, "Seite N von M" label.
 *   - Dot colors: green = fully transcribed, navy = active, gray = empty.
 *   - Click dot or arrow to switch PDF page and auto-scroll transcript.
 * Transcript: continuous scroll with [Seitenwechsel] dividers.
 *   - Page 1 divider: green tint, checkmark, collapsed to summary line when not active.
 *   - Active page divider: blue tint, solid border.
 *   - Empty page divider: dashed border, sand bg, "click to start" hint.
 * Progress bar in topbar: Fortschritt N/M, turquoise fill, visible at a glance.
 * Line numbers are global (continuous across pages) so references stay stable.
 * Per-page attribution: status bar shows who transcribed each page.
 * Data model: transcription text uses "---[Seite N]---" markers to delimit pages. */
ElementValueNotes
Page navigator
Striph:22px, bg:white, border-bottom:line, centeredAbove PDF area
Page dots6px circles: green(done), navy(active), gray(empty)Click to switch page
Arrows← → text buttons, 8px, mutedKeyboard: Ctrl+PgUp/PgDn
Page dividers in transcript
Done pagegreen-tint bg, checkmark, collapsed summaryClick to expand and re-edit
Active pageblue-tint bg, solid border, "aktiv" labelLines below are editable
Empty pagesand bg, dashed border, CTA text"Klicke hier, um zu beginnen"
Progress
Topbar bar60px × 4px, border bg, turquoise fillFraction label: "2/3" in turquoise bold

Implementation Guide — Side-by-Side Split Variations

1. Variation Comparison

Var.Key ideaBest forComplexity
V1Plain split, synced scrollSimplest start, works for all letter typesLow
V2+ Minimap + comment gutterLong letters, power users who want overviewMedium
V3Paragraph blocks with named sectionsDividing work ("I'll do section 2")Medium
V4+ Inline discussion threads on textDebating unclear words/passages collaborativelyHigh
V5Multi-page navigator + per-page progressMulti-page letters (2-8 pages), task trackingMedium

2. Recommended Build Order

  1. V1 as the foundation — split layout, scroll sync, toolbar, presence, auto-save. This is the MVP.
  2. V5 page navigator next — multi-page letters are the common case and V1 alone doesn't address page boundaries well.
  3. V4 inline threads — the highest-value UX innovation. Merges transcription and discussion workflows.
  4. V2 minimap + gutter — nice-to-have for long documents, can be toggled on/off in user preferences.
  5. V3 paragraph blocks — alternative to V1's line-by-line approach. Consider as an opt-in "structured mode" rather than a replacement.

V1 + V5 together form the complete baseline experience. V4 is the most innovative addition.

3. Composability

These variations are not mutually exclusive. They can be layered:

4. Shared Technical Foundation (all variations)

5. Mobile Strategy (all variations)

On screens <768px, the split becomes a stacked layout:

6. Accessibility (all variations)