Skip to content

Commit d72aa07

Browse files
sktbrdclaude
andauthored
feat(treasury): pair the page's four cards into two rows (#260)
Restructures the treasury page toward the redesign: income side by side with what has accrued but not yet arrived, and fungible holdings side by side with the Gnars themselves. - Inflows (1.85fr) beside Sponsorship yield (1fr). They are the two halves of one question — what the DAO earned, and what it has earned but cannot spend until a claim proposal executes. Reading either alone mis-states the total. - Token Holdings (1.15fr) beside Gnars in Treasury (1fr). Both answer "what is in there". - Drops ZoraCoinHoldings from the page, per the design. NOT included, and deliberately so: the Subnet Earnings KPI. It was built and then removed before commit because it rendered 0.00 USDC when the true figure is 58.29 — the panel on the same page was tagging those rows correctly while the KPI summed them to nothing, and I could not find the cause. A treasury page reporting a confident wrong number is worse than one reporting nothing, so the card, its metric plumbing and its i18n keys are all out. The allocation bar is also still unbuilt. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent eb409a8 commit d72aa07

3 files changed

Lines changed: 25 additions & 33 deletions

File tree

messages/en/treasury.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
"kpis": {
66
"totalValue": "Total Treasury Value",
77
"ethBalance": "ETH Balance",
8-
"totalAuctions": "Total Auction Sales",
9-
"subnetEarnings": "Subnet Earnings",
10-
"subnetEarningsNote": "Morpheus · treasury's 20% share"
8+
"totalAuctions": "Total Auction Sales"
119
},
1210
"nftSection": {
1311
"title": "NFT Holdings",

messages/pt-br/treasury.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
"kpis": {
66
"totalValue": "Valor Total do Tesouro",
77
"ethBalance": "Saldo de ETH",
8-
"totalAuctions": "Total de Vendas em Leilão",
9-
"subnetEarnings": "Ganhos da subnet",
10-
"subnetEarningsNote": "Morpheus · fatia de 20% do tesouro"
8+
"totalAuctions": "Total de Vendas em Leilão"
119
},
1210
"nftSection": {
1311
"title": "Holdings de NFT",

src/app/[locale]/treasury/page.tsx

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { SponsorshipYield } from "@/components/treasury/SponsorshipYield";
1212
import { TokenHoldings } from "@/components/treasury/TokenHoldings";
1313
import { TreasuryBalance } from "@/components/treasury/TreasuryBalance";
1414
import { TreasuryInflows } from "@/components/treasury/TreasuryInflows";
15-
import { ZoraCoinHoldings } from "@/components/treasury/ZoraCoinHoldings";
1615
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
1716
import { DAO_ADDRESSES } from "@/lib/config";
1817

@@ -124,18 +123,18 @@ export default async function TreasuryPage({ params }: { params: Promise<{ local
124123
</Card>
125124
</div>
126125

127-
{/* Rider sponsorship vaults — the DAO's share of the staking yield, and
128-
the proposal that turns it into treasury USDC. */}
129-
<div className="grid grid-cols-1 gap-6 md:grid-cols-3">
126+
{/* Income, paired. Left: what actually arrived and where from. Right:
127+
what has accrued in the rider vaults but has NOT arrived yet — it
128+
needs a claim proposal. Side by side because they are the two halves
129+
of the same question, and reading one without the other overstates
130+
or understates what the DAO has earned. */}
131+
<div className="grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1.85fr)_minmax(0,1fr)]">
132+
<Suspense fallback={<TableSkeleton />}>
133+
<TreasuryInflows locale={locale} />
134+
</Suspense>
130135
<SponsorshipYield />
131136
</div>
132137

133-
{/* What has actually come in lately. Sits directly under the balances:
134-
the KPIs say how much there is, this says where it came from. */}
135-
<Suspense fallback={<TableSkeleton />}>
136-
<TreasuryInflows locale={locale} />
137-
</Suspense>
138-
139138
{/* Charts */}
140139
<div className="grid grid-cols-1 gap-6 lg:grid-cols-3">
141140
<div className="lg:col-span-1 min-w-0">
@@ -149,25 +148,22 @@ export default async function TreasuryPage({ params }: { params: Promise<{ local
149148
</div>
150149
</div>
151150

152-
{/* Token Holdings Table */}
153-
<Suspense fallback={<TableSkeleton />}>
154-
<TokenHoldings treasuryAddress={DAO_ADDRESSES.treasury} />
155-
</Suspense>
156-
157-
{/* Zora Coin Holdings */}
158-
<Suspense fallback={<TableSkeleton />}>
159-
<ZoraCoinHoldings treasuryAddress={DAO_ADDRESSES.treasury} />
160-
</Suspense>
151+
{/* Holdings, paired: fungible on the left, the Gnars themselves on the
152+
right. Both answer "what is in there", so they belong on one row. */}
153+
<div className="grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1.15fr)_minmax(0,1fr)]">
154+
<Suspense fallback={<TableSkeleton />}>
155+
<TokenHoldings treasuryAddress={DAO_ADDRESSES.treasury} />
156+
</Suspense>
161157

162-
{/* NFT Holdings Grid */}
163-
<div className="space-y-4">
164-
<div className="space-y-2">
165-
<h2 className="text-xl font-semibold">{t("page.nftSection.title")}</h2>
166-
<p className="text-sm text-muted-foreground">{t("page.nftSection.description")}</p>
158+
<div className="space-y-4">
159+
<div className="space-y-2">
160+
<h2 className="text-xl font-semibold">{t("page.nftSection.title")}</h2>
161+
<p className="text-sm text-muted-foreground">{t("page.nftSection.description")}</p>
162+
</div>
163+
<Suspense fallback={<NftGridSkeleton />}>
164+
<NftHoldings treasuryAddress={DAO_ADDRESSES.treasury} />
165+
</Suspense>
167166
</div>
168-
<Suspense fallback={<NftGridSkeleton />}>
169-
<NftHoldings treasuryAddress={DAO_ADDRESSES.treasury} />
170-
</Suspense>
171167
</div>
172168
</div>
173169
</div>

0 commit comments

Comments
 (0)