diff --git a/services/web/app/src/Features/Errors/ErrorController.mjs b/services/web/app/src/Features/Errors/ErrorController.mjs
index 810c44ef1c..a03963d074 100644
--- a/services/web/app/src/Features/Errors/ErrorController.mjs
+++ b/services/web/app/src/Features/Errors/ErrorController.mjs
@@ -5,14 +5,26 @@ import {
} from '@overleaf/validation-tools'
import Errors, { NotFoundError } from './Errors.js'
import SessionManager from '../Authentication/SessionManager.mjs'
+import UserGetter from '../User/UserGetter.mjs'
import SamlLogHandler from '../SamlLog/SamlLogHandler.mjs'
import HttpErrorHandler from './HttpErrorHandler.mjs'
import { plainTextResponse } from '../../infrastructure/Response.mjs'
import { expressifyErrorHandler } from '@overleaf/promise-utils'
-function notFound(req, res) {
+async function notFound(req, res) {
res.status(404)
- res.render('general/404', { title: 'page_not_found' })
+ const sessionUser = SessionManager.getSessionUser(req.session)
+ let isLumiere = false
+ if (sessionUser?._id) {
+ try {
+ const user = await UserGetter.promises.getUser(sessionUser._id, {
+ 'ace.overallTheme': 1,
+ signUpDate: 1,
+ })
+ isLumiere = (user?.ace?.overallTheme ?? '') === 'lumiere-'
+ } catch {}
+ }
+ res.render('general/404', { title: 'page_not_found', isLumiere })
}
function forbidden(req, res) {
diff --git a/services/web/app/views/layout-base.pug b/services/web/app/views/layout-base.pug
index 8691b39969..1556a93b9e 100644
--- a/services/web/app/views/layout-base.pug
+++ b/services/web/app/views/layout-base.pug
@@ -106,6 +106,7 @@ html(
'red-nav-bar-for-admins': !settings.isDevEnv && hasFeature('saas') && hasAdminAccess(),
}
data-theme='light'
+ data-lumiere=isLumiere ? 'true' : 'false'
)
if settings.recaptcha && settings.recaptcha.siteKeyV3
script(
diff --git a/services/web/frontend/js/features/project-list/components/project-list-lumiere.tsx b/services/web/frontend/js/features/project-list/components/project-list-lumiere.tsx
index 3f77935149..33e656c9fd 100644
--- a/services/web/frontend/js/features/project-list/components/project-list-lumiere.tsx
+++ b/services/web/frontend/js/features/project-list/components/project-list-lumiere.tsx
@@ -32,6 +32,7 @@ import OwnerCell from './table/cells/owner-cell'
import LastUpdatedCell from './table/cells/last-updated-cell'
import ActionsCell from './table/cells/actions-cell'
import InlineTags from './table/cells/inline-tags'
+import WelcomePageContent from './welcome-page-content'
// ── Tile zoom ─────────────────────────────────────────────────────────────────
@@ -227,6 +228,7 @@ export function ProjectListLumiere() {
const {
error,
visibleProjects,
+ totalProjectsCount,
searchText,
setSearchText,
filter,
@@ -344,7 +346,9 @@ export function ProjectListLumiere() {
)}
- {visibleProjects.length === 0 ? (
+ {totalProjectsCount === 0 ? (
+
{t('no_projects')}
) : (