From 0d004926e68671fa38c54ffa6d43304470cc28ec Mon Sep 17 00:00:00 2001 From: Antoine Clausse Date: Wed, 17 Jun 2026 13:03:48 +0300 Subject: [PATCH] [web] Cleanup `plans-2026-phase-1` - phase 1: frontend (#34619) * Remove `plans-2026-phase-1` from frontend in subscriptions module * Remove `plans-2026-phase-1` from general frontend * Remove empty `AiErrorAssistantPaywall` * Simplify `UpgradeNotification` * Update translations * Fix tests * Remove `OverleafAssistPaywall` * Remove unused locales GitOrigin-RevId: 4cf04bbde134a3f7b778a0695d388f31d9765343 --- services/web/config/settings.defaults.js | 1 - .../web/frontend/extracted-translations.json | 24 -------------- .../components/toolbar/upgrade-button.tsx | 8 +---- .../pdf-preview/components/error-logs.tsx | 12 +------ .../collaborators-limit-upgrade.tsx | 12 +------ .../components/dashboard/free-plan.tsx | 24 ++------------ .../components/ai-paywall-notification.tsx | 31 ------------------- .../js/shared/components/upgrade-benefits.tsx | 4 +-- services/web/locales/cs.json | 1 - services/web/locales/da.json | 2 -- services/web/locales/de.json | 6 ---- services/web/locales/en.json | 19 ------------ services/web/locales/es.json | 1 - services/web/locales/fi.json | 1 - services/web/locales/fr.json | 1 - services/web/locales/it.json | 1 - services/web/locales/ja.json | 1 - services/web/locales/ko.json | 1 - services/web/locales/nl.json | 1 - services/web/locales/no.json | 1 - services/web/locales/pt.json | 1 - services/web/locales/ru.json | 1 - services/web/locales/sv.json | 1 - services/web/locales/tr.json | 1 - services/web/locales/zh-CN.json | 3 -- .../components/share-project-modal.test.tsx | 4 +-- .../components/dashboard/free-plan.test.tsx | 2 +- .../frontend/features/workbench/chat.spec.tsx | 25 ++++++--------- 28 files changed, 20 insertions(+), 170 deletions(-) diff --git a/services/web/config/settings.defaults.js b/services/web/config/settings.defaults.js index 4cd93528c6..70144ecf4f 100644 --- a/services/web/config/settings.defaults.js +++ b/services/web/config/settings.defaults.js @@ -1099,7 +1099,6 @@ module.exports = { settingsModalEditorTabSections: [], settingsModalSpellcheckSections: [], editorFloatingMenuActions: [], - errorLogsComponents: [], referenceIndices: [], railEntries: [], railPopovers: [], diff --git a/services/web/frontend/extracted-translations.json b/services/web/frontend/extracted-translations.json index f33654db52..0f13068e30 100644 --- a/services/web/frontend/extracted-translations.json +++ b/services/web/frontend/extracted-translations.json @@ -1,8 +1,6 @@ { - "0_free_suggestions": "", "1_2_width": "", "1_4_width": "", - "1_free_suggestion": "", "24x_more_compile_time": "", "3_4_width": "", "About": "", @@ -72,7 +70,6 @@ "add_add_on_to_your_plan": "", "add_additional_certificate": "", "add_affiliation": "", - "add_ai_assist": "", "add_ai_assist_annual_and_get_unlimited_access": "", "add_ai_assist_monthly_and_get_unlimited_access": "", "add_ai_assist_to_your_plan": "", @@ -101,9 +98,6 @@ "add_to_dictionary": "", "add_to_tag": "", "add_txt_record_to_dns_with_token": "", - "add_unlimited_ai_to_overleaf": "", - "add_unlimited_ai_to_your_overleaf_plan": "", - "add_unlimited_ai_to_your_plan": "", "add_your_comment_here": "", "added_by_on": "", "adding": "", @@ -122,7 +116,6 @@ "agree_with_the_terms": "", "ai_assist_in_overleaf_is_included_via_writefull_groups": "", "ai_assist_in_overleaf_is_included_via_writefull_individual": "", - "ai_assist_subscriber_can_now_write_smarter": "", "ai_assist_unavailable": "", "ai_assistance": "", "ai_assistant": "", @@ -157,7 +150,6 @@ "an_error_occured_while_restoring_project": "", "an_error_occurred_when_verifying_the_coupon_code": "", "and_much_more": "", - "annual_discount": "", "anonymous": "", "anyone": "", "anyone_in_x": "", @@ -409,7 +401,6 @@ "create_new_subscription": "", "create_new_tag": "", "create_project_in_github": "", - "create_summaries": "", "created": "", "created_at": "", "creating": "", @@ -551,7 +542,6 @@ "dropbox_duplicate_project_names_suggestion": "", "dropbox_for_link_share_projs": "", "dropbox_integration_lowercase": "", - "dropbox_sync": "", "dropbox_sync_both": "", "dropbox_sync_description": "", "dropbox_sync_error": "", @@ -704,7 +694,6 @@ "files_selected": "", "filter_projects": "", "find": "", - "find_and_check_citations": "", "find_out_how_to_get_the_most_out_of_your_new_subscription": "", "find_out_more": "", "find_out_more_about_institution_login": "", @@ -714,7 +703,6 @@ "first_name": "", "fit_to_height": "", "fit_to_width": "", - "fix_errors": "", "fixed_width": "", "fixed_width_wrap_text": "", "focus_mode": "", @@ -756,7 +744,6 @@ "future_payments": "", "generate_from_text": "", "generate_from_text_or_image": "", - "generate_latex_from_prompts_and_images": "", "generate_token": "", "generating": "", "generic_export_feedback_message": "", @@ -764,14 +751,11 @@ "generic_linked_file_compile_error": "", "generic_something_went_wrong": "", "get_access_to_enterprise_features": "", - "get_ai_assist": "", "get_collaborative_benefits": "", "get_discounted_plan": "", - "get_early_access_with_ai_assist_add_on": "", "get_exclusive_access_to_labs": "", "get_full_project_history": "", "get_in_touch": "", - "get_language_suggestions": "", "get_more_compile_time": "", "get_most_subscription_by_checking_ai_writefull": "", "get_most_subscription_by_checking_overleaf": "", @@ -816,7 +800,6 @@ "github_public_description": "", "github_repository_diverged": "", "github_symlink_error": "", - "github_sync": "", "github_sync_description": "", "github_sync_error": "", "github_sync_repository_not_found_description": "", @@ -1358,7 +1341,6 @@ "ok_continue_to_project": "", "ok_join_project": "", "on": "", - "on_free_plan_upgrade_to_access_features": "", "one_step_away_from_professional_features": "", "only_add_people_who_dont_yet_have_access": "", "only_group_admin_or_managers_can_delete_your_account_1": "", @@ -1464,7 +1446,6 @@ "pending_subscription_message": "", "per_license": "", "per_month": "", - "per_month_x_annually": "", "per_year": "", "percent_is_the_percentage_of_the_line_width": "", "permanently_disables_the_preview": "", @@ -1525,7 +1506,6 @@ "primarily_work_study_question_university_school": "", "primary": "", "primary_certificate": "", - "priority_support": "", "privacy_and_terms": "", "private": "", "pro": "", @@ -1598,7 +1578,6 @@ "ready_to_join_x": "", "ready_to_join_x_in_group_y": "", "ready_to_set_up": "", - "realtime_track_changes": "", "reauthorize_github_account": "", "recaptcha_conditions": "", "recent_commits_in_github": "", @@ -2269,7 +2248,6 @@ "unlimited_collabs": "", "unlimited_collabs_per_project_plus": "", "unlimited_document_history": "", - "unlimited_projects": "", "unlink": "", "unlink_all_users": "", "unlink_all_users_explanation": "", @@ -2317,7 +2295,6 @@ "upgrade_now": "", "upgrade_plan": "", "upgrade_summary": "", - "upgrade_to_add_more_collaborators_and_access_collaboration_features": "", "upgrade_to_add_more_collaborators_and_more": "", "upgrade_to_get_feature": "", "upgrade_to_get_started": "", @@ -2452,7 +2429,6 @@ "work_offline_pull_to_overleaf": "", "work_with_non_overleaf_users": "", "work_with_other_github_users": "", - "write_faster_smarter_with_research_ready_ai": "", "x_changes_in": "", "x_changes_in_plural": "", "x_files_saved_to_your_project": "", diff --git a/services/web/frontend/js/features/ide-react/components/toolbar/upgrade-button.tsx b/services/web/frontend/js/features/ide-react/components/toolbar/upgrade-button.tsx index a97cc0b41e..4661218e2a 100644 --- a/services/web/frontend/js/features/ide-react/components/toolbar/upgrade-button.tsx +++ b/services/web/frontend/js/features/ide-react/components/toolbar/upgrade-button.tsx @@ -1,7 +1,6 @@ import { useTranslation } from 'react-i18next' import * as eventTracking from '../../../../infrastructure/event-tracking' import OLButton from '@/shared/components/ol/ol-button' -import { useFeatureFlag } from '@/shared/context/split-test-context' export default function UpgradeButton({ className = '', @@ -13,7 +12,6 @@ export default function UpgradeButton({ source?: string }) { const { t } = useTranslation() - const plans2026 = useFeatureFlag('plans-2026-phase-1') function handleClick() { eventTracking.send('subscription-funnel', source, 'upgrade') @@ -25,11 +23,7 @@ export default function UpgradeButton({ = importOverleafModules('errorLogsComponents') type ErrorLogTab = { key: string @@ -81,9 +74,6 @@ function ErrorLogs({ ))} - {logsComponents.map(({ import: { default: Component }, path }) => ( - - ))}
diff --git a/services/web/frontend/js/features/share-project-modal/components/collaborators-limit-upgrade.tsx b/services/web/frontend/js/features/share-project-modal/components/collaborators-limit-upgrade.tsx index 22bc18f049..a821a0cf9e 100644 --- a/services/web/frontend/js/features/share-project-modal/components/collaborators-limit-upgrade.tsx +++ b/services/web/frontend/js/features/share-project-modal/components/collaborators-limit-upgrade.tsx @@ -5,12 +5,10 @@ import { useUserContext } from '@/shared/context/user-context' import StartFreeTrialButton from '@/shared/components/start-free-trial-button' import OLButton from '@/shared/components/ol/ol-button' import addMoreEditorsImage from '../images/add-more-editors.svg' -import { useFeatureFlag } from '@/shared/context/split-test-context' export default function CollaboratorsLimitUpgrade() { const { t } = useTranslation() const user = useUserContext() - const plans2026 = useFeatureFlag('plans-2026-phase-1') return (
@@ -18,15 +16,7 @@ export default function CollaboratorsLimitUpgrade() { type="info" customIcon={} title={t('add_more_collaborators')} - content={ -

- {plans2026 - ? t('upgrade_to_add_more_collaborators_and_more') - : t( - 'upgrade_to_add_more_collaborators_and_access_collaboration_features' - )} -

- } + content={

{t('upgrade_to_add_more_collaborators_and_more')}

} isActionBelowContent action={ user.allowedFreeTrial ? ( diff --git a/services/web/frontend/js/features/subscription/components/dashboard/free-plan.tsx b/services/web/frontend/js/features/subscription/components/dashboard/free-plan.tsx index 61358c8679..7bdbd80b3b 100644 --- a/services/web/frontend/js/features/subscription/components/dashboard/free-plan.tsx +++ b/services/web/frontend/js/features/subscription/components/dashboard/free-plan.tsx @@ -1,39 +1,21 @@ -import { useTranslation, Trans } from 'react-i18next' +import { useTranslation } from 'react-i18next' import WritefullManagedBundleAddOn from '@/features/subscription/components/dashboard/states/active/change-plan/modals/writefull-bundle-management-modal' import getMeta from '@/utils/meta' -import { useFeatureFlag } from '@/shared/context/split-test-context' function FreePlan() { const { t } = useTranslation() const hasAiAssistViaWritefull = getMeta('ol-hasAiAssistViaWritefull') - const plans2026 = useFeatureFlag('plans-2026-phase-1') return ( <> - {plans2026 ? ( - t('you_are_using_our_free_plan') - ) : ( - , - ]} - /> - )} - : + {t('you_are_using_our_free_plan')}:
  • {t('invite_more_collabs')}
  • - {plans2026 &&
  • {t('higher_ai_allowance')}
  • } - {!plans2026 &&
  • {t('realtime_track_changes')}
  • } +
  • {t('higher_ai_allowance')}
  • {t('full_doc_history')}
  • {t('reference_search')}
  • {t('reference_sync')}
  • {t('dropbox_integration_lowercase')}
  • {t('github_integration_lowercase')}
  • - {!plans2026 &&
  • {t('priority_support')}
  • }
{t('upgrade_now')} diff --git a/services/web/frontend/js/shared/components/ai-paywall-notification.tsx b/services/web/frontend/js/shared/components/ai-paywall-notification.tsx index 0ec6b17b86..615d42bac6 100644 --- a/services/web/frontend/js/shared/components/ai-paywall-notification.tsx +++ b/services/web/frontend/js/shared/components/ai-paywall-notification.tsx @@ -6,7 +6,6 @@ import { useUserFeaturesContext } from '@/shared/context/user-features-context' import { useEditorAnalytics } from '@/shared/hooks/use-editor-analytics' import { useTranslation } from 'react-i18next' import { formatSecondsToHoursAndMinutes } from '@/shared/utils/time' -import { useFeatureFlag } from '@/shared/context/split-test-context' import getMeta from '@/utils/meta' const hasUnlimitedAi = getMeta('ol-hasUnlimitedAi') @@ -33,9 +32,7 @@ function AiPaywallNotification({ premiumSuggestionResetDate, } = useEditorContext() - const { t } = useTranslation() const features = useUserFeaturesContext() - const inQuotaRollout = useFeatureFlag('plans-2026-phase-1') const user = getMeta('ol-user') const isCommons = user.hasInstitutionLicence @@ -77,34 +74,6 @@ function AiPaywallNotification({ return null } - // if not in rollout, use old paywalls for free users - if (!inQuotaRollout && !hasAddOn) { - return null - } - - if (!inQuotaRollout) { - // if not in rollout, we can still use our fair usage messages - const chattingMessage = t( - 'youve_reached_the_fair_usage_limit_on_your_plan_you_can_start_chatting_again_in_time', - { - time: formatSecondsToHoursAndMinutes(t, secondsTillReset), - } - ) - const assistMessage = t('youve_reached_the_fair_usage') - return ( - - ) - } - if (hasAddOn) { return ( @@ -10,14 +9,13 @@ function Check() { function UpgradeBenefits({ className }: { className?: string }) { const { t } = useTranslation() - const plans2026 = useFeatureFlag('plans-2026-phase-1') return (