Skip to content

feat(pricing): sell Business - #20

Merged
kipavy merged 2 commits into
mainfrom
feat/sell-business
Sep 12, 2026
Merged

feat(pricing): sell Business#20
kipavy merged 2 commits into
mainfrom
feat/sell-business

Conversation

@kipavy

@kipavy kipavy commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

Business is now serveable, so the card can offer it.

Verified in production before flipping anything, rather than after:

LS_VARIANT_BUSINESS_MONTHLY=2120153   ✓ in container
LS_VARIANT_BUSINESS_YEARLY =2120204   ✓ in container
binary contains LS_VARIANT_BUSINESS_YEARLY   ✓ not a cached image
container healthy, 5/5 secrets, 0 errors

That ordering is deliberate. Publishing a CTA before the server can resolve its variant is the failure this whole sequence has been unwinding — Teams shipped that way earlier today and pointed at variant ids the store did not have.

Dead coming-soon rendering removed

With no plan marked coming soon, the plan union no longer carries the field, so plan.comingSoon narrowed to unknown and failed the ReactNode check — tsc caught it. The dimming, the pill and the inert CTA could never render again, so the branches are gone rather than cast around. tsc --noEmit exit 0.

One deployment detail worth recording

compose.prod.yml enumerates every environment variable explicitly. Adding the Business ids to .env.dockhand alone would not have reached the container — variant_id_for would read an unset variable, return None, and the handler would answer 503 for a plan the site was advertising. The passthrough shipped in VoltiusApp/server#21.

Still not claimed anywhere

The Teams Terms entry still does not promise a 14-day free trial, and the Business entry never did. Teams' trial depends on the free-trial box being ticked on its LemonSqueezy variants; Business is deliberately sold without one, since its headline value is a commercial licence and pilots are better comped per deal via admin_override.

The server now resolves both Business variants (2120153 monthly, 2120204
annual), the ids are in the container, and the binary carrying the 3-seat floor
is deployed. So the card can offer a real CTA and the Terms can drop "not yet
available for purchase".

With no plan marked coming soon, the guard rendering that state was dead: the
plan union no longer carries the field, so `plan.comingSoon` narrowed to
`unknown` and failed the ReactNode check. Removing the branches fixes the type
error and the dimming, pill and inert-CTA markup that could no longer render.
@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 10:32pm UTC
voltius-portal Ready Ready Preview Sep 12, 2026 10:32pm UTC

The free-trial box is ticked on both Teams variants, so the 14-day trial is
real and the Terms can say so. It was removed earlier precisely because it was
not yet true; the Pro trial is granted server-side without a card, whereas this
one runs through LemonSqueezy and requires one.

Business is deliberately sold without a trial and stays silent on it.
@kipavy
kipavy merged commit fff45d0 into main Sep 12, 2026
5 checks passed
@kipavy
kipavy deleted the feat/sell-business branch September 12, 2026 22:33
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