+
+
+
+
+ {#if currentPlan === "enterprise"}
Enterprise
Custom contract · Fully managed
-
-
window.Pylon("show")}>
- Contact us
-
-
-
- Fully managed slots, dedicated CSM, white-label capabilities, and custom
- SLAs. Contact your CSM for contract details or changes.
-
- {:else if currentPlan === "trial"}
-
-
-
+ {:else if currentPlan === "trial"}
Pro Trial
$250 free credit · No time limit
-
-
(comparePlansOpen = true)}>
- Subscribe to Pro
-
-
-
-
-
-
-
-
- Credit usage coming soon
- $0.15/slot/hr
-
-
- {:else if currentPlan === "pro"}
-
-
-
+ {:else if currentPlan === "pro"}
Pro
Usage based pricing · $0.15/slot/hr
-
-
- {:else if currentPlan === "team"}
-
-
-
+ {:else if currentPlan === "team"}
Team
Legacy plan
-
+ {/if}
+
+ {#if currentPlan === "enterprise"}
+
window.Pylon("show")}>
+ Contact us
+
+ {:else if currentPlan === "trial"}
+
+ Subscribe to Pro
+
+ {/if}
+
+
+ {#if currentPlan === "enterprise"}
+
+ Fully managed slots, dedicated CSM, white-label capabilities, and custom
+ SLAs. Contact your CSM for contract details or changes.
+
{/if}
-
-
+
+
+
+
+
-
— Total slots
-
-
— Prod slots
-
-
— Dev slots
-
-
— Storage
+
+ {totalSlots}
+ Total slots
+
+
+
+ {prodSlots}
+ Prod slots
+
+
+
+ {devSlots}
+ Dev slots
+
+
+
+ {totalStorage > 0
+ ? formatMemorySize(totalStorage)
+ : "0 B"}
+ Storage
+
- View usage →
+ View usage
+
+
+
@@ -203,92 +238,98 @@
{/if}
+
+
diff --git a/web-admin/src/features/projects/status/overview/DeploymentSection.svelte b/web-admin/src/features/projects/status/overview/DeploymentSection.svelte
index 727f1b5c504..4e91e36312d 100644
--- a/web-admin/src/features/projects/status/overview/DeploymentSection.svelte
+++ b/web-admin/src/features/projects/status/overview/DeploymentSection.svelte
@@ -214,7 +214,10 @@
{dataLabel}
-
+
{formatMemorySize(dataSizeBytes)}
From 8416791cdbf02a83018e41d4640200dddfdeddc3 Mon Sep 17 00:00:00 2001
From: royendo <67675319+royendo@users.noreply.github.com>
Date: Wed, 15 Apr 2026 16:00:38 -0400
Subject: [PATCH 18/24] nit
---
web-admin/src/features/billing/plans/Plan.svelte | 4 ++--
.../projects/status/overview/DeploymentSection.svelte | 7 ++++++-
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/web-admin/src/features/billing/plans/Plan.svelte b/web-admin/src/features/billing/plans/Plan.svelte
index 19e1f02931a..eddac71568d 100644
--- a/web-admin/src/features/billing/plans/Plan.svelte
+++ b/web-admin/src/features/billing/plans/Plan.svelte
@@ -306,7 +306,7 @@
href="/{organization}/-/settings/billing/usage"
class="view-usage-link"
>
- View usage
+ View Usage
-
+
diff --git a/web-admin/src/features/projects/status/overview/DeploymentSection.svelte b/web-admin/src/features/projects/status/overview/DeploymentSection.svelte
index 4e91e36312d..43677c35aea 100644
--- a/web-admin/src/features/projects/status/overview/DeploymentSection.svelte
+++ b/web-admin/src/features/projects/status/overview/DeploymentSection.svelte
@@ -216,7 +216,7 @@
{formatMemorySize(dataSizeBytes)}
@@ -252,4 +252,9 @@
.repo-link:hover {
@apply underline;
}
+ .data-size-link {
+ @apply no-underline;
+ color: inherit;
+ font: inherit;
+ }
From f82cbdec2077d446a3145b39f5bb289c9069bc2a Mon Sep 17 00:00:00 2001
From: royendo <67675319+royendo@users.noreply.github.com>
Date: Wed, 15 Apr 2026 16:34:10 -0400
Subject: [PATCH 19/24] follow up to https://github.com/rilldata/rill/pull/9088
---
.../src/features/billing/plans/Plan.svelte | 9 -
.../features/billing/plans/PlanCards.svelte | 9 +-
.../-/settings/billing/estimate/+page.svelte | 470 ++++++++++++++++++
.../-/settings/billing/estimate/+page.ts | 5 +
4 files changed, 478 insertions(+), 15 deletions(-)
create mode 100644 web-admin/src/routes/[organization]/-/settings/billing/estimate/+page.svelte
create mode 100644 web-admin/src/routes/[organization]/-/settings/billing/estimate/+page.ts
diff --git a/web-admin/src/features/billing/plans/Plan.svelte b/web-admin/src/features/billing/plans/Plan.svelte
index eddac71568d..96d5e98df1d 100644
--- a/web-admin/src/features/billing/plans/Plan.svelte
+++ b/web-admin/src/features/billing/plans/Plan.svelte
@@ -403,12 +403,6 @@
@apply font-sans font-semibold text-lg leading-7 align-middle text-fg-tertiary;
}
- .estimate-cost-link {
- @apply font-sans font-semibold text-lg leading-7 align-middle text-primary-500 no-underline cursor-pointer;
- }
- .estimate-cost-link:hover {
- @apply text-primary-600 underline;
- }
.period-estimate {
@apply flex flex-col items-center mt-4 pt-6 pb-4;
@@ -498,9 +492,6 @@
line-height: 100%;
}
- .stat-divider {
- @apply w-px h-4 bg-gray-200;
- }
.compare-toggle {
@apply flex items-center justify-center gap-1.5 text-sm font-medium text-fg-secondary cursor-pointer bg-transparent border-t border-l-0 border-r-0 border-b-0;
diff --git a/web-admin/src/features/billing/plans/PlanCards.svelte b/web-admin/src/features/billing/plans/PlanCards.svelte
index 0bdc3dea09e..113939e43a1 100644
--- a/web-admin/src/features/billing/plans/PlanCards.svelte
+++ b/web-admin/src/features/billing/plans/PlanCards.svelte
@@ -1,6 +1,6 @@
+
+
+
+
+
+
+
+ Billing
+
+
Estimate your cost
+
+
+
+
+
+
+
+
+
+
Estimate monthly cost
+
{fmtUSD(monthlyCost)}
+
~{fmtUSD(dailyCost)}/day
+
+
+
+
+
+
+ Production
+
+ {prodUnits} units × {hoursPerDay} hrs × {DAYS_PER_MONTH} days × ${RATE_PER_UNIT_HR.toFixed(2)}
+
+
+
{fmtUSD(prodCost)}
+
+
+
+
+
+ Development
+
+ {devUnits} units × {hoursPerDay} hrs × {DAYS_PER_MONTH} days × ${RATE_PER_UNIT_HR.toFixed(2)}
+
+
+
{fmtUSD(devCost)}
+
+
+
+
+
+ Storage (GB)
+
+ {storageGB} GB − {FREE_STORAGE_GB} GB free = {billableStorageGB} GB × ${STORAGE_RATE_PER_GB}
+
+
+
{fmtUSD(storageCost)}
+
+
+
+
+
+
+ Monthly cost
+ {fmtUSD(monthlyCost)}
+
+
+
+ {#if availableCredit > 0}
+
+
+ Available credit
+ Applied to your first bill
+
+
-{fmtUSD(availableCredit)}
+
+
+
+
+ First bill
+ {fmtUSD(firstBill)}
+
+
+
+ Then {fmtUSD(monthlyCost)}/mo based on current usage
+
+ {/if}
+
+
+ {#if !isPro}
+
+ Subscribe to Pro
+
+ {/if}
+
+
+ Contact sales for volume discounts
+
+
+
+
+
+
diff --git a/web-admin/src/routes/[organization]/-/settings/billing/estimate/+page.ts b/web-admin/src/routes/[organization]/-/settings/billing/estimate/+page.ts
new file mode 100644
index 00000000000..505956c4186
--- /dev/null
+++ b/web-admin/src/routes/[organization]/-/settings/billing/estimate/+page.ts
@@ -0,0 +1,5 @@
+import type { PageLoad } from "./$types";
+
+export const load: PageLoad = async ({ params: { organization } }) => {
+ return { organization };
+};
From df0d27c160dd71ef1cd1e040a92777a13870be99 Mon Sep 17 00:00:00 2001
From: royendo <67675319+royendo@users.noreply.github.com>
Date: Wed, 15 Apr 2026 17:12:03 -0400
Subject: [PATCH 20/24] prettier, code qual
---
scripts/tsc-with-whitelist.sh | 1 +
.../src/features/billing/plans/Plan.svelte | 2 -
.../-/settings/billing/estimate/+page.svelte | 116 ++++++++++++++----
3 files changed, 96 insertions(+), 23 deletions(-)
diff --git a/scripts/tsc-with-whitelist.sh b/scripts/tsc-with-whitelist.sh
index 5abbe618948..a7da250e2db 100755
--- a/scripts/tsc-with-whitelist.sh
+++ b/scripts/tsc-with-whitelist.sh
@@ -9,6 +9,7 @@ web-admin/src/routes/[organization]/-/settings/+layout.ts: error TS2307
web-admin/src/routes/[organization]/-/settings/+page.ts: error TS2307
web-admin/src/routes/[organization]/-/settings/billing/+page.ts: error TS2307
web-admin/src/routes/[organization]/-/settings/billing/payment/+page.ts: error TS2307
+web-admin/src/routes/[organization]/-/settings/billing/estimate/+page.ts: error TS2307
web-admin/src/routes/[organization]/-/settings/billing/upgrade/+page.ts: error TS2307
web-admin/src/routes/[organization]/-/settings/usage/+page.ts: error TS2307
web-admin/src/routes/[organization]/-/upgrade-callback/+page.ts: error TS2307
diff --git a/web-admin/src/features/billing/plans/Plan.svelte b/web-admin/src/features/billing/plans/Plan.svelte
index 96d5e98df1d..09e4a38e813 100644
--- a/web-admin/src/features/billing/plans/Plan.svelte
+++ b/web-admin/src/features/billing/plans/Plan.svelte
@@ -403,7 +403,6 @@
@apply font-sans font-semibold text-lg leading-7 align-middle text-fg-tertiary;
}
-
.period-estimate {
@apply flex flex-col items-center mt-4 pt-6 pb-4;
gap: 8px;
@@ -492,7 +491,6 @@
line-height: 100%;
}
-
.compare-toggle {
@apply flex items-center justify-center gap-1.5 text-sm font-medium text-fg-secondary cursor-pointer bg-transparent border-t border-l-0 border-r-0 border-b-0;
margin: 0 -24px -24px;
diff --git a/web-admin/src/routes/[organization]/-/settings/billing/estimate/+page.svelte b/web-admin/src/routes/[organization]/-/settings/billing/estimate/+page.svelte
index 36dd0b91f17..13d4cdced61 100644
--- a/web-admin/src/routes/[organization]/-/settings/billing/estimate/+page.svelte
+++ b/web-admin/src/routes/[organization]/-/settings/billing/estimate/+page.svelte
@@ -63,8 +63,12 @@
const DAYS_PER_MONTH = 30;
// Cost calculations
- let prodCost = $derived(prodUnits * hoursPerDay * DAYS_PER_MONTH * RATE_PER_UNIT_HR);
- let devCost = $derived(devUnits * hoursPerDay * DAYS_PER_MONTH * RATE_PER_UNIT_HR);
+ let prodCost = $derived(
+ prodUnits * hoursPerDay * DAYS_PER_MONTH * RATE_PER_UNIT_HR,
+ );
+ let devCost = $derived(
+ devUnits * hoursPerDay * DAYS_PER_MONTH * RATE_PER_UNIT_HR,
+ );
let billableStorageGB = $derived(Math.max(storageGB - FREE_STORAGE_GB, 0));
let storageCost = $derived(billableStorageGB * STORAGE_RATE_PER_GB);
let monthlyCost = $derived(prodCost + devCost + storageCost);
@@ -102,20 +106,30 @@
window.Pylon("show");
}
- function clampInput(e: Event, min: number, max: number, setter: (v: number) => void) {
+ function clampInput(
+ e: Event,
+ min: number,
+ max: number,
+ setter: (v: number) => void,
+ ) {
const el = e.target as HTMLInputElement;
const n = parseInt(el.value, 10);
if (isNaN(n) || n < min) setter(min);
else if (n > max) setter(max);
else setter(n);
}
-
@@ -163,8 +193,18 @@
Optional · Same rate as prod unit