Skip to content

feat(pricing): sell Teams, keep Business gated - #18

Merged
kipavy merged 1 commit into
mainfrom
feat/sell-teams
Sep 12, 2026
Merged

feat(pricing): sell Teams, keep Business gated#18
kipavy merged 1 commit into
mainfrom
feat/sell-teams

Conversation

@kipavy

@kipavy kipavy commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

The pricing page marked Teams "Coming soon" with an empty CTA href while the Terms page priced it at $15/$18 per user and promised a 14-day free trial with a credit card required. Both statements were public and they contradict each other.

Teams itself works. Verified against an isolated server and read back from the database rather than from status codes:

flow result
Create team 201, owner role assigned
Invite + accept 204; team_members gains the invitee, roles owner / member
Built-in roles all five present (owner, manager, editor, member, connect-only)
Custom role 201, is_builtin=false
Seat cap third member against a 2-seat cap refused with 402

Changes

Teams is purchasable. Dropping comingSoon restores the real <a href> CTA and removes the opacity-60 dimming and the pill, both of which key off the same field.

The Terms trial claim is removed rather than restated. The Pro trial is granted at registration by the server; a Teams trial would have to come from the LemonSqueezy variant configuration, which cannot be verified from this repository. The price and the per-seat minimum are the parts that can be stood behind, so those stay and the trial sentence goes. If the Teams variants do carry a 14-day trial, adding the sentence back is a one-line change.

Business stays gated, and the Terms now say it is not available for purchase. It is not Teams plus granular permissions as far as billing is concerned:

  • billing.rs:238create_checkout matches only pro and teams; "business" returns 400
  • lemonsqueezy.rs:391tier_from_variant_id resolves only Pro and Teams variants

An unrecognised variant returns None, and the webhook then logs "variant is not configured; skipping tier update". So a Business purchase today would be charged and silently fail to grant the tier. Selling it needs the variants created, both match arms extended, LS_VARIANT_BUSINESS_MONTHLY/_YEARLY added to the server environment, a redeploy, and BillingPlan widened in the client.

Not covered

?plan= is not read anywhere in the signup route, so the Teams CTA parameter is cosmetic, exactly like the existing Pro one — a visitor signs up and buys Teams from the app or portal.

Vault key distribution and shared terminals were not exercised: both need two live crypto clients, and the shared headless container is wedged with orphaned WebDriver sessions. That matters because VoltiusApp/voltius#41 lives there — an invitee who accepts while the only key-holder is offline stays keyless behind a silent 404 loop. For a paying team that presents as "I paid and cannot open the vault", so it is worth closing or confirming before Teams gets real traffic.

Teams was marked "Coming soon" on the pricing page with an empty CTA href,
while the Terms page priced it and promised a 14-day free trial. Those cannot
both be true, and the product side works: an isolated end-to-end run confirmed
team creation, invite and accept, built-in and custom roles, and seat-cap
enforcement refusing a member over the cap with 402.

Unlock the Teams card so it renders a real CTA, and drop the Terms trial claim
rather than restate it — the Pro trial is granted at registration, whereas a
Teams trial would come from the LemonSqueezy variant, which is not verifiable
from this repo. Stating the price and the per-seat minimum is the part we can
stand behind.

Business stays gated and is now marked not available for purchase in the Terms.
It is not simply Teams plus granular permissions from a billing standpoint:
create_checkout matches only pro and teams, and tier_from_variant_id knows only
those variants, so a Business purchase would be charged and silently skip the
tier update.
@vercel

vercel Bot commented Sep 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
voltius Ready Ready Preview Sep 12, 2026 9:14pm UTC
voltius-portal Ready Ready Preview Sep 12, 2026 9:14pm UTC

@kipavy
kipavy merged commit 8a93834 into main Sep 12, 2026
5 checks passed
@kipavy
kipavy deleted the feat/sell-teams branch September 12, 2026 21:17
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.

1 participant