Skip to content

[RELEASE] chore(tangle-cloud): UX polish pass — banners, sidebar, empty states, heights#3210

Merged
drewstone merged 1 commit into
developfrom
chore/cloud-ux-polish
May 14, 2026
Merged

[RELEASE] chore(tangle-cloud): UX polish pass — banners, sidebar, empty states, heights#3210
drewstone merged 1 commit into
developfrom
chore/cloud-ux-polish

Conversation

@tangletools
Copy link
Copy Markdown
Contributor

Drew's audit findings from running tangle-cloud through screenshots:

  1. Decorative status pills with no data (Services Live / Orders Tracked / Wallet Scoped, etc.)
  2. Sidebar `Collapse` text-labeled item sitting in the nav stack like Home/Blueprints — non-standard pattern
  3. 4-cell `Locked` pseudo-grids inside every wallet-required empty state, reading as "page broken" rather than "needs wallet"
  4. Inconsistent vertical heights on side-by-side cards
  5. "Total Value Locked" tab that actually showed wallet-scoped deposits

This PR addresses all five. Net -409 / +108.

Changes by area

Sidebar

  • Move collapse control out of the nav stack → icon-only button floating on the sidebar's right edge (VSCode / Linear / Vercel pattern). Shows on hover/focus, flips orientation when collapsed.

Hero pills

  • Drop `HeroMetric` pills from `instances/page.tsx`, `earnings/page.tsx` (both states), `rewards/page.tsx` (both states). They had no real data.
  • Operators/Blueprints keep their hero metrics because those are real counts.

Empty states (4-cell `Locked` grids deleted)

  • `RequireWallet`: dropped the `Account / Network / Tx / History → Locked` grid; kept the eyebrow + title + description + chips + Connect button.
  • `AccountStatsCard` (home): dropped the 2x2 `Services / Approvals / Jobs / Balances → Locked` grid; clarified the copy ("Public catalog and operator registry data load below without a wallet").
  • `TotalValueLocked`: rewrote. The panel was mis-titled — the underlying hook returns the connected wallet's deposits, not network TVL. Renamed to "My deposits", dropped the single-tab `Tabs` scaffolding, replaced the 4-cell disconnected state with a clean one-row CTA.
  • Deleted the `EarningsPreviewPanel` and `RewardsPreviewPanel` blocks with fake `TNT / USDC / ETH → Connect wallet | Locked` rows.

Layout heights

  • Replaced `xl:grid-cols-[1.05fr_0.95fr] xl:items-start` with `xl:grid-cols-2 xl:auto-rows-fr xl:items-stretch` on the home page.
  • `AccountStatsCard` uses `flex h-full flex-col` + `mt-auto` on the CTA so empty/filled variants stay equal-height with `InstructionCard`.

Verification

  • `yarn typecheck` ✓
  • `yarn lint` ✓
  • `yarn build:tangle-cloud` ✓
  • Playwright on local dist: home renders without decorative pills, sidebar collapse button gone from the nav stack, wallet-required cards are single-row CTAs, "My deposits" panel shows accurate title.

Tagged `[RELEASE]` so auto-sync will FF master once merged.

…ty states, heights

Audit screenshots showed the same set of paper-cuts on every page: decorative
"status" pills that carried no data, an unconventional text-labeled sidebar
collapse button, 4-cell "Locked" pseudo-grids inside every wallet-required
empty state, and a "Total Value Locked" tab that actually only showed the
wallet's own deposits. Net 409 lines down, 108 lines up.

Sidebar (`apps/tangle-cloud/src/components/Sidebar.tsx`)
- Move the collapse control out of the nav stack into an icon-only button
  floating on the sidebar's right edge (VSCode / Linear / Vercel pattern).
  Only appears on sidebar hover/focus; flips orientation when collapsed.

Hero pills
- Drop the decorative `HeroMetric` pills from `instances/page.tsx` (Services
  Live / Orders Tracked / Wallet Scoped), `earnings/page.tsx` (Assets Grouped
  / Events Indexed / Explorer Linked → and the post-connect variant), and
  `rewards/page.tsx` (Balances Indexed / Claims On-chain / History Auditable
  + post-connect variant). They were ornaments — no real data, just labels.
- Operators/blueprints kept their hero metrics because those are real counts.

Empty states
- `RequireWallet`: drop the right-side 4-cell `Account / Network / Tx /
  History → Locked` grid. The single Connect button + chips of what loads
  after connect is enough; the locked grid was visual noise that read
  "page is broken".
- `AccountStatsCard` (home wallet-required state): same pattern, dropped the
  2x2 `Services / Approvals / Jobs / Balances → Locked` grid, lifted the
  Connect button into the bottom of a single column, made the copy honest
  ("Public catalog and operator registry data load below without a wallet").
- `TotalValueLocked/index.tsx`: rewrote — the panel was titled "Total Value
  Locked" but rendered wallet-scoped `useStakingOverview` deposits. Renamed
  to "My deposits" (heading matches data), dropped the single-tab `Tabs`
  scaffolding, replaced the 4-locked-cells disconnected state with a clean
  one-row CTA. Same source data, accurate label.
- Removed the `EarningsPreviewPanel` + `RewardsPreviewPanel` blocks. Both
  showed fake `TNT / USDC / ETH → Connect wallet | Locked` rows, which
  rendered the screen as "broken table" rather than "needs wallet".

Layout heights (`instances/page.tsx`)
- Replaced the `xl:grid-cols-[1.05fr_0.95fr] xl:items-start` ladder with
  `xl:grid-cols-2 xl:auto-rows-fr xl:items-stretch` so AccountStatsCard and
  InstructionCard share a row height. AccountStatsCard now uses
  `flex h-full flex-col` and pins the Connect button to the bottom with
  `mt-auto` so empty/filled variants stay equal.

Verified
- `yarn typecheck`, `yarn lint`, `yarn build:tangle-cloud` all clean
- Playwright on local dist: home renders without decorative pills, sidebar
  collapse button is gone from the nav stack, wallet-required cards are
  single-row CTAs, "My deposits" panel shows accurate title.
@tangletools tangletools requested a review from AtelyPham as a code owner May 14, 2026 13:35
@drewstone drewstone merged commit fcfe683 into develop May 14, 2026
8 checks passed
@drewstone drewstone deleted the chore/cloud-ux-polish branch May 14, 2026 13:41
drewstone added a commit that referenced this pull request May 14, 2026
…, not just HEAD

The auto-sync workflow's `if` guarded on `github.event.head_commit.message`,
which silently skipped merge-commit-style PRs: the `Merge pull request #NNNN
from …` subject of the merge commit never starts with `[RELEASE]` even when
the merged commit underneath does. Net effect: any release PR landed via the
default GitHub "Create a merge commit" button bypassed master promotion (saw
this on #3210 — develop got the UX polish, master stayed on the previous tip).

Switch the guard to `contains(toJson(github.event.commits.*.message), '[RELEASE]')`
so any commit in the push body counts. Squash-merge style (which we recommend
in CLAUDE.md) continues to work; classic merge-commit style now also works
without forcing the reviewer to override the merge subject.

CLAUDE.md updated to document both squash-merge and merge-commit paths.
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