import type { Metadata } from 'next'; import Link from 'next/link'; import { PageHeader } from '@/components/ui/page-header'; import { Card, CardHeader, Delta, EmptyState } from '@/components/ui/primitives'; import { AssetList } from '@/components/market/asset-list'; import { rankedAssets, categoryScope } from '@/lib/queries/assets'; import { getTrendingCategories } from '@/lib/queries/market-lists'; import { catName } from '@/lib/taxonomy'; import { sp1, type SP } from '@/lib/search-params'; import { FAMILIES } from '@rareindex/taxonomy'; import { fmtNum } from '@/lib/format'; export const metadata: Metadata = { title: 'Trending collectibles', description: 'What collectors are moving into: trending score from price, volume, listing, search and news momentum.' }; export const revalidate = 120; export default async function TrendingPage({ searchParams }: { searchParams: Promise }) { const sp = await searchParams; const category = sp1(sp, 'category') ?? null; const scope = category ? categoryScope(category) : undefined; const [trending, cats, gainers7, gainers30] = await Promise.all([rankedAssets('trending', { scope, limit: 60 }), getTrendingCategories(12), rankedAssets('gainers', { scope, limit: 12, window: '7d' }), rankedAssets('gainers', { scope, limit: 12, window: '30d' })]); return (
All {FAMILIES.filter((f) => f.phase === 1).map((f) => ( {f.name} ))} } />
{cats.length ? (
    {cats.map((c) => (
  • {catName(c.categorySlug)} {c.trending.toFixed(1)} · {fmtNum(c.assets)}
  • ))}
) : ( )}
); }