Skip to content

Put the sponsor sidebar on every page type, with the book first and last - #90

Merged
lbesecker195 merged 1 commit into
mainfrom
feat/sponsors-on-every-page
Oct 1, 2026
Merged

lbesecker195 merged 1 commit into
mainfrom
feat/sponsors-on-every-page

Conversation

@lbesecker195

Copy link
Copy Markdown
Owner

Closes #89.

Book first and last

The sponsor block is now Book · slot 1 · slot 2 · slot 3 · Book. Since #88 the sidebar scrolls with the page and then settles with its bottom in view for the rest of a long page, so the last tile is the one a reader keeps seeing. Now that tile is the book.

Every page type

Page Sponsor sidebar
Listing /servers/<name> already had it — unchanged position, between its panels
Tools: index, tool, tool × client added
Prompts and resources: index, item, item × client added
Agent setup /for/<agent> added
Listing changelog, /changelog added
Directory /servers added (widened to match the other pages)
Submit added
Home added, starting beside the featured servers
/book left out — a book tile there links to the page you're on

Layouts.app takes sponsors={true} and renders the content in an 8/12 main column with Layouts.sponsor_sidebar beside it. Below lg the sidebar stacks under the content, as on listings.

On the home page the hero, search, numbers and MCP endpoint section were designed full width. Rather than squeeze them into two thirds, the sidebar starts beside the featured servers and runs alongside everything below.

One hook, not two

The bottom-pinning hook moved from the listing page into Layouts.sponsor_sidebar as McpRegistryWeb.Layouts.StickySidebar. The listing keeps its own sidebar, which has panels above and below the sponsors, and references the shared hook, so there's one copy of that behaviour.

Tests

A new test loads 17 page paths and checks each has the sponsor block, the pinning hook and the tile order; another checks /book has none. While writing it I hit a module-name collision with an existing SponsorsTest that made tests vanish depending on load order — renamed, and the suite is now clean on four seeds: 235 passing.


Pages affected:

🤖 Generated with Claude Code

Only listing pages carried the sponsor block. Tool, prompt, resource and
agent pages, changelogs, the directory, the submit form and the home page
had none.

- Layouts.app takes sponsors={true}: content in a main column, the
  sponsor sidebar beside it, pinned by its bottom so it scrolls with the
  page and then holds
- On the home page the sidebar starts beside the featured servers, so the
  full-width hero, search and numbers above keep their width
- The book now closes the block as well as opening it; the sidebar settles
  with its bottom in view, so the last tile is the one that stays on screen
- The listing keeps its own sidebar and shares the one hook
- /book is left out: a book tile there would link to the page itself

Closes #89

---

Pages affected:

- [browse MCP servers](https://ai.mcpharbor.dev/servers) -- gains the sponsor sidebar.
- [MCP Harbor](https://ai.mcpharbor.dev/) -- sponsors beside the featured servers.
- [MCP server changelog](https://ai.mcpharbor.dev/changelog) -- gains the sponsor sidebar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@lbesecker195
lbesecker195 merged commit 595c03e into main Oct 1, 2026
@lbesecker195
lbesecker195 deleted the feat/sponsors-on-every-page branch October 1, 2026 20:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sponsor sidebar on every page type, book first and last

1 participant