Skip to content

dogfood: /why page missing the shared site footer #1044

Description

@vivek7405

Problem

The full marketing footer (the five-column nav plus the MIT-License / "Built with webjs" bar) lived inline only in website/app/page.ts, so every other marketing page rendered without it. Most visibly, /why (website/app/why/page.ts) ended at </main> with no footer, so the site did not read as one system.

Design / approach

Extract the footer into a shared SSR-time helper and render it on both pages instead of duplicating the markup. Keep it a pure html-returning function so importing it never ships a page to the browser (it touches no client globals). Section anchors move from a bare #id to /#id so they resolve from any page, not only home.

Implementation notes (for the implementing agent)

Already implemented on branch feature/why-page-footer:

  • New website/lib/site-footer.ts exports siteFooter() returning the footer html fragment; imports link config from #lib/links.ts.
  • website/app/page.ts: inline <footer> replaced with ${siteFooter()}; trimmed now-unused UI_URL / EXAMPLE_BLOG_URL / DISCORD_URL from its #lib/links.ts import.
  • website/app/why/page.ts: added ${siteFooter()} after </main> + the import.
  • Landmine: the small in-content <footer> blocks on app/{articles,compare,blog}/[slug]/page.ts are page-nav breadcrumbs, NOT the site footer; leave them alone.
  • website/AGENTS.md notes "footer all live here" (in page.ts); no longer accurate but low-stakes.

Acceptance criteria

  • /why renders the same site footer as /
  • Footer markup exists in exactly one place (lib/site-footer.ts)
  • webjs check and tsc --noEmit pass
  • Verified live: both / and /why serve the footer

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions