feat: Updated pricing
This commit is contained in:
+34
-104
@@ -3,8 +3,7 @@ import type { Metadata } from "next";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Pricing",
|
||||
description:
|
||||
"Three tiers, cloud or self-hosted, priced per managed server. Free for 3 servers. Professional from £19 a month, Enterprise from £49 a month, £5 per extra server.",
|
||||
description: "Three tiers, cloud or self-hosted, priced per managed server. Free for 3 servers. Professional from £19 a month, Enterprise from £49 a month, £5 per extra server.",
|
||||
};
|
||||
|
||||
/* Prices and allowances are the shipped catalogue, not marketing rounding:
|
||||
@@ -12,7 +11,7 @@ export const metadata: Metadata = {
|
||||
* catalogue. Annual is ten times monthly everywhere, which is the "two months
|
||||
* free" the portal's own term picker states. */
|
||||
const COMPARISON: [string, string, string, string][] = [
|
||||
["Managed servers", "3", "3, then £5 each", "10, then £5 each"],
|
||||
["Managed servers", "3", "5, then £2.50 each", "10, then £2.50 each"],
|
||||
["People", "Unlimited", "Unlimited", "Unlimited"],
|
||||
["SSH key assignment", "Yes", "Yes", "Yes"],
|
||||
["Workflows and step library", "Yes", "Yes", "Yes"],
|
||||
@@ -41,28 +40,20 @@ export default function PricingPage() {
|
||||
Pick a tier, then pay per server.
|
||||
</h1>
|
||||
<p className="lede">
|
||||
People are free. Keys, workflows, monitors and secrets are free.
|
||||
You pay for a tier and for the servers running an agent, because
|
||||
that is the only number that grows with you. Every tier runs
|
||||
either in our cloud or on your own hardware, for the same money.
|
||||
People are free. Keys, workflows, monitors and secrets are free. You pay for a tier and for the servers running an agent, because that is the only number that grows with you. Every
|
||||
tier runs either in our cloud or on your own hardware, for the same money.
|
||||
</p>
|
||||
|
||||
<div className="plans">
|
||||
<div className="plan">
|
||||
<div>
|
||||
<div className="plan__n">Free</div>
|
||||
<p className="plan__d">
|
||||
A homelab, a couple of VPSes, and the keys on your
|
||||
own laptop.
|
||||
</p>
|
||||
<p className="plan__d">A homelab, a couple of VPSes, and the keys on your own laptop.</p>
|
||||
</div>
|
||||
<div className="plan__p">
|
||||
£0 <span>3 servers</span>
|
||||
</div>
|
||||
<p className="plan__t">
|
||||
Cloud or self-hosted. Renewed once a year from the
|
||||
portal, one free instance per deployment.
|
||||
</p>
|
||||
<p className="plan__t">Cloud or self-hosted. Renewed once a year from the portal, one free instance per deployment.</p>
|
||||
<ul>
|
||||
<li>3 servers and 3 monitors</li>
|
||||
<li>Keys, workflows and the step library</li>
|
||||
@@ -78,18 +69,12 @@ export default function PricingPage() {
|
||||
<div className="plan plan--pick">
|
||||
<div>
|
||||
<div className="plan__n">Professional</div>
|
||||
<p className="plan__d">
|
||||
Real infrastructure, and more than one person
|
||||
holding the keys.
|
||||
</p>
|
||||
<p className="plan__d">Real infrastructure, and more than one person holding the keys.</p>
|
||||
</div>
|
||||
<div className="plan__p">
|
||||
£19 <span>/ month, 3 servers</span>
|
||||
</div>
|
||||
<p className="plan__t">
|
||||
£5 per extra server. £190 a year saves two months.
|
||||
Self-hosted is £190 a year.
|
||||
</p>
|
||||
<p className="plan__t">£5 per extra server. £190 a year saves two months. Self-hosted is £190 a year.</p>
|
||||
<ul>
|
||||
<li>3 servers included, add as many as you like</li>
|
||||
<li>Unlimited monitors, secrets and channels</li>
|
||||
@@ -105,18 +90,12 @@ export default function PricingPage() {
|
||||
<div className="plan">
|
||||
<div>
|
||||
<div className="plan__n">Enterprise</div>
|
||||
<p className="plan__d">
|
||||
A fleet, a compliance question, and someone who
|
||||
wants a phone number.
|
||||
</p>
|
||||
<p className="plan__d">A fleet, a compliance question, and someone who wants a phone number.</p>
|
||||
</div>
|
||||
<div className="plan__p">
|
||||
£49 <span>/ month, 10 servers</span>
|
||||
</div>
|
||||
<p className="plan__t">
|
||||
£5 per extra server. £490 a year saves two months.
|
||||
Self-hosted is £490 a year.
|
||||
</p>
|
||||
<p className="plan__t">£5 per extra server. £490 a year saves two months. Self-hosted is £490 a year.</p>
|
||||
<ul>
|
||||
<li>10 servers included, add as many as you like</li>
|
||||
<li>Everything in Professional</li>
|
||||
@@ -130,44 +109,26 @@ export default function PricingPage() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className="specs"
|
||||
style={{ marginTop: "2.6rem", maxWidth: "66ch" }}
|
||||
>
|
||||
<span className="tag">
|
||||
Add-ons, on Professional and Enterprise
|
||||
</span>
|
||||
<div className="specs" style={{ marginTop: "2.6rem", maxWidth: "66ch" }}>
|
||||
<span className="tag">Add-ons, on Professional and Enterprise</span>
|
||||
<div className="spec">
|
||||
<span className="spec__k">£5 / MO</span>
|
||||
<div>
|
||||
<h3>Browser console</h3>
|
||||
<p>
|
||||
SSH, RDP and VNC sessions in the browser, audited
|
||||
like everything else. £50 a year.
|
||||
</p>
|
||||
<p>SSH, RDP and VNC sessions in the browser, audited like everything else. £50 a year.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="spec">
|
||||
<span className="spec__k">£9 / MO</span>
|
||||
<div>
|
||||
<h3>Single sign-on</h3>
|
||||
<p>
|
||||
Connect your own OIDC provider to an instance. £90 a
|
||||
year.
|
||||
</p>
|
||||
<p>Connect your own OIDC provider to an instance. £90 a year.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p className="scroll__hint">
|
||||
Scroll the table sideways for all three tiers
|
||||
</p>
|
||||
<div
|
||||
className="scroll"
|
||||
tabIndex={0}
|
||||
role="region"
|
||||
aria-label="Plan comparison"
|
||||
>
|
||||
<p className="scroll__hint">Scroll the table sideways for all three tiers</p>
|
||||
<div className="scroll" tabIndex={0} role="region" aria-label="Plan comparison">
|
||||
<table className="cmp">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -178,16 +139,14 @@ export default function PricingPage() {
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{COMPARISON.map(
|
||||
([capability, free, professional, enterprise]) => (
|
||||
<tr key={capability}>
|
||||
<td>{capability}</td>
|
||||
<td>{free}</td>
|
||||
<td>{professional}</td>
|
||||
<td>{enterprise}</td>
|
||||
</tr>
|
||||
),
|
||||
)}
|
||||
{COMPARISON.map(([capability, free, professional, enterprise]) => (
|
||||
<tr key={capability}>
|
||||
<td>{capability}</td>
|
||||
<td>{free}</td>
|
||||
<td>{professional}</td>
|
||||
<td>{enterprise}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -199,45 +158,28 @@ export default function PricingPage() {
|
||||
<span className="spec__k">COUNTING</span>
|
||||
<div>
|
||||
<h3>What counts as a server</h3>
|
||||
<p>
|
||||
One running agent, one server. You choose the
|
||||
cap rather than being metered on what you ran,
|
||||
so the invoice is the same number you set.
|
||||
</p>
|
||||
<p>One running agent, one server. You choose the cap rather than being metered on what you ran, so the invoice is the same number you set.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="spec">
|
||||
<span className="spec__k">ADDING</span>
|
||||
<div>
|
||||
<h3>Going up mid-term</h3>
|
||||
<p>
|
||||
Raise the server count and the new cap applies
|
||||
straight away, prorated for the rest of the
|
||||
period. Your renewal date does not move.
|
||||
</p>
|
||||
<p>Raise the server count and the new cap applies straight away, prorated for the rest of the period. Your renewal date does not move.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="spec">
|
||||
<span className="spec__k">REDUCING</span>
|
||||
<div>
|
||||
<h3>Going down</h3>
|
||||
<p>
|
||||
A reduction takes effect at your next renewal.
|
||||
You keep what you have already paid for until
|
||||
then, and we show you the date it changes.
|
||||
</p>
|
||||
<p>A reduction takes effect at your next renewal. You keep what you have already paid for until then, and we show you the date it changes.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="spec">
|
||||
<span className="spec__k">LIMITS</span>
|
||||
<div>
|
||||
<h3>Reaching the cap</h3>
|
||||
<p>
|
||||
Nothing is deleted. An agent beyond the cap
|
||||
still registers and heartbeats, but stops
|
||||
syncing keys until you raise the cap or remove a
|
||||
server.
|
||||
</p>
|
||||
<p>Nothing is deleted. An agent beyond the cap still registers and heartbeats, but stops syncing keys until you raise the cap or remove a server.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="spec">
|
||||
@@ -245,11 +187,8 @@ export default function PricingPage() {
|
||||
<div>
|
||||
<h3>What happens when you stop paying</h3>
|
||||
<p>
|
||||
Your licence runs to the end of the period you
|
||||
paid for, then the instance goes read-only.
|
||||
Monitors keep checking, alerts keep firing and
|
||||
agents keep their keys — you just cannot change
|
||||
anything until you renew.
|
||||
Your licence runs to the end of the period you paid for, then the instance goes read-only. Monitors keep checking, alerts keep firing and agents keep their keys — you
|
||||
just cannot change anything until you renew.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -258,11 +197,8 @@ export default function PricingPage() {
|
||||
<div>
|
||||
<h3>Why self-hosted is annual only</h3>
|
||||
<p>
|
||||
A self-hosted licence is a signed file your
|
||||
install checks offline, with no phone home. That
|
||||
means we cannot withdraw one early, so the term
|
||||
is the limit — and we would rather bound it at a
|
||||
year than sell it twelve times over.
|
||||
A self-hosted licence is a signed file your install checks offline, with no phone home. That means we cannot withdraw one early, so the term is the limit — and we would
|
||||
rather bound it at a year than sell it twelve times over.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -270,20 +206,14 @@ export default function PricingPage() {
|
||||
<span className="spec__k">EXIT</span>
|
||||
<div>
|
||||
<h3>Leaving</h3>
|
||||
<p>
|
||||
Export every server, key, workflow and secret
|
||||
group as JSON whenever you like. Agents keep
|
||||
their last synced state on disk, so nobody is
|
||||
locked out mid-migration.
|
||||
</p>
|
||||
<p>Export every server, key, workflow and secret group as JSON whenever you like. Agents keep their last synced state on disk, so nobody is locked out mid-migration.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p className="prose" style={{ marginTop: "2.4rem" }}>
|
||||
Prices exclude VAT, which is calculated at checkout. Billing is
|
||||
handled by Paddle as merchant of record.{" "}
|
||||
Prices exclude VAT, which is calculated at checkout. Billing is handled by Paddle as merchant of record.{" "}
|
||||
<Link href="/contact" style={{ color: "var(--accent)" }}>
|
||||
Ask us anything
|
||||
</Link>{" "}
|
||||
|
||||
Reference in New Issue
Block a user