Skip to content

fix: redesign the multi-note popover as calm preview cards (#116)#117

Merged
kbennett2000 merged 1 commit into
mainfrom
slice/116-multinote-popover-ux
Jun 10, 2026
Merged

fix: redesign the multi-note popover as calm preview cards (#116)#117
kbennett2000 merged 1 commit into
mainfrom
slice/116-multinote-popover-ux

Conversation

@kbennett2000

Copy link
Copy Markdown
Owner

Fixes #116.

What landed

The multi-note popover shipped in #114 drew direct feedback: "It scrolls forever, it's not clear where the break between notes lies, and most importantly this is a very scary UI for a non-technical user." Causes:

  • Each note rendered its full raw Markdown (whitespace-pre-wrap) — a wall of #/*/> that grew without bound.
  • Notes were separated only by border-t border-gray-100, which has no dark: variant, so in dark mode (the reported screenshot) the breaks were nearly invisible.

The list is now a stack of distinct bordered preview cards, mirroring the existing Search/Browse note-card pattern:

  • One plain-text preview line per note via the existing notePreview() helper (strips Markdown, truncates to 120 chars) — no scary raw syntax, naturally short.
  • Each note is its own card (rounded border border-gray-200 dark:border-gray-700 …) with clear gaps — obvious breaks in light and dark alike.
  • Tags shown as chips; the out-of-scope "Written for …" label retained; a chevron signals tappability.
  • The whole card is tappable to open the full note — the editor in the reader (existing onOpen), or a reader deep-link in compare.

The component's props contract is unchanged, so ReaderView and CompareView needed no changes.

How it was verified

  • Tests: rewrote AnnotationsPopover.test.tsx for the card markup and added a preview/clamp test (long Markdown → stripped, ≤121-char preview ending in "…", raw note never dumped) and an empty-note test; updated the reader multi-note test's selector. Full suite green: 233 tests. ESLint + TS-strict clean; production build clean.
  • Visual (dark mode): rendered the real component with representative data (4 notes incl. long Markdown + an out-of-scope note) and captured a headless-Chrome screenshot at mobile width — distinct cards, clean one-line previews, tags, "Written for KJV" label, visible borders, no overflow wall. (Throwaway harness removed; not committed.)

Before → after

  • Before: full raw Markdown of every note in one long, run-together scroll; dark-mode dividers invisible.
  • After: a short, scannable stack of bordered cards; tap one to read it in full.

🤖 Generated with Claude Code

The list of notes on a verse (shipped in #114) rendered each note's full
raw Markdown in one run-together scroll, separated only by a divider with
no dark-mode variant — it scrolled forever, the breaks were invisible in
dark mode, and it read as a scary wall of `#`/`*` to a non-technical user
(#116).

Each note is now a distinct bordered card showing a one-line plain-text
preview (reusing notePreview(), which strips Markdown and truncates), its
tags, and a chevron — the whole card tappable to open the full note
(editor in the reader, reader deep-link in compare). Mirrors the
Search/Browse note-card pattern. The props contract is unchanged, so
ReaderView/CompareView need no changes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kbennett2000 kbennett2000 merged commit 4e95d89 into main Jun 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The UX for pop-up screen on verses with multiple notes is bad

1 participant