Skip to content

pricing: phase 2: estimate billing page#9249

Open
royendo wants to merge 29 commits intomainfrom
pricing-2-org-billing-estimate-costs
Open

pricing: phase 2: estimate billing page#9249
royendo wants to merge 29 commits intomainfrom
pricing-2-org-billing-estimate-costs

Conversation

@royendo
Copy link
Copy Markdown
Contributor

@royendo royendo commented Apr 15, 2026

Screenshot 2026-04-15 at 17 24 11

Hardcoded 100 credit; need to update with actual credits.
ADD link to project/status/deployments page

Checklist:

  • Covered by tests
  • Ran it and it works as intended
  • Reviewed the diff before requesting a review
  • Checked for unhandled edge cases
  • Linked the issues it closes
  • Checked if the docs need to be updated. If so, create a separate Linear DOCS issue
  • Intend to cherry-pick into the release branch
  • I'm proud of this work!

royendo and others added 24 commits March 20, 2026 10:57
…ling-page

# Conflicts:
#	web-admin/src/routes/[organization]/-/settings/usage/+page.svelte
Convert `export let` to `$props()`, `$:` reactive declarations to
`$derived`, mutable locals to `$state`, and `<slot />` to
`{@render children()}` across all files changed in this PR.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
# Conflicts:
#	web-admin/src/features/billing/plans/CancelledTeamPlan.svelte
#	web-admin/src/features/billing/plans/POCPlan.svelte
#	web-admin/src/features/billing/plans/TeamPlan.svelte
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
# Conflicts:
#	web-admin/src/features/billing/plans/Plan.svelte
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@royendo royendo requested a review from ericokuma April 15, 2026 21:16
Copy link
Copy Markdown
Contributor

Screenshot 2026-04-17 at 5.15.08 PM.png

  • @Di7design @royendo, we probably should list the $0.15/Compute unit/hr somewhere on the left side of the page. We already list the storage rate ($1/GB/mo above 1GB).
  • Reset to my usage button should be disabled if the numbers reflect current configuration
  • Maybe "reset to my usage' should be "Reset to current configuration"
  • Development has a label called "optional" which i don't think makes sense.
  • Rename "Hours per day" to "Active hours per day" with a tooltip that reads "We hibernate your deployment when it’s inactive, saving you on cost."
  • Subscribe to Pro should take you to the Stripe Checkout page not the Stripe billing portal
  • The First Bill label makes sense if you are viewing this cost estimator on a Trial plan or Team plan. It's probably not the right copy for a Pro plan user

Copy link
Copy Markdown
Contributor

@ericokuma ericokuma left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see above

@royendo royendo requested review from Di7design and ericokuma April 21, 2026 18:00
Copy link
Copy Markdown
Contributor

A few more things:

Copy

  • Split the left panel into two sections: Compute and Storage. Today the panel title Select compute unit doesn't cover Storage, and the $0.15/unit/hr hint sitting next to it could read as applying to storage. With a Compute subsection (showing $0.15/unit/hr once in its header) and a Storage subsection (showing $1/GB/mo above 1 GB free in its header), each rate has one obvious home. Drop the per-row rate descriptions: Minimum 2 units · $0.15/unit/hr on Production becomes Minimum 2 units, and Same rate as prod unit on Development drops entirely.
  • Formulas need units. 4 units × 24 hrs × 30 days × $0.154 units × 24 hrs/day × 30 days × $0.15/unit/hr.
  • Storage formula. 1 GB − 1 GB free = 0 GB × $1 reads as math homework. Swap for 0 billable GB × $1/GB, and hide the row when billable GB is 0.
  • update Estimate monthly costEstimated monthly cost
  • Tooltip. We hibernate your deployment when it's inactive, saving you on cost.Deployments hibernate when inactive, so you're only billed for active hours.
  • Update Then $X/mo based on current usage to Then $X/mo at this configuration.
  • CTA for Team users. Subscribe to Pro reads oddly if a Team user lands here. Should be Upgrade to Pro for that path.

Nits

  • aria-label on the / + stepper buttons (one line, free win).
  • .stepper-input uses outline-none with no replacement focus ring — keyboard users lose focus. Add a focus style.
  • Append /mo next to the big $432.00 so the hero number is self-describing.

Copy link
Copy Markdown
Contributor

@ericokuma ericokuma left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see above

royendo added 2 commits April 21, 2026 18:39
# Conflicts:
#	web-admin/src/features/projects/status/overview/DeploymentSection.svelte
@royendo
Copy link
Copy Markdown
Contributor Author

royendo commented Apr 21, 2026

Applied:

  • Split left panel into two subsections with their own headers: Compute ($0.15/unit/hr, with 1 unit = 4 GiB RAM, 1 vCPU subtitle) and Storage ($1/GB/mo
    above 1 GB free). Old Select compute unit panel title removed.
  • Dropped per-row rate descriptions: Production now reads Minimum 2 units (no · $0.15/unit/hr); Development's Same rate as prod unit removed entirely;
    Storage's inline 1 GB included free · $1/GB/mo above that removed (rate lives in Storage header).
  • Compute formulas now carry units: N units × M hrs/day × 30 days × $0.15/unit/hr (prod + dev).
  • Storage formula simplified to N billable GB × $1/GB/mo, and the storage cost row is hidden when billableStorageGB === 0.
  • Right-panel title Estimate monthly cost → Estimated monthly cost.
  • Hibernate tooltip rewritten: We hibernate your deployment when it's inactive, saving you on cost. → Deployments hibernate when inactive, so you're only
    billed for active hours.
  • Recurring note Then $X/mo based on current usage → Then $X/mo at this configuration.

Not applied (after follow-up):

  • Team-vs-Pro CTA branching. I initially made the button read Upgrade to Pro for Team users in both estimate/+page.svelte and PlanCards.svelte, then
    reverted per direction: the button always reads Subscribe to Pro whenever the user isn't already on Pro. The isTeamPlan import and isTeam derived were
    removed to keep the file clean.

@royendo royendo requested review from ericokuma April 21, 2026 22:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants