Dashboard: drop footer + Digital Science branding; Verso-ify React thin footer
Build and Deploy Verso / deploy (push) Successful in 9m47s

The project dashboard ("main menu") rendered the React <Footer> (ThinFooter)
at the bottom of the page, which forced a page-level scrollbar just to reach a
stale "© 2025 Powered by Overleaf" line. Remove <Footer> from both dashboard
variants (ProjectListDsNav and the legacy DefaultNavbarAndFooter) so the main
menu has no footer and no useless scroll. The login/auth pages keep the Verso
attribution footer (thin-footer.pug), which already satisfies the AGPL source
link requirement.

Also remove the hardcoded "Digital Science" marking from the dashboard sidebar
lower section, and update the React ThinFooter (used by other React pages such
as settings/subscription) to match the pug footer: © <year> Aloïs Coquillard ·
Built on Overleaf, with AGPL licence + source-code links on the right, instead
of "Powered by Overleaf".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
claude
2026-06-02 19:13:19 +00:00
parent f50d6cb053
commit 7670982f60
4 changed files with 42 additions and 29 deletions
@@ -16,7 +16,6 @@ import { TableContainer } from '@/shared/components/table'
import DashApiError from '@/features/project-list/components/dash-api-error'
import getMeta from '@/utils/meta'
import DefaultNavbar from '@/shared/components/navbar/default-navbar'
import Footer from '@/shared/components/footer/footer'
import SidebarDsNav from '@/features/project-list/components/sidebar/sidebar-ds-nav'
import SystemMessages from '@/shared/components/system-messages'
import overleafLogo from '@/shared/svgs/overleaf-a-ds-solution-mallard.svg'
@@ -27,7 +26,6 @@ import { isSplitTestEnabled } from '@/utils/splitTestUtils'
export function ProjectListDsNav() {
const navbarProps = getMeta('ol-navbar')
const footerProps = getMeta('ol-footer')
const { t } = useTranslation()
const {
error,
@@ -166,7 +164,6 @@ export function ProjectListDsNav() {
</div>
</main>
</div>
<Footer {...footerProps} />
</div>
<CookieBanner />
</div>
@@ -14,7 +14,6 @@ import withErrorBoundary from '../../../infrastructure/error-boundary'
import { GenericErrorBoundaryFallback } from '@/shared/components/generic-error-boundary-fallback'
import getMeta from '@/utils/meta'
import DefaultNavbar from '@/shared/components/navbar/default-navbar'
import Footer from '@/shared/components/footer/footer'
import WelcomePageContent from '@/features/project-list/components/welcome-page-content'
import { ProjectListDsNav } from '@/features/project-list/components/project-list-ds-nav'
import { DsNavStyleProvider } from '@/features/project-list/components/use-is-ds-nav'
@@ -51,7 +50,6 @@ export function ProjectListRootInner() {
function DefaultNavbarAndFooter({ children }: { children: ReactNode }) {
const navbarProps = getMeta('ol-navbar')
const footerProps = getMeta('ol-footer')
return (
<>
@@ -62,7 +60,6 @@ function DefaultNavbarAndFooter({ children }: { children: ReactNode }) {
>
{children}
</main>
<Footer {...footerProps} />
</>
)
}
@@ -40,40 +40,43 @@ function Separator() {
)
}
function ThinFooter({
showPoweredBy,
subdomainLang,
leftItems,
rightItems,
}: FooterMetadata) {
function ThinFooter({ subdomainLang, leftItems, rightItems }: FooterMetadata) {
const showLanguagePicker = Boolean(
subdomainLang && Object.keys(subdomainLang).length > 1
)
const hasCustomLeftNav = Boolean(leftItems && leftItems.length > 0)
return (
<footer className="site-footer">
<div className="site-footer-content d-print-none">
<OLRow>
<ul className="site-footer-items col-lg-9">
{showPoweredBy ? (
<>
<li>
{/* year of Server Pro release, static */}© 2025{' '}
<a href="https://www.overleaf.com/for/enterprises">
Powered by Overleaf
</a>
</li>
{showLanguagePicker || hasCustomLeftNav ? <Separator /> : null}
</>
) : null}
<li>
© {new Date().getFullYear()}{' '}
<a
href="https://alocoq.fr"
target="_blank"
rel="noopener noreferrer"
>
Aloïs Coquillard
</a>
</li>
<Separator />
<li>
Built on{' '}
<a
href="https://github.com/overleaf/overleaf"
target="_blank"
rel="noopener noreferrer"
>
Overleaf
</a>
</li>
{showLanguagePicker ? (
<>
<Separator />
<li>
<LanguagePicker showHeader />
</li>
{hasCustomLeftNav ? <Separator /> : null}
</>
) : null}
{leftItems?.map(item => (
@@ -81,6 +84,25 @@ function ThinFooter({
))}
</ul>
<ul className="site-footer-items col-lg-3 text-end">
<li>
<a
href="https://git.alocoq.fr/alois/verso/src/branch/main/LICENSE"
target="_blank"
rel="noopener noreferrer"
>
AGPL licence
</a>
</li>
<Separator />
<li>
<a
href="https://git.alocoq.fr/alois/verso"
target="_blank"
rel="noopener noreferrer"
>
Source code
</a>
</li>
{rightItems?.map(item => (
<FooterItemLi key={item.text} {...item} />
))}
@@ -128,9 +128,6 @@ export function SidebarLowerSection({
</Dropdown>
)}
</nav>
<div className="ds-nav-ds-name" translate="no">
<span>Digital Science</span>
</div>
<UserProvider>{contactUsModal}</UserProvider>
</>
)