Studycase · Student guide

Using the cockpit

No screenshots — on purpose. They'd go stale the moment a label or layout changes, and pixel truth is already owned elsewhere (e2e/visual.spec.ts, QA-12, diffs real screenshots on every change). This page describes the cockpit by exact button text, keyboard keys, and data-testids instead. If something here doesn't match what you see, the app changed and this page is behind — that mismatch is more informative than a stale picture would be.

The long-form version of this guide lives at docs/STUDENT-GUIDE.md in the repo; this page mirrors it. See also docs/HEARING-GUIDE.md for full hearing-type behavior and docs/BROWSER-SUPPORT.md for the capture compatibility matrix.

1. Before you start

Browser: live capture needs Chrome or Edge — the only browsers that reliably hand back tab/system audio through getDisplayMedia today. An unsupported browser shows a full-screen notice with the compatibility matrix and two ways out: dismiss and continue anyway, or “Try demo mode instead — works everywhere.” Demo mode never calls a capture API, so the gate never even evaluates while ?demo=1 is in the URL.

Quick start: “● Start capture” in the top bar opens capture setup (§9); “▶ Replay…” loads a saved session log instead of starting a new one (§10).

2. Layout at a glance

Four surfaces, top to bottom:

  • Top bar — session name, connection badge (LIVE/DEMO/PAUSED/RECONNECTING/REPLAY/…), the hearing-type chip, elapsed clock, a relative/wall-clock timestamp toggle, demeanor toggle, video-sync toggle, replay loader, theater mode, capture button, and the “⌘K commands” / “?” links.
  • Video sync bar (toggled by the “Video”button) — anchors the court video's clock when it plays in another tab (§8).
  • Three resizable panes — drag the thin handles between them; widths persist across reloads. Transcript (left), Notes & analysis (center), Suggestions (right, five cards max).
  • Replay bar — visible only while reviewing a loaded session log (§10).

Press 1 / 2 / 3 any time to jump keyboard focus to a pane — the same key temporarily widens that pane too (a “focus-expand”); Esc restores the saved widths.

3. Keyboard shortcuts

Every shortcut below also appears, searchable, in the ⌘K command palette. Shortcuts are suspended while a text field, a <select>, an open dialog, or the palette itself is focused — typing v (or any bound key) into your notes types the letter, it never fires the action. The palette (⌘K / Ctrl+K) and every action's on-screen button keep working regardless of focus.

Remapping: bindings are fixed in this build — there is no remap setting yet. This table and the palette are the single source of truth for what each key does; if a remap surface ships later, it will live in both.

KeyActionWhere
⌘K / Ctrl+KOpen the command paletteanywhere
HMark the selected transcript utterance (double-click a row does the same)Transcript
JNext utteranceTranscript
KPrevious utteranceTranscript
Shift+JNext marked utterance onlyTranscript
Shift+KPrevious marked utterance onlyTranscript
YCopy the selected utterance (or shift-click range)Transcript
1Focus the transcript paneanywhere
2Focus the notes composeranywhere
3Focus the suggestions paneanywhere
/Focus the free-form chat composeranywhere
MDrop a ◆ mm:ss moment stamp into your notes at the current stream timeanywhere
PPin the newest suggestion cardanywhere
XDismiss the newest suggestion card (5s undo pill follows)anywhere
CCopy the citation of the focused cardSuggestions
SpacePause / resume the world (transcript, suggestions, clocks all freeze)anywhere
TToggle theater mode (translucent panes over the court feed)anywhere
EToggle the demeanor read (facial cues — an automated cue, not a fact)anywhere
VPop the file-mode video into picture-in-picture (no-op unless a recording with video is loaded)anywhere
`Toggle the student terminal draweranywhere
EscClose the palette, or restore panes after a 1/2/3 focus-expandanywhere
Cmd/Ctrl+BBold-wrap the selectionNotes textarea
Cmd/Ctrl+IItalic-wrap the selectionNotes textarea
EnterOn a “- ” line: continue the list (empty item + Enter exits it)Notes textarea
EnterCommit the noteNotes composer
Shift+EnterInsert a literal newlineNotes / chat composer

4. Transcript pane

Each row shows a colored speaker chip (Judge / Counsel P / Counsel R / Witness / Unknown — click it to correct a mislabeled speaker), a timestamp, and the caption text. Objection/ruling language gets a red left border automatically; your marks (H) get an accent-colored left border and a flag icon.

  • Search — the “find…” box in the header (transcript-search) does client-side matching with a match count and / (or Enter/Shift+Enter) stepping.
  • Copy — hover a row for a copy button (that row only), or select a row/range and press Y.
  • Word-click seek— once a video anchor is set (§8), individual words become click targets that request a seek to that word's moment.
  • Return to live — a floating “↓ LIVE · N new” pill appears if you scroll up while new utterances arrive; click it, or run “Jump to live” from the palette.

5. Notes pane — two-ink notes

This is Granola-style two-ink notes:

  • Full ink(bright) = your own typed notes, and any AI analysis you've edited — editing a gray block promotes it to full ink permanently (“✦ edited” replaces “✦ AI” in its byline). This is promote-by-editing: editing a block is keeping it, no separate button.
  • Muted ink (gray) = incoming AI analysis, interleaved chronologically with your notes. Click or double-click a gray block to start editing (which promotes it).

Every AI block's byline shows an “as of” timestamp and clickable source refs. A block with zero refs never stays silent about it: ordinary analysis shows an amber “⚠ no source” chip (no-source); a prep-kind block instead shows “· from case files”— the protocol's one legitimate refs-less exemption (§11). A re-sent analysis you'd already edited shows a “⚠ differs from re-sent original” chip (conflict-chip) — your edit is kept, the chip just says so.

Composer: Enter commits a note; Shift+Enter inserts a newline. Committed notes render through the same tiny markdown subset the AI blocks use (bold, italic, code, “- ” bullets, #–#### headings) — click a rendered note to re-enter raw-text editing.

The three pull-ask buttons, above the chat box (pull beats push — these fire on demand, not automatically):

ButtonWhat it asks for
Summarize last 2 mina summary of the last 120s of the record
Pending objection?whether an objection is currently outstanding
Draft responsea drafted response to the current line of argument

All three (and free-form chat, focus with /) share one shape: your question lands as a full-ink block, the streamed answer lands as a muted-ink block right after it, in the same chronological list as everything else.

✨ Enhance (enhance-notes) restructures the session into a clean outline and opens a per-section review (enhance-panel): each section is explicitly Accepted or Rejected; accepted sections land as new gray blocks — your original notes are never touched, only appended to. Accepted sections carry the same “· from case files” badge pre-session case-file material uses — a shared badge for “refs=[] is expected here,” not a claim that an Enhance section specifically came from an uploaded file.

Export ⤓ downloads your notes as markdown. Your ink exports verbatim, unlabeled. Every unedited AI block exports watermarked with the exact wording “AI analysis — verify before relying” plus its sources or an explicit “(no source utterances)” / “(from case files)” line.

Crash recovery (notes-recovery-banner) — an unfinished session (<1h old) with autosaved notes offers Restore or Dismiss. Local IndexedDB insurance only, never a silent restore.

Factor scoreboard— on TRO/PI and Daubert hearings, a chip row appears above your notes as soon as a Winter or Daubert factor is actually argued (never a pre-filled checklist); click a chip's count to jump to the arguing utterances.

6. Suggestions pane

Case-law cards surface at natural pauses, never mid-utterance, five at most (shown as “N/5” in the header). Confidence is a coarse label, never a fake percentage: Strong (accent), Relevant (neutral), or Speculative (dashed, muted).

Every card has a “Why now” line (click to jump to the triggering utterance), plus Pin (P pins the newest), Dismiss (X dismisses the newest, 5-second Undo pill follows), and Copy citation (C on the focused card). Dismissed/superseded cards land in the History drawer (toggle in the palette), each restorable.

Genius cards (genius-card) are the flagship — a distinct gold-leaf top-slot card with a speakable line in a quotation frame, a pinpoint citation, the same “why now” provenance row, an optional amber Risk row, and a one-tap “Copy line” button. The clipboard payload is the spoken line, then the pinpoint citation, then — on its own trailing line, never appended to the line itself — the same “AI analysis — verify before relying”caveat the notes export uses (LEGAL-12): the first line has to stay clean because it is meant to be read aloud verbatim. See §11 for what “genius” does and doesn't guarantee.

7. The hearing-type picker

The chip next to the connection badge (hearing-type-chip, e.g. “appellate ▾”) is a compact select for the 13 real hearing types plus “Other / auto-detect.”Picking a type tunes which moment detectors fire, the AI's writing register, the Enhance output's structure, and (for some types) how often suggestions push. Full type-by-type behavior lives in docs/HEARING-GUIDE.md— read that before relying on any specific hearing type's behavior; it isn't repeated here.

If the gateway's live detector disagrees with your current pick, a banner appears (hearing-switch-banner: “This sounds like Suppression hearing (3 cues) — switch?”) with Switch / Keep current — the type never changes silently.

7½. Your strategy (the ⚖ button)

Tell the coach your plan: theory of the case, goals, lines to protect, doors not to open. Analysis and cards then lean toward your strategy — but reality is never filtered: authority that cuts against you still surfaces, flagged, and the coach warns when the hearing nears a door you flagged shut. Your words ride to the model verbatim and are never rewritten. Update mid-session whenever the strategy shifts (⌘↩ saves). Intent dials in the same dialog set how loud the coach is — every dial maps to a real engine parameter, none are decorative.

8. Video sync bar

The court video usually plays in another browser tab, which this app cannot read the clock of — the bar is honest about that. Two-gesture calibration:

  1. Click “Mark sync point” (mark-sync) — pins the stream's current time.
  2. Type what the video player shows right now (mm:ss or h:mm:ss) and press “Set” (confirm-anchor, or Enter).

Once anchored, any seek request (a moment-stamp chip, or a word click) shows a copyable “→ video mm:ss” chip (seek-target) — this app cannot drive another tab's player and doesn't pretend to. Using “Play a recording” (file playback) instead drives that player directly, no copy step needed.

9. Capture & onboarding

“● Start capture” opens capture setup, which is per-OS (detected automatically):

  • macOS + Chrome (onboarding-mac): play the court video in a Chrome tab, choose Chrome Tab in the share picker (macOS Chrome only captures audio from a tab), and make sure “Share tab audio” is on — the step most often missed; a no-audio failure routes back here with that exact step highlighted amber.
  • Windows + Chrome (onboarding-windows): play the video anywhere, choose Entire screen, and enable “Share system audio”.

The dialog includes a labeled CSS illustration of the share picker (share-illustration, not a screenshot — “yours may differ slightly,” stated on the illustration itself) and a live level meter confirming audio the moment sharing succeeds.

Recording consent (recording-consent): recording and consent laws vary by jurisdiction, so capture setup includes a notice and an affirmation checkbox — you affirm you have the right to capture the feed (a public hearing, your own practice round, or licensed material). Capture will not start until it's checked; the affirmation lasts for your current session only (a new tab or browser session asks again). Practice mode (mic) shows the same notice in its own small dialog the first time.

Face tracking (experimental, off by default): when enabled, the app can follow faces in the captured video as anonymous, stable tracks — “Face A,” “Face B,” and so on — so you can name each one once (Judge / Counsel P / Counsel R / Witness). All of that analysis runs entirely on your device: no face image, crop, or landmark data is ever sent anywhere, logged, or stored beyond the current tab — the only thing that persists is the plain-text role you pick for a track. Naming a track feeds ≈ match speakers (§12½) — suggested matches apply only when you confirm them.

Troubleshooting

  • No audio in the share: the onboarding reopens with the missed audio step highlighted amber. Re-share and keep the audio toggle on; on macOS pick a tab, never "Entire screen" (Chrome on macOS carries no system audio).
  • Silent mid-hearing: after ~10s of true silence a quiet chip appears; any audible second clears it. Recesses are silent — the chip is information, not an alarm, and it never re-nags.
  • Hit "Stop sharing" by accident: nothing is lost — the session pauses gracefully and ● Start capture resumes into the same transcript.
  • Permission denied / unsupported: allow screen sharing in site settings and use current Chrome or Edge. Full table: docs/CAPTURE-GUIDE.md.

10. Replay

“▶ Replay…” (replay-load) loads a stored session's event log (a .jsonl file) and rebuilds every pane through the exact same event path a live session uses — a REPLAY badge and the replay bar are the only visible difference. The bar shows a density strip (density-strip: utterance density per bin, plus accent ticks for suggestions and amber ticks for your marks — click to seek), a scrub slider, and elapsed/total time. It says exactly what it can't do: “events only — no audio (S3-3)”— the event record replays, audio storage doesn't exist yet. Exit returns to live.

11. Anti-fabrication culture

Every AI-generated block is labeled (the muted-ink treatment, never mixed silently into your own ink), grounded (clickable source refs, or an explicit “no source” / “from case files” chip when there legitimately are none), and yours to verify — the export watermark says so in as many words: “AI analysis — verify before relying.”

Genius lines go through a deterministic six-sigma citation gate before you see them (docs/GENIUS-LINES.md §2.3): every authority cited must resolve against the verified index this build has actually ingested, or the line is discarded and regenerated (up to 2 retries, then it falls back to an ordinary suggestion card). That gate is real and strict — but it is corpus-honesty, not truth-in-the-world: “verified” means “in our index,” not “verified as legally correct for your case.” Treat a genius line like a sharp classmate's cite-check — trustworthy enough to build on, never a substitute for reading the case yourself before you say it out loud.

12. A suggested moot-court prep workflow

One way to use the cockpit end to end for a moot-court round:

  1. Prep sheet, if one arrives. Sessions started with uploaded case files can get a prep-kind block at the top of your notes. Use the Case filesbutton in the top bar to attach your motion or key filings (pdf, docx, or txt) — case files join the coach's retrieval at session start, so the dialog relaunches the session carrying them. If you skip this step, Step 6 (Enhance) still gets you a structured outline afterward.
  2. Live marks + moment stamps as the round runs — H marks a consequential utterance, M drops a ◆ mm:ss stamp into your notes. Both are free; mark liberally, prune later.
  3. Steer with the hearing-type picker — set it to Moot court (or Appellate argument for a straight drill) so the right detectors and register are armed (§7).
  4. Pull the three asks (or free-form chat, /) when you need a fast summary, an objection check, or a drafted response.
  5. Genius lines — verify, then speak.Read the pinpoint citation and “why now” line before using a genius line out loud (§11). Pin the ones you're keeping; dismiss the rest.
  6. Enhance, then export. After the round, run ✨ enhance, accept the sections worth keeping, then export ⤓ for a clean markdown record with every AI contribution labeled and sourced.
  7. Replay review, with the ballot. Load a saved .jsonl log through ▶ Replay…. Moot court sessions get a moot-court ballot appended to the Enhance artifact — one per arguing channel with ≥3 turns, five coarse axes (knowledge of the record, responsiveness to questions, organization/signposting, use of authority, delivery), each strong/adequate/needs_work with real utterance citations, never a point total. See docs/HEARING-GUIDE.md “The moot-court ballot.”
  8. End on purpose. Palette (⌘K) → End session when the hearing wraps: the badge flips to ENDED and a closing strip offers ✨ Enhance / export ⤓ / ⬇ Bundle — the walk-away flow in one place. (A finished demo ends itself the same way.)

12½. Video extras (opt-in)

  • J/K follows the video. In the Video bar, tick J/K follows and transcript navigation quietly seeks the video too — off by default so nothing jumps unless you asked.
  • Face tracks (experimental flag). With the face-tracks flag on and court video captured, stable faces appear as chips (Face A, B…). Name each once, then ≈ match speakers correlates mouth activity with the transcript and SUGGESTS matches — every match shows its evidence and applies only when you confirm it. All face processing stays on this device; only the names you pick are stored (§ privacy note above).

13. Where to go next

  • docs/HEARING-GUIDE.md— every hearing type's exact behavior, live auto-detection, the moot-court ballot, and how to add a new type.
  • docs/HEARING-TYPES.md — the taxonomy and research behind those types.
  • docs/BROWSER-SUPPORT.md — the full capture compatibility matrix.
  • docs/GENIUS-LINES.md — the design for role tracking and the genius-line pipeline.