Commit Graph
3595 Commits
Author SHA1 Message Date
Alf Eaton 6b349ee3be Add start_url to web manifest (#35015)
GitOrigin-RevId: 81c723df6e6134d9bce32fd3a0dd632769a595e1
2026-09-17 11:45:13 +00:00
Rebeka Dekany 1d8c0fb23a Suppress navbar and footer on account security pages (#35744)
* Suppress skip-to-content link on pages without a navbar

* Add main content as target area for the skip link on the library page

* Suppress navbar, footer and skip-to-content on account security pages

GitOrigin-RevId: a85fac5667d84c6f60577cd0ea469cd215554cc4
2026-09-17 11:37:10 +00:00
Rebeka DekanyandCopilot Autofix powered by AI 0b574d2ccd Rename user-facing Papers reference manager to ReadCube (#35701)
* Rename user-facing Papers reference manager text to ReadCube

* Rename Papers component and files name to Readcube

* Update locales from Papers to ReadCube

* Rename ID name from papers to readcube

* Fix a chinese locale to use ReadCube

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
GitOrigin-RevId: ee89e3f5da5bcf9987c0ee3e558b9ae1dab9372c
2026-09-17 11:37:06 +00:00
Rebeka Dekany 5ccbd1eb5c [web] Suppress skip-to-content link on pages without a navbar (#35670)
* Suppress skip-to-content link on pages without a navbar

* Add main content as target area for the skip link on the library page

GitOrigin-RevId: a47d7bbc283b648e47db93648d8fcae6ae12ea5a
2026-09-17 11:36:29 +00:00
Brian Gough 8f5f86bce1 Merge pull request #35257 from overleaf/bg-png2pdf-premium
limit png2pdf to priority compiles

GitOrigin-RevId: a2b394efe6056ccbc6963d922f3e8b385645167b
2026-09-17 11:35:57 +00:00
Thomas 3fb3baf03a Merge pull request #34605 from overleaf/tm-request-access-redesign
[WEB] Request edit access in the new share modal

GitOrigin-RevId: d01cf4d038d5ce07c34deac0714b0cdad02136be
2026-09-17 11:34:55 +00:00
Antoine Clausse 82f92933a2 [web] Remove some unused code related to AI assist (#35533)
* Remove unused `ol-addonPrices`

* Remove unused `showAiAssistAnnualDiscount`

* Remove unused `buyAddOnUrl` and related code

GitOrigin-RevId: d4f47d8c6cd8e2b304ad5c0a2c78cbef28a6cb97
2026-09-17 11:29:35 +00:00
Liam O'BrienandClaude Sonnet 4.6 77970c98c9 Fix GitHub Sync unlink robustness and detect expired credentials (#35147)
* github-sync: only swallow permanent revocation failures during unlink

404 (token gone) and 422 (token issued under a mismatched client_id,
the confirmed cause of #35108) are treated as safe to proceed past;
any other revocation error now aborts the unlink instead of silently
deleting the local credential row, so a token that might still be
live isn't orphaned by a transient GitHub failure.

* web: surface genuine github-sync unlink failures instead of a 500

When GithubSyncApiHandler.unlink rejects for a reason other than the
permanent 404/422 cases now handled by github-sync, show an error
notification on the settings page instead of crashing the request,
mirroring the existing projectSyncSuccessMessage session-flash pattern.

* github-sync: detect expired credentials in user status check

getStatus now validates a stored token against GitHub (GET /user)
before reporting it as linked. A GithubInvalidCredentialsError (401)
now surfaces as expired: true alongside enabled: true, distinguishing
a dead token from a genuinely working link. Any other validation
failure fails open and reports enabled: true as before.

* web: propagate github-sync expired status through to the client

Thread the new expired field from github-sync's status endpoint
through GithubSyncController.getUserStatus and the settings-page
injectUserSettings middleware, and extend the corresponding
TypeScript types on both the app and frontend side.

* web: show a re-link path on the settings widget when github credentials expire

The widget now checks expired status: it shows an error indicator
with a "connection expired" message and renders the Link action
instead of a dead-end Unlink button, since relinking upserts a fresh
token regardless of the stale row.

* web: keep unlink available for expired github credentials

Some users just want to remove an expired connection rather than
relink it. Keep Unlink as the primary action regardless of expired
status, and surface the relink path as an inline link next to the
expired message instead of replacing the primary action.

* web: correct the github unlink confirmation warning

Unlinking never touches a project's githubSyncProjectStates row,
regardless of whether the credential was healthy or expired -
verified by tracing unlinkAccount/deleteUser and confirming no other
code path deletes project sync state on account unlink. Sync pauses
until relink, but no project loses its GitHub connection, so the
warning text was simply wrong; corrected rather than adding a
separate expired-specific message.

* web: add Storybook story for expired github-sync credentials

Covers the new expired state alongside the existing NoFeature,
Unlinked, Linked and Error stories for the settings widget.

* simplify: collapse duplicated branches and extract session-flash helper

- Merge the near-identical 404/422 checks in _revokeToken into one
  status-set check.
- Use optional chaining instead of null-guard ternaries in
  GithubSyncMiddleware.
- Extract popSessionValue() in UserPagesController to de-duplicate the
  read-then-delete session flash-message pattern, now used 3 times.

* review-self: close test coverage gaps found in self-review

- AuthenticationController: cover 401/403 revocation responses and a
  plain network error with no .response, alongside existing 404/422/500.
- GithubSyncController: assert projectSyncErrorMessage stays unset on
  the unlink success path.
- UserPagesController: cover projectSyncErrorMessage set-then-cleared
  and absent-stays-undefined cases.
- Add GithubSyncMiddleware.test.mjs (previously untested): not-logged-in,
  successful status fetch, and callback-error branches.
- Cypress: cover cancelling the unlink confirmation modal while expired.
- Storybook: add ErrorWhileUnlinked story for the disabled-Link +
  error-indicator combination.

* review-self: fix audit-log ordering, cache getStatus validation safely

- GithubSyncApiHandler: write the link-github/unlink-github audit log
  entry only after the corresponding github-sync API call succeeds,
  instead of before (resolves the discrepancy tracked in issue 3354).
- UserController/UserManager: cache getStatus's live token-validation
  result for 5 minutes to cut down on redundant GitHub API calls,
  with an optimistic-lock write (matched against the encrypted token
  that was actually validated) so a relink can never be overwritten by
  a stale in-flight validation of the old token.
- github-integration-linking-widget: dedupe the relink href against
  the linkPath already passed to IntegrationLinkingWidget.

* web: surface expired github credentials proactively in the sync modal

The modal previously only showed the reauthorize prompt after a real
GitHub API call failed with 401 mid-action. It now also checks the
expired field already returned by the status endpoint and shows the
same prompt immediately on open, before ever rendering the export
form against a token known to be dead. Extracted the existing
reauthorize markup into GithubCredentialsExpired so both call sites
share it.

* github-sync: avoid double-fetching the credential doc in getStatus

getStatus called UserManager.getUser, then getAuthToken which
internally fetched the same document again. Add getAuthTokenFromUser
to decrypt from an already-fetched doc and use it in getStatus,
removing the redundant Mongo query and the now-unreachable
GithubUserNotLinkedError handling (the user doc's existence was
already confirmed by the first fetch).

* github-sync: make expired-token handling reactive, drop proactive getStatus validation

Reverts getStatus in the github-sync service to a pure DB check — no live
GitHub API call, no 5-minute cache, no token_expired/token_validated_at
fields. The expired state is already surfaced reactively: the unmerged-commits
fetch on modal open returns 401 when the token is dead (handled by the existing
case 401 branch), and ExportToGithub handles 401 from the orgs call. The
proactive check added complexity (caching, optimistic-lock writes) without a
meaningful UX gain over the reactive paths.

Removes the expired indicator from the settings widget and the proactive
GithubCredentialsExpired screen from the modal's pre-flight check. The
github_sync_expired locale key is removed as it is no longer referenced.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* github-sync: show reauthorize prompt when push/pull fails with expired credentials

When a merge (push or pull) returns 401, GithubSyncMergeAction now renders
GithubCredentialsExpired with the Reauthorize button instead of the raw
"GithubInvalidCredentialsError" string that was previously falling through
to the default error branch.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* github-sync: wrap all async controller handlers with expressify

Without expressify, an unhandled throw from an async route handler
(e.g. a token decryption failure in the github-sync service producing a
non-4xx error that _reportError re-throws) becomes an unhandled rejection.
Express never sends a response and the modal is left stuck on loading.
expressify catches the error and passes it to next(), so Express's error
handler sends a 500 and the frontend can surface it.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* removing redundant tests

* removing getAuthTokenFromUser function

* removing redundant key

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
GitOrigin-RevId: 0d9a314bf70bea9e6037593f2a6f8b8d1f2c6e71
2026-09-17 11:22:04 +00:00
Rebeka DekanyandCopilot Autofix powered by AI f30c23cacc Update in-product doc links to point to docs.overleaf.com (#35184)
* update doc links to point to docs.overleaf.com instead of the old learn wiki

* fix broken link to LaTeX positioning wiki article in figure modal help

* point figure positioning help link to the docs.overleaf.com page

* point figure/table label help links to specific anchors on the captioning-and-referencing-figures doc page

* point figure modal error-help link to the graphicx-loading doc page

* normalize target/rel on docs.overleaf.com links opened in a new tab

* open figure modal and SSO help links in a new tab now that they point off-site

* add eslint rule enforcing rel=noopener noreferrer on docs.overleaf.com links

* extend require-rel-for-docs-links to also check OLButton

* add lint script catching missing rel on docs.overleaf.com links in pug templates

* fix require-rel-for-docs-links autofix crash on valueless rel attribute

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* add regression test for require-rel-for-docs-links valueless-rel autofix

* revert `target=_blank` on figure modal and SSO help links

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
GitOrigin-RevId: b6111341e1080fd7e4b42f6a1a18c27ea0fd7d8c
2026-09-17 11:18:47 +00:00
roo hutton a36a6731b6 Merge pull request #34442 from overleaf/rh-cio-sdk-proxy
Strip page title from customer.io page views

GitOrigin-RevId: 06fbc785e7fa3d5e51afe16a887e342d4868c3ef
2026-06-10 11:59:11 +00:00
Miguel Serrano c981330cc1 [web] Disabled AI state for project collaborators (#34256)
* [web] Disabled AI state for project collaborators

Displays a disabled state, along with an informative tooltip in Editor AI controls.

GitOrigin-RevId: a749cd25d54f6ef3d7bf4276343400894bc193a4
2026-06-10 11:58:01 +00:00
Miguel Serrano a4d682719b [web] Hide privilege matrix tab in CE/SP (#34339)
The privilege matrix is only available in saas.

GitOrigin-RevId: 72156e82d5039bc622e0119e07d2b4c5b9fdc10d
2026-06-10 11:57:56 +00:00
Olzhas Askar 8c88f53a9a Merge pull request #34326 from overleaf/oa-remove-logo
[web] Remove double logo

GitOrigin-RevId: 85678f6077bed57394a6d0ec5e72fefcc565352c
2026-06-09 08:05:37 +00:00
Antoine ClausseandClaude Opus 4.7 2a5f1be811 [web] Fix "For students" link, fix toggles and navigation (#34051)
* [web] Fix footer For Students link to activate student toggle

The footer link only set itm_referrer plus a #student-annual hash. The
plans page reads the active plan/period from `plan` and `period` query
params (PlansHelper.getPlansPageViewOptions), so the student tab never
activated from the footer link.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* syncStudentModeFromPlanType after in handleDeprecatedHash

* Change URL update to use replaceState in the pricing page

* Revert "Change URL update to use replaceState in the pricing page"

This reverts commit eac71f193029e3f1c75e0c97261d8a5982c0d35c.

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
GitOrigin-RevId: 69d689d0fe89fc68cefab9233739fc61da8f2ced
2026-06-02 08:07:40 +00:00
Antoine ClausseandClaude Opus 4.7 105a0ff35c [web] Add nonprofit discount FAQ to plans page (#34126)
Insert a new "Do you offer discounts for nonprofits?" accordion item
under the educational group discount question in the "Overleaf
multi-license plans" FAQ tab. Routes the "contact sales" link through
the existing `faqContactLink` mixin so click tracking stays consistent
with the other FAQ contact links.

Closes #33494

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
GitOrigin-RevId: 582517f1d1f1f7934610253c252cf0f8af2b68a2
2026-06-02 08:07:35 +00:00
Andrew Rumble 08975f4ba2 Merge pull request #33997 from overleaf/ar-require-cookie-consent-for-mixpanel-autocapture
[web] require cookie consent for mixpanel autocapture

GitOrigin-RevId: 6898b72079cc6c286ce15a276979381a23c32ebe
2026-05-28 08:06:55 +00:00
Malik Glossop eb9d586bdb Merge pull request #32968 from overleaf/worktree-labs-feature-preview
Add labs preview modal to editor

GitOrigin-RevId: 0df33135febc8e94129bcdfdfb5c4981326dfab0
2026-05-25 08:05:28 +00:00
Miguel Serrano f9c53fe147 [web] Added DEFAULT_LATEX_COMPILER env (#32455)
This is mainly intended to be used in CE/Server Pro

GitOrigin-RevId: 277f9afca389a1e7b00db2d987129432fb1707b5
2026-05-21 08:06:12 +00:00
Olzhas Askar 6c267e68d3 Merge pull request #33707 from overleaf/oa-learn-links
[web] Learn Overleaf links

GitOrigin-RevId: af9f72da008ad8b8c86e4c355268123eb6c40bcd
2026-05-18 08:05:48 +00:00
Andrew Rumble 30bedf3913 Merge pull request #33278 from overleaf/ar-mixpanel-autocapture
[web] mixpanel autocapture

GitOrigin-RevId: 81f6a11ae968da4c13a28e202dd3ed1113f365d4
2026-05-01 08:07:20 +00:00
Olzhas Askar 823f11426b Merge pull request #33109 from overleaf/oa-upgrade-path
[web] Upgrade path

GitOrigin-RevId: 532993e613bdc42cf92a7b10e629aa94596d854e
2026-05-01 08:07:01 +00:00
dd44f4e2e8 [web] Remove stale "You already have a subscription" notification (#33187)
* 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
2026-05-01 08:06:41 +00:00
Olzhas Askar fe59b9cdb5 Merge pull request #33245 from overleaf/oa-faq
[web] 2026 FAQ fixes

GitOrigin-RevId: e70a6080341ea63d3668794f50baf7538f09f55b
2026-04-30 08:06:02 +00:00
Olzhas Askar 7c0595f9a9 Merge pull request #32063 from overleaf/oa-group-plans
[web] Rename group plans

GitOrigin-RevId: 8a3097dc1724709b5d7b163e0f9d968c21d63831
2026-04-30 08:05:10 +00:00
Simon Gardner 8a331bc943 fix: [web] managed group admins unable to re-subscribe (#29634)
GitOrigin-RevId: 5e3d46c39f4657fcc737403a80093b870bc42240
2026-04-28 08:06:27 +00:00
Mathias Jakobsen 32255a4e6f Merge pull request #32936 from overleaf/mj-ce-themes
[web] Enable changing overall themes in SP/CE

GitOrigin-RevId: a6aa35e40826faec1001b658603b9f1cc8b0a50d
2026-04-21 08:06:31 +00:00
Antoine ClausseandClaude Sonnet 4.6 e301030c09 [web] 2026 pricing page: FAQ and quotes (#32759)
* 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
2026-04-20 08:04:30 +00:00
Jakob Ackermann 933c0c2943 [web] use default nav-bar color for admins in dev-env (#32798)
GitOrigin-RevId: e3608ce699ac38ef33805618df456c94c6bf587b
2026-04-17 08:06:59 +00:00
Olzhas AskarandAntoine Clausse b345bf9485 [web] Update captcha notice (#32286)
* feat: remove translations

* feat: remove scss

* fix: remove the last translation

* feat: remove pug

* fix: forgotten conditions

* feat: also remove from react

* Revert changes

* Remove links from `recaptcha_conditions`

* Center short reCAPTCHA notice on CIAM screens

* Re-add the Chinese translation

---------

Co-authored-by: Antoine Clausse <antoine.clausse@overleaf.com>
GitOrigin-RevId: 64e7b8a38c2a4b4f7e60d5c9df6740c35b8763d8
2026-04-14 08:05:15 +00:00
Jakob Ackermann b893ba36e2 [monorepo] add integration for GitHub Code Spaces (#32722)
* [web] serve site manifest as application/json

* [monorepo] bail out early from dev-env-setup when inside devcontainer

* [monorepo] move utils for waiting for services into shared bash script

* [monorepo] move domain related env-vars into dedicated .env file

The .env file will be overridden in GitHub Code Spaces.

* [monorepo] remove unused initial_mongo_setup Make target

It was previously used for the mongo replica set setup.
That setup is a docker init script now.

* [monorepo] add flag for silencing docker build output

* [monorepo] add integration for GitHub Code Spaces

* [web] make prettier happy

* [web] restore no use-credentials for manifest outside code spaces

* [monorepo] run make install as part of post-start again

GitOrigin-RevId: 8c2cc3b969b7e3e8f9c5dac778192c9412cbf4df
2026-04-13 08:04:22 +00:00
roo hutton 24b16c1304 Merge pull request #32611 from overleaf/rh-cio-email-sdk
Add identifiers to cio calls to avoid profile splits

GitOrigin-RevId: fec8cad4e87f8df910d729bd00acbf26d0931102
2026-04-13 08:04:18 +00:00
Jakob Ackermann 95793037e6 [web] turn nav-bar and toolbar red when having admin powers (#32582)
GitOrigin-RevId: 69c518ea113b6988002156c4ab6a97bbb9704d19
2026-04-10 08:04:41 +00:00
Tim DownandAntoine Clausse 848d049e5a [web] Pricing page redesign plan cards (#32597)
* Initial version of new plans page with plans cards

* Fix optional chaining for tab button element in changeActivePlanTab function

* `make cleanup_unused_locales`

* Fix edu discount checkbox change listener

---------

Co-authored-by: Antoine Clausse <antoine.clausse@overleaf.com>
GitOrigin-RevId: f87513346572300a7a6761c4f00ea589a54e23dc
2026-04-10 08:03:55 +00:00
Rebeka Dekany 62fa7e9319 Remove Font Awesome files and references from web (#32531)
* Remove Font Awesome files and references

* Remove dead Font Awesome references

* Remove icon reference from `linkPrintNewTab` mixin

* Remove unused `customValidationMessage`

* Remove dead Font Awesome references

* Remove FA reference and disable "Monthly metrics emails" subscription link when loading

* Revert daterangepicker icon styles

GitOrigin-RevId: e08d4b61e35bae305f771d9949c18edf8a163575
2026-04-08 08:04:53 +00:00
roo hutton 9197be0ec7 Merge pull request #32376 from overleaf/rh-cio-migrate-identifiers
Replace analytics id with user id as main identifier in customer.io

GitOrigin-RevId: 780671a51b652c73a940bc152d8fd6916dd611ce
2026-04-02 08:05:48 +00:00
Andrew Rumble 972c6e4710 Merge pull request #31327 from overleaf/ar-allow-split-test-ui-without-admin-privilege
[web/admin-roles] allow split test UI without admin privilege

GitOrigin-RevId: 1d10153d7762196dd7a8df835af6193b38670fbc
2026-04-01 08:06:25 +00:00
Jimmy Domagala-Tang 72b7524094 Revert "Revert "Adding More Ai Quota Tiers"" (#32433)
* Revert "Revert "Adding More Ai Quota Tiers (#32128)" (#32431)"

This reverts commit f0ea19b418da6096c84b42024aea643807347649.

* fix: dont block workbench from users who have access via WF

* fix: simplify workbench access rules and ensure wf premium users can use workbench

GitOrigin-RevId: 7927248eadd906d7f802d55fa5c6bc7df162b141
2026-03-27 09:05:21 +00:00
Tim Down c94d649879 Merge pull request #32419 from overleaf/td-remove-material-outlined
Remove unused Material Symbols Pug mixins

GitOrigin-RevId: 03600174c45a73b4983eea1a3c8604747626f606
2026-03-26 09:07:57 +00:00
Jimmy Domagala-Tang 6f3e0963b8 Revert "Adding More Ai Quota Tiers (#32128)" (#32431)
This reverts commit e3ef38797f267677cad51d7273272623027ca330.

GitOrigin-RevId: f0ea19b418da6096c84b42024aea643807347649
2026-03-26 09:06:42 +00:00
Jimmy Domagala-Tang c87fd5c42e Adding More Ai Quota Tiers (#32128)
* feat: adding tiers for free and standard

* feat: updating feature calculation to account for more quota tiers

* feat: rename freeTrialQuota to freeQuota

* feat: add hasAiFreeTier and hasUnlimitedAi to editor, block free tier from using workbench

* fix: updating tests

* fix: updating ordering precedence for quota tiers

* feat: bump unlimited ai fair usage to 300 uses

* fix: update workbench quota usage for unlimited plans

* feat: bump features version for ai quota split

* feat: popover should only show for relevant users on workbench, and adding upgrade notification to ineligible users

GitOrigin-RevId: e3ef38797f267677cad51d7273272623027ca330
2026-03-26 09:06:37 +00:00
Rebeka Dekany d232ab9ec7 Align secondary email, compromised password and confirm secondary email pages with the website redesign style (#32143)
GitOrigin-RevId: 7b7bc68e59714df9b6198f4aebe2ac218454d68b
2026-03-23 09:05:37 +00:00
ilkin-overleaf d61413e57d Merge pull request #31827 from overleaf/ii-project-sharing-access-denied
[web] Project sharing access denied redesign

GitOrigin-RevId: b1e3016eb7ef9e2a502e0b67abc3b10c08531fe9
2026-03-19 09:06:31 +00:00
ilkin-overleaf 6539e26107 Merge pull request #31742 from overleaf/ii-project-sharing-join-project
[web] Join project page redesign

GitOrigin-RevId: d182ec4fb744f384f824c9e63b534da02a9f8e99
2026-03-06 09:17:16 +00:00
Mathias Jakobsen ada0922988 Merge pull request #31950 from overleaf/mj-themed-project-load
[web] Add themed project loading screen

GitOrigin-RevId: b73d8c825b5ab04ede1c9dde10a6891be63758a4
2026-03-06 09:15:55 +00:00
Mathias Jakobsen 26739294d5 Merge pull request #31941 from overleaf/mj-default-theme
[web] Change default data-theme attribute to light

GitOrigin-RevId: adabde890746da24728bd1cd47562eb769893ee0
2026-03-06 09:14:31 +00:00
Jimmy Domagala-Tang f1137cbabb feat: remove old assist split test (#31787)
GitOrigin-RevId: bd05b5b13c603aea648cd522372bdf3242091ae8
2026-03-06 09:13:35 +00:00
MoxAmber ebdb0b12cf Merge pull request #30007 from overleaf/as-user-management-ro
[web] Initial read-only user management page

GitOrigin-RevId: f50d2377b855e6541b30f8f946aecb59bf08e3bc
2026-03-06 09:08:20 +00:00
Jimmy Domagala-Tang f96d37b7e3 Revert "Revert "[Web] Enable Quota System for AI Features"" (#31771)
* Revert "Revert "[Web] Enable Quota System for AI Features (#31544)" (#31767)"

This reverts commit f6589bdbf0ac7e71313739e3e3f4fb5bedd48c22.

* Update writefull entitlement syncing for commons (#31774)

* feat: update wf entitlement syncing logic

* feat: remove unused env variable, and parse quota tier as string for analytics

GitOrigin-RevId: 37ae7522a249501719a64327e2b6aaff01a3cc0b
2026-03-06 09:07:15 +00:00
Jimmy Domagala-Tang 892047fcf6 Revert "[Web] Enable Quota System for AI Features (#31544)" (#31767)
This reverts commit 17763447965aae5777053b783d2601517bfe6b12.

GitOrigin-RevId: f6589bdbf0ac7e71313739e3e3f4fb5bedd48c22
2026-02-24 09:07:06 +00:00
Jimmy Domagala-Tang 92463fb3e2 [Web] Enable Quota System for AI Features (#31544)
* feat: migrate from aiErrorAssist naming for disabling AI features to aiFeatures.enabled to avoid confusion

feat: keep aiErrorAssistant as setting on user object until migration is run

* feat: migrate writefull.enabled unset to instead use promotionSet false

* feat: updating to use quota based system for AI usage

* feat: hide relevant sections of quota system behind split test

* feat: ship onAiFreeTrial instead of free quota amount to project meta

* fix: renaming splitTestEnabledForUser to featureFlagEnabledForUser

* fix: v1_personal should have free trial amount of ai quota

* fix: onAiFreeTrial in projectController should account for anonymous users with no features

* feat: fixing marketing exports for ai quotas

* feat: update features epoch

* feat: move to quota tiers, and map tier to numeric allowance within rateLimiters

GitOrigin-RevId: 17763447965aae5777053b783d2601517bfe6b12
2026-02-24 09:06:31 +00:00