feat: post-PR-159 UI cleanup — sidebar IA + account redesign #160
Reference in New Issue
Block a user
Delete Branch "feat/account-redesign-cleanup"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Post-PR-159 UI cleanup pass. Three loosely-related refactors that all started with "the page has too many cards drifting apart from each other".
What changed
0f90c0eSidebar IA — single source of truthKilled the dual
railGroups+sectionsdefinitions that had drifted apart. One source of truth (workItems+libraryItems+footerItems) rendered in both pinned and rail modes; pin/unpin is now just a width affordance, not an IA switch. Hairline divider replaces section labels. Renames: Home → Dashboard, History → Sessions, Insights → Analytics. Guides moved to the footer alongside Account.8612042Account settings index redesignThe page had ~12 distinct card surfaces with three places of nested cards-inside-cards, against PRODUCT.md's "elevation = lighter surface + border" + "nested cards are always wrong" rules. Branding appeared twice, Display Code lived in Identity but does invite work, and Preferences got a full card for one dropdown.
Single column, max-w-3xl, no card chrome. Sections separated by
border-trules + mono-uppercase section labels:Drops: Access & Security card (filler), Preferences card, Settings Areas link grid, billing-card branding-status duplicate. Default export format moved to Profile Settings.
856 → 710 lines on the index. Net -123 lines for the file pair.
07a3f01Fix Seats blank value (found by /qa)Backend
/subscriptionreturns usage as{tree_count, session_count_this_month}only — nouser_count. TS type lies, declaresuser_count: numbernon-optional. Old card-stack design hid the gap visually; new flat layout surfaced it as a blank current value. Fix: fall back tomembers.lengthfor owners; hide the row for non-owners.QA report
.gstack/qa-reports/qa-report-account-redesign-2026-05-05.md— owner + engineer paths tested live. Health score 95/100 post-fix. Console clean across all five page loads.Out of redesign scope
/subscriptionshould returnuser_countto honor the type (frontend hack works but is defensive)Verified
🤖 Generated with Claude Code
The /subscription endpoint returns usage as {tree_count, session_count_this_month} without user_count, so the Seats UsageRow rendered as " / ∞" (blank current value). The TS type declared user_count: number, hiding this API/type drift; the old card-stack design hid it visually because each stat had its own border. The new flat layout surfaced the gap. Owners get a fallback to members.length (already fetched). Non-owners can't fetch members and don't need seat-count info, so the row hides entirely for them. Verified live: owner now sees Seats 2 / ∞. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>