Skip to content

chore: refine UI, add JSON-LD, polish category SEO#3107

Merged
vinta merged 12 commits intomasterfrom
chore/refine-ui
May 3, 2026
Merged

chore: refine UI, add JSON-LD, polish category SEO#3107
vinta merged 12 commits intomasterfrom
chore/refine-ui

Conversation

@vinta
Copy link
Copy Markdown
Owner

@vinta vinta commented May 3, 2026

Summary

Mix of UI refinement and SEO/AEO work on the static site (no listings change).

SEO / AEO

  • Add homepage JSON-LD: WebSite + CollectionPage with an ItemList of visible projects
  • Extend the same @graph pattern to category, group, and subcategory pages (each CollectionPage is isPartOf the shared WebSite node, Yoast/RankMath style)
  • Lead category meta descriptions with the real category description when present, fall back to count
  • Switch category page title separator from | to -

UI

  • Show project descriptions as always-visible desc rows on category pages, and on the homepage when a filter is active
  • Render subcategory, group, and source tags as real anchors; append #library-index on non-index pages
  • Bump tag font size to var(--text-xs) (12px minimum)
  • Add Awesome Python + Sponsorship links to the footer
  • Tweak description for curses

Test plan

  • make build succeeds (14 groups, 71 categories, 537 entries)
  • uv run pytest website/tests/test_build.py -v — 54 passed
  • Homepage index.html JSON-LD parses, contains WebSite + CollectionPage + ItemList
  • Category page JSON-LD parses, mirrors structure with category-specific URL and description
  • Category page title uses - separator, meta description leads with real description

🤖 Generated with Claude Code

vinta and others added 12 commits May 3, 2026 12:47
… category pages

Co-Authored-By: Claude <noreply@anthropic.com>
On category pages desc-rows are always visible. On the index page they
were always hidden. Now they become visible whenever a tag/category
filter is applied, giving filtered results the same richness as category
pages.

Also tightens two related CSS rules: border-bottom suppression only
fires when the adjacent desc-row is actually visible, and the expand-row
description is hidden while the desc-row is already showing to avoid
duplicate text.

Co-Authored-By: Claude <noreply@anthropic.com>
Tag clicks on category/other pages now land with the results section
scrolled into view.

Co-Authored-By: Claude <noreply@anthropic.com>
…lements

Convert <button> tags for subcategory, group, and source filters to <a>
elements with href attributes so browsers surface URL preview on hover,
support open-in-new-tab, and allow middle-click navigation.

Co-Authored-By: Claude <noreply@anthropic.com>
…ont-size rule

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
…mList for SEO/AEO

Co-Authored-By: Claude <noreply@anthropic.com>
…category pages

Co-Authored-By: Claude <noreply@anthropic.com>
- Wrap category pages in a self-contained @graph (WebSite + CollectionPage)
- Set canonical @id on CollectionPage to its URL (no hash fragment)
- Expand isPartOf to typed object {"@type": "WebSite", "@id": ...}
- Extract _website_node() and ISPARTOF_WEBSITE constants to avoid repetition
- Update tests to assert @graph structure on category pages

Co-Authored-By: Claude <noreply@anthropic.com>
…hen present, count first as fallback

Co-Authored-By: Claude <noreply@anthropic.com>
Google truncates pipe separators and treats hyphens as cleaner word
boundaries in SERP titles.

Co-Authored-By: Claude <noreply@anthropic.com>
@vinta vinta self-assigned this May 3, 2026
@vinta vinta merged commit a9a58ce into master May 3, 2026
5 checks passed
@vinta vinta deleted the chore/refine-ui branch May 3, 2026 12:13
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.

1 participant