feat: update premium paywall copy and link each page to its feature docs - #28339
Merged
Conversation
david-fraley
requested review from
jeremyruppel,
the-dietcoke-ofevil and
untra
August 20, 2026 01:26
david-fraley
marked this pull request as ready for review
August 20, 2026 16:54
jeremyruppel
approved these changes
Aug 20, 2026
untra
reviewed
Aug 20, 2026
Comment on lines
+33
to
+36
| const PaywallAIGovernance = ({ | ||
| variant = "governance", | ||
| }: PaywallAIGovernanceProps) => { | ||
| const { description, features } = PAYWALL_AIGOVERNANCE_COPY[variant]; |
Contributor
There was a problem hiding this comment.
the default variant is still used, unmodified on site/src/pages/DeploymentSettingsPage/AIGovernanceSettingsPage/AIGovernanceSettingsPageView.tsx 👍
untra
approved these changes
Aug 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TL;DR: the "you need Premium" screens now say the right things, and each one links to the docs for that actual feature instead of our pricing page.
Two changes, per the Premium Copy Updates doc:
PREMIUM_FEATURESlist anymore.PaywallAIGovernancetakes avariantprop (governance|sessions) because AI Governance settings and the AI Gateway sessions pages need different copy. Rows marked badge-size, blank, or without a description were left untouched.PaywallPremiumandPaywallSmall.Supporting changes for (2):
PREMIUM_PRICING_LINKandPaywallDocumentationLinkare deleted as dead code.SettingsHeaderDocsLinkbutton, so the affordance is consistent.SettingsHeaderfrom the view into the page container, so the header and button render in the unentitled state too..github/workflows/typos.tomlgains aSIEMsentry; typos splits it into theSIEidentifier and flags it as a misspelling ofSIZE.Copy mapping
Docs URL mapping
/admin/setup/appearance/admin/networking/workspace-proxies(unchanged)/admin/security/audit-logs/admin/users/groups-roles/admin/users/idp-sync#organization-sync/ai-coder/ai-governance/ai-coder/ai-gateway/standalone#create-a-gateway-key/ai-coder/ai-gateway/audit/admin/security/audit-logs/admin/monitoring/connection-logs/admin/users/organizations/admin/users/groups-roles/admin/provisioners/admin/provisioners/admin/users/idp-sync/admin/templates/template-permissionsProof
Captured from a local dev deployment (no license, so every paywall renders) at 1400x950, on the current branch head. These show the final state of both changes together.
Automated check against the same deployment, asserting the docs button target on each page and the absence of the old pricing link:
Investigation and scope notes for the docs links
Starting state. Both paywall variants hardcoded a link to
PREMIUM_PRICING_LINK:PaywallPremiumrendered a bare anchor andPaywallSmallusedPaywallDocumentationLink, both labelled "Learn more about premium". No paywall had a per-feature docs target.Chosen affordance.
SettingsHeaderDocsLinkalready existed (outline button, external-link icon, default label "Read the docs") and was in use on 12 non-paywalled settings pages, withObservabilitySettingsPageViewas the reference. Reusing it keeps the paywall pages consistent with the rest of settings, and all URLs go through the version-awaredocs()helper rather than hardcodedcoder.comlinks.Per-page work, by difficulty.
SettingsHeaderpresent and rendered in the unentitled state: Appearance, Groups (header lives inGroupsPage.tsx), Custom Roles (header lives inCustomRolesPage.tsx), Org Provisioners, Org Provisioner Keys, AI Gateway Keys (existingactionshad "Create key", now holds both).PageHeaderrather thanSettingsHeader: Audit and Connection Log.PageHeaderalready supports anactionsslot, so no header migration was needed.ExportPolicyButton.SettingsHeadermoved fromTemplatePermissionsPageViewintoTemplatePermissionsPageso both branches get it.AIBridgeSessionsLayout, replacing the inline "Learn how to audit AI sessions" link.Known gaps.
GroupsPage,CustomRolesPage,IdpSyncPage,IdpOrgSyncPage,TemplatePermissionsPage, andAIBridgeSessionsLayoutare containers with no Storybook story, so their buttons are covered by the dev-deployment evidence above rather than by stories. Audit and Connection Log now have both the header button and their existing help popover link pointing at the same docs page; consolidating those is left out of scope.Verification.
make fmt,pnpm exec tsc --noEmit,pnpm exec biome check src, andpnpm exec vitest run --project=storybook(3401 tests, 1 pre-existing unrelated failure inModelForm, "Cost Estimate Shows Loading While Debounce Pending"), plus the dev-deployment screenshots and DOM assertions above.Generated by Coder Agents on behalf of @david-fraley.