v0.6.6.0 ux: polish — second wave of browser-agent review fixes#155
Merged
Conversation
Picks up the P1/P2 findings deferred from #154 (the hardening pass). 6 of the remaining UX review findings closed. Settings cleanup (P1 #7, #9) - Theme switcher relocated from page header (where it looked like a breadcrumb pill) to a dedicated "Visual theme" card in Settings. - AI provider section now titled "AI brain — needed for Chat (optional otherwise)" instead of just "(optional)" — the Chat feature requires it, the old title was misleading. Chat → Settings deep-link (P1 #9) - When POST /messages returns 409 "no AI provider configured", the chat bubble explains the dependency + footer link to Settings → AI brain. Previously the user got "No AI provider configured" with no path forward. Onboarding modal dimmer (P2 #15) - Bumped overlay rgba(0,0,0,.85) → .92 + backdrop-filter: blur(4px) so the sidebar/page behind the modal is properly muted (was bleeding through the glass effect at .85). Console error spam reduction (P2 #20) - New isApiKnownOffline() in api-client.js. Badge-poll loop in app.js backs off 10s → 60s when API is known down. Pre-fix produced 110+ console errors/min against a dead server. Date input theming on Audit (P1 #11) - New .themed-date class so native date inputs match the dark glass aesthetic (background, border, color-scheme for picker icon). - Webkit calendar-picker-indicator filter inverts the icon glyph on dark themes so it's actually visible. Tests: no new unit tests (browser-only). Backend suite still green across 40 packages. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR ships a second wave of UX polish fixes from the browser-agent review follow-up to #154, focusing on making Settings/Chat flows clearer, reducing offline noise, and improving visual consistency.
Changes:
- Relocates the theme switcher from the global header into a dedicated Settings “Visual theme” card, and updates Settings copy to better communicate AI provider requirements for Chat.
- Adds a Chat error-state affordance that links users to Settings when no AI provider is configured.
- Reduces offline console spam by tracking “API known offline” state and backing off the approvals badge polling cadence; improves Audit date input theming and strengthens the onboarding modal dimmer.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
VERSION |
Bumps version to 0.6.6.0. |
CHANGELOG.md |
Documents the v0.6.6.0 UX polish items and testing notes. |
apps/web/public/js/theme-switcher.js |
Changes mounting strategy to require an explicit target container (Settings card). |
apps/web/public/js/pages/settings.js |
Adds a “Visual theme” card, mounts the theme switcher there, and updates AI brain section labeling/copy. |
apps/web/public/js/pages/audit.js |
Applies .themed-date styling and adds date input aria labels. |
apps/web/public/js/pages/assistant.js |
Adds a “needs setup” footer link for the “no provider configured” Chat failure mode. |
apps/web/public/js/app.js |
Stops header-mounting the theme switcher; backs off approval badge polling when API is known offline. |
apps/web/public/js/api-client.js |
Introduces isApiKnownOffline() and tracks offline/online transitions in fetchJSON(). |
apps/web/public/css/styles.css |
Adds .themed-date styling and strengthens onboarding overlay dimming (alpha + blur). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+170
to
+174
| export function mountThemeSwitcher(target) { | ||
| if (!target) return; // header auto-mount removed; explicit target required | ||
| // Remove any prior mount so the dropdown lives at exactly one location. | ||
| const existing = document.getElementById('theme-switcher-root'); | ||
| if (existing) return; | ||
| if (existing) existing.remove(); |
Comment on lines
+10
to
12
| import { fetchPendingApprovals, fetchHealth, fetchUser, listUsers, escapeHtml, isApiKnownOffline } from './api-client.js'; | ||
| import { initTheme } from './theme-switcher.js'; | ||
| import { connectSSE, disconnectSSE, isConnected } from './sse-client.js'; |
Comment on lines
+246
to
+254
| if (intentRoute?.kind === 'needs-setup') { | ||
| // UX review #9: deep-link to Settings AI brain section. Hash route | ||
| // keeps it inside the SPA. Friendlier than telling the user | ||
| // "configure a provider" with no path forward. | ||
| const target = intentRoute.target || '#/settings'; | ||
| return ` | ||
| <div class="assistant-action-footer assistant-action-footer-approval"> | ||
| <a class="assistant-action-link" href="${escapeHtml(target)}">Open Settings → AI brain →</a> | ||
| </div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Picks up the P1/P2 findings deferred from #154 (the hardening pass). 6 of the remaining UX review items from `.context/ux-review/FINDINGS.md` closed.
What ships
Settings — what's required and where it lives
Chat → Settings deep-link (P1 #9)
Onboarding modal dimmer (P2 #15)
Console error spam reduction (P2 #20)
Date input theming on Audit (P1 #11)
Visual verification
Test plan
What's still open from FINDINGS.md
🤖 Generated with Claude Code