import Link from "next/link"; import { SHOP_PRODUCTS } from "@/lib/shopCatalog"; import { SHOP_SELLERS, SHOP_SELLER_COUNT } from "@/lib/shopSellers"; export default function VendorsHallPage() { const listingsByVendor = new Map(); for (const p of SHOP_PRODUCTS) { listingsByVendor.set(p.sellerId, (listingsByVendor.get(p.sellerId) ?? 0) + 1); } const totalSales = SHOP_SELLERS.reduce((a, s) => a + s.completedSales, 0); const avgRating = SHOP_SELLERS.reduce((a, s) => a + s.rating, 0) / SHOP_SELLERS.length; return (

bazaar density · sim

Vendor hall

{SHOP_SELLER_COUNT} fictional stalls fueling{" "} {SHOP_PRODUCTS.length} SKUs — scroll the arcade, click a handle for their shelf.

Apply to open a stall →
Aggregate sales (lore) {totalSales.toLocaleString()}
Avg rating ★ {avgRating.toFixed(2)}
Median reply ~42m

Live handles · pick one

{SHOP_SELLERS.map((s) => ( {s.handle} ))}
← Hub Full catalog Apply to vend
    {SHOP_SELLERS.map((v) => { const n = listingsByVendor.get(v.id) ?? 0; return (
  • {v.handle}

    ★{v.rating.toFixed(2)}

    {v.tagline}

    {v.bio}

    {n} listings here · {v.completedSales.toLocaleString()} lore sales · ~{v.responseMins}m reply
  • ); })}
); }