From ce2f1da06545f5fe9620ecc76acd3b05b6440179 Mon Sep 17 00:00:00 2001 From: Kody Jackson Date: Fri, 2 Oct 2026 09:40:24 -0500 Subject: [PATCH 01/14] feat(kb) - Add sitemap (#51132) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a sitemap file to the new KB. ## Preview links https://kb-git-kb-seo-conventions-supabase.vercel.app/kb/ ## Review instructions On the preview, check the following paths: - [`/sitemap-index.xml`](https://kb-git-kb-seo-conventions-supabase.vercel.app/kb/sitemap-index.xml) and [`/sitemap-0.xml`](https://kb-git-kb-seo-conventions-supabase.vercel.app/kb//sitemap-0.xml) ## Summary by CodeRabbit * **New Features** * A sitemap is now generated for the knowledge base and linked from its pages. Its URL reflects the site’s configured base path, so the link points to the correct location across different deployment paths. Existing content and page functionality remain unchanged. --------- Co-authored-by: Ivan Vasilov --- apps/kb/astro.config.mjs | 18 +- apps/kb/package.json | 2 + apps/kb/src/layouts/Layout.astro | 1 + pnpm-lock.yaml | 458 +++++++++++++++++++++++++++++-- 4 files changed, 443 insertions(+), 36 deletions(-) diff --git a/apps/kb/astro.config.mjs b/apps/kb/astro.config.mjs index 7bae3070765..c8f0b142188 100644 --- a/apps/kb/astro.config.mjs +++ b/apps/kb/astro.config.mjs @@ -11,6 +11,8 @@ import { defineConfig } from 'astro/config' import rehypeAdmonitions from './src/lib/mdx/rehype-admonitions.js' import supabaseTheme from '../learn/lib/themes/supabase-2.json' with { type: 'json' } +import sitemap from '@astrojs/sitemap'; + // Absolute dir of lodash-es, for the SSR-only lodash alias below (same fix // apps/studio/vite.config.ts uses). `packages/ui`'s clipboard util does // `import { noop } from 'lodash'` — under Vite's dev-mode SSR module runner, @@ -41,18 +43,16 @@ const ssrLodashEs = { // https://astro.build/config export default defineConfig({ + site: 'https://supabase.com', base: '/kb', trailingSlash: 'ignore', - integrations: [ - react(), - // rehype-admonitions is a custom rehype plugin and Astro's default pipeline is - // satteri, so .mdx gets its own unified processor. Plain .md stays on satteri. - mdx({ - processor: unified({ - rehypePlugins: [rehypeAdmonitions], - }), + integrations: [react(), // rehype-admonitions is a custom rehype plugin and Astro's default pipeline is + // satteri, so .mdx gets its own unified processor. Plain .md stays on satteri. + mdx({ + processor: unified({ + rehypePlugins: [rehypeAdmonitions], }), - ], + }), sitemap()], vite: { ssr: { noExternal: ['lodash'], diff --git a/apps/kb/package.json b/apps/kb/package.json index 57c20827124..da41712a222 100644 --- a/apps/kb/package.json +++ b/apps/kb/package.json @@ -18,6 +18,7 @@ "@astrojs/markdown-remark": "7.2.4", "@astrojs/mdx": "^7.0.7", "@astrojs/react": "^6.0.4", + "@astrojs/sitemap": "^3.7.4", "astro": "^7.2.6", "lucide-react": "*", "react": "catalog:", @@ -34,6 +35,7 @@ }, "devDependencies": { "@tailwindcss/vite": "4.2.4", + "@types/node": "catalog:", "@types/react": "catalog:", "@types/react-dom": "catalog:", "config": "workspace:*", diff --git a/apps/kb/src/layouts/Layout.astro b/apps/kb/src/layouts/Layout.astro index 5dc9556cf7a..a5f3289967a 100644 --- a/apps/kb/src/layouts/Layout.astro +++ b/apps/kb/src/layouts/Layout.astro @@ -59,6 +59,7 @@ const { title, description } = Astro.props rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap" /> + {title} | Supabase Knowledge Base diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b75a49659bf..78ccee22c25 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -753,6 +753,9 @@ importers: '@astrojs/react': specifier: ^6.0.4 version: 6.0.4(@types/node@22.13.14)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(esbuild@0.28.1)(jiti@2.7.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4)(supports-color@8.1.1)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) + '@astrojs/sitemap': + specifier: ^3.7.4 + version: 3.7.4 astro: specifier: ^7.2.6 version: 7.2.9(@astrojs/markdown-remark@7.2.4(supports-color@8.1.1))(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@22.13.14)(aws4fetch@1.0.20)(db0@0.4.1)(ioredis@5.10.1(supports-color@8.1.1))(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) @@ -796,6 +799,9 @@ importers: '@tailwindcss/vite': specifier: 4.2.4 version: 4.2.4(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + '@types/node': + specifier: 'catalog:' + version: 22.13.14 '@types/react': specifier: 'catalog:' version: 19.2.14 @@ -1596,7 +1602,7 @@ importers: version: 0.52.2 next: specifier: 'catalog:' - version: 16.3.6(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) + version: 16.3.6(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) next-themes: specifier: 'catalog:' version: 0.4.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6) @@ -1678,10 +1684,10 @@ importers: version: 7.29.7(supports-color@8.1.1) '@react-router/dev': specifier: ^7.17.1 - version: 7.18.4(@react-router/serve@7.18.4(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(supports-color@8.1.1)(typescript@6.0.2))(@types/node@22.13.14)(babel-plugin-macros@3.1.0)(jiti@2.7.0)(lightningcss@1.33.0)(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(sass@1.77.4)(supports-color@8.1.1)(terser@5.48.0)(tsx@4.22.4)(typescript@6.0.2)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(yaml@2.9.0) + version: 7.18.4(@react-router/serve@7.18.4(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(supports-color@8.1.1)(typescript@6.0.2))(@types/node@24.19.0)(babel-plugin-macros@3.1.0)(jiti@2.7.0)(lightningcss@1.33.0)(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(sass@1.77.4)(supports-color@8.1.1)(terser@5.48.0)(tsx@4.22.4)(typescript@6.0.2)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(yaml@2.9.0) '@react-router/fs-routes': specifier: ^7.18.4 - version: 7.18.4(@react-router/dev@7.18.4(@react-router/serve@7.18.4(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(supports-color@8.1.1)(typescript@6.0.2))(@types/node@22.13.14)(babel-plugin-macros@3.1.0)(jiti@2.7.0)(lightningcss@1.33.0)(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(sass@1.77.4)(supports-color@8.1.1)(terser@5.48.0)(tsx@4.22.4)(typescript@6.0.2)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(yaml@2.9.0))(typescript@6.0.2) + version: 7.18.4(@react-router/dev@7.18.4(@react-router/serve@7.18.4(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(supports-color@8.1.1)(typescript@6.0.2))(@types/node@24.19.0)(babel-plugin-macros@3.1.0)(jiti@2.7.0)(lightningcss@1.33.0)(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(sass@1.77.4)(supports-color@8.1.1)(terser@5.48.0)(tsx@4.22.4)(typescript@6.0.2)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(yaml@2.9.0))(typescript@6.0.2) '@shikijs/compat': specifier: ^1.1.7 version: 1.6.0 @@ -1783,7 +1789,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@24.19.0)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) apps/www: dependencies: @@ -1831,7 +1837,7 @@ importers: version: 21.1.1 '@sentry/nextjs': specifier: 'catalog:' - version: 10.59.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))(encoding@0.1.13)(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react@19.2.6)(supports-color@8.1.1)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(webpack@5.105.4(esbuild@0.28.1)) + version: 10.59.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))(encoding@0.1.13)(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react@19.2.6)(supports-color@8.1.1)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(webpack@5.105.4(esbuild@0.28.1)) '@supabase/ssr': specifier: 'catalog:' version: 0.12.7(@supabase/supabase-js@2.116.0(@opentelemetry/api@1.9.1)) @@ -1930,19 +1936,19 @@ importers: version: 1.0.1 next: specifier: ^15.5.24 - version: 15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) + version: 15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) next-mdx-remote-client: specifier: ^1.1.7 version: 1.1.7(@types/react@19.2.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(supports-color@8.1.1)(unified@11.0.5) next-seo: specifier: ^6.5.0 - version: 6.5.0(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + version: 6.5.0(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) next-themes: specifier: 'catalog:' version: 0.4.6(react-dom@19.2.6(react@19.2.6))(react@19.2.6) nuqs: specifier: ^2.8.1 - version: 2.8.1(@tanstack/react-router@1.170.41(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6) + version: 2.8.1(@tanstack/react-router@1.170.41(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6) ogl: specifier: ^1.0.11 version: 1.0.11 @@ -2017,7 +2023,7 @@ importers: version: link:../../packages/ui-patterns unicornstudio-react: specifier: 2.0.1-1 - version: 2.0.1-1(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + version: 2.0.1-1(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react-dom@19.2.6(react@19.2.6))(react@19.2.6) use-debounce: specifier: ^7.0.1 version: 7.0.1(react@19.2.6) @@ -2105,7 +2111,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@24.19.0)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) zod: specifier: 'catalog:' version: 3.25.76 @@ -2501,10 +2507,10 @@ importers: version: link:../config next: specifier: 'catalog:' - version: 16.3.6(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) + version: 16.3.6(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) next-router-mock: specifier: ^0.9.13 - version: 0.9.13(next@16.3.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react@19.2.6) + version: 0.9.13(next@16.3.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react@19.2.6) react: specifier: 'catalog:' version: 19.2.6 @@ -2525,7 +2531,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@24.19.0)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/eslint-config-supabase: devDependencies: @@ -2558,7 +2564,7 @@ importers: version: 6.0.2 vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@24.19.0)(typescript@6.0.2))(vite@8.2.1(@types/node@24.19.0)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/generator: devDependencies: @@ -2675,7 +2681,7 @@ importers: version: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@22.13.14)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + version: 5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@24.19.0)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) packages/shared-data: dependencies: @@ -3287,6 +3293,9 @@ packages: react: ^17.0.2 || ^18.0.0 || ^19.0.0 react-dom: ^17.0.2 || ^18.0.0 || ^19.0.0 + '@astrojs/sitemap@3.7.4': + resolution: {integrity: sha512-LbKNC24bdUWcQf/pThB6qLlSqHojxGjZDURIzFocY8rlWnAn2t74nnhnK6S5x0NHriHoAduLEpVjRykmeGiVvA==} + '@astrojs/telemetry@3.3.3': resolution: {integrity: sha512-C1TLn5sPJr0x4vk56piHWKbnqlEB8BKyte5Y45V02U+D7BGO5eMqZDH5aPjnkXQWJggvmsTXxH03QMZ9NgWLzQ==} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0} @@ -9232,6 +9241,9 @@ packages: '@types/node@22.13.14': resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} + '@types/node@24.19.0': + resolution: {integrity: sha512-zY+5tKxXdhGh1PYI0ac+7juvEu4OI6vWtVVoj5i2m42jxAY1U+zHGt6QCyOFwykdP62sM3MJ9stoYYUw5aCWew==} + '@types/papaparse@5.3.9': resolution: {integrity: sha512-sZcrKD63qA4/6GyBcVvX6AIp0AkpfyYk00CUQHMBvb4+OVXTZWyXUvidUZaai1wyKUVyJoxO7mgREam/pMRrDw==} @@ -9273,6 +9285,9 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/sax@1.2.7': + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + '@types/stats.js@0.17.3': resolution: {integrity: sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==} @@ -17136,6 +17151,11 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + sitemap@9.0.1: + resolution: {integrity: sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==} + engines: {node: '>=20.19.5', npm: '>=10.8.2'} + hasBin: true + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -17926,6 +17946,9 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + undici@7.30.0: resolution: {integrity: sha512-dkrQXeHSaoamnItlYbmzG0wFYrM0ZwDxCIg0A7aKjTyyhh9svRzCNFEzV+Vm05/yehjCzjDZ31KXfGEjYSztDQ==} engines: {node: '>=20.18.1'} @@ -19362,6 +19385,11 @@ snapshots: - tsx - yaml + '@astrojs/sitemap@3.7.4': + dependencies: + sitemap: 9.0.1 + zod: 4.6.5 + '@astrojs/telemetry@3.3.3': dependencies: ci-info: 4.4.0 @@ -21665,6 +21693,14 @@ snapshots: optionalDependencies: '@types/node': 22.13.14 + '@inquirer/confirm@5.1.21(@types/node@24.19.0)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@24.19.0) + '@inquirer/type': 3.0.10(@types/node@24.19.0) + optionalDependencies: + '@types/node': 24.19.0 + optional: true + '@inquirer/core@10.3.2(@types/node@22.13.14)': dependencies: '@inquirer/ansi': 1.0.2 @@ -21678,6 +21714,20 @@ snapshots: optionalDependencies: '@types/node': 22.13.14 + '@inquirer/core@10.3.2(@types/node@24.19.0)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@24.19.0) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.19.0 + optional: true + '@inquirer/editor@4.2.23(@types/node@22.13.14)': dependencies: '@inquirer/core': 10.3.2(@types/node@22.13.14) @@ -21771,6 +21821,11 @@ snapshots: optionalDependencies: '@types/node': 22.13.14 + '@inquirer/type@3.0.10(@types/node@24.19.0)': + optionalDependencies: + '@types/node': 24.19.0 + optional: true + '@ioredis/commands@1.5.1': {} '@isaacs/cliui@8.0.2': @@ -22186,7 +22241,7 @@ snapshots: '@modelcontextprotocol/core@2.0.0': dependencies: - zod: 4.4.3 + zod: 4.6.5 '@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@3.25.76)': dependencies: @@ -24302,6 +24357,56 @@ snapshots: - tsx - yaml + '@react-router/dev@7.18.4(@react-router/serve@7.18.4(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(supports-color@8.1.1)(typescript@6.0.2))(@types/node@24.19.0)(babel-plugin-macros@3.1.0)(jiti@2.7.0)(lightningcss@1.33.0)(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(sass@1.77.4)(supports-color@8.1.1)(terser@5.48.0)(tsx@4.22.4)(typescript@6.0.2)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(yaml@2.9.0)': + dependencies: + '@babel/core': 7.29.7(supports-color@8.1.1) + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.7(supports-color@8.1.1)) + '@babel/preset-typescript': 7.27.1(@babel/core@7.29.7(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/traverse': 7.29.7(supports-color@8.1.1) + '@babel/types': 7.29.8 + '@react-router/node': 7.18.4(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.2) + '@remix-run/node-fetch-server': 0.13.0 + arg: 5.0.2 + babel-dead-code-elimination: 1.0.12(supports-color@8.1.1) + chokidar: 4.0.3 + dedent: 1.7.2(babel-plugin-macros@3.1.0) + es-module-lexer: 1.7.0 + exit-hook: 2.2.1 + isbot: 5.1.36 + jsesc: 3.0.2 + lodash: 4.18.1 + p-map: 7.0.4 + pathe: 1.1.2 + picocolors: 1.1.1 + pkg-types: 2.3.1 + prettier: 3.8.1 + react-refresh: 0.14.2 + react-router: 7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) + semver: 7.8.5 + tinyglobby: 0.2.17 + valibot: 1.4.2(typescript@6.0.2) + vite: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) + vite-node: 3.2.4(@types/node@24.19.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.77.4)(supports-color@8.1.1)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) + optionalDependencies: + '@react-router/serve': 7.18.4(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(supports-color@8.1.1)(typescript@6.0.2) + typescript: 6.0.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + '@react-router/express@7.18.4(express@4.22.1(supports-color@8.1.1))(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.2)': dependencies: '@react-router/node': 7.18.4(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.2) @@ -24317,6 +24422,13 @@ snapshots: optionalDependencies: typescript: 6.0.2 + '@react-router/fs-routes@7.18.4(@react-router/dev@7.18.4(@react-router/serve@7.18.4(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(supports-color@8.1.1)(typescript@6.0.2))(@types/node@24.19.0)(babel-plugin-macros@3.1.0)(jiti@2.7.0)(lightningcss@1.33.0)(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(sass@1.77.4)(supports-color@8.1.1)(terser@5.48.0)(tsx@4.22.4)(typescript@6.0.2)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(yaml@2.9.0))(typescript@6.0.2)': + dependencies: + '@react-router/dev': 7.18.4(@react-router/serve@7.18.4(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(supports-color@8.1.1)(typescript@6.0.2))(@types/node@24.19.0)(babel-plugin-macros@3.1.0)(jiti@2.7.0)(lightningcss@1.33.0)(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(sass@1.77.4)(supports-color@8.1.1)(terser@5.48.0)(tsx@4.22.4)(typescript@6.0.2)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(yaml@2.9.0) + minimatch: 9.0.7 + optionalDependencies: + typescript: 6.0.2 + '@react-router/node@7.18.4(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(typescript@6.0.2)': dependencies: '@mjackson/node-fetch-server': 0.2.0 @@ -24695,6 +24807,32 @@ snapshots: - vite - webpack + '@sentry/nextjs@10.59.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))(encoding@0.1.13)(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react@19.2.6)(supports-color@8.1.1)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(webpack@5.105.4(esbuild@0.28.1))': + dependencies: + '@opentelemetry/api': 1.9.1 + '@rollup/plugin-commonjs': 28.0.1(rollup@4.60.3) + '@sentry/browser-utils': 10.59.0 + '@sentry/bundler-plugin-core': 5.3.0(encoding@0.1.13)(supports-color@8.1.1) + '@sentry/conventions': 0.12.0 + '@sentry/core': 10.59.0 + '@sentry/node': 10.59.0(supports-color@8.1.1)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + '@sentry/opentelemetry': 10.59.0(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)) + '@sentry/react': 10.59.0(react@19.2.6) + '@sentry/vercel-edge': 10.59.0 + '@sentry/webpack-plugin': 5.3.0(encoding@0.1.13)(supports-color@8.1.1)(webpack@5.105.4(esbuild@0.28.1)) + next: 15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) + rollup: 4.60.3 + stacktrace-parser: 0.1.11 + transitivePeerDependencies: + - '@opentelemetry/core' + - '@opentelemetry/exporter-trace-otlp-http' + - '@opentelemetry/sdk-trace-base' + - encoding + - react + - supports-color + - vite + - webpack + '@sentry/nextjs@10.59.0(@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1))(encoding@0.1.13)(next@16.3.6(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react@19.2.6)(supports-color@8.1.1)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(webpack@5.105.4(esbuild@0.28.1))': dependencies: '@opentelemetry/api': 1.9.1 @@ -26461,6 +26599,10 @@ snapshots: dependencies: undici-types: 6.20.0 + '@types/node@24.19.0': + dependencies: + undici-types: 7.24.6 + '@types/papaparse@5.3.9': dependencies: '@types/node': 22.13.14 @@ -26511,6 +26653,10 @@ snapshots: '@types/resolve@1.20.2': {} + '@types/sax@1.2.7': + dependencies: + '@types/node': 22.13.14 + '@types/stats.js@0.17.3': {} '@types/statuses@2.0.5': {} @@ -27004,6 +27150,26 @@ snapshots: msw: 2.11.3(@types/node@22.13.14)(typescript@7.0.2) vite: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) + '@vitest/mocker@5.0.0(msw@2.11.3(@types/node@24.19.0)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))': + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@vitest/spy': 5.0.0 + estree-walker: 3.0.3 + magic-string: 1.2.3 + optionalDependencies: + msw: 2.11.3(@types/node@24.19.0)(typescript@6.0.2) + vite: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) + + '@vitest/mocker@5.0.0(msw@2.11.3(@types/node@24.19.0)(typescript@6.0.2))(vite@8.2.1(@types/node@24.19.0)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))': + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@vitest/spy': 5.0.0 + estree-walker: 3.0.3 + magic-string: 1.2.3 + optionalDependencies: + msw: 2.11.3(@types/node@24.19.0)(typescript@6.0.2) + vite: 8.2.1(@types/node@24.19.0)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) + '@vitest/pretty-format@5.0.0': dependencies: tinyrainbow: 3.1.1 @@ -29705,8 +29871,8 @@ snapshots: '@babel/parser': 7.29.8 eslint: 9.37.0(jiti@2.7.0)(supports-color@8.1.1) hermes-parser: 0.25.1 - zod: 4.4.3 - zod-validation-error: 4.0.2(zod@4.4.3) + zod: 4.6.5 + zod-validation-error: 4.0.2(zod@4.6.5) transitivePeerDependencies: - supports-color @@ -33476,6 +33642,33 @@ snapshots: - '@types/node' optional: true + msw@2.11.3(@types/node@24.19.0)(typescript@6.0.2): + dependencies: + '@bundled-es-modules/cookie': 2.0.1 + '@bundled-es-modules/statuses': 1.0.1 + '@inquirer/confirm': 5.1.21(@types/node@24.19.0) + '@mswjs/interceptors': 0.39.7 + '@open-draft/deferred-promise': 2.2.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + graphql: 16.11.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + rettime: 0.7.0 + strict-event-emitter: 0.5.1 + tough-cookie: 6.0.0 + type-fest: 4.30.0 + until-async: 3.0.2 + yargs: 17.7.2 + optionalDependencies: + typescript: 6.0.2 + transitivePeerDependencies: + - '@types/node' + optional: true + muggle-string@0.4.1: {} mustache@4.2.0: {} @@ -33545,9 +33738,14 @@ snapshots: next: 16.3.6(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) react: 19.2.6 - next-seo@6.5.0(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + next-router-mock@0.9.13(next@16.3.6(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react@19.2.6): dependencies: - next: 15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) + next: 16.3.6(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) + react: 19.2.6 + + next-seo@6.5.0(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + dependencies: + next: 15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) react: 19.2.6 react-dom: 19.2.6(react@19.2.6) @@ -33585,6 +33783,33 @@ snapshots: - '@types/node' - babel-plugin-macros + next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4): + dependencies: + '@next/env': 15.5.25 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001809 + postcss: 8.5.28 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + styled-jsx: 5.1.6(@babel/core@7.29.7(supports-color@8.1.1))(babel-plugin-macros@3.1.0)(react@19.2.6) + optionalDependencies: + '@next/swc-darwin-arm64': 15.5.25 + '@next/swc-darwin-x64': 15.5.25 + '@next/swc-linux-arm64-gnu': 15.5.25 + '@next/swc-linux-arm64-musl': 15.5.25 + '@next/swc-linux-x64-gnu': 15.5.25 + '@next/swc-linux-x64-musl': 15.5.25 + '@next/swc-win32-arm64-msvc': 15.5.25 + '@next/swc-win32-x64-msvc': 15.5.25 + '@opentelemetry/api': 1.9.1 + '@playwright/test': 1.59.1 + sass: 1.77.4 + sharp: 0.35.4(@types/node@24.19.0) + transitivePeerDependencies: + - '@babel/core' + - '@types/node' + - babel-plugin-macros + next@16.3.6(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4): dependencies: '@next/env': 16.3.6 @@ -33613,6 +33838,34 @@ snapshots: - '@types/node' - babel-plugin-macros + next@16.3.6(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4): + dependencies: + '@next/env': 16.3.6 + '@swc/helpers': 0.5.23 + baseline-browser-mapping: 2.11.13 + caniuse-lite: 1.0.30001809 + postcss: 8.5.28 + react: 19.2.6 + react-dom: 19.2.6(react@19.2.6) + styled-jsx: 5.1.6(@babel/core@7.29.7(supports-color@8.1.1))(babel-plugin-macros@3.1.0)(react@19.2.6) + optionalDependencies: + '@next/swc-darwin-arm64': 16.3.6 + '@next/swc-darwin-x64': 16.3.6 + '@next/swc-linux-arm64-gnu': 16.3.6 + '@next/swc-linux-arm64-musl': 16.3.6 + '@next/swc-linux-x64-gnu': 16.3.6 + '@next/swc-linux-x64-musl': 16.3.6 + '@next/swc-win32-arm64-msvc': 16.3.6 + '@next/swc-win32-x64-msvc': 16.3.6 + '@opentelemetry/api': 1.9.1 + '@playwright/test': 1.59.1 + sass: 1.77.4 + sharp: 0.35.4(@types/node@24.19.0) + transitivePeerDependencies: + - '@babel/core' + - '@types/node' + - babel-plugin-macros + nf3@0.3.24: {} nice-try@1.0.5: {} @@ -33907,13 +34160,13 @@ snapshots: next: 16.3.6(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(babel-plugin-macros@3.1.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) react-router: 7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - nuqs@2.8.1(@tanstack/react-router@1.170.41(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6): + nuqs@2.8.1(@tanstack/react-router@1.170.41(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react-router@7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6))(react@19.2.6): dependencies: '@standard-schema/spec': 1.0.0 react: 19.2.6 optionalDependencies: '@tanstack/react-router': 1.170.41(react-dom@19.2.6(react@19.2.6))(react@19.2.6) - next: 15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) + next: 15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) react-router: 7.18.2(react-dom@19.2.6(react@19.2.6))(react@19.2.6) nuxt@4.5.2(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.7(supports-color@8.1.1)))(@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7(supports-color@8.1.1)))(@electric-sql/pglite@0.4.5)(@oxc-project/types@0.150.0)(@parcel/watcher@2.5.6)(@types/node@22.13.14)(@vue/compiler-sfc@3.5.41)(aws4fetch@1.0.20)(cac@6.7.14)(commander@14.0.1)(db0@0.3.4(@electric-sql/pglite@0.4.5))(encoding@0.1.13)(esbuild@0.28.1)(eslint@9.37.0(jiti@2.7.0)(supports-color@8.1.1))(ioredis@5.10.1(supports-color@8.1.1))(lightningcss@1.33.0)(magicast@0.5.4)(oxc-parser@0.148.0)(rolldown@1.2.9)(rollup-plugin-visualizer@7.0.1(rolldown@1.2.9)(rollup@4.60.3))(rollup@4.60.3)(sass@1.77.4)(supports-color@8.1.1)(terser@5.48.0)(tsx@4.22.4)(typescript@6.0.2)(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0))(webpack@5.105.4(esbuild@0.28.1))(yaml@2.9.0): @@ -36300,6 +36553,40 @@ snapshots: '@img/sharp-win32-x64': 0.35.4 '@types/node': 22.13.14 + sharp@0.35.4(@types/node@24.19.0): + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.35.4 + '@img/sharp-darwin-x64': 0.35.4 + '@img/sharp-freebsd-wasm32': 0.35.4 + '@img/sharp-libvips-darwin-arm64': 1.3.3 + '@img/sharp-libvips-darwin-x64': 1.3.3 + '@img/sharp-libvips-linux-arm': 1.3.3 + '@img/sharp-libvips-linux-arm64': 1.3.3 + '@img/sharp-libvips-linux-ppc64': 1.3.3 + '@img/sharp-libvips-linux-riscv64': 1.3.3 + '@img/sharp-libvips-linux-s390x': 1.3.3 + '@img/sharp-libvips-linux-x64': 1.3.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 + '@img/sharp-linux-arm': 0.35.4 + '@img/sharp-linux-arm64': 0.35.4 + '@img/sharp-linux-ppc64': 0.35.4 + '@img/sharp-linux-riscv64': 0.35.4 + '@img/sharp-linux-s390x': 0.35.4 + '@img/sharp-linux-x64': 0.35.4 + '@img/sharp-linuxmusl-arm64': 0.35.4 + '@img/sharp-linuxmusl-x64': 0.35.4 + '@img/sharp-webcontainers-wasm32': 0.35.4 + '@img/sharp-win32-arm64': 0.35.4 + '@img/sharp-win32-ia32': 0.35.4 + '@img/sharp-win32-x64': 0.35.4 + '@types/node': 24.19.0 + optional: true + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 @@ -36440,6 +36727,13 @@ snapshots: sisteransi@1.0.5: {} + sitemap@9.0.1: + dependencies: + '@types/node': 24.19.0 + '@types/sax': 1.2.7 + arg: 5.0.2 + sax: 1.6.1 + slash@3.0.0: {} slash@4.0.0: {} @@ -36814,7 +37108,7 @@ snapshots: supabase-management-js@2.0.2(supports-color@8.1.1): dependencies: axios: 1.18.1(supports-color@8.1.1) - zod: 4.4.3 + zod: 4.6.5 transitivePeerDependencies: - debug - supports-color @@ -37267,6 +37561,8 @@ snapshots: undici-types@6.20.0: {} + undici-types@7.24.6: {} + undici@7.30.0: {} undici@8.11.2: {} @@ -37305,12 +37601,12 @@ snapshots: unicorn-magic@0.4.0: {} - unicornstudio-react@2.0.1-1(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react-dom@19.2.6(react@19.2.6))(react@19.2.6): + unicornstudio-react@2.0.1-1(next@15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4))(react-dom@19.2.6(react@19.2.6))(react@19.2.6): dependencies: react: 19.2.6 react-dom: 19.2.6(react@19.2.6) optionalDependencies: - next: 15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@22.13.14)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) + next: 15.5.25(@babel/core@7.29.7(supports-color@8.1.1))(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(@types/node@24.19.0)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(sass@1.77.4) unified@10.1.2: dependencies: @@ -37807,6 +38103,27 @@ snapshots: - tsx - yaml + vite-node@3.2.4(@types/node@24.19.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.77.4)(supports-color@8.1.1)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0): + dependencies: + cac: 6.7.14 + debug: 4.4.3(supports-color@8.1.1) + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 7.3.5(@types/node@24.19.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vite-node@6.0.0(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0): dependencies: cac: 7.0.0 @@ -37885,6 +38202,24 @@ snapshots: tsx: 4.22.4 yaml: 2.9.0 + vite@7.3.5(@types/node@24.19.0)(jiti@2.7.0)(lightningcss@1.33.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0): + dependencies: + esbuild: 0.28.1 + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + postcss: 8.5.28 + rollup: 4.60.3 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 24.19.0 + fsevents: 2.3.3 + jiti: 2.7.0 + lightningcss: 1.33.0 + sass: 1.77.4 + terser: 5.48.0 + tsx: 4.22.4 + yaml: 2.9.0 + vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 @@ -37902,6 +38237,23 @@ snapshots: tsx: 4.22.4 yaml: 2.9.0 + vite@8.2.1(@types/node@24.19.0)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0): + dependencies: + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.28 + rolldown: 1.2.9 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 24.19.0 + esbuild: 0.28.1 + fsevents: 2.3.3 + jiti: 2.7.0 + sass: 1.77.4 + terser: 5.48.0 + tsx: 4.22.4 + yaml: 2.9.0 + vitefu@1.1.3(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): optionalDependencies: vite: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) @@ -37958,6 +38310,58 @@ snapshots: transitivePeerDependencies: - msw + vitest@5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@24.19.0)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): + dependencies: + '@types/chai': 5.2.2 + '@vitest/mocker': 5.0.0(msw@2.11.3(@types/node@24.19.0)(typescript@6.0.2))(vite@8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + chai: 6.2.2 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 1.2.3 + obug: 2.1.4 + picomatch: 4.0.7 + std-env: 4.2.0 + tinybench: 6.1.4 + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + vite: 8.2.1(@types/node@22.13.14)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@types/node': 22.13.14 + '@vitest/coverage-v8': 5.0.0(vitest@5.0.0) + '@vitest/ui': 5.0.0(vitest@5.0.0) + happy-dom: 20.14.5 + jsdom: 28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1) + transitivePeerDependencies: + - msw + + vitest@5.0.0(@opentelemetry/api@1.9.1)(@types/node@22.13.14)(@vitest/coverage-v8@5.0.0)(@vitest/ui@5.0.0)(happy-dom@20.14.5)(jsdom@28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1))(msw@2.11.3(@types/node@24.19.0)(typescript@6.0.2))(vite@8.2.1(@types/node@24.19.0)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)): + dependencies: + '@types/chai': 5.2.2 + '@vitest/mocker': 5.0.0(msw@2.11.3(@types/node@24.19.0)(typescript@6.0.2))(vite@8.2.1(@types/node@24.19.0)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0)) + chai: 6.2.2 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 1.2.3 + obug: 2.1.4 + picomatch: 4.0.7 + std-env: 4.2.0 + tinybench: 6.1.4 + tinyexec: 1.3.0 + tinyglobby: 0.2.17 + vite: 8.2.1(@types/node@24.19.0)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.77.4)(terser@5.48.0)(tsx@4.22.4)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + '@types/node': 22.13.14 + '@vitest/coverage-v8': 5.0.0(vitest@5.0.0) + '@vitest/ui': 5.0.0(vitest@5.0.0) + happy-dom: 20.14.5 + jsdom: 28.1.0(@noble/hashes@1.8.0)(supports-color@8.1.1) + transitivePeerDependencies: + - msw + vscode-languageserver-types@3.17.5: {} vue-bundle-renderer@2.3.2: @@ -38365,9 +38769,9 @@ snapshots: dependencies: zod: 3.25.76 - zod-validation-error@4.0.2(zod@4.4.3): + zod-validation-error@4.0.2(zod@4.6.5): dependencies: - zod: 4.4.3 + zod: 4.6.5 zod@3.25.76: {} From b027e2c342d44268867540bbb26586de55d774fd Mon Sep 17 00:00:00 2001 From: Tyler Date: Fri, 2 Oct 2026 08:00:50 -0700 Subject: [PATCH 02/14] blog: Turso joins Supabase (#51183) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Overview New blog post ## Preview links https://zone-www-dot-com-git-blog-turso-supabase.vercel.app/blog/supabase-is-acquiring-turso ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) ## Summary by CodeRabbit * **Documentation** * Added a blog post announcing that Turso is joining Supabase to develop database infrastructure for agentic AI. The post describes Supabase’s continued focus on Postgres and Turso’s work on SQLite, including on-demand SQLite databases for smaller workloads. It also covers Turso’s cloud architecture and the teams’ shared commitment to open source. --------- Co-authored-by: Matt Linkous --- ...2026-10-02-supabase-is-acquiring-turso.mdx | 43 ++++++++++++++++++ .../thumb.png | Bin 0 -> 25927 bytes 2 files changed, 43 insertions(+) create mode 100644 apps/www/_blog/2026-10-02-supabase-is-acquiring-turso.mdx create mode 100644 apps/www/public/images/blog/2026-10-02-supabase-is-acquiring-turso/thumb.png diff --git a/apps/www/_blog/2026-10-02-supabase-is-acquiring-turso.mdx b/apps/www/_blog/2026-10-02-supabase-is-acquiring-turso.mdx new file mode 100644 index 00000000000..042f1319d87 --- /dev/null +++ b/apps/www/_blog/2026-10-02-supabase-is-acquiring-turso.mdx @@ -0,0 +1,43 @@ +--- +title: 'Supabase is acquiring Turso' +description: 'Supabase is acquiring Turso to build the database infrastructure for agentic AI' +author: paul_copplestone +date: '2026-10-02' +categories: + - company +tags: + - ai + - open-source + - database +imgSocial: '2026-10-02-supabase-is-acquiring-turso/thumb.png' +imgThumb: '2026-10-02-supabase-is-acquiring-turso/thumb.png' +toc_depth: 2 +--- + +AI is enabling builders to create an immense amount of software. Today, agents are spinning up millions of databases to power the prototypes, explorations, dashboards, and apps they're building. This new pattern, at this massive scale, requires an evolution in database infrastructure. Turso is joining Supabase to build this evolution. + +For existing users, nothing changes. Supabase will continue building around Postgres, while Turso will continue its work on SQLite. And together, we’re creating something new that will bring the Supabase experience to every agent. + +## Databases for agents + +Supabase is already launching over one million databases per week. As agents build more software, we believe database demand will outpace the world’s current capacity to support them. So we need infrastructure that can scale to meet this growth and is suited to how we build with agents. + +Agents should be able to create a database as easily as creating a file, with just as little concern about cost. For smaller workloads, that shouldn’t require provisioning a dedicated machine every time. Databases should be cheap to create, available on demand, and have a clear path to production when needed. + +SQLite is well suited to these small, on-demand workloads. Postgres is what you want as your application scales. We want builders to have the same developer experience from prototyping to production. + +## Turso + +Turso has built an architecture for exactly this pattern. They rebuilt SQLite in Rust and created a cloud platform where a single server can manage millions of databases, loading them when needed and suspending them when they’re not. + +This architecture makes it possible to provision a database for each agent on demand, whether on Turso Cloud or in customers’ own clouds, as Superhuman, Sauna.ai, CTO.new, and Mastra do. + +We share a vision for how infrastructure needs to evolve to support agentic AI. Turso will continue operating, with a clear path into the broader Supabase ecosystem as workloads grow. + +## Open source + +Turso and Supabase have a lot in common: a commitment to open source, a focus on developer experience, and an appetite to tackle hard infrastructure problems. + +We’re excited to welcome Glauber Costa and Pekka Enberg to Supabase with the rest of the Turso team. Glauber will lead this agentic infrastructure effort. + +Our mission is to store the world’s data, and agents are going to create a lot more of it. This gets us closer to that goal. diff --git a/apps/www/public/images/blog/2026-10-02-supabase-is-acquiring-turso/thumb.png b/apps/www/public/images/blog/2026-10-02-supabase-is-acquiring-turso/thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe7284442dd0bc4900eb23e2b22bab84795aed3 GIT binary patch literal 25927 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 literal 0 HcmV?d00001 From 84e7316d8d992733c5f03b84012e642d1cb77ead Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Fri, 2 Oct 2026 11:10:43 -0400 Subject: [PATCH 03/14] disable coderabbit high-level summary (#51180) ## Summary by CodeRabbit * **Chores** * No user-facing changes are included in this update. --- .coderabbit.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 05fb08b4164..ecab8ed2278 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -10,6 +10,7 @@ issue_enrichment: enabled: true reviews: + high_level_summary: false # Skip machine-generated / vendored files (mirrors .prettierignore). Keeps # reviews focused on hand-written code and preserves rate-limit budget on # large codegen diffs. From 43ffe6b067772a7cfa0ff975bbac6f44b5d59708 Mon Sep 17 00:00:00 2001 From: Wendie Cheung <49030266+wendeh@users.noreply.github.com> Date: Sat, 3 Oct 2026 01:24:07 +1000 Subject: [PATCH 04/14] Add Discord CTA to ask-supabase-select hero (#51185) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem The `/go/ask-supabase-select` hero only linked to docs; it didn't point attendees to Discord. ## Solution Adds a third hero CTA, "Join our Discord", linking to `https://discord.supabase.com/`, alongside the existing primary and docs CTAs. ## Review instructions 1. Run `pnpm --filter www dev` and visit `http://localhost:3000/go/ask-supabase-select`. 2. Confirm the hero now shows three CTAs and the Discord link works. ## Checklist - [x] I have read CONTRIBUTING.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) ## Summary by CodeRabbit * **New Features** * Added a “Join our Discord” call to action to the hero section. * **Updates** * Updated the three announcement call-to-action links to point to their respective Supabase Select 2026 blog posts. * Updated the hero’s “Read the Recap” link to point to the Build Anything blog post. --------- Co-authored-by: Wendie Cheung Co-authored-by: Claude Sonnet 5 --- apps/www/_go/lead-gen/ask-supabase-select.tsx | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/apps/www/_go/lead-gen/ask-supabase-select.tsx b/apps/www/_go/lead-gen/ask-supabase-select.tsx index 0a5858c10b8..f36b7172cc5 100644 --- a/apps/www/_go/lead-gen/ask-supabase-select.tsx +++ b/apps/www/_go/lead-gen/ask-supabase-select.tsx @@ -23,21 +23,30 @@ const themes: Theme[] = [ name: 'Build anything', description: "Your agent sets up the backend from code, your users' agents work with your app through its own MCP server, and long-running tasks run in Supabase Compute.", - cta: { label: 'Read the Build Blog', href: '/docs' }, + cta: { + label: 'Read the Build Blog', + href: 'https://supabase.com/blog/select-2026-build-anything', + }, icon: Hammer, }, { name: 'Scale without limits', description: 'The app your agent built in minutes stays on the same Postgres, from prototype to petabyte.', - cta: { label: 'Read the Scale Blog', href: '/docs' }, + cta: { + label: 'Read the Scale Blog', + href: 'https://supabase.com/blog/select-2026-scale-without-limits', + }, icon: Maximize2, }, { name: 'Operate with confidence', description: 'Your agent finds the problem, tests the fix, and reports what it found. You decide what ships.', - cta: { label: 'Read the Operate Blog', href: '/docs' }, + cta: { + label: 'Read the Operate Blog', + href: 'https://supabase.com/blog/select-2026-operate-with-confidence', + }, icon: ShieldCheck, }, ] @@ -88,9 +97,13 @@ const page: GoPageInput = { ctas: [ { label: 'Read the Recap', - href: '/docs', + href: 'https://supabase.com/blog/select-2026-build-anything', variant: 'secondary', }, + { + label: 'Join our Discord', + href: 'https://discord.supabase.com/', + }, ], }, sections: [ From 0405b31b26875b2bb8b3d935bfafb18f0b1c76f2 Mon Sep 17 00:00:00 2001 From: Nik Richers Date: Fri, 2 Oct 2026 09:18:25 -0700 Subject: [PATCH 05/14] =?UTF-8?q?docs:=20re-publish=20Multigres=20Private?= =?UTF-8?q?=20Alpha=20docs=20=E2=80=94=20merge=20on=20October=202,=202026?= =?UTF-8?q?=20(#50664)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the CONTRIBUTING.md file. YES ## What kind of change does this PR introduce? Re-add. Reapplies the Multigres Private Alpha docs section removed in #50662, ready to merge once Sugu gives the go-ahead. Do not merge until then. Linear: MUL-1621 (follow-up to MUL-452). ## What is the current behavior? Multigres docs section is down (per #50662): no overview/compatibility pages, no sidebar entry, no features-table row, no "What you get" cards. ## What is the new behavior? Exact reapply of #49020 (with Multigres marked Private Alpha): overview guide at `/docs/guides/database/multigres`, compatibility stub, Database sidebar entry, features-table row, "What you get" cards, and the `ContentListings` optional-`href` support they rely on. Base branch is the revert PR (#50662) so the diff here is legible now; retarget to `master` once #50662 merges. ## Additional context - `pnpm --filter docs exec vitest run lib/content-listings.test.ts` — 22 passed - Blocked on Sugu's go-ahead — `do-not-merge` label applied --------- Co-authored-by: Nik Richers --- .../ContentListings.client.tsx | 64 ++++++---- .../NavigationMenu.constants.ts | 14 +++ .../content/guides/database/multigres.mdx | 60 ++++++++++ .../database/multigres/compatibility.mdx | 6 + .../guides/getting-started/features.mdx | 111 +++++++++--------- .../data/content-listings/database.data.ts | 24 ++++ apps/docs/data/content-listings/index.ts | 3 +- .../markdown-schema/ContentListings.ts | 5 + apps/docs/lib/content-listings.test.ts | 39 +++++- apps/docs/lib/content-listings.zod.mjs | 2 +- apps/docs/style-guide/WORD_LIST.md | 4 + .../ProjectHome/HighAvailabilityBadge.tsx | 2 +- 12 files changed, 251 insertions(+), 83 deletions(-) create mode 100644 apps/docs/content/guides/database/multigres.mdx create mode 100644 apps/docs/content/guides/database/multigres/compatibility.mdx diff --git a/apps/docs/components/ContentListings/ContentListings.client.tsx b/apps/docs/components/ContentListings/ContentListings.client.tsx index 93086bd588a..b28e1b18841 100644 --- a/apps/docs/components/ContentListings/ContentListings.client.tsx +++ b/apps/docs/components/ContentListings/ContentListings.client.tsx @@ -29,6 +29,8 @@ function useContentListingClickHandler(group: ContentListingGroup) { const trackClick = useCallback( (item: ContentListingItem) => { + if (!item.href) return + sendTelemetryEvent({ action: 'docs_content_listing_clicked', properties: { @@ -73,8 +75,45 @@ function ContentListingsGroup({ group }: { group: ContentListingGroup }) { )}