Skip to content

Workspace and plan-page polish: contrast, bylines, reachable sidebars, inline back matter#156

Merged
HamptonMakes merged 1 commit into
folder-navigation-polishfrom
workspace-ux-polish
Jul 21, 2026
Merged

Workspace and plan-page polish: contrast, bylines, reachable sidebars, inline back matter#156
HamptonMakes merged 1 commit into
folder-navigation-polishfrom
workspace-ux-polish

Conversation

@HamptonMakes

Copy link
Copy Markdown
Collaborator

Stacked on #155 (review round from staging, all eight items in one PR — the logic overlaps heavily).

Workspace

  • Light-mode contrast: rows and cards get a faintly dark --card-edge outline + soft shadow, over a slightly darker page background (#eef0f5). The old white-on-white glass edges gave cards no definition at all in light mode.
  • Byline pinned top-right: author avatar + timestamp anchor to the card's top-right corner regardless of how the title wraps — no more meta drifting mid-card.
  • Row tag chips removed: the sidebar already filters by tag, and the chips were what pushed the byline off its corner. (A request spec now pins this: tags in the sidebar, not on rows.)
  • Row bookmark removed: rows file via drag & drop; the plan page's title bookmark is the click path into the folder navigator. The workspace no longer renders the picker popover at all.
  • "Since you last looked" spaced out — it read as one bunched block.

Sidebars that can actually scroll

A sticky sidebar taller than the viewport pins its overflow below the fold where no amount of page scrolling can reach it. Both the workspace sidebar and the plan page's document outline are now their own scroll containers (thin scrollbar, unchanged look when they fit).

Plan-page back matter

  • References/Attachments move inside the content column, closing out the document after a horizontal rule — instead of sitting below both columns, where a long outline collided with them and scrolling produced the sidebar-overlap artifact.
  • Empty sections are one quiet line ("None yet — …") instead of a padded card; the + button still opens the same add modals, uploads still stream in place with progress.
  • The text-selection (comment) target is scoped to an inner wrapper so back matter can't take comment anchors that would never resolve against the document body.

Testing

Full suite: 1312 examples, 0 failures. Row-bookmark system specs rewritten against the plan-page bookmark (save, silent unsave, other-author shelving); references specs updated for the compact empty states.

🤖 Generated with Claude Code

…, inline back matter

Light mode gets real definition: a faintly dark --card-edge outline plus
a soft shadow on rows and cards, over a slightly darker page background —
the old white-on-white glass edges disappeared entirely. Rows lose their
tag chips (the sidebar already filters by tag) and their hover bookmark
(drag & drop files rows; the plan page's title bookmark is the click
path), and the byline pins to the card's top-right corner instead of
drifting wherever the title wrap left it. "Since you last looked" gets
room to breathe.

Sticky sidebars taller than the viewport used to pin their overflow
below the fold where no amount of scrolling could reach it — the
workspace sidebar and the document outline are now their own scroll
containers.

References and attachments move inside the content column, closing out
the document after a rule instead of sitting below both columns (where
long outlines collided with them). Empty sections are one quiet line,
not a padded card. The text-selection target is scoped to an inner
wrapper so back matter can't take comment anchors that would never
resolve.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@HamptonMakes
HamptonMakes merged commit 88c86f4 into folder-navigation-polish Jul 21, 2026
3 checks passed
@HamptonMakes
HamptonMakes deleted the workspace-ux-polish branch July 21, 2026 20:36
HamptonMakes added a commit that referenced this pull request Jul 22, 2026
…ative-feel fixes (#155)

* Folder navigation polish: spring-loaded tunneling, whole-card rows, native-feel fixes

Drag and drop grows Finder semantics: hovering a folder (row, crumb, or
sidebar node) mid-drag pulses twice and then tunnels the pane into that
folder — prefetched during the dwell, restored if the drag is abandoned,
committed with a Turbo visit on drop. The whole pane accepts drops for
"file right here"; inner targets win via stopPropagation. Sidebar
branches spring open multi-level and snap shut when the cursor leaves.

Rows are now fully clickable (stretched title link) and prefetch on
hover. Backspace on a plan page goes back to the folder you came from:
Turbo never updates document.referrer, so the controller tracks in-app
visits itself, and cold opens fall back to the plan's folder in your
library instead of the workspace root. Folder.paths_by_id's walk guard
is now a real cycle guard, so deeper-than-cap data renders full paths.

Native-feel fixes, now a hard requirement in AGENTS.md: stable
scrollbar gutter kills the workspace/plan width jiggle; attachments
upload in place with an XHR progress bar + Turbo Stream update and
toasts instead of a scroll-to-top reload. The save bookmark moves next
to the plan title (stamped from outside the broadcast-rendered header),
presence avatars link to profiles, tag chips link to search, and the
sidebar's hidden filters read as "Show my private plans" / "Show
archived".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Workspace and plan-page polish: contrast, bylines, reachable sidebars, inline back matter (#156)

Light mode gets real definition: a faintly dark --card-edge outline plus
a soft shadow on rows and cards, over a slightly darker page background —
the old white-on-white glass edges disappeared entirely. Rows lose their
tag chips (the sidebar already filters by tag) and their hover bookmark
(drag & drop files rows; the plan page's title bookmark is the click
path), and the byline pins to the card's top-right corner instead of
drifting wherever the title wrap left it. "Since you last looked" gets
room to breathe.

Sticky sidebars taller than the viewport used to pin their overflow
below the fold where no amount of scrolling could reach it — the
workspace sidebar and the document outline are now their own scroll
containers.

References and attachments move inside the content column, closing out
the document after a rule instead of sitting below both columns (where
long outlines collided with them). Empty sections are one quiet line,
not a padded card. The text-selection target is scoped to an inner
wrapper so back matter can't take comment anchors that would never
resolve.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Codex review fixes + a drop runway below level contents

Abort in-flight uploads when the dropzone controller disconnects: every
plan page has the same #plan-attachments target, so a Turbo navigation
mid-upload would let plan A's late response replace plan B's section.

Stream the attachment and reference counters (footnote header AND the
document outline) alongside the section replacement — they were rendered
by the redirect these stream responses replaced, and went stale.

While a drag is live the workspace pane grows bottom padding and a
minimum height: an empty folder — especially one just tunneled into —
offered almost nothing to drop on. Padding, not margin, so the runway
is inside the pane's drop target.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Deracify the checkbox-sequence spec: wait for the live-update swap to land

Toggling a checkbox bumps the revision, and Broadcaster.replace_plan_content
answers with a whole-body re-render over the plan's Turbo Stream.
wait_for_version only polls the DB, so the spec could grab the second
checkbox from the old DOM an instant before the swap landed and click a
detached node (StaleElementReferenceError — seen locally once and on CI).

The custom coplan-replace-if-clean action stamps the incoming revision on
#plan-content-body after swapping, so waiting for that stamp is a race-free
signal that the re-render has already happened.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

1 participant