Skip to content

Pulse Methodology

How the live activity feed is built and how often it refreshes.

The Pulse activity feed combines four event streams into a single time-ordered timeline — Flowty loan originations (FUNDING_AVAILABLE events), loan terminations (FUNDING_REPAID and FUNDING_SETTLED events), and marketplace sales (Top Shot TopShotMarketV3.MomentPurchased, Flowty NFTStorefrontV2.ListingCompleted, and direct Pinnacle.Trade events). Every event is keyed by occurred_at and rendered most-recent-first. The 24h summary at the top of the page uses a rolling window pinned to the latest event we have, not a calendar-day boundary, so it always reflects the last 24 hours of recorded activity.

Refresh cadence varies by source. The loan side runs about 10 minutes behind chain tip — Flowty events are scanned in 250-block chunks and materialized into flowty_loans on a 10-min cron. Sales are typically 5-15 minutes behind, depending on whether they came from on-chain event indexing (Flowty + Pinnacle direct) or marketplace ingestion (centralized Top Shot). The Pulse page itself auto-refreshes every 30 seconds in the browser, so the freshest events surface as soon as the underlying tables get them.

Sale events from Top Shot's centralized marketplace appear without buyer or seller wallet addresses — that marketplace doesn't expose participant identities. Those rows render with an "Anonymous · centralized" badge so the missing addresses don't read as a bug. Aggregate volume, sale count, and price are accurate; only the counterparty side is opaque. Flowty + Pinnacle sales include full buyer/seller wallets and both link to /analytics/wallets/[address] profile pages.

Filtering is applied at the RPC layer — the kinds parameter accepts any subset of loan_originated, loan_repaid, loan_settled, sale, and the collections parameter accepts the same normalized slugs as Loans and Sales (topshot, allday, golazos, ufc, pinnacle). The optional Min size filter is applied client-side after fetch and just hides rows whose amount_usd falls below the threshold — useful for de-noising the $1 trade chatter on Top Shot. The activity list keeps at most the 100 most recent events; older items scroll off the bottom.

Data sources

  • flowty_loans + flowty_loan_events (Supabase) — origination, repayment, settlement timeline
  • sales (Supabase, year-partitioned) — Top Shot, AllDay, Golazos, UFC indexed sales
  • pinnacle_sales (Supabase) — Pinnacle.Trade direct sales
  • flowty_transactions (Supabase) — NFTStorefrontV2 fork at 0x3cdbb3d569211ff3
  • analytics_pulse_24h / analytics_pulse_activity / analytics_pulse_hourly RPCs

Refresh cadence

Activity feed: 30s in browser. Underlying data: 10 min (loans) / 5-15 min (sales)

← Back to all methodology