Skip to content

Commit 70ca92f

Browse files
TMHSDigitalclaude
andauthored
feat(site): landing links, what's new, shared tokens, CI guardrails (#302)
* feat(gallery): detail-page navigation, code ergonomics, image polish Detail pages were dead ends: a reader who finished one example had to go back to the grid to find the next. They now page within their own kind (prev/next, arrow keys), list their tags as links back to the filtered index, and end with three related entries chosen by shared topic tags. Source listings gain a line-number gutter and collapse past 120 lines; every code block gets a copy button with a non-secure-context fallback and a visible failure state; README headings get stable anchors. Card images carry intrinsic dimensions so the grid no longer shifts as they load, and the lightbox only closes on backdrop, button or Esc -- clicking the image toggles native size instead. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * feat(gallery): browse controls and interaction feel Showcase pieces were reachable only through a "showcase" topic chip, one tag could be active at a time, and the grid had one fixed order. The index now has an All / Examples / Showcase switch, AND-combined topic chips, and a Gallery order / Name A-Z sort, all mirrored in the URL hash (k=, tag=a,b, s=). Legacy #tag=showcase links, the landing page's among them, resolve to the Showcase switch so no inbound link breaks. Search no longer rewrites the hash on every keystroke, card renders fade in once decoded, hover gets a restrained zoom that reduced-motion turns off (replacing a rule that disabled a transform nobody set), focus rings sit inside segmented controls instead of being clipped, README prose is capped at a readable measure, and the sticky bar packs tighter on phones. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * feat(site): landing links, what's new, shared tokens, CI guardrails The landing page listed skills and rules as bare slugs a reader could not open, carried six collapse carets that collapsed nothing, and hardcoded the Blender versions in four places. Skills and rules now link to their files, each skill shows its trigger list on demand, both panels get a filter, versions come from site.json, and the HUD corners no longer stay invisible when scripts are off. A "What's new" panel shows the latest release and the six most recently added examples and showcase pieces, dated by the commit that first added each directory -- gallery JSON order is not add order. Deploy fetches full history for it; a shallow clone hides the strip rather than lying. scripts/site/tokens.css was a dead fleet leftover with a GitHub palette nobody used, while the real palette was hand-copied into three pages. It is now the single :root both builds inline. Nothing checked the landing page before it deployed. A validate-site job builds it and tests/check_site_links.py resolves every internal href, src and #anchor across all 91 pages and requires alt on every <img>; the deploy runs the same check, and installs the pinned requirements. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> --------- Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1 parent 4d2b4e4 commit 70ca92f

98 files changed

Lines changed: 1368 additions & 536 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/pages.yml‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,16 @@ jobs:
6868
runs-on: ubuntu-latest
6969
steps:
7070
- uses: actions/checkout@v7
71+
with:
72+
# Full history: the landing page's "Recently added" dates come from
73+
# the commit that first added each example (a shallow clone hides it).
74+
fetch-depth: 0
7175

7276
- uses: actions/setup-python@v7
7377
with:
7478
python-version: "3.12"
7579

76-
- run: pip install Jinja2
80+
- run: pip install -r scripts/site/requirements.txt
7781

7882
- name: Build landing page (vendored template)
7983
run: python scripts/site/build_site.py --repo-root . --out docs
@@ -83,6 +87,9 @@ jobs:
8387
# drift from gallery.json. The committed docs/gallery/assets/*.webp are untouched.
8488
run: python scripts/build_gallery.py
8589

90+
- name: Check every internal link, anchor and image alt
91+
run: python tests/check_site_links.py
92+
8693
- uses: actions/configure-pages@v6
8794

8895
- uses: actions/upload-pages-artifact@v5

‎.github/workflows/validate.yml‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,26 @@ jobs:
186186
echo "Templates: $template_count"
187187
echo "Snippets: $snippet_count"
188188
189+
validate-site:
190+
name: Build landing page and check site links
191+
# The landing page is built only at deploy (docs/index.html is untracked),
192+
# so a template error or a dead link otherwise surfaces in production.
193+
runs-on: ubuntu-latest
194+
steps:
195+
- uses: actions/checkout@v7
196+
197+
- uses: actions/setup-python@v7
198+
with:
199+
python-version: "3.12"
200+
201+
- run: pip install -r scripts/site/requirements.txt
202+
203+
- name: Build landing page into docs/
204+
run: python scripts/site/build_site.py --repo-root . --out docs
205+
206+
- name: Check every internal link, anchor and image alt
207+
run: python tests/check_site_links.py
208+
189209
validate-manifest:
190210
name: Validate plugin manifest
191211
runs-on: ubuntu-latest

‎docs/gallery/anvil/index.html‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,22 @@
3434
@font-face { font-family: 'JetBrains Mono'; font-weight: 400; font-display: swap;
3535
src: url('../../fonts/jetbrains-mono-regular.woff2') format('woff2'); }
3636

37-
/* Blender-viewport system, shared with the landing page. Dark only. */
37+
/* Palette and type: scripts/site/tokens.css, shared with the landing page. */
3838
:root {
3939
color-scheme: dark;
40-
--bg: #1a1b1e; --surface: #222327; --surface-2: #2a2b30; --bg2: #131417;
41-
--border: #3a3b40; --text: #e8e9eb; --text-dim: #9698a0;
40+
--bg: #1a1b1e; --bg2: #131417; --panel: #222327; --panel-2: #2a2b30;
41+
--border: #3a3b40; --text: #e8e9eb; --dim: #9698a0;
4242
--select: #ff8c19; --ok: #6dc96d;
43-
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
43+
--ax-x: #ff3352; --ax-y: #8bdc00; --ax-z: #2890ff;
4444
--font-display: 'Barlow Condensed', 'Arial Narrow', sans-serif;
45-
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
45+
--font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
4646
--font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
47+
/* gallery vocabulary for the same values */
48+
--surface: var(--panel); --surface-2: var(--panel-2); --text-dim: var(--dim);
49+
--font-sans: var(--font-body);
50+
}
51+
:root {
52+
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
4753
--code-k: #ff7b72; --code-s: #a5d6ff; --code-c: #9698a0; --code-n: #79c0ff;
4854
}
4955
* { box-sizing: border-box; margin: 0; padding: 0; }

‎docs/gallery/apothecary-shelf/index.html‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,22 @@
3434
@font-face { font-family: 'JetBrains Mono'; font-weight: 400; font-display: swap;
3535
src: url('../../fonts/jetbrains-mono-regular.woff2') format('woff2'); }
3636

37-
/* Blender-viewport system, shared with the landing page. Dark only. */
37+
/* Palette and type: scripts/site/tokens.css, shared with the landing page. */
3838
:root {
3939
color-scheme: dark;
40-
--bg: #1a1b1e; --surface: #222327; --surface-2: #2a2b30; --bg2: #131417;
41-
--border: #3a3b40; --text: #e8e9eb; --text-dim: #9698a0;
40+
--bg: #1a1b1e; --bg2: #131417; --panel: #222327; --panel-2: #2a2b30;
41+
--border: #3a3b40; --text: #e8e9eb; --dim: #9698a0;
4242
--select: #ff8c19; --ok: #6dc96d;
43-
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
43+
--ax-x: #ff3352; --ax-y: #8bdc00; --ax-z: #2890ff;
4444
--font-display: 'Barlow Condensed', 'Arial Narrow', sans-serif;
45-
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
45+
--font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
4646
--font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
47+
/* gallery vocabulary for the same values */
48+
--surface: var(--panel); --surface-2: var(--panel-2); --text-dim: var(--dim);
49+
--font-sans: var(--font-body);
50+
}
51+
:root {
52+
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
4753
--code-k: #ff7b72; --code-s: #a5d6ff; --code-c: #9698a0; --code-n: #79c0ff;
4854
}
4955
* { box-sizing: border-box; margin: 0; padding: 0; }

‎docs/gallery/armature-bend/index.html‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,22 @@
3434
@font-face { font-family: 'JetBrains Mono'; font-weight: 400; font-display: swap;
3535
src: url('../../fonts/jetbrains-mono-regular.woff2') format('woff2'); }
3636

37-
/* Blender-viewport system, shared with the landing page. Dark only. */
37+
/* Palette and type: scripts/site/tokens.css, shared with the landing page. */
3838
:root {
3939
color-scheme: dark;
40-
--bg: #1a1b1e; --surface: #222327; --surface-2: #2a2b30; --bg2: #131417;
41-
--border: #3a3b40; --text: #e8e9eb; --text-dim: #9698a0;
40+
--bg: #1a1b1e; --bg2: #131417; --panel: #222327; --panel-2: #2a2b30;
41+
--border: #3a3b40; --text: #e8e9eb; --dim: #9698a0;
4242
--select: #ff8c19; --ok: #6dc96d;
43-
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
43+
--ax-x: #ff3352; --ax-y: #8bdc00; --ax-z: #2890ff;
4444
--font-display: 'Barlow Condensed', 'Arial Narrow', sans-serif;
45-
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
45+
--font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
4646
--font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
47+
/* gallery vocabulary for the same values */
48+
--surface: var(--panel); --surface-2: var(--panel-2); --text-dim: var(--dim);
49+
--font-sans: var(--font-body);
50+
}
51+
:root {
52+
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
4753
--code-k: #ff7b72; --code-s: #a5d6ff; --code-c: #9698a0; --code-n: #79c0ff;
4854
}
4955
* { box-sizing: border-box; margin: 0; padding: 0; }

‎docs/gallery/attribute-domain-shear/index.html‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,22 @@
3434
@font-face { font-family: 'JetBrains Mono'; font-weight: 400; font-display: swap;
3535
src: url('../../fonts/jetbrains-mono-regular.woff2') format('woff2'); }
3636

37-
/* Blender-viewport system, shared with the landing page. Dark only. */
37+
/* Palette and type: scripts/site/tokens.css, shared with the landing page. */
3838
:root {
3939
color-scheme: dark;
40-
--bg: #1a1b1e; --surface: #222327; --surface-2: #2a2b30; --bg2: #131417;
41-
--border: #3a3b40; --text: #e8e9eb; --text-dim: #9698a0;
40+
--bg: #1a1b1e; --bg2: #131417; --panel: #222327; --panel-2: #2a2b30;
41+
--border: #3a3b40; --text: #e8e9eb; --dim: #9698a0;
4242
--select: #ff8c19; --ok: #6dc96d;
43-
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
43+
--ax-x: #ff3352; --ax-y: #8bdc00; --ax-z: #2890ff;
4444
--font-display: 'Barlow Condensed', 'Arial Narrow', sans-serif;
45-
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
45+
--font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
4646
--font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
47+
/* gallery vocabulary for the same values */
48+
--surface: var(--panel); --surface-2: var(--panel-2); --text-dim: var(--dim);
49+
--font-sans: var(--font-body);
50+
}
51+
:root {
52+
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
4753
--code-k: #ff7b72; --code-s: #a5d6ff; --code-c: #9698a0; --code-n: #79c0ff;
4854
}
4955
* { box-sizing: border-box; margin: 0; padding: 0; }

‎docs/gallery/bake-normal-high-to-low/index.html‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,22 @@
3434
@font-face { font-family: 'JetBrains Mono'; font-weight: 400; font-display: swap;
3535
src: url('../../fonts/jetbrains-mono-regular.woff2') format('woff2'); }
3636

37-
/* Blender-viewport system, shared with the landing page. Dark only. */
37+
/* Palette and type: scripts/site/tokens.css, shared with the landing page. */
3838
:root {
3939
color-scheme: dark;
40-
--bg: #1a1b1e; --surface: #222327; --surface-2: #2a2b30; --bg2: #131417;
41-
--border: #3a3b40; --text: #e8e9eb; --text-dim: #9698a0;
40+
--bg: #1a1b1e; --bg2: #131417; --panel: #222327; --panel-2: #2a2b30;
41+
--border: #3a3b40; --text: #e8e9eb; --dim: #9698a0;
4242
--select: #ff8c19; --ok: #6dc96d;
43-
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
43+
--ax-x: #ff3352; --ax-y: #8bdc00; --ax-z: #2890ff;
4444
--font-display: 'Barlow Condensed', 'Arial Narrow', sans-serif;
45-
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
45+
--font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
4646
--font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
47+
/* gallery vocabulary for the same values */
48+
--surface: var(--panel); --surface-2: var(--panel-2); --text-dim: var(--dim);
49+
--font-sans: var(--font-body);
50+
}
51+
:root {
52+
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
4753
--code-k: #ff7b72; --code-s: #a5d6ff; --code-c: #9698a0; --code-n: #79c0ff;
4854
}
4955
* { box-sizing: border-box; margin: 0; padding: 0; }

‎docs/gallery/bmesh-gear/index.html‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,22 @@
3434
@font-face { font-family: 'JetBrains Mono'; font-weight: 400; font-display: swap;
3535
src: url('../../fonts/jetbrains-mono-regular.woff2') format('woff2'); }
3636

37-
/* Blender-viewport system, shared with the landing page. Dark only. */
37+
/* Palette and type: scripts/site/tokens.css, shared with the landing page. */
3838
:root {
3939
color-scheme: dark;
40-
--bg: #1a1b1e; --surface: #222327; --surface-2: #2a2b30; --bg2: #131417;
41-
--border: #3a3b40; --text: #e8e9eb; --text-dim: #9698a0;
40+
--bg: #1a1b1e; --bg2: #131417; --panel: #222327; --panel-2: #2a2b30;
41+
--border: #3a3b40; --text: #e8e9eb; --dim: #9698a0;
4242
--select: #ff8c19; --ok: #6dc96d;
43-
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
43+
--ax-x: #ff3352; --ax-y: #8bdc00; --ax-z: #2890ff;
4444
--font-display: 'Barlow Condensed', 'Arial Narrow', sans-serif;
45-
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
45+
--font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
4646
--font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
47+
/* gallery vocabulary for the same values */
48+
--surface: var(--panel); --surface-2: var(--panel-2); --text-dim: var(--dim);
49+
--font-sans: var(--font-body);
50+
}
51+
:root {
52+
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
4753
--code-k: #ff7b72; --code-s: #a5d6ff; --code-c: #9698a0; --code-n: #79c0ff;
4854
}
4955
* { box-sizing: border-box; margin: 0; padding: 0; }

‎docs/gallery/book-trolley/index.html‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,22 @@
3434
@font-face { font-family: 'JetBrains Mono'; font-weight: 400; font-display: swap;
3535
src: url('../../fonts/jetbrains-mono-regular.woff2') format('woff2'); }
3636

37-
/* Blender-viewport system, shared with the landing page. Dark only. */
37+
/* Palette and type: scripts/site/tokens.css, shared with the landing page. */
3838
:root {
3939
color-scheme: dark;
40-
--bg: #1a1b1e; --surface: #222327; --surface-2: #2a2b30; --bg2: #131417;
41-
--border: #3a3b40; --text: #e8e9eb; --text-dim: #9698a0;
40+
--bg: #1a1b1e; --bg2: #131417; --panel: #222327; --panel-2: #2a2b30;
41+
--border: #3a3b40; --text: #e8e9eb; --dim: #9698a0;
4242
--select: #ff8c19; --ok: #6dc96d;
43-
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
43+
--ax-x: #ff3352; --ax-y: #8bdc00; --ax-z: #2890ff;
4444
--font-display: 'Barlow Condensed', 'Arial Narrow', sans-serif;
45-
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
45+
--font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
4646
--font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
47+
/* gallery vocabulary for the same values */
48+
--surface: var(--panel); --surface-2: var(--panel-2); --text-dim: var(--dim);
49+
--font-sans: var(--font-body);
50+
}
51+
:root {
52+
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
4753
--code-k: #ff7b72; --code-s: #a5d6ff; --code-c: #9698a0; --code-n: #79c0ff;
4854
}
4955
* { box-sizing: border-box; margin: 0; padding: 0; }

‎docs/gallery/bookshelf/index.html‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,22 @@
3434
@font-face { font-family: 'JetBrains Mono'; font-weight: 400; font-display: swap;
3535
src: url('../../fonts/jetbrains-mono-regular.woff2') format('woff2'); }
3636

37-
/* Blender-viewport system, shared with the landing page. Dark only. */
37+
/* Palette and type: scripts/site/tokens.css, shared with the landing page. */
3838
:root {
3939
color-scheme: dark;
40-
--bg: #1a1b1e; --surface: #222327; --surface-2: #2a2b30; --bg2: #131417;
41-
--border: #3a3b40; --text: #e8e9eb; --text-dim: #9698a0;
40+
--bg: #1a1b1e; --bg2: #131417; --panel: #222327; --panel-2: #2a2b30;
41+
--border: #3a3b40; --text: #e8e9eb; --dim: #9698a0;
4242
--select: #ff8c19; --ok: #6dc96d;
43-
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
43+
--ax-x: #ff3352; --ax-y: #8bdc00; --ax-z: #2890ff;
4444
--font-display: 'Barlow Condensed', 'Arial Narrow', sans-serif;
45-
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
45+
--font-body: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
4646
--font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;
47+
/* gallery vocabulary for the same values */
48+
--surface: var(--panel); --surface-2: var(--panel-2); --text-dim: var(--dim);
49+
--font-sans: var(--font-body);
50+
}
51+
:root {
52+
--radius: 4px; --radius-lg: 6px; --maxw: 1080px;
4753
--code-k: #ff7b72; --code-s: #a5d6ff; --code-c: #9698a0; --code-n: #79c0ff;
4854
}
4955
* { box-sizing: border-box; margin: 0; padding: 0; }

0 commit comments

Comments
 (0)