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
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/vinta/awesome-python/pull/3107
**Author:** [@vinta](https://github.com/vinta)
**Created:** 5/3/2026
**Status:** ✅ Merged
**Merged:** 5/3/2026
**Merged by:** [@vinta](https://github.com/vinta)
**Base:** `master` ← **Head:** `chore/refine-ui`
---
### 📝 Commits (10+)
- [`1468ae7`](https://github.com/vinta/awesome-python/commit/1468ae78ff9c28f68c9e53b6bcef8d5e98383850) feat(website): show project description as always-visible desc-row on category pages
- [`1afccd8`](https://github.com/vinta/awesome-python/commit/1afccd8bc9e6b030d8b0c5d3cab9955ae313a1a9) update description for curses
- [`fc8d1ba`](https://github.com/vinta/awesome-python/commit/fc8d1ba35ed5042dae7a30fb51fac9e3a490b065) feat(website): show desc-row on index page when a filter is active
- [`9de86ea`](https://github.com/vinta/awesome-python/commit/9de86ea7853d500646a5980ed11dfdd8e41732d8) feat(website): append #library-index to tag links on non-index pages
- [`f3f92c6`](https://github.com/vinta/awesome-python/commit/f3f92c691a4fb9396dfe43994f5de90638d605b4) feat(website): render subcategory, group, and source tags as anchor elements
- [`f57fc44`](https://github.com/vinta/awesome-python/commit/f57fc44295be602222edee1fd433694cffe34811) style: bump tag font size to var(--text-xs) and codify 12px minimum font-size rule
- [`138059f`](https://github.com/vinta/awesome-python/commit/138059feeb7f042fa6f84344d22933a1391cd82c) feat(website): add Awesome Python and Sponsorship links to footer
- [`b2910d5`](https://github.com/vinta/awesome-python/commit/b2910d59c8d69671830cc5e57730f64309996156) feat(website): add homepage JSON-LD with WebSite, CollectionPage, ItemList for SEO/AEO
- [`86d2aa7`](https://github.com/vinta/awesome-python/commit/86d2aa7e0163fd5f868f15a35df08ae0ac4f4715) feat(website): add CollectionPage JSON-LD to category, group, and subcategory pages
- [`2f398ac`](https://github.com/vinta/awesome-python/commit/2f398acefbec7753b97d8451263283df2906633a) fix(seo): align JSON-LD with Yoast/RankMath conventions
### 📊 Changes
**10 files changed** (+368 additions, -33 deletions)
<details>
<summary>View changed files</summary>
📝 `DESIGN.md` (+1 -0)
📝 `README.md` (+1 -1)
📝 `uv.lock` (+1 -1)
📝 `website/build.py` (+94 -0)
📝 `website/static/main.js` (+26 -7)
📝 `website/static/style.css` (+61 -4)
📝 `website/templates/base.html` (+4 -1)
📝 `website/templates/category.html` (+22 -11)
📝 `website/templates/index.html` (+19 -6)
📝 `website/tests/test_build.py` (+139 -2)
</details>
### 📄 Description
## 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
- [x] `make build` succeeds (14 groups, 71 categories, 537 entries)
- [x] `uv run pytest website/tests/test_build.py -v` — 54 passed
- [x] Homepage `index.html` JSON-LD parses, contains `WebSite` + `CollectionPage` + `ItemList`
- [x] Category page JSON-LD parses, mirrors structure with category-specific URL and description
- [x] Category page title uses `-` separator, meta description leads with real description
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/vinta/awesome-python/pull/3107
Author: @vinta
Created: 5/3/2026
Status: ✅ Merged
Merged: 5/3/2026
Merged by: @vinta
Base:
master← Head:chore/refine-ui📝 Commits (10+)
1468ae7feat(website): show project description as always-visible desc-row on category pages1afccd8update description for cursesfc8d1bafeat(website): show desc-row on index page when a filter is active9de86eafeat(website): append #library-index to tag links on non-index pagesf3f92c6feat(website): render subcategory, group, and source tags as anchor elementsf57fc44style: bump tag font size to var(--text-xs) and codify 12px minimum font-size rule138059ffeat(website): add Awesome Python and Sponsorship links to footerb2910d5feat(website): add homepage JSON-LD with WebSite, CollectionPage, ItemList for SEO/AEO86d2aa7feat(website): add CollectionPage JSON-LD to category, group, and subcategory pages2f398acfix(seo): align JSON-LD with Yoast/RankMath conventions📊 Changes
10 files changed (+368 additions, -33 deletions)
View changed files
📝
DESIGN.md(+1 -0)📝
README.md(+1 -1)📝
uv.lock(+1 -1)📝
website/build.py(+94 -0)📝
website/static/main.js(+26 -7)📝
website/static/style.css(+61 -4)📝
website/templates/base.html(+4 -1)📝
website/templates/category.html(+22 -11)📝
website/templates/index.html(+19 -6)📝
website/tests/test_build.py(+139 -2)📄 Description
Summary
Mix of UI refinement and SEO/AEO work on the static site (no listings change).
SEO / AEO
WebSite+CollectionPagewith anItemListof visible projects@graphpattern to category, group, and subcategory pages (eachCollectionPageisisPartOfthe sharedWebSitenode, Yoast/RankMath style)|to-UI
#library-indexon non-index pagesvar(--text-xs)(12px minimum)cursesTest plan
make buildsucceeds (14 groups, 71 categories, 537 entries)uv run pytest website/tests/test_build.py -v— 54 passedindex.htmlJSON-LD parses, containsWebSite+CollectionPage+ItemList-separator, meta description leads with real description🤖 Generated with Claude Code
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.