Repository navigation
branding: footer links are hardcoded to the framework repo with no host override since 0.0.32 #282
Description
Summary
Since 0.0.32 there is no supported way for a deployment to change the footer links. Every app footers every page — guest and authenticated — with links to github.com/antosubash/simple_module_python.
Why there's no override any more
BRAND_FOOTER_LINKS is a module-level constant in packages/ui/src/lib/brand.ts:
export const BRAND_REPO_URL = 'https://github.com/antosubash/simple_module_python';
export const BRAND_FOOTER_LINKS: BrandLink[] = [
{ label: 'Docs', href: `${BRAND_REPO_URL}#readme` },
{ label: 'Changelog', href: `${BRAND_REPO_URL}/releases` },
{ label: 'GitHub', href: BRAND_REPO_URL },
];BrandingFooter maps over that constant directly and accepts only appName, logoUrl and variant — no link prop, and nothing reads the branding shared prop for links.
The escape hatch existed until recently: branding shipped a configurable footer from 0.0.21 (#222) and it was removed in 0.0.32 by #273 / #275, which deleted FooterCard.tsx, FooterEditor.tsx, contracts/footer.py, footer.py, the GET/PUT /api/branding/footer endpoints and the footer_* settings. Removing the editor also removed the only override, so hosts fell back to the hardcoded constant with nothing to configure.
Impact
The brand constants are explicitly documented as "constants of the framework/template itself — distinct from the white-labellable branding shared prop". That's a reasonable split for the badge gradient or the tech tag, but the footer links are outward-facing attribution on every page of a deployed product.
Concretely: an IIASA research deployment (public landing page, real users) currently advertises the framework author's personal repository under "Docs", "Changelog" and "GitHub" on every screen. There is no admin page, setting, or prop that changes it.
The one workaround — aliasing @simple-module-py/ui/lib/brand to a local copy in the host's vite.config.ts — silently diverges from the package on every future bump, so it isn't one worth documenting.
Reproduce
- Scaffold or upgrade any app to 0.0.32 with the branding module installed.
- Set an app name at
/brandingand load any page. - The footer shows the app name and copyright correctly, and three links pointing at
antosubash/simple_module_python.
Suggested fix
Any of these restores the override; the first is smallest:
- Give
BrandingFooteran optionallinks?: BrandLink[]prop, defaulting toBRAND_FOOTER_LINKS, and let the host layouts pass their own. - Reinstate the branding-driven footer links (a trimmed version of what remove footer from the branding #273 removed — just
links, without the columns/social/tagline surface that presumably motivated the removal). - Read the links from settings, so they are configurable without a redeploy like every other branding value.
If the intent is that the framework footer should always be present, it would be worth saying so in docs/modules/branding.md, since today the docs at 0.0.30 still describe a configurable footer that no longer exists.
Version
simple_module_* 0.0.32, @simple-module-py/ui 0.0.32.
Activity