* Remove stale "You already have a subscription" notification after cancel/plan change
The notification was derived from a server-rendered meta tag set at page load,
so it persisted through cancel and plan-change flows. Now derived directly from
the URL param on the client; the param is stripped on cancel button click
(replaceState) and before plan-change reloads (location.replace via
reloadWithoutHasSubscription helper).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Fix format
* Update services/web/test/frontend/features/subscription/components/dashboard/subscription-dashboard.test.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Fix change-plan tests after location.reload → location.replace migration
reloadWithoutHasSubscription calls location.replace() not location.reload(),
so update assertions accordingly. Also stub toString() to return the jsdom
origin so FlashMessage's replaceState call doesn't throw a SecurityError.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Guard reloadWithoutHasSubscription against empty URL
When called after component unmount, useLocation's toString() returns '',
causing new URL('') to throw. No-op early to avoid the exception.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Guard against empty URL in history state replacement for subscription cancellation
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
GitOrigin-RevId: 8408ee971adf038e2d819eae5df060ace62a7e14
* Rename _faq_new.pug to _faq.pug
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Add 2026 plans page FAQ templates
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Wire up quotes and FAQ section in plans_2026.pug
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Update styles, quote component, and translations for 2026 plans page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Fix missing accordion icon wrapper in last FAQ item
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Fixup: rename `.card-pattern-sides` back to `.card-pattern`
* Create SASS placeholder and mixin
Suggested by Tim
* Fixup quote style
* Update spacings to match Figma
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
GitOrigin-RevId: 2f4e284038d79157d2b029a967918077bb206032
* Replace the black Overleaf logo to the green one
* Move subscription, login, restricted, invite views to website-redesign layout
* Remove the Storybook showcase of all the layouts
---------
Co-authored-by: Antoine Clausse <antoine.clausse@overleaf.com>
GitOrigin-RevId: b07581834921750c9c6de44f05beb0dd9eafba23
* Enable Bootstrap 5 for the subscription error pages
* Override contact modal on the plans page
* Convert AI Assist related styles to CSS
* Extend single layout-website-redesign.pug template for both Bootstrap 3 and 5
* Formatting to tab indentation
* Add the switcher for AI Assist
* Fix translations in heading
GitOrigin-RevId: 54ddc35602831f1ec1fa83c9f67a091eefda7a77
* handle 3DS challenges on the subscription dashboard
* add `/user/subscription/sync` endpoint
* upgrade `stripe-js` & rm `react-stripe-js`
* group related unit tests together
* add modules `SubscriptionController` unit tests and convert to async/await
* add `StripeClient` unit tests for 3DS failure
GitOrigin-RevId: 9da4758703f6ef4ec08248b328abddbbdd8e44ad
* removing the group size 50
* removing the if condition for 20/50 groups
* running make cleanup_unused_locales
* removing instances of sizesForHighDenominationCurrencies and the related if conditions
* removing the price related to group size of 50 in different currencies
* fixing the test
* changing the 50 to 20 under faqs
* changing the remaining 50 to 20
* cleaning of variables
* removing extra variable
GitOrigin-RevId: 68f5d7df1eab29360e9c806ad844f1c900341c19
* [web] rm split test from new plans page
* [web] rm showDiscountPercentage from group_member_picker (always false)
* [web] rm now unused classes on edu discount checkbox
* [web] rm split test from FAQ
* [web] rm unused translation
GitOrigin-RevId: 262d97f317d8aaef6e5a07a8ecd4edc67557408b
[web] Remove dead backend (include pug template) code after `website-redesign-plans` test has been concluded and `new-design` variant is fully activated
GitOrigin-RevId: 143129da71d43b88535f971b13e9e72c98bad798