@@ -9,11 +9,11 @@ import {
99} from "@/components/skeletons/treasury-skeletons" ;
1010import { NftHoldings } from "@/components/treasury/NftHoldings" ;
1111import { SponsorshipYield } from "@/components/treasury/SponsorshipYield" ;
12+ import { SyncedBadge } from "@/components/treasury/SyncedBadge" ;
1213import { TokenHoldings } from "@/components/treasury/TokenHoldings" ;
1314import { TreasuryAllocation } from "@/components/treasury/TreasuryAllocation" ;
14- import { TreasuryBalance } from "@/components/treasury/TreasuryBalance" ;
1515import { TreasuryInflows } from "@/components/treasury/TreasuryInflows" ;
16- import { Card , CardContent , CardHeader , CardTitle } from "@/components/ui/card " ;
16+ import { TreasuryKpiRow } from "@/components/treasury/TreasuryKpiRow " ;
1717import { DAO_ADDRESSES } from "@/lib/config" ;
1818import { getBrlRateForRequest } from "@/services/exchange-rate" ;
1919
@@ -79,47 +79,31 @@ export default async function TreasuryPage({ params }: { params: Promise<{ local
7979 return (
8080 < div className = "py-8" >
8181 < div className = "space-y-8" >
82- { /* Page Header */ }
83- < div className = "space-y-2" >
84- < h1 className = "text-3xl font-bold tracking-tight" > { t ( "page.title" ) } </ h1 >
85- < p className = "text-muted-foreground" > { t ( "page.description" ) } </ p >
82+ { /* Page Header — synced badge binds to the ISR snapshot's timestamp */ }
83+ < div className = "flex flex-wrap items-end justify-between gap-4" >
84+ < div className = "space-y-2" >
85+ < h1 className = "text-3xl font-bold tracking-tight" > { t ( "page.title" ) } </ h1 >
86+ < p className = "text-muted-foreground" > { t ( "page.description" ) } </ p >
87+ </ div >
88+ < Suspense fallback = { null } >
89+ < SyncedBadge />
90+ </ Suspense >
8691 </ div >
8792
88- { /* KPIs */ }
89- < div className = "grid grid-cols-1 gap-6 md:grid-cols-3" >
90- < Card className = "gap-2" >
91- < CardHeader >
92- < CardTitle className = "text-sm font-medium" > { t ( "page.kpis.totalValue" ) } </ CardTitle >
93- </ CardHeader >
94- < CardContent >
95- < Suspense fallback = { < MetricSkeleton /> } >
96- < TreasuryBalance treasuryAddress = { DAO_ADDRESSES . treasury } />
97- </ Suspense >
98- </ CardContent >
99- </ Card >
100-
101- < Card className = "gap-2" >
102- < CardHeader >
103- < CardTitle className = "text-sm font-medium" > { t ( "page.kpis.ethBalance" ) } </ CardTitle >
104- </ CardHeader >
105- < CardContent >
106- < Suspense fallback = { < MetricSkeleton /> } >
107- < TreasuryBalance treasuryAddress = { DAO_ADDRESSES . treasury } metric = "eth" />
108- </ Suspense >
109- </ CardContent >
110- </ Card >
111-
112- < Card className = "gap-2" >
113- < CardHeader >
114- < CardTitle className = "text-sm font-medium" > { t ( "page.kpis.totalAuctions" ) } </ CardTitle >
115- </ CardHeader >
116- < CardContent >
117- < Suspense fallback = { < MetricSkeleton /> } >
118- < TreasuryBalance treasuryAddress = { DAO_ADDRESSES . treasury } metric = "auctions" />
119- </ Suspense >
120- </ CardContent >
121- </ Card >
122- </ div >
93+ { /* KPIs — one component, one snapshot load, four accented cards */ }
94+ < Suspense
95+ fallback = {
96+ < div className = "grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-4" >
97+ { Array . from ( { length : 4 } ) . map ( ( _ , i ) => (
98+ < div key = { i } className = "rounded-xl border bg-card p-6" >
99+ < MetricSkeleton />
100+ </ div >
101+ ) ) }
102+ </ div >
103+ }
104+ >
105+ < TreasuryKpiRow />
106+ </ Suspense >
123107
124108 { /* What the treasury is MADE OF, before the income breakdown below.
125109 Every figure is already on this page — the point is the share, which
0 commit comments