License upsell section#2401
Merged
Merged
Conversation
- refactor license settings tab into explicit UI states for: - no license - expired license - valid business - valid enterprise - extract promotional and expired-notice markup into dedicated components - add no-license and expired-license upgrade sections - update license details to show "Valid until" for expired licenses and align copy with the approved design - migrate new license-tab copy to Paraglide messages and replace hardcoded pricing URLs with shared constants - remove stale frontend Starter tier/copy so no-license is represented consistently as null
b931705 to
e15d2f2
Compare
There was a problem hiding this comment.
Pull request overview
Refactors the Settings → License UI to explicitly model license states (no license, grace period, expired, valid Business, valid Enterprise) and introduces dedicated upsell/notice sections, aligning copy and visuals with the updated “Try Business for Free” design.
Changes:
- Added a shared
getLicenseState(...)helper and updated top-bar/Settings views to render by explicit license UI state. - Extracted “no license”, “expired/grace period notice”, and “Business → Enterprise upsell” sections into dedicated components.
- Removed “Starter” tier references from the frontend types and updated UI copy/messages to consistently treat “no license” as
null.
Reviewed changes
Copilot reviewed 13 out of 15 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| web/src/shared/utils/license.ts | Introduces LicenseState + getLicenseState to centralize UI state derivation. |
| web/src/shared/constants.ts | Adds externalLink.defguard.sales and licenseGracePeriodDays. |
| web/src/shared/components/PageTopBar/components/TopBarLicenseExpiration/TopBarLicenseExpiration.tsx | Uses getLicenseState to determine grace-period/expired messaging. |
| web/src/shared/components/PageTopBar/components/TopBarLicense/TopBarLicenseFloating.tsx | Updates top-bar license floating panel copy to localized messages and removes Starter copy. |
| web/src/shared/api/types.ts | Removes Starter from LicenseTier. |
| web/src/pages/settings/SettingsIndexPage/tabs/SettingsLicenseTab/style.scss | Adds styling for new license sections and expired notice layout. |
| web/src/pages/settings/SettingsIndexPage/tabs/SettingsLicenseTab/components/SettingsLicenseNoLicenseSection/SettingsLicenseNoLicenseSection.tsx | New “Choose plan / Try Business for free / Contact sales” section for no-license state. |
| web/src/pages/settings/SettingsIndexPage/tabs/SettingsLicenseTab/components/SettingsLicenseInfoSection/SettingsLicenseInfoSection.tsx | Updates license details UI, banners, and date formatting; hides limits when fully expired. |
| web/src/pages/settings/SettingsIndexPage/tabs/SettingsLicenseTab/components/SettingsLicenseExpiredNotice/SettingsLicenseExpiredNotice.tsx | New expired/grace-period notice card with CTA. |
| web/src/pages/settings/SettingsIndexPage/tabs/SettingsLicenseTab/components/SettingsLicenseBusinessUpsellSection/SettingsLicenseBusinessUpsellSection.tsx | New Business → Enterprise upsell section. |
| web/src/pages/settings/SettingsIndexPage/tabs/SettingsLicenseTab/SettingsLicenseTab.tsx | Refactors main tab to render correct section by LicenseState. |
| web/messages/en/settings.json | Adds/updates license-related localized strings. |
| web/messages/en/common.json | Adds common license strings used across UI. |
| web/src/pages/settings/SettingsIndexPage/tabs/SettingsLicenseTab/assets/expired.png | Adds expired notice image asset. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
filipslezaklab
previously approved these changes
Mar 20, 2026
filipslezaklab
approved these changes
Mar 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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Related issue: #2093