From 3bc3e711c7b4b8296154b7bbbee4392228a90e81 Mon Sep 17 00:00:00 2001 From: Tuan Phung Date: Sun, 11 Oct 2026 11:48:40 +0200 Subject: [PATCH 1/5] CI: Netlify preview deploy for every PR --- .github/workflows/ci.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bb548fd..bfe897c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -94,6 +94,35 @@ jobs: NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} NETLIFY_SITE_ID: ${{ vars.NETLIFY_SITE_ID }} + preview: + # Every PR from this repository gets its own preview at pr---.netlify.app. + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository + runs-on: ubuntu-latest + # The link shows up in the PR as "View deployment". + environment: + name: preview + url: ${{ steps.deploy.outputs.url }} + concurrency: + group: website-preview-${{ github.event.pull_request.number }} + cancel-in-progress: true + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: 24 + cache: npm + - run: npm ci + - run: npm run website:build + - name: Deploy preview to Netlify + id: deploy + run: | + url=$(npx --yes netlify-cli@27 deploy --no-build --dir website/dist --site "$NETLIFY_SITE_ID" --alias "pr-$PR" --message "PR #$PR $GITHUB_SHA" --json | jq -r '.deploy_url') + echo "url=$url" >> "$GITHUB_OUTPUT" + env: + PR: ${{ github.event.pull_request.number }} + NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} + NETLIFY_SITE_ID: ${{ vars.NETLIFY_SITE_ID }} + publish: needs: [release_info, test] if: github.event_name == 'push' && github.ref == 'refs/heads/main' && needs.release_info.outputs.release == 'true' From bcb6912ffb706d42cea49bb12af8e72a1d964fb1 Mon Sep 17 00:00:00 2001 From: Tuan Phung Date: Sun, 11 Oct 2026 11:52:31 +0200 Subject: [PATCH 2/5] CI: keep PR previews out of search engines --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bfe897c..08c30f8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -113,6 +113,8 @@ jobs: cache: npm - run: npm ci - run: npm run website:build + # Keep previews out of search engines. + - run: printf '\n/*\n X-Robots-Tag: noindex\n' >> website/dist/_headers - name: Deploy preview to Netlify id: deploy run: | From 8138b08f1e2f6636368c428435859fd69bdeb1bd Mon Sep 17 00:00:00 2001 From: Tuan Phung Date: Sun, 11 Oct 2026 11:52:40 +0200 Subject: [PATCH 3/5] CI: fix YAML for preview noindex step --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 08c30f8..e068e80 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -114,7 +114,8 @@ jobs: - run: npm ci - run: npm run website:build # Keep previews out of search engines. - - run: printf '\n/*\n X-Robots-Tag: noindex\n' >> website/dist/_headers + - run: | + printf '\n/*\n X-Robots-Tag: noindex\n' >> website/dist/_headers - name: Deploy preview to Netlify id: deploy run: | From 38796a0ee8af20e97bc3d7a3f3c8d8b644d3ef19 Mon Sep 17 00:00:00 2001 From: Tuan Phung Date: Sun, 11 Oct 2026 11:58:39 +0200 Subject: [PATCH 4/5] Website: wrap category filters on desktop so mouse users can reach them --- website/src/pages/index.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/pages/index.astro b/website/src/pages/index.astro index 27be640..34e5910 100644 --- a/website/src/pages/index.astro +++ b/website/src/pages/index.astro @@ -318,7 +318,7 @@ const jsonLd = { -
+
{ ['', ...CATEGORIES].map((category) => (