Skip to content

Show the Invest catalog to everyone, not just existing holders - #2518

Merged
mul53 merged 1 commit into
qafrom
claude/earn-invest-show-catalog
Sep 14, 2026
Merged

mul53 merged 1 commit into
qafrom
claude/earn-invest-show-catalog

Conversation

@mul53

@mul53 mul53 commented Sep 14, 2026

Copy link
Copy Markdown
Collaborator

Gating the whole Invest section on holdings left anyone with a zero xStock balance looking at an Earn page that ends after the vault tiles — no heading, no catalog, no way in. The section that sells you your first stock was only visible once you already owned one.

The escape hatch the gate assumed — "discovery depends entirely on the Stocks tab" — does not exist on qa. The desktop sidebar's NAV_ITEMS is a hardcoded Wallet/Earn/Rewards/Activity, and the redesigned bottom bar reads WHITELIST_TAB_NAMES, which is index/earn/rewards. Neither lists Stocks, so /stocks is reachable only by typing it.

So the gate moves off the section and onto the positions panel, which is the part that actually has nothing to say when you hold nothing. The panel keeps its isHoldingsLoading hold-back so it doesn't appear and then vanish; the catalog is no longer behind that, because it has nothing to wait for and a 164-token mainnet multicall is a slow thing to block a page on.

One consequence worth naming: useXStockHoldings defaults data to [] on error, so a failed multicall is indistinguishable from holding nothing. Before this it silently hid the whole section from a genuine holder. Now it costs them only the positions panel.

Gating the whole Invest section on holdings left anyone with a zero xStock
balance looking at an Earn page that ends after the vault tiles — no heading,
no catalog, no way in. The section that sells you your first stock was only
visible once you already owned one.

The escape hatch the gate assumed — "discovery depends entirely on the Stocks
tab" — does not exist on qa. The desktop sidebar's NAV_ITEMS is a hardcoded
Wallet/Earn/Rewards/Activity, and the redesigned bottom bar reads
WHITELIST_TAB_NAMES, which is index/earn/rewards. Neither lists Stocks, so
/stocks is reachable only by typing it.

So the gate moves off the section and onto the positions panel, which is the
part that actually has nothing to say when you hold nothing. The panel keeps
its isHoldingsLoading hold-back so it doesn't appear and then vanish; the
catalog is no longer behind that, because it has nothing to wait for and a
164-token mainnet multicall is a slow thing to block a page on.

One consequence worth naming: useXStockHoldings defaults data to [] on error,
so a failed multicall is indistinguishable from holding nothing. Before this
it silently hid the whole section from a genuine holder. Now it costs them
only the positions panel.

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

vercel Bot commented Sep 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

2 Skipped Deployments
Project Deployment Actions Updated
solid-app Ignored Ignored Sep 14, 2026 10:31am UTC
solid-app-staging Ignored Ignored Sep 14, 2026 10:31am UTC

Request Review

@mul53
mul53 merged commit 460cc38 into qa Sep 14, 2026
5 checks passed
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