ICO Launchpad 6.2.2

2 August 2026

This release has upgrade notes. Read them before updating — they describe behaviour changes that need your attention.

ADMINDASHBOARDREVIEW QUEUESLAOPERATIONSREPORTINGCURRENCYAUDIT TRAILACTIVITY LOGLOADING STATESLICENSINGROBUSTNESSBUG-FIXES

Token ICO v6.2.2

Release Date: August 2, 2026 Tags: ADMIN, DASHBOARD, REVIEW QUEUE, SLA, OPERATIONS, REPORTING, CURRENCY, AUDIT TRAIL, ACTIVITY LOG, LOADING STATES, LICENSING, ROBUSTNESS, BUG-FIXES

Overview

An admin console release. No money path changes in this version — what changes is what the ICO admin screens tell you about the money and the offerings you already have.

The review queue is now the first thing on the page, and it is aged rather than counted — a submitted offering blocks that creator's entire launch, and "3 awaiting review" is the same sentence whether they arrived this morning or five weeks ago.

Every "from last month" percentage on this dashboard has been reading high and falls after updating, two more figures read differently, and one has been removed — read Upgrade Notes before comparing anything against a screenshot.

Requires Core v6.6.1.

Update Instructions

pnpm updator

Then restart the backend. The dashboard aggregate is a backend route and it is rebuilt in this release:

pm2 restart all

Nothing needs configuring. The review budget is not an ICO setting — it is the platform's own approval budget of 72 hours, shared with every other queue that waits on an admin decision, so an offering that is late here is late on the main admin dashboard too.

Three things read differently afterwards and none of them needs an action, but two of them are figures you may have been recording. They are in Upgrade Notes.


Highlights

The review queue is the point of this console

Nothing a creator launches goes live until somebody in this admin approves it, and a submitted offering blocks that creator's entire launch — the raise cannot open, the phases cannot start, and there is no automatic path around the review. That number was the fifth thing on the dashboard, in a brand-coloured card sitting below four tiles that did not mention it, and it was a bare count. "3 awaiting review" is the same sentence whether they arrived this morning or five weeks ago, and only one of those is an incident.

It is now the first thing on the page and it is aged, against the platform's shared 72-hour approval budget — the same budget the operations queues on the main admin dashboard already apply to this exact queue, so the two cannot disagree about whether an offering is late.

Figures that say what they are

The Total Raised tile counts every contribution that has not been rejected, which means it also counts contributions still pending and money already refunded. That figure is unchanged and is not being corrected underneath anyone — but the settled part of it is now printed beside it, so the headline can be read honestly. The same tile printed a $ on it whatever currency the offerings were actually sold in; it no longer does.

The activity feed had the same problem in a different form. It is a page of the audit trail — the newest handful of rows — and its six tabs filtered that page in the browser, so on an installation whose most recent actions all happen to be approvals, the Rejections tab flatly stated that no rejection had ever been recorded. It now knows the difference between what it holds and what exists.


Upgrade Notes

Every "from last month" percentage falls after this update — do not compare against your history

The three growth figures on this dashboard — offerings, raised, success rate — have all been measured against a previous month that was missing its last day. The window ended at midnight at the start of that day and included its upper bound, so the baseline was short by nearly a full day, every month, since the dashboard existed.

  • Changed: the previous month is now the whole previous month. Because the baseline grows, every growth percentage on this page falls. A month reported as up 11% may be flat; a month reported as growing may turn out to have shrunk. The underlying totals are unaffected — only the comparison moves.

The "Total Raised" figure is the same number — what it means is now stated

  • Changed: nothing about the headline. It has always been the sum of every contribution that is not rejected, which includes contributions still pending and contributions that have already been refunded, and it still is. What is new is the settled subset printed beneath it, so you can see how much of the headline is money the platform actually holds against a completed release.
  • What also changes: the tile printed a dollar sign on that figure regardless. Every offering carries its own purchase currency and the total sums them without converting anything. The tile now names the currency when your offerings share one, and when they do not it prints no symbol at all and says how many currencies it added together.

The "Success Rate" tile has been removed

It was computed as active offerings divided by all offerings. That is a snapshot of how many raises are open right now, not a rate at which raises succeed — an offering that finished successfully counted against it exactly as a rejected one did, because neither is active any more. A quiet month with everything settled read as a collapse.

  • Changed: the tile is gone. Every count that fed it is still on the page, in the status distribution, where each one says what it means and opens the offerings behind it.

The dashboard now refreshes itself

  • Changed: the console re-reads its figures every 30 seconds while its tab is on screen, and again the moment you switch back to it. It was previously fetched once, at page load, under a pulsing "Live" dot — so the dot kept pulsing over figures frozen at the moment you opened the tab.
  • Why it matters here: this console's whole job is a queue ageing against a deadline. An offering that breaches the budget while you have the page open now appears on its own.

Added

The review queue, aged rather than counted

  • Added a review meter above the fold that splits the offerings awaiting review into on time, due and overdue, with a count against each.
  • Added the age of the oldest undecided offering beside it, coloured by how close it is to the budget — because a queue that is entirely "on time" still needs to say how long its oldest has sat.
  • Added a warning banner whenever at least one offering is past the budget, naming how long the oldest has waited, with a link straight to the pending queue.

The settled part of the total

  • Added the released total beneath the headline raise figure, and the count of purchase currencies it was summed across when there is more than one.

Every number opens the rows behind it

  • Added drill-through on all four tiles and on each row of the status distribution, which previously linked nowhere at all — a count you cannot open is a poster.
  • Added an Other row to that distribution. An offering can be in any of eight states and the four bars named four of them, measured against the total of all eight — so the bars never added up, and offerings that were upcoming, failed, disabled or cancelled were simply missing from the picture without the page ever saying so.

Freshness you can check

  • Added a Refresh button, a last-updated clock, and an indicator that reads Live, Updating or Stale.

The activity feed knows how much of the log it holds

  • Added whole-log counts per kind of action, sent alongside the rows. The card now distinguishes "none of the last twelve entries were rejections, and there are forty on record" from "no rejection has ever been recorded" — and when it has not been told either, it says nothing about the log at all and confines itself to the rows on screen.
  • Added the scope to the card's own description, so "Recent Activity" no longer implies the whole audit trail.
  • Changed the feed from the newest 5 entries to the newest 12, because six filter tabs need something to filter.

Changed

The date format behind the monthly comparisons — no figure moves because of this one

  • Changed the date literals behind the three "from last month" comparisons into a form the database parses without complaint.

The dashboard's actions live in its header

  • Changed the two "quick action" cards into two buttons in the page header. One of them was a full-width brand-coloured panel whose only content was the count of offerings awaiting review — the single most important number on the page, painted in the colour reserved for links and buttons, and placed below four tiles that did not mention it. That number is now the masthead.

A failure no longer throws the dashboard away

  • Changed the error handling. A first load that fails keeps the page header, so Refresh and the offerings list are still reachable, and offers both. A refresh that fails leaves the last good figures on screen under a warning instead of replacing them, and marks the indicator Stale.

The activity feed has one filter, not two

  • Changed the filter dropdown away. It sat directly beside the tab bar, carried the same six entries and had the same effect.
  • Changed the per-row entrance animation away. Every row faded up over 300ms, so the whole list rebuilt itself row by row every time the operator changed tab.
  • Changed the five action labels and the six tab captions to be translated. They were hardcoded English on a platform that ships 90 languages.

The admin screens hold their shape while they load

  • Changed the ICO settings screen's pending state so it no longer omits the clearance the real page reserves for the site header — the whole page snapped upward by the height of the header the moment the settings arrived. Its title, description, search box and view toggles are all fixed text, and were being drawn as grey bars for no reason; they now render immediately.
  • Changed the settings page's title, description and back link so the page and its pending state read them from one place. They were typed out in both files with nothing keeping them in step.
  • Changed the launch plans panel, which rebuilt its own section card by hand while loading and dropped the Add Plan button from the copy — so the button was missing while the page loaded and appeared on arrival.
  • Changed the transaction detail screen so its layout renders once instead of swapping between three different trees, and the offering funding panel so its pending and empty states share a shape rather than being two more layouts on top of the real one.

Fixed

The total raised was printed in dollars whatever it was denominated in

  • Fixed the raise figure being formatted with a hardcoded $. Offerings sell in the currency of their purchase wallet, and the total sums them without converting — so on any installation not selling in dollars the headline figure on the ICO admin dashboard carried the wrong symbol, and on an installation selling in more than one it carried a symbol it had no right to at all. See Upgrade Notes.

Every "from last month" percentage was measured against a baseline missing a day

  • Fixed the previous month being measured as ending at midnight at the start of its last day rather than at the end of it. The comparison window included its upper bound, so the whole final day of the baseline month was discarded — 30 offerings in a month with 3 of them on the last day compared as 27. A baseline that is too small makes growth look larger, so the offerings, raise and success-rate deltas have all been reading high, in every month, in one direction only. See Upgrade Notes.
  • Fixed the month boundaries being built on the server's local clock while the database groups by UTC. On a host that is not on UTC, the first hours of each month counted against the wrong month.

A month-over-month fall was reported as a rise

  • Fixed the growth chips being assembled as text with a + typed in front of whatever the number was. A fall of 12% rendered as "+-12%" inside the green, up-arrow chip — the sign, the arrow and the colour all contradicting the figure they were attached to. This affected the offerings delta and the raise delta alike.

The whole ICO admin blanked itself while its licence was checked

  • Fixed the licence check wrapping the entire ICO admin layout rather than the content inside it. While the check was in flight the site header, the ICO navigation, the page and the footer were all replaced by one centred spinner, on every ICO admin screen. Only the content waits now; the chrome stays put, because none of it is licensed.
  • Fixed the layout not reserving full height, so the footer sat wherever the content happened to end and slid down the page as the data arrived.

Every entry in the admin activity log was missing its time

  • Fixed the feed reading a timestamp under a name the payload did not use. Every row therefore showed "N/A" where its age belonged, and the expanded detail showed "N/A" where its exact timestamp belonged. An audit trail with no times on it is not an audit trail — this is the only view of ICO admin actions in the product.

The activity tabs made claims about the whole log from a page of it

  • Fixed the six kind tabs filtering the handful of rows the card had been given and then reporting the result as a fact about the audit trail. On an installation with hundreds of rejections whose most recent actions all happened to be approvals, the Rejections tab said "No activity of this kind has been recorded yet". That sentence is now only said when the whole-log count is present and zero.

The activity feed's Refresh button did nothing

  • Fixed a Refresh control with no handler behind it. Refreshing is now the page's own control in the header, and it reloads the feed along with everything else.

Every admin in the log wore the same face

  • Fixed the avatar being hardcoded to the placeholder image for every entry, discarding the administrator's actual avatar that the payload already carried.

A transaction that does not exist loaded forever

  • Fixed the transaction detail screen treating "still loading" and "no such record" as one state, so a link to a deleted or mistyped transaction sat on a pulsing placeholder indefinitely. It now says the transaction was not found.

Screens stated things that were not true while they waited

  • Fixed the dashboard rendering 0 in all four tiles and empty bars in the status distribution before any figure had arrived, and reporting itself as loaded while doing so. Its loading flag started in the "finished" position, so the first paint was a completed dashboard describing an empty platform.
  • Fixed the launch plans list announcing "No launch plans configured" — a claim about your configuration — while the plans were still being fetched.
  • Fixed the funding panel's figures for current raised and progress being shown as confident values before the offering's data arrived.