- Shipped
- September 6, 2026 at 5:44 PM UTC
- Author
- Kamo
- Commit
- f94d812
The trial pill lived twice — the nav rail and the launchpad — with the countdown, the member-type gate and the styling copied between them. Both gated on a live trial, so an organization whose trial had just ended saw nothing at all: no pill, no explanation, no sign that the product had become smaller. And neither pill went anywhere, so a member who understood the countdown had no next step. Now both states are defined once, in PlanPill, which keeps the rail's two shapes and the launchpad's third while deciding the MEANING in one place. It shows to every team member and LINKS only for someone who can act on the plan; for everyone else the tooltip is the whole feature, which is why every state has a read-only twin naming who to ask instead. /myplan answers where the organization stands, how long it has, what it can use, what a bigger plan adds, and the terms it negotiated. Three things worth keeping: The term rail is the hero, and it is one device with three meanings — a trial draining to its deadline, a paid plan moving through its billing period, an expired trial at its end. It is laid out at its true width and animated with a keyframe rather than from state, so a slow script or a failed hydration still shows the real figure instead of an empty bar. The ledger prints values, not ticks. The catalogue carries the real numbers — 100 contacts, two pipelines, 4 GB a seat, unlimited — and those are what an owner decides on. Excluded rows stay, faint and sorted below: they are the argument for upgrading, and hiding them would make the Free plan look complete. Upgrades are a difference, not a price grid. The reader already has a plan; their question is what they get that they do not have. Ordered by price — ordering by how many rows a plan lights up looks equivalent and is not, since an overlapping bigger plan can add fewer. Buying still happens in BillingConsole, which this deep-links into by sub-tab. Rebuilding checkout here would be a second implementation of the one thing that must not have two. The palette follows the house convention — a --plan-* ramp mixed from --color-primary — with one exception: the state colours are fixed, because an organization whose brand is amber would otherwise wear a trial badge in its paid colour, and the one thing this page exists to say would be the thing it could not say.