Monthly performance by story, weighted by start-of-month capital. Thin baskets are sidelined with their reason, and concentrated ones are marked on the axis.
How a basket of coins sharing a narrative performed over a fixed calendar month, capital-weighted — the answer to 'which story did capital actually pay for last month'.
A calendar month is used rather than a rolling 30 days on purpose: a fixed, checkable interval is the only kind two people can argue about.
A basket return is weighted by START-of-month capital, not today's. With supply held constant, start capital is today's divided by one plus the return, which makes the basket return exactly the aggregate change in capitalisation. Weighting by today's capital hands the winners a vote they only earned after the month — measured, that is the difference between a basket reading +12% and +21% on the same two coins.
Price return is not capitalisation return when supply moves, and there is no keyless per-coin supply history, so the payload states that the basis is price with supply drift unmodelled rather than implying a precision we do not have.
NULL is not zero. A coin neither source can price over the month is excluded from the basket and counted, never folded in at 0% — which would drag every basket toward flat and look like data.
A thin basket is sidelined with its reason, never drawn at 0%. The reason carries the pre-floor tagged count, because '0 of 0' reads as an empty tag when the truth may be 'thirteen coins, all too small'.
A ticker is not an identity. Every symbol-to-pair binding is checked against the universe's own live price before any of its history is trusted; a binding that fails falls through to the second price source rather than attributing another asset's month to this one.
The tag map misses sector majors, so a correction table pins them in — keyed by provider id, never by symbol, because one symbol can be two coins in a single snapshot. The same table REMOVES as well as adds: a memecoin was once the heaviest member of the GameFi basket, and a coin with an optional privacy extension was a sixth of Privacy. Every pinned member and every removal is labelled on its row with its reason, because a hidden judgement cannot be argued with.
A pin is validated, never trusted. An id unknown to the universe is reported unresolved on the page — a pin that quietly stops applying is a fix that switched itself off — and a pin never exempts a coin from the published size floors.
A member count looks healthy and says nothing about concentration. The heaviest member's share is computed on the same start-of-month weights the return uses, and any basket above the threshold is marked on the chart axis. A three-member basket that is 89% one coin is really that coin, wrapped.
Volume beside each narrative is spot volume from one exchange only, and each row carries the share of its own capital that actually had a pair. A basket covering a fraction of its capital must never read as the sector's total.
The tab stands down entirely when the coin universe is not keyed to the taxonomy's id space. The two id spaces overlap by coincidence, so an intersection would not fail loudly — it would build baskets out of misidentified coins.
Open the live Narratives tab →