Thanks to visit codestin.com
Credit goes to github.com

Skip to content

feat: update premium paywall copy and link each page to its feature docs - #28339

Merged
david-fraley merged 5 commits into
mainfrom
dfraley/premium-paywall-copy
Aug 20, 2026
Merged

feat: update premium paywall copy and link each page to its feature docs#28339
david-fraley merged 5 commits into
mainfrom
dfraley/premium-paywall-copy

Conversation

@david-fraley

@david-fraley david-fraley commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator

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:

  1. Copy. New description and feature bullets on every paywalled admin settings page. No page falls back to the generic PREMIUM_FEATURES list anymore. PaywallAIGovernance takes a variant prop (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.
  2. Docs links (originally feat: link premium paywall pages to their feature docs #28398, merged into this branch). Each paywalled page gets a top-right "Read the docs" button pointing at that feature's docs page, and the hardcoded "Learn more about premium" pricing link is removed from PaywallPremium and PaywallSmall.

Supporting changes for (2):

  • PREMIUM_PRICING_LINK and PaywallDocumentationLink are deleted as dead code.
  • Pages that had an inline "View docs" text link in their description now use the standard SettingsHeaderDocsLink button, so the affordance is consistent.
  • Template permissions moves its SettingsHeader from the view into the page container, so the header and button render in the unentitled state too.
  • .github/workflows/typos.toml gains a SIEMs entry; typos splits it into the SIE identifier and flags it as a misspelling of SIZE.

Copy mapping

Page Description Bullets
Appearance Customize branding and announcement banners for your deployment. Custom application name and logo / Site-wide announcement banners for updates / Custom branded OIDC sign-in button / Custom support links in dropdown
Workspace Proxies Provide low-latency connections for geo-distributed teams. Low-latency connections for global teams / Automatic lowest-latency proxy selection / Relay for SSH, apps, and ports / Per-proxy latency and health metrics
Observability (Audit Logging) Monitor user operations across your deployment. Track user actions across deployment / Observe developer and agent activity / Configurable audit log retention period / Support compliance and security reviews
Groups Run isolated business units on one deployment, each with its own users, templates, provisioners, and infrastructure. Isolate provisioners & infrastructure / Sync org membership from your IdP / Manage orgs at scale via Terraform
IdP Organization Sync Configure organization mappings to synchronize claims in your auth provider to organizations within Coder. Sync groups & roles automatically / No manual user assignment / Works with your OIDC provider
AI Governance Settings Get a full audit trail of every prompt, tool call, and model response, so AI adoption stays visible, secure, and accountable. Centralized auth, no scattered API keys / Approve MCP servers & tools org-wide / Per-user token spend & usage tracking
AI Gateway Keys Authenticate standalone AI Gateway replicas securely. Authenticate without shared secrets / Works inside coderd or standalone
AI Gateway Sessions & Session Threads Trace every AI coding session step by step to see which prompt triggered which tool call, and who was behind it. Full session & thread-level detail / Attribute every action to a user / Filter by user, project, or date
Audit Logs See exactly who changed what and when, with every workspace, template, and user action logged for compliance and incident response. Configurable retention & auto-purge / API export to Splunk, Datadog & more / Meets SOC 2 & HIPAA audit requirements
Connection Log Track every SSH, IDE & port-forward connection. Full record of SSH, IDE & app sessions / Filter by organization, user & type / Export to Splunk & other SIEMs
Create Organization Run isolated business units on one deployment, each with its own users, templates, provisioners, and infrastructure. Isolate provisioners & infrastructure / Sync org membership from your IdP / Manage orgs at scale via Terraform
Organization Custom Roles Build roles with the exact permissions your team needs. Configure roles per organization / Go beyond the built-in role set / Assign custom roles to any user
Organization Provisioners Provisioners run your Terraform to create templates and workspaces. Run build jobs in isolation / Isolate cloud APIs from Coder / Keep secrets off the Coder host / Reduce server load and queue times
Organization Provisioner Keys Scoped authentication keys for org provisioners. Scoped per organization & tag / Recommended provisioner authentication / Rotate keys without downtime / Fully isolated per organization
Organization IdP Sync Auto-sync groups & roles from your IdP. Sync groups & roles automatically / Configured per organization / No manual user assignment / Works with your OIDC provider
Template Permissions Restrict template access by user or group. Choose Use or Admin-level access / Prevent unauthorized template use

Docs URL mapping

Page Docs URL
Appearance /admin/setup/appearance
Workspace Proxies /admin/networking/workspace-proxies (unchanged)
Observability /admin/security/audit-logs
Groups /admin/users/groups-roles
IdP Organization Sync /admin/users/idp-sync#organization-sync
AI Governance Settings /ai-coder/ai-governance
AI Gateway Keys /ai-coder/ai-gateway/standalone#create-a-gateway-key
AI Gateway Sessions / Session Threads /ai-coder/ai-gateway/audit
Audit Logs /admin/security/audit-logs
Connection Log /admin/monitoring/connection-logs
Create Organization /admin/users/organizations
Organization Custom Roles /admin/users/groups-roles
Organization Provisioners /admin/provisioners
Organization Provisioner Keys /admin/provisioners
Organization IdP Sync /admin/users/idp-sync
Template Permissions /admin/templates/template-permissions

Proof

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.

Page Screenshot
Appearance
Workspace Proxies
Observability
Groups
IdP Organization Sync
AI Governance Settings
AI Gateway Keys
AI Gateway Sessions
Audit Logs
Connection Log
Create Organization
Organization Custom Roles
Organization Provisioners
Organization Provisioner Keys
Organization IdP Sync
Template Permissions

Automated check against the same deployment, asserting the docs button target on each page and the absence of the old pricing link:

appearance             https://coder.com/docs/admin/setup/appearance | learnMore: 0 | paywall: 1
workspace-proxies      https://coder.com/docs/admin/networking/workspace-proxies | learnMore: 0 | paywall: 1
observability          https://coder.com/docs/admin/security/audit-logs | learnMore: 0 | paywall: 1
groups                 https://coder.com/docs/admin/users/groups-roles | learnMore: 0 | paywall: 1
idp-org-sync           https://coder.com/docs/admin/users/idp-sync#organization-sync | learnMore: 0 | paywall: 1
ai-governance          https://coder.com/docs/ai-coder/ai-governance | learnMore: 0 | paywall: 1
gateway-keys           https://coder.com/docs/ai-coder/ai-gateway/standalone#create-a-gateway-key | learnMore: 0 | paywall: 1
ai-sessions            https://coder.com/docs/ai-coder/ai-gateway/audit | learnMore: 0 | paywall: 1
audit                  https://coder.com/docs/admin/security/audit-logs | learnMore: 0 | paywall: 1
connection-log         https://coder.com/docs/admin/monitoring/connection-logs | learnMore: 0 | paywall: 1
create-organization    https://coder.com/docs/admin/users/organizations | learnMore: 0 | paywall: 1
custom-roles           https://coder.com/docs/admin/users/groups-roles | learnMore: 0 | paywall: 1
org-provisioners       https://coder.com/docs/admin/provisioners | learnMore: 0 | paywall: 1
org-provisioner-keys   https://coder.com/docs/admin/provisioners | learnMore: 0 | paywall: 1
org-idp-sync           https://coder.com/docs/admin/users/idp-sync | learnMore: 0 | paywall: 1
template-permissions   https://coder.com/docs/admin/templates/template-permissions | learnMore: 0 | paywall: 1
Investigation and scope notes for the docs links

Starting state. Both paywall variants hardcoded a link to PREMIUM_PRICING_LINK: PaywallPremium rendered a bare anchor and PaywallSmall used PaywallDocumentationLink, both labelled "Learn more about premium". No paywall had a per-feature docs target.

Chosen affordance. SettingsHeaderDocsLink already existed (outline button, external-link icon, default label "Read the docs") and was in use on 12 non-paywalled settings pages, with ObservabilitySettingsPageView as the reference. Reusing it keeps the paywall pages consistent with the rest of settings, and all URLs go through the version-aware docs() helper rather than hardcoded coder.com links.

Per-page work, by difficulty.

  1. Already had the button: Observability, Workspace Proxies, AI Governance settings. URL retargeting only.
  2. SettingsHeader present and rendered in the unentitled state: Appearance, Groups (header lives in GroupsPage.tsx), Custom Roles (header lives in CustomRolesPage.tsx), Org Provisioners, Org Provisioner Keys, AI Gateway Keys (existing actions had "Create key", now holds both).
  3. PageHeader rather than SettingsHeader: Audit and Connection Log. PageHeader already supports an actions slot, so no header migration was needed.
  4. Hand-rolled header markup: Org IdP Sync and IdP Org Sync. Inline "View docs" text links replaced with the button; on IdP Org Sync the button sits next to the existing ExportPolicyButton.
  5. Centered layout: Create Organization. The button is absolutely positioned top-right, mirroring the existing "Go Back" link on the left.
  6. Header not rendered when paywalled: Template Permissions. SettingsHeader moved from TemplatePermissionsPageView into TemplatePermissionsPage so both branches get it.
  7. No header of their own: AI Gateway Sessions and Session Threads. Both views early-return the paywall, so the button went into their shared AIBridgeSessionsLayout, replacing the inline "Learn how to audit AI sessions" link.

Known gaps. GroupsPage, CustomRolesPage, IdpSyncPage, IdpOrgSyncPage, TemplatePermissionsPage, and AIBridgeSessionsLayout are 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, and pnpm exec vitest run --project=storybook (3401 tests, 1 pre-existing unrelated failure in ModelForm, "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.

@david-fraley david-fraley changed the title feat(site/src/pages): update premium paywall copy on admin settings pages feat(site/src): update premium paywall copy on admin settings pages Aug 20, 2026
@david-fraley
david-fraley marked this pull request as ready for review August 20, 2026 16:54
Comment on lines +33 to +36
const PaywallAIGovernance = ({
variant = "governance",
}: PaywallAIGovernanceProps) => {
const { description, features } = PAYWALL_AIGOVERNANCE_COPY[variant];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

the default variant is still used, unmodified on site/src/pages/DeploymentSettingsPage/AIGovernanceSettingsPage/AIGovernanceSettingsPageView.tsx 👍

@david-fraley david-fraley changed the title feat(site/src): update premium paywall copy on admin settings pages feat: update premium paywall copy and link each page to its feature docs Aug 20, 2026
@david-fraley
david-fraley merged commit e7eea0f into main Aug 20, 2026
31 of 32 checks passed
@david-fraley
david-fraley deleted the dfraley/premium-paywall-copy branch August 20, 2026 22:06
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 20, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants