Components
Guides · Live markets · Templates
The pieces our templates are built from. Every card below is the real component running in your browser on live Mithril data, not a picture of one. Copy the import and it works the same way in your build.
Switch the style and the cards below change with it — radius, border weight, shadow model, typography and colour move together.
1MarketsModule
Live crypto markets, keyless, with an action on every row. Price, 24h volume and the change since yesterday, and Details opens funding, oracle and open interest inline.
2MarketsModule
Commodities and equity perps are the same component, not a second one. One /api/public/pacifica call returns gold and silver alongside NVDA, TSLA, SKHYNIX and MU, so the only difference is the assetClass you pass.
3StocksModule
715 tokenised stocks from /api/public/stocks, searchable by ticker or company. Details shows what each one tracks and the networks it trades on. Ticker chip first, the issuer's own logo revealed only once it has actually loaded.
4FxCandleChart
Candles, moving averages and Bollinger bands, drawn from 300 real one-minute EUR candles with no key. CandleChart does the drawing and always could; what it never had was a source it could reach on its own.
5PieChart
Share of a whole. It prints how many values it dropped rather than discarding them silently, and “no data” and “every value is zero” are different states rather than both being a blank circle. Past six slices becomes Other. Shown here on real 24h volume.
6QuickActions
One-tap actions that answer on the same screen. Each button runs a real lookup against our own feed and prints the result underneath. The last one is not built yet and says so, which is the sanctioned way to ship an unfinished action.
Quick actions · BTC
7StrategyPanel
A recovery ladder, and what it actually costs. Change the first stake, the multiplier or the money available and every row recomputes, including the step where the run ends. It leads with the bill rather than the promise.
Recovery ladder
Every number below is computed from these settings.
A doubling ladder does not lower risk. It trades many small losses for one rare large one, and the run ends at the first step you cannot fund, which here is step 7. Placing these orders is not wired up in this build. It needs an app key, which is not available here.
8WalletConnectPanel
Connect a browser wallet with no dependencies at all, and read the address, chain and balance. Nothing is signed and nothing moves. For builds that already use wagmi, EvmWalletConnect gives you RainbowKit's modal and chain switching instead.
Wallet
Creating your agent wallet and funding it from this wallet or by card is the next step, and it is what removes the last deposit link. It needs a credential that is not provisioned yet, so it is not shown here as a button that cannot work.
9CryptoIcon
Token logo by symbol, with a lettered chip when no art exists.
10SignalGauge
A signed score from -1 to 1 as a needle, with the verdict and the vote breakdown under it.
11YieldModule
50 real staking and lending opportunities from /api/public/yield, sorted by rate, with an action on every row. A pool you cannot enter is marked Closed rather than quietly listed, and Details says the rate moves rather than implying it is fixed.
12StatTile
Label, value, and an honest empty. A missing value renders as “n/a”, never as 0, because “we could not load this” and “this is zero” are different facts and printing the first as the second is how a dashboard lies quietly.
13EmptyState
Says why it is empty. The reason is a required prop, so there is no way to render this without saying why there is nothing to show, and if there is something the reader can do it sits right here.
14ErrorPanel
What went wrong and what to do about it. The fix is a required prop and the raw code is folded away, because INSUFFICIENT_MARGIN tells a person nothing and an error with no fix is a dead end.
15LoadingSkeleton
Shaped like the thing that is coming, so the layout does not jump when data lands. A spinner says wait; this says wait, and here is what for.
16TrendBadge
A direction and how sure we are, with no fake precision. The same percentage from three points and three thousand look identical and mean different things, so confidence is part of the badge. Nothing to compare against reads “no basis”, never 0%.
17NumberCell
A number that lines up and never invents precision. Tabular figures so a live column stops jittering as digits change, and a missing value is a dash rather than a zero, because a zero is a claim.
18Sparkline
A series small enough to live in a table cell. No axes and no labels, because it answers one question and anything else steals the room it needs. Under two points it shows “n/a” rather than a flat line that reads as no movement.
19UsdSizeInput
USD is what you type and the asset amount is derived underneath, never a second field to edit. This is where the money mistakes happen: people think in dollars and order books think in coins. With no price the derived line says so rather than printing 0, because a zero here becomes a real order.
20VenuePicker
The venues, and an honest word about the two that cannot do the agent flow. Paradex and Extended stay listed and selectable, and the reason prints the moment they are chosen rather than two screens later. Hiding them would be a different kind of lie.
21TimeRangePicker
Only the intervals our feeds actually serve. Offering 1s because it looks complete produces an empty chart and a user who thinks the product is broken; anything unsupported is disabled with the reason on hover rather than quietly missing.
22CopyField
One tap to copy a key or an address, masked until asked. It has one hard rule that must survive every future edit: it never logs, sends or stores the value. A key in a console is a key in a screen recording.
mt_app…00000xEXAM…dEaD23WhereToNext
Where a person goes when there is nothing left to wait for. It renders nothing at all when there is nothing worth offering, because a titled empty box takes up the space where an answer would go.
24OrderTicket
Prices a real order end to end, size, fee, total, and disables the confirm with the reason in plain words on screen rather than in a tooltip. It is UsdSizeInput, VenuePicker, NumberCell and ErrorPanel assembled, which is why the primitives were built first. Nothing here sends anything.
HYPE
Mark $80.28Placing orders is not wired up in this build. It needs an app key, which is not available here.
25ConnectPanel
The three ways in, each honest about what it can do today. The agent option is shown and explained with its button disabled and the reason on screen, because a dead option is worse than a named absence, and it names the venues that have no agent flow at all rather than letting someone pick one and find out later. It never collects a key.
How do you want to connect
All three are listed, including the one that is not ready. A dead option is worse than a named absence.
Connect a browser wallet. You keep the keys and approve every action yourself. Nothing is signed by us.
We create a wallet the app can trade from within limits you set, so you are not approving every order by hand.
Creating an agent wallet needs a credential that is not available yet. The other two work today.
Paradex and Extended have no agent flow at all, so they would need your own keys either way.
Use an account you already have. The build asks for it in its own settings, never here.
26HedgePanel
Two legs sized as one thing, because a hedge only means anything as a pair. It leads with what the pair leaves you exposed to rather than showing two green ticks and letting you do the subtraction, and it says plainly that neutral on price is not neutral on funding, counterparty or liquidation.
Hedge HYPE
Mark $80.28Opening both legs is not wired up in this build. It needs an app key, which is not available here.
Even when the legs match, this is not risk-free. Funding still accrues on both sides, each venue holds your money separately, and either leg can be closed out on its own, which leaves the other one exposed.
27SwapPanel
A quote, the route it would take, and a line drawn on screen marking where our estimate ends and your wallet's signature begins. The figure at that line is the minimum received rather than the quote, because that is the number a person is actually agreeing to. An unknown route says so instead of drawing a confident straight line.
Swap USDC for ETH
Everything above is our estimate and changes nothing. Pressing the button asks your wallet to sign a real transfer, which we cannot reverse.
Signing is not wired up in this build. It needs a connected wallet, which is not available here.
28PositionsTable
What is open, what it is worth now, and a way out on every row rather than a trip to the venue. Unrealised is computed from entry, mark and size rather than trusted from a feed field, because venues disagree about what theirs includes. A position with no mark shows “n/a” and says the price is missing, since rendering 0 would claim it had not moved.
Open positions
3 openNo current price for MON, so we cannot say what this is worth. It has not necessarily stayed flat.
Closing is not wired up in this build. It needs an app key, which is not available here.
29FundingTable
The rate, what it is per year, and which side pays in words rather than a plus sign, because sign conventions differ between venues. A raw 0.0125% means nothing until you know it is charged hourly; the annualised figure is what decides whether a carry is worth holding.
30SpreadScanner
Where the traded price has drifted from the index, ranked by basis points. Honest about what it is: we have one public venue, so this is mark against oracle on Pacifica rather than the cross-venue scan the brief asked for. Labelled as what it is instead of dressed up as arbitrage.
31AssetSearch
One box across perps and tokenised stocks at once, because a person hunting TSLA in the markets-only search concludes we do not have it. No results names which feeds it asked, so you can tell “we do not list it” from “we could not check”.
32VenueHealth
Is the data actually arriving, and how old is it. Unknown is a real state and it is not green: before the first response we do not know the venue is up, and a green tick by default is the failure this exists to remove. Re-probes every 30 seconds.
33LeverageSlider
Leverage, and how far the price can move before you are gone. The distance leads and the multiplier follows, because 50x tells you what you can buy and 2% tells you what it costs, and 2% is a move most assets on our own feed have made this week.
34FeeBreakdown
What a trade actually costs, itemised, with the total being the sum of exactly what is shown so a reader can check it by hand. A fee we know is zero prints 0; one we cannot compute prints “n/a” and says the real cost is higher.
1 line could not be priced, so the real cost is higher than this total.
35TimeAgo
How old a number is, in words, and loud once it is stale. A price from four minutes ago rendered identically to one from four seconds ago is how a person trades on a figure that has already moved. Staleness is not styling here, it is the point.
36FundingCountdown
How long until the next funding charge. Funding lands at a moment rather than continuously, so “in 4 minutes” changes whether a position is worth opening now. A timestamp we cannot read prints unknown, never 00:00, because a zeroed clock reads as charging now.
37OrderBook
Bids, asks, the spread in both absolute and basis points, and depth bars, now on a real book. Each level shows how many orders sit behind it, because nine BTC from one account is a wall that vanishes in one cancel and nine BTC from forty is a floor, and every book renderer draws them identically.
38DepthChart
Cumulative size either side of the mid, on a live book. Cumulative is the right shape precisely because it answers what a fill would cost rather than where the best price sits.
39TopMovers
What actually moved, both directions, with the window named. A movers list showing only gainers is a marketing surface; the fall is the half that matters when you hold it. Against yesterday's close, and it says so, because “up 6%” over an unstated period is not a fact.
40OpenInterestTable
Volume is what changed hands; open interest is what is still held. A market heavy on one and thin on the other is being traded through rather than owned, and only the pair tells you which. Sortable, built on DataTable rather than a fourth hand-rolled table.
41CompareMarkets
Two markets on the same rows at the same moment, because comparing by scrolling between cards is how people talk themselves into a trade. Where either side is missing, both show a dash: half a comparison is worse than none, since the eye completes it.
42PositionSizer
Starts from what you are prepared to lose rather than from a size, and derives the position from your stop. A stop of zero is refused rather than divided by, because the implied position is infinite and rendering that as a big number tells someone to bet everything.
43RiskSummary
How much room is left before liquidation, in words. Any missing input makes it unknown rather than zero and rather than green, and no bar is drawn at all: a health bar that reads full because a field was absent is the most dangerous thing on a trading screen.
We are missing at least one of equity, used collateral or the maintenance minimum, so we cannot say how much room is left. This is not the same as having plenty.
44OrderHistory
Everything, not only the fills. Cancelled and rejected rows are the ones a person is actually hunting for, so they carry their reason, and where the venue gave none it says that rather than leaving the cell blank, because a rejection without a reason is a bug report we never receive.
Order history
Everything, not only the fills. A missing order is usually a cancelled one.
| Order | Price | What happened | When↓ |
|---|---|---|---|
| BTC buy 0.01 | n/a | rejectedthe venue gave no reason | 22:53 |
| ZEC sell 0.4 | 812.40 | cancelledyou cancelled it | 21:53 |
| HYPE buy 6.2 | 80.10 | filled | 20:53 |
45AlertRule
Reads the rule back as a sentence and says where the alert would arrive, including when the answer is nowhere yet. Delivery is part of the rule rather than a setting elsewhere: an alert with no destination is a note to yourself, and it should say so before it is saved.
HYPE is 80.28 now. This fires if it goes above 80.28, a move of 0.0%.
We have nowhere to send this yet. Email alerts need an account, which is not connected in this build.
46ConfirmAction
A second press for anything that cannot be undone, naming the consequence rather than asking “are you sure”. The armed state resets after five seconds, so a stale armed button can never be pressed by accident minutes later.
Closing needs an app key, which is not available in this build.
47Notice
One line of feedback that does not vanish before it is read. Toasts auto-dismiss, which is right for “copied” and wrong for anything needing action, so nothing dismisses itself unless a caller asks. The word carries the meaning, since colour alone fails for some readers.
48DataTable
Sortable rows with an honest empty and no invented cells. Missing values sort last in both directions, because ascending should not reward a row for having no data, which is exactly what treating null as zero does.
| Market | Open interest↓ |
|---|---|
| BTC | 812,000,000 |
| ETH | 402,000,000 |
| MON | n/a |
49SymbolPicker
Pick a market from the live list, searchable, so what is pickable is exactly what is tradable and the two cannot drift. If the feed fails it says so and keeps your existing choice, because clearing a selection on a network blip is worse than a stale list.
50PercentInput
A percentage that cannot be typed into nonsense. Out-of-range values are clamped and it SAYS SO, because a field that quietly turns 500 into 100 has changed your intent without telling you and you will believe the number you typed.
Try typing 500 to see what it does with an out-of-range value.
51ToggleGroup
A segmented control where an unavailable option is disabled with its reason rather than hidden. Hiding it is how a person concludes we do not support something we simply cannot offer today, and the reason goes under the group rather than in a tooltip nobody on a phone can reach.
52BalanceList
What is held, with a total that admits what it skipped. A token we cannot price silently vanishes from most portfolio totals, the person's money did not disappear, our number did, so unpriced holdings stay listed and the total says how many it left out.
Balances
$7915.301 holding is missing from that total because we have no price for it. You hold it either way.
53RefreshControl
Refresh, and the time of the last SUCCESS rather than the last attempt. A failed refresh does not move the clock, because the data on screen is still from the earlier success and that is the age the reader needs. Wired here to the real pacifica feed.
54KeyValueList
Labelled facts where absence is a dash and never a blank, since a blank reads as a design choice and a dash reads as missing. A row can carry why it is missing, which beats merely knowing that it is.
55FilterChips
Filters that carry their counts, so an empty result is never a mystery about whether the filter broke. A zero-count chip is shown and disabled rather than hidden: hiding it makes the category look unsupported, disabling it says we have this and there is nothing in it right now.
56Pagination
Pages, and honest about a total it does not know. Feeds often return a page without saying how many exist, so total is nullable: unknown reads “of at least” and keeps Next live. A confident wrong total is worse than an admitted unknown because it stops people looking.
57AddressField
An address, readable and copyable, with no explorer link on purpose. Every build reaches for “view on Etherscan” and that is a hard fail: the action happens in our interface. The middle is elided rather than the tail, because the last four characters are the only part anyone actually verifies.
0xEXAM…00dEaD58InfoHint
An explanation you can reach without a mouse. We ban tooltip-only reasons across this library because a hover target does not exist on a phone, so this is a press that expands in the flow and pushes the layout. Less elegant than a floating tooltip and considerably more likely to be read.
59FillCostPanel
What your order actually costs, walked through the real book. Top of book is the price of the first coin, not the price of a two million dollar order, and a quote taken from the best bid looks identical in a screenshot while teaching the reader nothing. It also says when the book ran out, which is the thing most worth knowing before sending.
What BTC really costs at size
loading60BookCompare
Which venue is cheaper for YOUR size, stated in dollars. Comparing best prices is close to meaningless when two venues show the same top of book and differ by real money once an order walks the levels. It refuses to name a winner when only one venue answered, because a comparison missing a side is not a comparison.
61LiveBookAnalysis
One book fetch, five readings of it. Dropping the pure readers on a page separately would mean five fetches, five clocks and five chances to show numbers from different moments: two panels disagreeing because they polled a second apart is a bug a reader cannot diagnose. Hosts LevelStrength, LiquidityGauge, BookImbalance, SizeLadder and SlippageCurve.
59TransactionStatus
Pending, confirmed, failed, and a fourth state most builds never write: we have lost track of it. That is not pending. Pending means we know it is in flight, and rendering unknown as pending is how someone watches a spinner for an hour after their transaction already failed.
The network has it. This usually takes seconds but can take longer when the chain is busy.
0xEXAMPLE00000000000000000000000000000000000000000000000000000dEaDWe stopped hearing back about it, so we cannot tell you whether it settled. Check your wallet before sending it again.
The pool moved past the price you accepted, so nothing was swapped and nothing was spent.
60ApprovalStep
The permission a swap needs, and what it actually grants. Every wallet offers unlimited as the convenient default and almost no interface says in words what it means: that contract may move that token, in any amount, until you revoke it. Exact is the default here and unlimited carries its sentence.
You will be asked to approve again next time. That is one extra signature per trade and no standing permission.
Signing is not wired up in this build. It needs a connected wallet.
61MarketHours
The token trades all day, the company does not. Out of hours there is no underlying price forming, so a tokenised stock is priced by its book rather than tracking anything and can drift from the last close. That is the most surprising fact about the asset and no interface I have seen states it.
62ActivityFeed
What happened, newest first, with the gaps admitted. A feed starting an hour ago looks complete and a reader assumes nothing happened before it, so this says how far back it can speak for. A silently shorter list is the dangerous failure: an error banner gets noticed, a missing ten entries looks like a quiet hour.
Activity
covers back to 201h agoOne page of history failed to load. Entries may be missing from this list, so treat a quiet stretch as unknown rather than as nothing happening.
63NetworkPicker
The chains, with unsupported ones disabled rather than hidden, and testnets marked in one word. A person who thinks they are on mainnet and is not will send real intent to a chain where nothing is real, and the reverse mistake costs actual money.
64QuotaMeter
What is left, and no bar at all when the limit is unknown, because a full bar drawn from a missing field is the same lie as a health bar. It leads with what remains rather than what was used: “80% used” and “200 left” are the same fact and only one answers the question being asked.
We do not know the limit, so we cannot say how much is left. This is not the same as having plenty.
65ExportButton
Take the data away, and be told what did not come with it. A CSV of what is on screen is the page you are looking at after filters, not the dataset, so the real row count is shown before the click. Values containing a comma are quoted properly, because a shifted column is a corrupt file that opens fine.
66ShareState
A link that reopens what you are looking at, and names what it carries before you copy it. A share button that silently encodes filters is a small surprise; one that silently encodes an account or an amount is a leak, so private keys are excluded rather than trusted to be harmless.
67HealthBanner
Says a feed is down before the user works it out from five broken cards. It starts silent rather than green: before the first probe answers we know nothing, and a green banner on load is the same lie as a health bar drawn from a missing field. It reports only what it measured.
68CommandPalette
Everything reachable from the keyboard, including the things that are not ready. An unavailable action is listed and disabled with its reason rather than filtered out, because a palette that hides what it cannot do teaches the user the app cannot do it. Press cmd K.
69LiquidationPrice
The price at which the position stops being yours. Builds show leverage and entry and almost never the number those two produce, which is the only one that decides whether a position survives the week. Labelled roughly, because the exact figure needs the venue's maintenance margin and fees.
Roughly, because the exact figure depends on this venue's maintenance margin, its fees and any funding you have already paid. Treat it as the neighbourhood, not the line.
Roughly, because the exact figure depends on this venue's maintenance margin, its fees and any funding you have already paid. Treat it as the neighbourhood, not the line.
70BreakEven
The price you actually need, not the price you paid. People close at entry and are surprised to be down: you pay to get in, to get out, and funding for every hour between. Funding is shown as a drift per day rather than folded into one figure, because a single number hides that it moves.
Break-even moves against you by $0.1766 a day at the current rate. The longer you hold, the better the price you need.
Funding pays you here, so break-even improves by $0.1766 a day at the current rate. Holding helps.
71FundingProjection
What holding this costs over a day, a week and a month. A per-hour rate is read once and forgotten, so a carry that looks free is quietly expensive by Friday. It states plainly that this is today's rate carried forward and not a prediction, because funding resets and can flip sign.
You pay this at the current rate. This is today's rate carried forward, not a prediction. Funding resets every period and can flip sign, so treat it as the cost of the position as it stands rather than a bill you have agreed to.
You are on the receiving side at the current rate. This is today's rate carried forward, not a prediction. Funding resets every period and can flip sign, so treat it as the cost of the position as it stands rather than a bill you have agreed to.
72MaxPosition
The biggest position the account can open, printed next to the move that would end it. Every venue has a MAX button and none of them mention that the largest position is also the one liquidated by the smallest move.
A 33.3% move against you ends it.
Opening the maximum is also opening the position that the smallest move closes. The number above is what the account can support, not what it should carry.
A 4.0% move against you ends it. That is inside a normal day for most of these markets.
Opening the maximum is also opening the position that the smallest move closes. The number above is what the account can support, not what it should carry.
73RiskDisclosure
What can go wrong here, in words a person can act on. Not a legal notice, which is written to be scrolled past. Each entry is the mechanism rather than the jargon, and it expands in the flow rather than in a modal, because a modal teaches people to dismiss.
Borrowing to trade means a move against you of a few percent can end it entirely, and the higher the multiple the smaller that move is. At twenty times, five percent is enough.
These markets charge a fee between the two sides that resets constantly. A position that goes nowhere for a week can still cost you, and the rate can flip while you hold.
A large order walks through the book and fills at an average worse than the top. On a quiet market that difference is small; on a thin one it is not.
Money at one venue is not available at another, and a venue having problems is a risk of its own regardless of whether your position is right.
74SessionSummary
What you did here, before you close the tab. Fees and funding are their own lines rather than netted into the headline, because folding them in is how a session that lost money reads as a session that made a little. Missing a figure means no total rather than a guessed one.
This session
5 of 7 filledThis session
3 of 4 filledWe are missing at least one of the figures above, so there is no honest total to give you. The lines we do have are shown rather than a number we would have to guess at.
75OrderTypeGuide
What each order type does and what it costs you, with the ones this venue does not offer listed and marked rather than hidden. Someone who picks limit because it sounds safer and watches it never fill has learned the wrong lesson about the product rather than about limit orders.
Order types
Each one buys something and costs something. The cost is the half a ticket leaves out.
Fills immediately at whatever the book is paying.
You accept the price you get, which on a thin book can be well past the one you saw.
Fills only at your price or better.
It may never fill. If the market moves away you are left holding nothing, which is a position of its own.
Turns into a market order once the price reaches your trigger.
The trigger is not the fill. In a fast move you can be filled a long way past it.
Not offered on this venue yet, so the ticket has no stop option.
76PortfolioPie
What the account is exposed to, which is the same data as a balance list and a different question: two holdings can look balanced in a list and be ninety percent one asset by value. A holding it cannot price is a named hole rather than a silently omitted slice.
- ETH47.7%
- BTC34.2%
- SOL18.0%
1 holding is missing from this chart because we have no price for it. The shares above are of what we could value, not of everything you hold.
77WatchList
The markets someone cares about, kept on their device, and it says so. Without that line an empty list on a phone reads as the app losing their data rather than as a list that never travelled. Degrades to an in-memory list when the browser refuses to store.
Watching
2This list is kept on this device only. It will not follow you to your phone, and clearing site data clears it.
78SavedViews
Name a set of filters and come back to it, the companion to ShareState: that one sends a view to someone else, this one keeps it for you. It refuses to overwrite a name that already exists and says why, because silently replacing a saved view is a small theft.
Saved views
Saved on this device only. These will not follow you to another browser, and clearing site data clears them.
79CostToTrade
Everything one round trip costs, added up in one place. The parts live on four different screens on every venue, so people compare a 0.045% fee against a 0.02% one and pick the wrong venue by a wide margin. A line it cannot price blocks the total rather than counting as zero.
One round trip costs
on $25000We could not price withdrawal, so the real cost is higher than the figure above. A total that quietly leaves a line out makes a venue look cheaper than it is.
80VenueCompare
The same trade on each venue, ranked on fee plus what the book costs you rather than on the headline fee. It shows the parts so the ranking is checkable, and a venue that did not answer is listed as not answering rather than dropped, because a comparison that silently excludes one is a comparison of whoever was up.
The same $25000 trade, by venue
Ranked on fee plus what the book costs you, not on the headline fee.
Hyperliquid is cheapest on this size, by $2.80.
81PositionHealth
How much room one position has left, which is what a person checks before adding. No bar at all when the mark is missing, same rule as RiskSummary and QuotaMeter: a health bar drawn from an absent price is the most dangerous thing on a trading screen.
We have no current price for this market, so we cannot say how much room is left. That is not the same as having plenty.
82KeyStatus
Whether this build can do anything, said once at the top as a state rather than twelve apologies down the page. A reader meeting “needs an app key” for the fourth time concludes the product is broken rather than that this build is read-only. It never renders a key, asks for one, or links away to get one.
Everything here works and nothing can be placed. Connecting an account is what turns the actions on, and until then the panels say so rather than hiding.
Prices here are still live. Anything you place would be rejected, so those actions are off until you reconnect.
Actions on this page will reach the venue.
83ChangeSummary
What moved since you last looked, because a dashboard shows the present and assumes you remember the past. A row that appeared since the last look is marked new rather than shown as a change from zero: a change from zero is a number, and “this did not exist before” is a fact.
Since you last looked
201h ago84RetryPanel
For the failure that keeps failing. It shows the attempt count and switches the button off after the cap, because a person pressing retry a fourth time has learned nothing while the interface already knows it has failed three times. Same reasoning as the credit guard: never wire a spending action to a trigger broader than what it can fix.
85StaleBadge
Marks one figure that has stopped updating, next to the figure. A table where nine rows are live and one froze twenty minutes ago looks entirely healthy, and the frozen row is the one somebody trades on. It marks rather than hides, because a stale price is still the last thing we knew.
86SortHeader
A column header that sorts and prints its own rule. Every hand-rolled sort treats a missing value as zero, which silently promotes the empty rows to the top of an ascending sort. Two words in the header stop a reader wondering why the blanks are winning.
87DensityToggle
How much fits on screen, remembered per device. A table at comfortable spacing shows eight rows on a laptop and twenty when compact, and which is right depends on whether the reader is scanning or reading. It says the setting is local, so a phone starting at comfortable is not filed as a bug.
Kept on this device. Another browser starts at comfortable.
88InlineEdit
Change a value in place without losing what you typed. While the field is focused the incoming value is held back, and if it changed underneath you that is said rather than silently applied on save. When both changed, the reader decides whose number wins, which is the only honest resolution.
89PriceInput
A price field that knows the market's tick size, so an invalid price is caught before the click rather than rejected after it with a code nobody reads. When it snaps a number it says so, because a field that silently moves what you typed has changed your order without telling you. The nudge buttons step by exactly one tick.
0.00% above the current price.
90AmountInput
The other half of every rejected order. It rounds DOWN to the step and says so, and an order below the venue minimum is refused rather than raised: quietly raising a size spends more of someone's money than they asked to spend, so the number is left alone and the problem is named.
91ConnectionBadge
Live, reconnecting or stalled, and never a lie in green. A streaming panel that silently lost its socket looks identical to one that is up and quiet, so “connected but quiet” is its own state: it reports how long it has been silent and lets the reader judge rather than assuming the feed is fine.
92OrderPreview
The whole order in one sentence, before it goes. A ticket is six fields and the thing you are about to do exists only in your head; reading it out loud catches a wrong side or a stray decimal in a way six correct-looking fields never do. An incomplete order gets a list of what is missing rather than a sentence with a gap, because a gap reads as complete to someone skimming.
buy 0.050000 BTC at $77,506 on Hyperliquid.
That is about $3875.30 before fees.
sell 0.050000 BTC at whatever the market is paying.
A market order takes the price the book gives it, which on a thin market can be well past the one on screen.
93BalanceRequired
Whether this order can be paid for, checked while you are still typing rather than after the click. It counts the fee, because “you have enough” that ignores it is wrong exactly at the boundary, which is the only place the answer matters. A balance we cannot see is said out loud rather than assumed fine.
Covered, with $123.26 left over.
Short by $1.80. Lower the size or add funds; the fee is included above, which is why an order for exactly your balance is always short.
We cannot see this account's balance, so we cannot tell you whether this order can be paid for. That is not the same as it being fine.
94TimeInForce
How long the order lives, with what each choice actually does shown for the selected one rather than in a help page. People pick until-cancelled because it is the default and are surprised by a fill three days later. Options this venue cannot offer are listed and disabled with the reason.
Rests on the book until it fills or you remove it. It can fill days later at a price that made sense when you set it and does not now.
95ReduceOnly
The switch that stops a closing order opening the opposite side. Someone sells to close a long, gets the size slightly wrong, and is now short. The explanation is about what happens WITHOUT it, because “reduce only” is jargon that hides the point. Off and disabled when there is no position, since it would never fill.
96PositionSide
Which way you are, with what it means beside it. Long and short are read fluently by people who know them and guessed at by everyone else, and a guess here is the most expensive guess in the product. It names the loss as well as the gain, in the same size, because choosing a side is choosing both.
If BTC goes up, you gain. If it goes down, you lose.
97CancelAll
Pulls every resting order and says exactly how many that is. Cancel-all on a screen showing three orders might cancel eleven, because the screen is filtered and the action is not. When those numbers differ it shows both, since a person in a hurry deserves to know the button reaches further than their filter.
Cancelling needs an app key, which is not available in this build.
Your filter shows 3, but 11 are resting. This button reaches all of them.
98FundingCost
What funding has ALREADY cost this position, which is the number missing when someone closes at entry and finds themselves down. It shows the rate that produced it so the figure is checkable, and a period with no recorded rate counts as unknown rather than zero, because treating a gap as nothing understates the bill in the direction that flatters us.
Over 3 periods, most recently at 0.0080%. You paid this.
1 period has no recorded rate, so the real figure is further from zero than this. They are left out rather than counted as nothing.
102HoldingsTable
What you own, what it cost and what it is worth. PositionsTable is perps; this is the ordinary holdings page nothing covered. An unpriced row refuses its value rather than showing zero, a row with no cost basis refuses its return rather than reporting the lot as profit, and the total refuses ITSELF if any row is unknown - a total that quietly skips what it could not price looks complete and is not.
Holdings
4 holdingsWe do not know what you paid for this, so the return is blank rather than counted as all profit.
No current price for XAU, so we cannot say what this is worth. It has not necessarily stayed flat.
103ConcentrationWarning
Says out loud when one holding IS the portfolio. PortfolioPie already draws the split, and a pie is exactly the shape that makes 70% in one asset look like a nice big slice. It states the share and the plain arithmetic - if this halves, the whole thing falls by X - and stops there. It never says sell or diversify, because we are not licensed to.
If BTC halves, the whole portfolio falls about -28.8%, whatever everything else does. That is the arithmetic, not a recommendation.
104AllocationTarget
Where the portfolio drifted from what you intended. Drift is signed, because over-weight and under-weight are opposite situations that share a magnitude, and it is stated in money as well as points - "4.2 points" means nothing next to "$1,840 more than you meant to hold". Targets that do not sum to 100 are refused rather than normalised, because normalising produces plausible numbers from a broken setup.
Target allocation
Over target by 13.8 points, which is $8423 more than you intended to hold.
Under target by 5.9 points, which is $3600 less than you intended to hold.
105IncomeSchedule
What is due to be paid and when, with the certainty attached to every row. A declared payment and a projection from a floating rate are not the same kind of number, and printing them in one column silently promises the guess. The headline total sums only what is declared - adding projections would make the most confident figure on screen out of the least reliable inputs.
Income due
3 upcomingThe two are kept apart on purpose. Projected amounts come from rates that can change before payment, so they are not added into the declared figure.
106PerformanceSummary
Return over a period, and WHICH return it is. Simple and money-weighted differ enormously for the same account and almost no app says which it is showing. With a deposit in the period the simple figure would count your own money as profit, so it is refused outright rather than footnoted - that is a wrong number, not a caveat.
Performance
past 30 daysYou added $5000.00 during this period, so the simple change in balance is not a return - it would count your own deposit as performance. This figure measures the money actually at work instead, assuming the movement landed mid-period.
107MaxDrawdown
The worst fall this went through, measured from the RUNNING high rather than the first value - measuring from the start reports a small fall for a series that rose then collapsed. Recovery is stated separately, because a recovered 30% drawdown and an ongoing one share a headline and are very different situations. A series with gaps is refused rather than skipped over.
Worst fall
past yearStill -3.8% below its high, so this fall has not been recovered yet.
108WithdrawalReadiness
How much you could actually take out today. Available leads and the total is the footnote, which is the reverse of every dashboard - showing the big number first is how the misunderstanding gets built. Every locked portion says why and until when, and an unknown release date is shown as unknown rather than as "soon".
What you can withdraw
109CurrencyToggle
Switch display currency, with the rate and its age travelling alongside the choice - a converted figure has a second source of error the original never had. A currency we cannot price is disabled rather than converted with the last rate that worked, which would silently turn the page into "prices as of some unknown Tuesday".
110Dialog
The general-purpose modal the library never had, so every build wrote its own and shipped the same three faults. Escape always works, focus moves in and returns to whatever opened it, and the backdrop does NOT dismiss by default - a misplaced click must not discard a size and a limit price someone just typed.
111Toast
Transient confirmation that does not evaporate when it matters. Successes clear themselves; errors never do, because the thing an error describes did NOT happen and leaves no other trace on screen. A four-second error toast is how someone comes to believe an order was placed. Hover pauses the timer, and errors announce assertively.
112EdgeVsCost
Puts the move you are aiming at and the cost of aiming at it in one sentence. Both numbers are harmless alone and shown separately on every trading UI there is; together with a verdict they say something no single tile can, which is that winning every trade still loses. A break-even over 100% is stated in words, because printing "142%" in the same style as "61%" invites someone to think they can get close.
Is the move bigger than the cost?
Break-even would need 141.2% of trades to reach the target, and there is no such thing as more than 100%. The trade is smaller than the cost of doing it, so winning every single one still loses money.
113CoverageGap
The denominator, which is the finding. Eight results looks like an answer until you know whether eight is out of ten or out of 233. Skipped rows are counted separately, because a ratio that quietly drops the ones it could not read overstates coverage. It reports the share plainly rather than colouring it, since a strategy that works on 3% of markets may be exactly right if those are the 3% you can trade.
40 more were never examined, because those venues did not return a funding field. The real universe is 233, so treat the share above as a share of what we could read, not of everything.
The denominator is here because a small share is not automatically bad and a large one is not automatically good. Whether these markets are the ones you can actually use is a judgement this page cannot make for you.
114NotProvided
The third state every data panel needs and almost none have. Asking, answered, and not available - an empty chart reads as "nothing happened" and a stuck spinner reads as "broken", and both are wrong when the truth is that the venue does not publish the field. It names the field AND the source, so a reader knows where to look next and the next developer does not hunt for a bug in our code.
This is a gap in what the source returns, not an error on this page and not a value of zero. Nothing is being hidden and nothing failed.
115SampleTooSmall
Withholds a rate the sample cannot support, rather than footnoting it. 67% from three trades is a true division and a worthless claim, and a caveat under a big number does not work because the number is what gets remembered. Below the threshold the count becomes the headline and the percentage does not appear. Above it, a rough interval is shown, because a reader who sees only "60%" will plan as though it were exactly 60%.
Not shown as a percentage. 3 trades cannot support a win rate - the division would be correct and the number would still tell you nothing. It appears once there are at least 30.
From 24 of 40 trades, which puts it roughly between 44.8% and 75.2%. That range is a crude one, and it is here because planning against the single number treats a spread as a certainty.
116SourcesDisagree
Two feeds, two answers, and deliberately no average. The disagreement IS the information - it is the arbitrage, or it is a stale feed - and a mean is a price no venue will trade at, shown with more confidence than either input deserves. One source answering is reported as one source, not as agreement, because a feed agreeing with itself is not confirmation.
What each source says
2 of 3 answeringThey differ by 0.22%, within the 0.5% we treat as ordinary feed noise. Still shown separately rather than merged.
Aster did not answer, so it is absent rather than agreeing.
117AssumptionsPanel
Which inputs we measured and which we guessed. A fee from a published rate card and a slippage someone typed as a placeholder render identically and carry the same weight in the total, and only one is true. "Some figures are estimates" is unactionable because the reader cannot tell which. The total refuses itself when an input is unknown, since a sum that drops the unknown row looks complete and understates the cost.
What one round trip costs
1 of 4 inputs is not known, so this total is missing one and is lower than the real figure. It is not the answer, it is the part we can stand behind.
118FreshnessGate
Replaces a stale number instead of annotating it. StaleBadge is right for a price you can still judge; this is for figures where acting on an old value is worse than acting on none - a margin requirement, a size limit, a liquidation level. Past the limit the age becomes the headline and the value disappears, which is deliberately more disruptive than a badge, because the point is to stop an action rather than inform one.
Read 18s ago, inside the 60s this is good for.
Not shown, because a margin figure goes out of date after 60s and acting on a stale one is worse than acting on none. The value comes back as soon as the source answers again.
119OverfitRisk
How many knobs were turned to produce a backtest. Six parameters fitted against forty trades is a drawing, not a strategy, and nothing in a backtest UI ever says so. It also counts the SEARCH: the best of 500 combinations looks good even from noise, and reporting only the winner hides that denominator. No score and no traffic light, because there is no threshold that makes a backtest true and a green badge would manufacture the confidence this exists to withhold.
Roughly 7 observations for every knob that was turned. There is no threshold that makes a backtest true, so this is stated rather than scored.
500 parameter sets were evaluated before this one was chosen, so this is the best of 500 draws. A best-of-many looks good even when nothing real is there, and only the winner is usually reported.
Nothing was held back, so every observation here was used to choose the parameters. There is no out-of-sample result on this page.
120UnitCheck
Refuses to subtract two numbers that are not the same kind of thing. A funding rate per 8 hours next to one per year, bps next to percent, APY next to APR - each looks plausible and the conclusion is wrong by orders of magnitude. It will not silently normalise, because conversions carry assumptions; where the caller has converted, the row is labelled as converted rather than passed off as measured.
These are not the same kind of number. One is in % per 8h and the other in % per year, so no difference is shown. Subtracting them would produce a figure that looks right and is wrong, which is worse than showing nothing.
121SurvivorshipNote
What is missing from the sample, said where the result is. A list of what exists today is not a history: "top performers over the past year" computed from currently-listed markets excludes everything delisted or gone to zero, which are precisely the losses. The bias persists because the missing rows leave no trace in the UI. It does not correct the figure, since correcting would need the data we do not have.
It is computed from the 187 that still exist, out of 233 over the past year - 80% of the original set. The rest are gone because they were delisted or stopped being quoted during this period, and those are disproportionately the bad outcomes. The figure above is therefore better than the real one, and we have not adjusted it, because adjusting would need the data we do not have.