Skip to content

branding: footer links are hardcoded to the framework repo with no host override since 0.0.32 #282

Description

@antosubash

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

  1. Scaffold or upgrade any app to 0.0.32 with the branding module installed.
  2. Set an app name at /branding and load any page.
  3. 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:

  1. Give BrandingFooter an optional links?: BrandLink[] prop, defaulting to BRAND_FOOTER_LINKS, and let the host layouts pass their own.
  2. 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).
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions