Skip to content

fix(web-client): keep chat transcript from covering the dashboard#1858

Open
john-the-dev wants to merge 1 commit into
sonichi:mainfrom
john-the-dev:fix/web-chat-overlap-clean
Open

fix(web-client): keep chat transcript from covering the dashboard#1858
john-the-dev wants to merge 1 commit into
sonichi:mainfrom
john-the-dev:fix/web-chat-overlap-clean

Conversation

@john-the-dev

@john-the-dev john-the-dev commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Problem

The web UI chat transcript + input live in #bottom-panel, which is position: fixed; bottom: 0. The dashboard (#dynamic-region — Tasks / Notes / Questions) is in normal document flow above it. The body only reserved a static padding-bottom: 60px for the input bar — not for the transcript, which grows up to 50vh. So as chat history piled up, the fixed panel expanded upward and covered the dashboard's Questions panel; scrolling to the bottom couldn't bring it into the clear because there was no clearance below it.

Fix

A ResizeObserver (syncBottomPad) keeps body padding-bottom synced to the panel's real height, so the dashboard's bottom content always has clearance above the fixed panel.

function syncBottomPad() {
  const bp = $('bottom-panel');
  if (bp) document.body.style.paddingBottom = (bp.offsetHeight + 12) + 'px';
}
// in DOMContentLoaded:
const bp = $('bottom-panel');
if (bp && window.ResizeObserver) { new ResizeObserver(syncBottomPad).observe(bp); }
syncBottomPad();
window.addEventListener('resize', syncBottomPad);

Before / After

Before — real capture of the bug: the chat transcript overlaps the Questions panel (the Q + Yes/No are partially covered).

before

After — with the fix, the Questions panel (Yes / No) sits fully clear above the chat panel.

after

Test

  • tsc --noEmit clean (no web-client errors)
  • Headless probe (Questions panel + tall transcript, scrolled to page bottom): question box covered: true before the fix, covered: false after.

🤖 Generated with Claude Code

The transcript + input live in #bottom-panel (position:fixed at bottom),
while the dashboard (#dynamic-region: tasks/notes/questions) is normal
flow above it. A static body padding-bottom couldn't reserve space for
the transcript, which grows up to 50vh — so a tall chat history floated
over and covered the Questions panel. Sync body padding-bottom with the
panel's real height via ResizeObserver so dashboard content is pushed clear.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

@bassilkhilo-ag2 bassilkhilo-ag2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Minimal and correct. ResizeObserver keeps body padding-bottom in sync with the fixed panel's real height; window.resize fallback handles browsers without ResizeObserver. Single-function change, no side effects. Approve.

@bassilkhilo-ag2 bassilkhilo-ag2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using ResizeObserver to sync body padding-bottom with the fixed panel height is the correct approach — a static padding value cannot track a dynamically-growing chat transcript. The try/catch wrapper is necessary since ResizeObserver is not available on all browsers. resize event listener handles window resize as belt-and-suspenders. Clean fix.

@bassilkhilo-ag2 bassilkhilo-ag2 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Simple and correct fix. ResizeObserver tracks #bottom-panel height dynamically; window resize as fallback; +12px aesthetic gap. This prevents the chat history from covering the Questions panel when the transcript is long. LGTM.

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.

2 participants