Skip to content

Commit 69387df

Browse files
TMHSDigitalclaude
andauthored
Site refresh: thumbnails, cards and list views, self-hosted fonts, category pages (#131)
* docs: design for the site refresh (thumbnails, cards/list views, fonts, perf) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs: implementation plan for the site refresh Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * site: thumbnail eligibility, image-url and filmstrip rules Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * site: licence-gated thumbnail pipeline and first batch node site/thumbs.mjs fetches each eligible entry's og:image, resizes it with ffmpeg to 640px WebP and keeps site/thumbs.json in step; the validator fails when a committed image no longer passes the licence and status gate. First batch: 195 thumbnails, 4.5 MB. 177 entries skipped by the gate (custom/varies/unknown licences, needs-review, GitHub and Google Fonts hosts), 44 failed (41 pages without og:image, 2 unconvertible images, 1 404). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * site: self-host Public Sans and IBM Plex Mono, one shared head Closes #87 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * site: one entry template for build and app.js, thumbnails, cards and list views Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * site: static category pages behind the homepage previews Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * site: hero with filmstrip, per-category previews, cards/list toggle, mobile header Closes #75 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * site: entry page image strip and one primary action; stack picks as cards Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * site: monthly thumbnail refresh workflow and docs Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * site: verification fixes from the screenshot, detector and Lighthouse round Lazy card rendering in app.js (the hydrate no longer builds 348 cards at load), a focus class instead of a :has() selector for the floating button, a fixed heading height so the injected view toggle cannot shift the page, font-display: optional with the preloads, the last side-tab declaration removed, and the social card retaken for the new hero. Lighthouse mobile, homepage: performance 0.91 (was 0.83), CLS 0 (was 0.092), TBT 220 ms, accessibility 1, best practices 1, SEO 1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * site: review fixes: lazy-card shortlist buttons, Show-all scroll, heading levels, promo images, drift check - shortlist.js wires its buttons again when app.js renders the rest of the catalog (fgda:cards-rendered), so every card can be starred. - "Show all" in place scrolls to the first card of the list; the category headings are hidden under a category filter. - Category pages use h2 group headings and h3 card titles, stack picks h3, so no page skips a heading level (Lighthouse heading-order 1 on both). - preview: none on three entries whose og:image is the publisher's general promo (kenney-animated-characters, blender-ellie-poses, blender-human-base-meshes); 192 thumbnails remain. - checkThumbManifest fails only when the gate fails; a licence that moved between two allowed values no longer turns a correction PR red. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
1 parent 295ab86 commit 69387df

232 files changed

Lines changed: 5038 additions & 989 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/thumbs.yml‎

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
name: Monthly thumbnail refresh
2+
3+
# On the first of each month: re-fetch the publisher previews that are due
4+
# (older than 180 days, licence changed, or new eligible entries), push the
5+
# changed files to a thumbs/<month> branch and open or update one issue with
6+
# the compare link. The repository does not let Actions open pull requests,
7+
# and a token-made pull request would not run CI, so the maintainer opens it
8+
# from the link. It never edits an entry. Rules: site/lib/thumbs.mjs.
9+
on:
10+
schedule:
11+
- cron: "0 9 1 * *"
12+
workflow_dispatch:
13+
14+
permissions:
15+
contents: write
16+
issues: write
17+
18+
jobs:
19+
thumbs:
20+
runs-on: ubuntu-latest
21+
steps:
22+
- name: Checkout
23+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
24+
25+
- name: Setup Node
26+
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
27+
with:
28+
node-version-file: .nvmrc
29+
30+
- name: Ensure ffmpeg
31+
run: |
32+
if ! command -v ffmpeg >/dev/null 2>&1; then
33+
sudo apt-get update -qq && sudo apt-get install -y -qq ffmpeg
34+
fi
35+
ffmpeg -version | head -1
36+
37+
- name: Fetch and resize previews
38+
id: run
39+
run: node site/thumbs.mjs --report thumbs-report.md
40+
41+
- name: Validate the result
42+
run: node site/validate.mjs
43+
44+
- name: Push the branch and open or update the issue
45+
if: steps.run.outputs.changed != '0'
46+
env:
47+
GH_TOKEN: ${{ github.token }}
48+
CHANGED: ${{ steps.run.outputs.changed }}
49+
run: |
50+
month=$(date -u +%Y-%m)
51+
branch="thumbs/${month}"
52+
git config user.name "github-actions[bot]"
53+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
54+
git switch -c "$branch"
55+
git add site/thumbs.json site/public/thumbs
56+
git commit -m "thumbs: monthly refresh ${month} (${CHANGED} changes)"
57+
git push --force origin "$branch"
58+
compare="https://github.com/${GITHUB_REPOSITORY}/compare/main...$(printf '%s' "$branch" | sed 's|/|%2F|g')?expand=1"
59+
{ printf 'Open the pull request: %s\n\n' "$compare"; cat thumbs-report.md; } > issue-body.md
60+
title="Thumbnail refresh ${month}: ${CHANGED} changes"
61+
existing=$(gh issue list --state open --label "enhancement" --json number,title \
62+
--jq '[.[] | select(.title | startswith("Thumbnail refresh "))][0].number // empty')
63+
if [ -n "$existing" ]; then
64+
gh issue edit "$existing" --title "$title" --body-file issue-body.md
65+
else
66+
gh issue create --title "$title" --label "enhancement" --body-file issue-body.md
67+
fi

‎CONTRIBUTING.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ with no code.
8585

8686
Publishers are welcome to list their own work. Say so in the pull request, write the entry as a third party would (facts the source states, no comparisons with other entries, no ranking language), and start it at `needs-review` so a maintainer re-reads the licence before it goes `active`. A free tier of a paid product is listed as the free tier only, with the paid tier named in Notes and not linked as the entry's `url`. A one-time notice or upsell inside a tool is recorded in Notes as a fact.
8787

88+
## Preview images
89+
90+
The site shows each entry's preview image where it can. The picture is the publisher's own `og:image` from the entry's `url`, fetched by `npm run thumbs`, resized to 640 pixels wide and committed under `site/public/thumbs/` with a record in `site/thumbs.json`. Only `active` entries whose licence is on the allowlist in `site/lib/thumbs.mjs` (CC0, CC-BY, MIT, OFL, GPL and the other open licences that allow a resized copy) get one; `custom`, `varies` and `unknown` never do, and neither do GitHub repositories, whose social card is not a preview. The validator fails when a committed image no longer passes that gate, and the script removes it on its next run.
91+
92+
A publisher who would rather not have their preview shown can open an issue; the maintainer sets `preview: none` on the entry and the image is removed. A maintainer who has checked that a specific image is covered by the entry's licence can set `preview: https://...` to use that image instead of the page's `og:image`.
93+
8894
## Automated and AI-assisted pull requests
8995

9096
Changes drafted with an agent or a script are judged on the diff like any other. Keep them small, keep tests in `site/checks.test.mjs` or `site/lib/lib.test.mjs` (a test file that `npm test` does not run is dropped), and name the issue the change fixes in the body (`Fixes #N`). A pull request that lists sources or licences the author did not read is closed: the catalog's one rule is that every licence fact was read at the source by the person who recorded it.

‎catalog/TEMPLATE.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ verified: 2026-07-19
2121
status: needs-review
2222
# Optional (omit if N/A):
2323
# publisher: Kenney # rights holder when that publisher has more than one entry; not a generic host
24+
# preview: none # or an https:// image URL a maintainer has checked; see CONTRIBUTING.md "Preview images"
2425
# attribution_string: "Credit line" # required when attribution_required is true
2526
# commercial: varies # aggregators only; not a blanket commercial grant
2627
# grid_dimensions: 16x16 # 2D and UI entries only
Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,37 @@
1-
---
2-
id: blender-ellie-poses
3-
name: Blender Studio Ellie Pose Library
4-
url: https://www.blender.org/download/demo-files/#assets
5-
publisher: Blender Studio
6-
category: animation
7-
subcategories: [poses, rigging]
8-
license: CC-BY
9-
commercial: true
10-
attribution_required: true
11-
attribution_string: "Ellie Pose Library (c) Blender Studio. CC-BY. Suggested format; card does not specify wording."
12-
formats: [Blend]
13-
tags: [poses]
1+
---
2+
id: blender-ellie-poses
3+
name: Blender Studio Ellie Pose Library
4+
url: https://www.blender.org/download/demo-files/#assets
5+
publisher: Blender Studio
6+
category: animation
7+
subcategories: [poses, rigging]
8+
license: CC-BY
9+
commercial: true
10+
attribution_required: true
11+
attribution_string: "Ellie Pose Library (c) Blender Studio. CC-BY. Suggested format; card does not specify wording."
12+
formats: [Blend]
13+
tags: [poses]
14+
preview: none # the page's og:image is the publisher's general promo, not this pack
1415
added: 2026-07-19
15-
verified: 2026-08-24
16-
status: active
17-
---
18-
19-
# Blender Studio Ellie Pose Library
20-
21-
Humanoid pose library from Blender Studio. The verified card on the [demo-files](https://www.blender.org/download/demo-files/#assets) listing is **Ellie Pose Library v2.0.0** (Asset Bundles section, 24 MB, CC-BY). That listing mixes CC0 and CC-BY cards on one page; this entry is only the Ellie card, not Cube Diorama or Human Base Meshes.
22-
23-
## Notes
24-
25-
- Direct zip (v2.0.0, Blender 4.0+): listed `url`. Version bumps change the filename; re-check the Asset Bundles card if the zip 404s.
26-
- License evidence lives on the demo-files listing, not inside the zip.
27-
- Attribution example: `Ellie Pose Library © Blender Studio — CC-BY`
28-
29-
## Evidence
30-
31-
- Live [Demo Files](https://www.blender.org/download/demo-files/) (2026-08-24): "CC-BY" on the Ellie Pose Library card (24 MB, Blender Studio)
32-
33-
## Related
34-
35-
- [cmu-mocap](cmu-mocap.md)
36-
- [mixamo](mixamo.md)
16+
verified: 2026-08-24
17+
status: active
18+
---
19+
20+
# Blender Studio Ellie Pose Library
21+
22+
Humanoid pose library from Blender Studio. The verified card on the [demo-files](https://www.blender.org/download/demo-files/#assets) listing is **Ellie Pose Library v2.0.0** (Asset Bundles section, 24 MB, CC-BY). That listing mixes CC0 and CC-BY cards on one page; this entry is only the Ellie card, not Cube Diorama or Human Base Meshes.
23+
24+
## Notes
25+
26+
- Direct zip (v2.0.0, Blender 4.0+): listed `url`. Version bumps change the filename; re-check the Asset Bundles card if the zip 404s.
27+
- License evidence lives on the demo-files listing, not inside the zip.
28+
- Attribution example: `Ellie Pose Library © Blender Studio — CC-BY`
29+
30+
## Evidence
31+
32+
- Live [Demo Files](https://www.blender.org/download/demo-files/) (2026-08-24): "CC-BY" on the Ellie Pose Library card (24 MB, Blender Studio)
33+
34+
## Related
35+
36+
- [cmu-mocap](cmu-mocap.md)
37+
- [mixamo](mixamo.md)
Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,40 @@
1-
---
2-
id: blender-human-base-meshes
3-
name: Blender Studio Human Base Meshes
4-
url: https://www.blender.org/download/demo-files/#assets
5-
publisher: Blender Studio
6-
category: characters
7-
subcategories: [base-meshes]
8-
license: CC0
9-
license_spdx: CC0-1.0
10-
commercial: true
11-
attribution_required: false
12-
formats: [Blend, glTF, FBX]
13-
tags: [topology]
1+
---
2+
id: blender-human-base-meshes
3+
name: Blender Studio Human Base Meshes
4+
url: https://www.blender.org/download/demo-files/#assets
5+
publisher: Blender Studio
6+
category: characters
7+
subcategories: [base-meshes]
8+
license: CC0
9+
license_spdx: CC0-1.0
10+
commercial: true
11+
attribution_required: false
12+
formats: [Blend, glTF, FBX]
13+
tags: [topology]
14+
preview: none # the page's og:image is the publisher's general promo, not this pack
1415
added: 2026-07-19
15-
verified: 2026-08-24
16-
status: active
17-
---
18-
19-
# Blender Studio Human Base Meshes
20-
21-
Production topology humanoid scaffolds from Blender Studio. The verified card on the [demo-files](https://www.blender.org/download/demo-files/#assets) listing is **Human Base Meshes v1.4.1** (Asset Bundles section, 49 MB, CC0). That listing mixes CC0 and CC-BY cards on one page; Ellie Pose Library on the same section is CC-BY and is a different entry. Export glTF/FBX for engines. Confirm the badge still says CC0 if the version number moves.
22-
23-
## Notes
24-
25-
- Direct zip (v1.4.1, Blender 4.2 LTS+): listed `url`. Version bumps change the filename; re-check the Asset Bundles card if the zip 404s.
26-
- Same demo-files listing as [blender-ellie-poses](../animation/blender-ellie-poses.md). Ellie is CC-BY; this bundle is CC0. Do not mix the two grants.
27-
28-
## Evidence
29-
30-
- Live Demo Files (2026-08-24): Human Base Meshes v1.4.1 card "49 MB - CC0"
31-
32-
## Related
33-
34-
- [../animation/blender-ellie-poses](../animation/blender-ellie-poses.md)
35-
- [blender-studio-rain](blender-studio-rain.md)
36-
- [blender-studio-one](blender-studio-one.md)
37-
- [blender-studio-critter](blender-studio-critter.md)
38-
- [makehuman](makehuman.md)
39-
- [../3d/the-base-mesh](../3d/the-base-mesh.md)
16+
verified: 2026-08-24
17+
status: active
18+
---
19+
20+
# Blender Studio Human Base Meshes
21+
22+
Production topology humanoid scaffolds from Blender Studio. The verified card on the [demo-files](https://www.blender.org/download/demo-files/#assets) listing is **Human Base Meshes v1.4.1** (Asset Bundles section, 49 MB, CC0). That listing mixes CC0 and CC-BY cards on one page; Ellie Pose Library on the same section is CC-BY and is a different entry. Export glTF/FBX for engines. Confirm the badge still says CC0 if the version number moves.
23+
24+
## Notes
25+
26+
- Direct zip (v1.4.1, Blender 4.2 LTS+): listed `url`. Version bumps change the filename; re-check the Asset Bundles card if the zip 404s.
27+
- Same demo-files listing as [blender-ellie-poses](../animation/blender-ellie-poses.md). Ellie is CC-BY; this bundle is CC0. Do not mix the two grants.
28+
29+
## Evidence
30+
31+
- Live Demo Files (2026-08-24): Human Base Meshes v1.4.1 card "49 MB - CC0"
32+
33+
## Related
34+
35+
- [../animation/blender-ellie-poses](../animation/blender-ellie-poses.md)
36+
- [blender-studio-rain](blender-studio-rain.md)
37+
- [blender-studio-one](blender-studio-one.md)
38+
- [blender-studio-critter](blender-studio-critter.md)
39+
- [makehuman](makehuman.md)
40+
- [../3d/the-base-mesh](../3d/the-base-mesh.md)
Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,40 @@
1-
---
2-
id: kenney-animated-characters
3-
name: Kenney Animated Characters
4-
url: https://kenney.nl/assets?series=Animated+Characters
5-
publisher: Kenney
6-
category: characters
7-
subcategories: [rigged, animated, humanoid]
8-
license: CC0
9-
license_spdx: CC0-1.0
10-
commercial: true
11-
attribution_required: false
12-
formats: [FBX, PNG, SVG]
13-
tags: [low-poly, survivors, zombie, skins]
1+
---
2+
id: kenney-animated-characters
3+
name: Kenney Animated Characters
4+
url: https://kenney.nl/assets?series=Animated+Characters
5+
publisher: Kenney
6+
category: characters
7+
subcategories: [rigged, animated, humanoid]
8+
license: CC0
9+
license_spdx: CC0-1.0
10+
commercial: true
11+
attribution_required: false
12+
formats: [FBX, PNG, SVG]
13+
tags: [low-poly, survivors, zombie, skins]
14+
preview: none # the page's og:image is the publisher's general promo, not this pack
1415
added: 2026-09-26
15-
verified: 2026-09-26
16-
status: active
17-
---
18-
19-
# Kenney Animated Characters
20-
21-
Kenney's "Animated Characters" series: three small packs of rigged, animated low-poly humanoids with swappable PNG skins. [Protagonists](https://kenney.nl/assets/animated-characters-protagonists) (2020; skater, cyborg, criminal), [Retro](https://kenney.nl/assets/animated-characters-retro) (2022) and [Survivors](https://kenney.nl/assets/animated-characters-survivors) (2019; zombie and survivor). All three are CC0.
22-
23-
## Notes
24-
25-
- One entry for the series, since each pack is the same rig and format with different skins
26-
- Contents read from each pack's download ZIP (2026-09-26): 4 FBX files plus PNG skins in each, and SVG files in Protagonists and Survivors
27-
- The bundled `License.txt` says credit is welcome but "not a requirement"
28-
- Attribution example (optional): `Characters by Kenney.nl (CC0)`
29-
30-
## Evidence
31-
32-
- Live pack pages for Protagonists, Retro and Survivors (2026-09-26): each shows Category "3D", series "Animated Characters", 8 files, License "Creative Commons CC0"
33-
- `License.txt` in the Protagonists download (2026-09-26): "License: (Creative Commons Zero, CC0)", "You can use this content for personal, educational, and commercial purposes. Support by crediting 'Kenney' or 'www.kenney.nl' (this is not a requirement)"
34-
35-
## Related
36-
37-
- [kaykit-adventurers](kaykit-adventurers.md)
38-
- [quaternius-universal-base-characters](quaternius-universal-base-characters.md)
39-
- [kenney](../3d/kenney.md)
16+
verified: 2026-09-26
17+
status: active
18+
---
19+
20+
# Kenney Animated Characters
21+
22+
Kenney's "Animated Characters" series: three small packs of rigged, animated low-poly humanoids with swappable PNG skins. [Protagonists](https://kenney.nl/assets/animated-characters-protagonists) (2020; skater, cyborg, criminal), [Retro](https://kenney.nl/assets/animated-characters-retro) (2022) and [Survivors](https://kenney.nl/assets/animated-characters-survivors) (2019; zombie and survivor). All three are CC0.
23+
24+
## Notes
25+
26+
- One entry for the series, since each pack is the same rig and format with different skins
27+
- Contents read from each pack's download ZIP (2026-09-26): 4 FBX files plus PNG skins in each, and SVG files in Protagonists and Survivors
28+
- The bundled `License.txt` says credit is welcome but "not a requirement"
29+
- Attribution example (optional): `Characters by Kenney.nl (CC0)`
30+
31+
## Evidence
32+
33+
- Live pack pages for Protagonists, Retro and Survivors (2026-09-26): each shows Category "3D", series "Animated Characters", 8 files, License "Creative Commons CC0"
34+
- `License.txt` in the Protagonists download (2026-09-26): "License: (Creative Commons Zero, CC0)", "You can use this content for personal, educational, and commercial purposes. Support by crediting 'Kenney' or 'www.kenney.nl' (this is not a requirement)"
35+
36+
## Related
37+
38+
- [kaykit-adventurers](kaykit-adventurers.md)
39+
- [quaternius-universal-base-characters](quaternius-universal-base-characters.md)
40+
- [kenney](../3d/kenney.md)

‎docs/images/readme/og-card.png‎

132 KB
Loading

0 commit comments

Comments
 (0)