mirror of
https://github.com/supabase/supabase.git
synced 2026-06-28 19:39:19 -04:00
20290c71bd
## Summary Since the guides UA-redirect shipped (GROWTH-811), named LLM bots requesting `/docs/guides/*` get rewritten to the markdown handler, which returns a 404 when no `.md` file exists. About 90K of those 404s per day land on real pages that serve HTML 200 fine: the bot gets nothing on a page that works. The root cause is that the docs middleware hardcoded `hasMarkdownVariant: true` for every guide path, so it never checked whether a `.md` actually existed. I fixed it in two layers: 1. A build-time slug manifest makes `hasMarkdownVariant` truthful. Guide pages with no `.md` now fall through to HTML 200 instead of a 404. This is content-source-agnostic and future-proof: a new content source can never silently regress to a 404. 2. A second generator pass emits real markdown for the troubleshooting collection (the largest source, ~70% of the 404 volume), so those bots get clean markdown rather than just HTML. ## Changes - Add a shared `markdown-sources` module: a single source of truth for which slugs get a `.md` (guides + troubleshooting), so the generator output and the manifest cannot drift. - Generate markdown for the troubleshooting collection (196 pages, TOML frontmatter parsed via `smol-toml`), written under `public/markdown/guides/troubleshooting/`. - Emit a build-time slug manifest (a gitignored generated `.ts` module, regenerated in `prebuild`, `predev`, and `pretypecheck`, mirroring the existing `__generated__/graphql.ts` lifecycle). - Gate the middleware's `hasMarkdownVariant` on the manifest: serve HTML 200 instead of a 404 for guide paths with no markdown variant. This PR intentionally does not generate markdown for the ai-prompts, YAML config, and externally-fetched (splinter) sources. The HTML fallback covers them now; generating their markdown is follow-up work. ## Testing Local verification (deterministic, against the real manifest and the real negotiation function): - Manifest invariant holds: 744 manifest slugs equal 744 generated `.md` files. - Generator emits 196 troubleshooting files with zero warnings, frontmatter stripped, no leaked delimiters. - Negotiation decision matrix, 6/6: covered slug + bot UA to markdown; uncovered real page + bot UA to pass (HTML 200); nonexistent + bot UA to pass; browser to HTML; covered + `.md` suffix to markdown; uncovered + `.md` suffix to pass. Verified on the Vercel preview deploy: - [x] `User-Agent: ChatGPT-User` on a troubleshooting page returns `200 text/markdown` (real markdown body, frontmatter stripped). - [x] `User-Agent: ChatGPT-User` on an uncovered real page (`ai-tools/ai-prompts/code-format-sql`) returns `200 text/html` (was 404). - [x] Browser request to the same uncovered page returns `200 text/html` (unchanged for humans). - [x] `User-Agent: ChatGPT-User` on a covered standard guide returns `200 text/markdown` (no regression). - [x] `User-Agent: ChatGPT-User` on a nonexistent guide URL returns `404` (correct). Known limitation: an explicit `.md`-suffix request on an uncovered page still 404s by design (an explicit markdown request for a page that has no markdown). The ~90K/day volume is plain-URL UA-based, so it is unaffected. Post-deploy, I will re-run the request-grain 404 reclassification in the GROWTH-915 BQ workspace to confirm fixable guide markdown 404s drop to near zero. ## Linear - fixes GROWTH-946 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added generated markdown slug tracking for docs guides, improving markdown availability detection. * Added automated manifest generation and validation during docs build and CI workflows. * **Bug Fixes** * Improved guide markdown negotiation so only supported guide slugs are treated as having a markdown variant. * Standardized markdown source handling for guides and troubleshooting pages. * **Tests** * Added coverage for guide and troubleshooting slug generation. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
758 lines
33 KiB
TypeScript
758 lines
33 KiB
TypeScript
// GENERATED FILE — DO NOT EDIT.
|
|
//
|
|
// The guide slugs that have a generated markdown (.md) variant. middleware.ts
|
|
// imports this to decide whether a bot request for /guides/<slug> can be served
|
|
// markdown. It is committed (not left under __generated__) so the import resolves
|
|
// in every build context — turbo does not run the npm `prebuild` hook that
|
|
// regenerates it, so a gitignored file would be missing during typecheck/lint.
|
|
//
|
|
// Regenerate with: pnpm --filter docs build:markdown-manifest
|
|
// CI fails if this drifts from the content sources (docs-markdown-manifest-sync workflow).
|
|
|
|
export const MARKDOWN_SLUGS: readonly string[] = [
|
|
"ai",
|
|
"ai-tools",
|
|
"ai-tools/ai-prompts",
|
|
"ai-tools/ai-skills",
|
|
"ai-tools/byo-mcp",
|
|
"ai-tools/mcp",
|
|
"ai-tools/plugins",
|
|
"ai/automatic-embeddings",
|
|
"ai/choosing-compute-addon",
|
|
"ai/concepts",
|
|
"ai/engineering-for-scale",
|
|
"ai/examples/building-chatgpt-plugins",
|
|
"ai/examples/headless-vector-search",
|
|
"ai/examples/huggingface-image-captioning",
|
|
"ai/examples/image-search-openai-clip",
|
|
"ai/examples/mixpeek-video-search",
|
|
"ai/examples/nextjs-vector-search",
|
|
"ai/examples/openai",
|
|
"ai/examples/semantic-image-search-amazon-titan",
|
|
"ai/going-to-prod",
|
|
"ai/google-colab",
|
|
"ai/hugging-face",
|
|
"ai/hybrid-search",
|
|
"ai/integrations/amazon-bedrock",
|
|
"ai/integrations/llamaindex",
|
|
"ai/integrations/roboflow",
|
|
"ai/keyword-search",
|
|
"ai/langchain",
|
|
"ai/python-clients",
|
|
"ai/quickstarts/face-similarity",
|
|
"ai/quickstarts/generate-text-embeddings",
|
|
"ai/quickstarts/hello-world",
|
|
"ai/quickstarts/text-deduplication",
|
|
"ai/rag-with-permissions",
|
|
"ai/semantic-search",
|
|
"ai/structured-unstructured",
|
|
"ai/vecs-python-client",
|
|
"ai/vector-columns",
|
|
"ai/vector-indexes",
|
|
"ai/vector-indexes/hnsw-indexes",
|
|
"ai/vector-indexes/ivf-indexes",
|
|
"api",
|
|
"api/automatic-retries-in-supabase-js",
|
|
"api/creating-routes",
|
|
"api/custom-claims-and-role-based-access-control-rbac",
|
|
"api/handling-errors-in-supabase-js",
|
|
"api/quickstart",
|
|
"api/rest/auto-generated-docs",
|
|
"api/rest/client-libs",
|
|
"api/rest/generating-python-types",
|
|
"api/rest/generating-types",
|
|
"api/rest/postgrest-error-codes",
|
|
"api/securing-your-api",
|
|
"api/sql-to-api",
|
|
"api/sql-to-rest",
|
|
"api/using-custom-schemas",
|
|
"auth",
|
|
"auth/architecture",
|
|
"auth/audit-logs",
|
|
"auth/auth-anonymous",
|
|
"auth/auth-captcha",
|
|
"auth/auth-email-passwordless",
|
|
"auth/auth-email-templates",
|
|
"auth/auth-hooks",
|
|
"auth/auth-hooks/before-user-created-hook",
|
|
"auth/auth-hooks/custom-access-token-hook",
|
|
"auth/auth-hooks/mfa-verification-hook",
|
|
"auth/auth-hooks/password-verification-hook",
|
|
"auth/auth-hooks/send-email-hook",
|
|
"auth/auth-hooks/send-sms-hook",
|
|
"auth/auth-identity-linking",
|
|
"auth/auth-mfa",
|
|
"auth/auth-mfa/phone",
|
|
"auth/auth-mfa/totp",
|
|
"auth/auth-smtp",
|
|
"auth/auth-web3",
|
|
"auth/custom-oauth-providers",
|
|
"auth/debugging/error-codes",
|
|
"auth/enterprise-sso",
|
|
"auth/enterprise-sso/auth-sso-saml",
|
|
"auth/general-configuration",
|
|
"auth/identities",
|
|
"auth/jwt-fields",
|
|
"auth/jwts",
|
|
"auth/managing-user-data",
|
|
"auth/native-mobile-deep-linking",
|
|
"auth/oauth-server",
|
|
"auth/oauth-server/getting-started",
|
|
"auth/oauth-server/mcp-authentication",
|
|
"auth/oauth-server/oauth-flows",
|
|
"auth/oauth-server/token-security",
|
|
"auth/passkeys",
|
|
"auth/password-security",
|
|
"auth/passwords",
|
|
"auth/phone-login",
|
|
"auth/quickstarts/astrojs",
|
|
"auth/quickstarts/nextjs",
|
|
"auth/quickstarts/react",
|
|
"auth/quickstarts/react-native",
|
|
"auth/quickstarts/with-expo-react-native-social-auth",
|
|
"auth/rate-limits",
|
|
"auth/redirect-urls",
|
|
"auth/server-side",
|
|
"auth/server-side/advanced-guide",
|
|
"auth/server-side/creating-a-client",
|
|
"auth/server-side/migrating-to-ssr-from-auth-helpers",
|
|
"auth/sessions",
|
|
"auth/sessions/implicit-flow",
|
|
"auth/sessions/pkce-flow",
|
|
"auth/signing-keys",
|
|
"auth/signout",
|
|
"auth/social-login",
|
|
"auth/social-login/auth-apple",
|
|
"auth/social-login/auth-azure",
|
|
"auth/social-login/auth-bitbucket",
|
|
"auth/social-login/auth-discord",
|
|
"auth/social-login/auth-facebook",
|
|
"auth/social-login/auth-figma",
|
|
"auth/social-login/auth-github",
|
|
"auth/social-login/auth-gitlab",
|
|
"auth/social-login/auth-google",
|
|
"auth/social-login/auth-kakao",
|
|
"auth/social-login/auth-keycloak",
|
|
"auth/social-login/auth-linkedin",
|
|
"auth/social-login/auth-notion",
|
|
"auth/social-login/auth-slack",
|
|
"auth/social-login/auth-spotify",
|
|
"auth/social-login/auth-twitch",
|
|
"auth/social-login/auth-twitter",
|
|
"auth/social-login/auth-workos",
|
|
"auth/social-login/auth-zoom",
|
|
"auth/third-party/auth0",
|
|
"auth/third-party/aws-cognito",
|
|
"auth/third-party/clerk",
|
|
"auth/third-party/firebase-auth",
|
|
"auth/third-party/overview",
|
|
"auth/third-party/workos",
|
|
"auth/users",
|
|
"cli",
|
|
"cron",
|
|
"cron/install",
|
|
"cron/quickstart",
|
|
"database/arrays",
|
|
"database/beekeeper-studio",
|
|
"database/connecting-to-postgres",
|
|
"database/connecting-to-postgres/serverless-drivers",
|
|
"database/connection-management",
|
|
"database/custom-postgres-config",
|
|
"database/dbeaver",
|
|
"database/debugging-performance",
|
|
"database/drizzle",
|
|
"database/extensions",
|
|
"database/extensions/http",
|
|
"database/extensions/hypopg",
|
|
"database/extensions/index_advisor",
|
|
"database/extensions/pg_cron",
|
|
"database/extensions/pg_graphql",
|
|
"database/extensions/pg_hashids",
|
|
"database/extensions/pg_jsonschema",
|
|
"database/extensions/pg_net",
|
|
"database/extensions/pg_partman",
|
|
"database/extensions/pg_plan_filter",
|
|
"database/extensions/pg_repack",
|
|
"database/extensions/pg_stat_statements",
|
|
"database/extensions/pgaudit",
|
|
"database/extensions/pgjwt",
|
|
"database/extensions/pgmq",
|
|
"database/extensions/pgroonga",
|
|
"database/extensions/pgrouting",
|
|
"database/extensions/pgsodium",
|
|
"database/extensions/pgtap",
|
|
"database/extensions/pgvector",
|
|
"database/extensions/plpgsql_check",
|
|
"database/extensions/plv8",
|
|
"database/extensions/postgis",
|
|
"database/extensions/postgres_fdw",
|
|
"database/extensions/rum",
|
|
"database/extensions/timescaledb",
|
|
"database/extensions/uuid-ossp",
|
|
"database/extensions/wrappers/overview",
|
|
"database/full-text-search",
|
|
"database/functions",
|
|
"database/import-data",
|
|
"database/inspect",
|
|
"database/joins-and-nesting",
|
|
"database/json",
|
|
"database/metabase",
|
|
"database/migrating-to-pg-partman",
|
|
"database/orioledb",
|
|
"database/overview",
|
|
"database/partitions",
|
|
"database/pgadmin",
|
|
"database/postgres-js",
|
|
"database/postgres/cascade-deletes",
|
|
"database/postgres/column-level-security",
|
|
"database/postgres/configuration",
|
|
"database/postgres/data-deletion",
|
|
"database/postgres/dropping-all-tables-in-schema",
|
|
"database/postgres/enums",
|
|
"database/postgres/event-triggers",
|
|
"database/postgres/first-row-in-group",
|
|
"database/postgres/indexes",
|
|
"database/postgres/roles",
|
|
"database/postgres/roles-superuser",
|
|
"database/postgres/row-level-security",
|
|
"database/postgres/setup-replication-external",
|
|
"database/postgres/timeouts",
|
|
"database/postgres/triggers",
|
|
"database/postgres/which-version-of-postgres",
|
|
"database/prisma",
|
|
"database/prisma/prisma-troubleshooting",
|
|
"database/psql",
|
|
"database/query-optimization",
|
|
"database/replication",
|
|
"database/replication/bigquery",
|
|
"database/replication/manual-replication-faq",
|
|
"database/replication/manual-replication-monitoring",
|
|
"database/replication/manual-replication-setup",
|
|
"database/replication/pipelines",
|
|
"database/replication/pipelines-faq",
|
|
"database/replication/pipelines-monitoring",
|
|
"database/secure-data",
|
|
"database/supavisor",
|
|
"database/tables",
|
|
"database/testing",
|
|
"database/vault",
|
|
"database/webhooks",
|
|
"deployment",
|
|
"deployment/branching",
|
|
"deployment/branching/configuration",
|
|
"deployment/branching/dashboard",
|
|
"deployment/branching/github-integration",
|
|
"deployment/branching/integrations",
|
|
"deployment/branching/troubleshooting",
|
|
"deployment/branching/working-with-branches",
|
|
"deployment/database-migrations",
|
|
"deployment/going-into-prod",
|
|
"deployment/managing-environments",
|
|
"deployment/maturity-model",
|
|
"deployment/shared-responsibility-model",
|
|
"functions",
|
|
"functions/ai-models",
|
|
"functions/architecture",
|
|
"functions/auth",
|
|
"functions/auth-headers",
|
|
"functions/auth-legacy-jwt",
|
|
"functions/background-tasks",
|
|
"functions/compression",
|
|
"functions/connect-to-postgres",
|
|
"functions/cors",
|
|
"functions/dart-edge",
|
|
"functions/debugging-tools",
|
|
"functions/dependencies",
|
|
"functions/deploy",
|
|
"functions/development-environment",
|
|
"functions/development-tips",
|
|
"functions/ephemeral-storage",
|
|
"functions/error-codes",
|
|
"functions/error-handling",
|
|
"functions/examples/amazon-bedrock-image-generator",
|
|
"functions/examples/auth-send-email-hook-react-email-resend",
|
|
"functions/examples/cloudflare-turnstile",
|
|
"functions/examples/discord-bot",
|
|
"functions/examples/elevenlabs-generate-speech-stream",
|
|
"functions/examples/elevenlabs-transcribe-speech",
|
|
"functions/examples/github-actions",
|
|
"functions/examples/image-manipulation",
|
|
"functions/examples/mcp-server-mcp-lite",
|
|
"functions/examples/og-image",
|
|
"functions/examples/push-notifications",
|
|
"functions/examples/rate-limiting",
|
|
"functions/examples/resumable-websockets",
|
|
"functions/examples/screenshots",
|
|
"functions/examples/semantic-search",
|
|
"functions/examples/send-emails",
|
|
"functions/examples/sentry-monitoring",
|
|
"functions/examples/slack-bot-mention",
|
|
"functions/examples/stripe-webhooks",
|
|
"functions/examples/telegram-bot",
|
|
"functions/examples/upstash-redis",
|
|
"functions/function-configuration",
|
|
"functions/http-methods",
|
|
"functions/kysely-postgres",
|
|
"functions/limits",
|
|
"functions/logging",
|
|
"functions/pricing",
|
|
"functions/quickstart",
|
|
"functions/quickstart-dashboard",
|
|
"functions/recursive-functions",
|
|
"functions/regional-invocation",
|
|
"functions/routing",
|
|
"functions/schedule-functions",
|
|
"functions/secrets",
|
|
"functions/status-codes",
|
|
"functions/storage-caching",
|
|
"functions/unit-test",
|
|
"functions/wasm",
|
|
"functions/websockets",
|
|
"getting-started",
|
|
"getting-started/api-keys",
|
|
"getting-started/architecture",
|
|
"getting-started/features",
|
|
"getting-started/migrating-to-new-api-keys",
|
|
"getting-started/quickstarts/astrojs",
|
|
"getting-started/quickstarts/expo-react-native",
|
|
"getting-started/quickstarts/flask",
|
|
"getting-started/quickstarts/flutter",
|
|
"getting-started/quickstarts/hono",
|
|
"getting-started/quickstarts/ios-swiftui",
|
|
"getting-started/quickstarts/kotlin",
|
|
"getting-started/quickstarts/laravel",
|
|
"getting-started/quickstarts/nextjs",
|
|
"getting-started/quickstarts/nuxtjs",
|
|
"getting-started/quickstarts/reactjs",
|
|
"getting-started/quickstarts/redwoodjs",
|
|
"getting-started/quickstarts/refine",
|
|
"getting-started/quickstarts/ruby-on-rails",
|
|
"getting-started/quickstarts/solidjs",
|
|
"getting-started/quickstarts/sveltekit",
|
|
"getting-started/quickstarts/tanstack",
|
|
"getting-started/quickstarts/vue",
|
|
"getting-started/tutorials/with-angular",
|
|
"getting-started/tutorials/with-expo-react-native",
|
|
"getting-started/tutorials/with-flutter",
|
|
"getting-started/tutorials/with-ionic-angular",
|
|
"getting-started/tutorials/with-ionic-react",
|
|
"getting-started/tutorials/with-ionic-vue",
|
|
"getting-started/tutorials/with-kotlin",
|
|
"getting-started/tutorials/with-nextjs",
|
|
"getting-started/tutorials/with-nuxt-3",
|
|
"getting-started/tutorials/with-react",
|
|
"getting-started/tutorials/with-redwoodjs",
|
|
"getting-started/tutorials/with-refine",
|
|
"getting-started/tutorials/with-solidjs",
|
|
"getting-started/tutorials/with-svelte",
|
|
"getting-started/tutorials/with-sveltekit",
|
|
"getting-started/tutorials/with-swift",
|
|
"getting-started/tutorials/with-vue-3",
|
|
"integrations",
|
|
"integrations/build-a-supabase-oauth-integration",
|
|
"integrations/build-a-supabase-oauth-integration/oauth-scopes",
|
|
"integrations/partner-integration-guide",
|
|
"integrations/supabase-for-platforms",
|
|
"integrations/supabase-marketplace",
|
|
"integrations/vercel-marketplace",
|
|
"local-development",
|
|
"local-development/cli/getting-started",
|
|
"local-development/cli/testing-and-linting",
|
|
"local-development/customizing-email-templates",
|
|
"local-development/declarative-database-schemas",
|
|
"local-development/managing-config",
|
|
"local-development/overview",
|
|
"local-development/restoring-downloaded-backup",
|
|
"local-development/seeding-your-database",
|
|
"local-development/testing/overview",
|
|
"local-development/testing/pgtap-extended",
|
|
"platform",
|
|
"platform/access-control",
|
|
"platform/aws-marketplace",
|
|
"platform/aws-marketplace/account-setup",
|
|
"platform/aws-marketplace/faq",
|
|
"platform/aws-marketplace/getting-started",
|
|
"platform/aws-marketplace/invoices",
|
|
"platform/aws-marketplace/manage-your-subscription",
|
|
"platform/backups",
|
|
"platform/billing-faq",
|
|
"platform/billing-on-supabase",
|
|
"platform/clone-project",
|
|
"platform/compute-and-disk",
|
|
"platform/cost-control",
|
|
"platform/credits",
|
|
"platform/custom-domains",
|
|
"platform/database-size",
|
|
"platform/free-project-pausing",
|
|
"platform/get-set-up-for-billing",
|
|
"platform/hipaa-projects",
|
|
"platform/ipv4-address",
|
|
"platform/manage-your-subscription",
|
|
"platform/manage-your-usage",
|
|
"platform/manage-your-usage/advanced-mfa-phone",
|
|
"platform/manage-your-usage/branching",
|
|
"platform/manage-your-usage/compute",
|
|
"platform/manage-your-usage/custom-domains",
|
|
"platform/manage-your-usage/disk-iops",
|
|
"platform/manage-your-usage/disk-size",
|
|
"platform/manage-your-usage/disk-throughput",
|
|
"platform/manage-your-usage/edge-function-invocations",
|
|
"platform/manage-your-usage/egress",
|
|
"platform/manage-your-usage/ipv4",
|
|
"platform/manage-your-usage/log-drains",
|
|
"platform/manage-your-usage/logs",
|
|
"platform/manage-your-usage/logs-ingest",
|
|
"platform/manage-your-usage/logs-query",
|
|
"platform/manage-your-usage/monthly-active-users",
|
|
"platform/manage-your-usage/monthly-active-users-sso",
|
|
"platform/manage-your-usage/monthly-active-users-third-party",
|
|
"platform/manage-your-usage/point-in-time-recovery",
|
|
"platform/manage-your-usage/read-replicas",
|
|
"platform/manage-your-usage/realtime-messages",
|
|
"platform/manage-your-usage/realtime-peak-connections",
|
|
"platform/manage-your-usage/storage-image-transformations",
|
|
"platform/manage-your-usage/storage-size",
|
|
"platform/mfa/org-mfa-enforcement",
|
|
"platform/migrating-to-supabase",
|
|
"platform/migrating-to-supabase/amazon-rds",
|
|
"platform/migrating-to-supabase/auth0",
|
|
"platform/migrating-to-supabase/firebase-auth",
|
|
"platform/migrating-to-supabase/firebase-storage",
|
|
"platform/migrating-to-supabase/firestore-data",
|
|
"platform/migrating-to-supabase/heroku",
|
|
"platform/migrating-to-supabase/mssql",
|
|
"platform/migrating-to-supabase/mysql",
|
|
"platform/migrating-to-supabase/neon",
|
|
"platform/migrating-to-supabase/postgres",
|
|
"platform/migrating-to-supabase/render",
|
|
"platform/migrating-to-supabase/vercel-postgres",
|
|
"platform/migrating-within-supabase",
|
|
"platform/migrating-within-supabase/backup-restore",
|
|
"platform/migrating-within-supabase/dashboard-restore",
|
|
"platform/multi-factor-authentication",
|
|
"platform/network-restrictions",
|
|
"platform/performance",
|
|
"platform/permissions",
|
|
"platform/postgres-connection-logging",
|
|
"platform/privatelink",
|
|
"platform/project-transfer",
|
|
"platform/read-replicas",
|
|
"platform/read-replicas/getting-started",
|
|
"platform/regions",
|
|
"platform/ssl-enforcement",
|
|
"platform/sso",
|
|
"platform/sso/azure",
|
|
"platform/sso/choosing-login-flow",
|
|
"platform/sso/gsuite",
|
|
"platform/sso/login-flows",
|
|
"platform/sso/multiple-providers",
|
|
"platform/sso/okta",
|
|
"platform/sso/testing-best-practices",
|
|
"platform/temporary-access",
|
|
"platform/upgrading",
|
|
"platform/your-monthly-invoice",
|
|
"queues",
|
|
"queues/api",
|
|
"queues/consuming-messages-with-edge-functions",
|
|
"queues/expose-self-hosted-queues",
|
|
"queues/pgmq",
|
|
"queues/quickstart",
|
|
"realtime",
|
|
"realtime/architecture",
|
|
"realtime/authorization",
|
|
"realtime/benchmarks",
|
|
"realtime/broadcast",
|
|
"realtime/concepts",
|
|
"realtime/error_codes",
|
|
"realtime/getting_started",
|
|
"realtime/limits",
|
|
"realtime/postgres-changes",
|
|
"realtime/presence",
|
|
"realtime/pricing",
|
|
"realtime/protocol",
|
|
"realtime/realtime-listening-flutter",
|
|
"realtime/realtime-user-presence",
|
|
"realtime/realtime-with-nextjs",
|
|
"realtime/reports",
|
|
"realtime/settings",
|
|
"realtime/subscribing-to-database-changes",
|
|
"resources",
|
|
"resources/glossary",
|
|
"security",
|
|
"security/hipaa-compliance",
|
|
"security/npm-security",
|
|
"security/platform-audit-logs",
|
|
"security/platform-security",
|
|
"security/product-security",
|
|
"security/security-testing",
|
|
"security/soc-2-compliance",
|
|
"self-hosting",
|
|
"self-hosting/copy-from-platform-s3",
|
|
"self-hosting/custom-email-templates",
|
|
"self-hosting/docker",
|
|
"self-hosting/enable-mcp",
|
|
"self-hosting/postgres-upgrade-17",
|
|
"self-hosting/remove-superuser-access",
|
|
"self-hosting/restore-from-platform",
|
|
"self-hosting/self-hosted-auth-keys",
|
|
"self-hosting/self-hosted-envoy",
|
|
"self-hosting/self-hosted-functions",
|
|
"self-hosting/self-hosted-oauth",
|
|
"self-hosting/self-hosted-phone-mfa",
|
|
"self-hosting/self-hosted-proxy-https",
|
|
"self-hosting/self-hosted-s3",
|
|
"self-hosting/self-hosted-saml-sso",
|
|
"storage",
|
|
"storage/analytics/connecting-to-analytics-bucket",
|
|
"storage/analytics/creating-analytics-buckets",
|
|
"storage/analytics/examples/apache-spark",
|
|
"storage/analytics/examples/duckdb",
|
|
"storage/analytics/examples/pyiceberg",
|
|
"storage/analytics/introduction",
|
|
"storage/analytics/limits",
|
|
"storage/analytics/pricing",
|
|
"storage/analytics/query-with-postgres",
|
|
"storage/buckets/creating-buckets",
|
|
"storage/buckets/fundamentals",
|
|
"storage/cdn/fundamentals",
|
|
"storage/cdn/metrics",
|
|
"storage/cdn/smart-cdn",
|
|
"storage/debugging/error-codes",
|
|
"storage/debugging/logs",
|
|
"storage/management/copy-move-objects",
|
|
"storage/management/delete-objects",
|
|
"storage/management/download-objects",
|
|
"storage/pricing",
|
|
"storage/production/scaling",
|
|
"storage/quickstart",
|
|
"storage/s3/authentication",
|
|
"storage/s3/compatibility",
|
|
"storage/schema/custom-roles",
|
|
"storage/schema/design",
|
|
"storage/schema/helper-functions",
|
|
"storage/security/access-control",
|
|
"storage/security/ownership",
|
|
"storage/serving/bandwidth",
|
|
"storage/serving/downloads",
|
|
"storage/serving/image-transformations",
|
|
"storage/uploads/file-limits",
|
|
"storage/uploads/resumable-uploads",
|
|
"storage/uploads/s3-uploads",
|
|
"storage/uploads/standard-uploads",
|
|
"storage/vector/creating-vector-buckets",
|
|
"storage/vector/introduction",
|
|
"storage/vector/limits",
|
|
"storage/vector/local-development",
|
|
"storage/vector/querying-vectors",
|
|
"storage/vector/storing-vectors",
|
|
"storage/vector/working-with-indexes",
|
|
"telemetry",
|
|
"telemetry/advanced-log-filtering",
|
|
"telemetry/client-side-tracing",
|
|
"telemetry/log-drains",
|
|
"telemetry/log-field-reference",
|
|
"telemetry/logs",
|
|
"telemetry/metrics",
|
|
"telemetry/metrics/grafana-cloud",
|
|
"telemetry/metrics/grafana-self-hosted",
|
|
"telemetry/metrics/vendor-agnostic",
|
|
"telemetry/reports",
|
|
"telemetry/sentry-monitoring",
|
|
"troubleshooting/42501--permission-denied-for-table-httprequestqueue-KnozmQ",
|
|
"troubleshooting/FWD-wrappers-error-component-verification-failed-94a76b",
|
|
"troubleshooting/all-about-supabase-egress-a_Sg_e",
|
|
"troubleshooting/an-invalid-response-was-received-from-the-upstream-server-error-when-querying-auth-RI4Vl-",
|
|
"troubleshooting/app-store-rejection-tls-error-in-ipv6-only-environments-4e9c62",
|
|
"troubleshooting/are-all-features-available-in-self-hosted-supabase-THPcqw",
|
|
"troubleshooting/auth-error-401-invalid-claim-missing-sub--AFwMR",
|
|
"troubleshooting/auth-error-503-authretryablefetcherror-51b88c",
|
|
"troubleshooting/auth-hooks-invalid-payload-when-anonymous-users-attempt-phone-changes-022c47",
|
|
"troubleshooting/autovacuum-stalled-due-to-inactive-replication-slot-d55aa2",
|
|
"troubleshooting/avoiding-timeouts-in-long-running-queries-6nmbdN",
|
|
"troubleshooting/canceling-statement-due-to-statement-timeout-581wFv",
|
|
"troubleshooting/cant-access-supabase-project-lovable-cloud",
|
|
"troubleshooting/certain-operations-are-too-complex-to-perform-directly-using-the-client-libraries-8JaphH",
|
|
"troubleshooting/change-email-associated-with-supabase-account-T5eHNT",
|
|
"troubleshooting/change-project-region-eWJo5Z",
|
|
"troubleshooting/check-usage-for-monthly-active-users-mau-MwZaBs",
|
|
"troubleshooting/cloudflare-origin-error-1016-on-custom-domain-a57af4",
|
|
"troubleshooting/converted-github-account-to-organisation---lost-supabase-account-access-5wsE_1",
|
|
"troubleshooting/customizing-emails-by-language-KZ_38Q",
|
|
"troubleshooting/dashboard-errors-when-managing-users-N1ls4A",
|
|
"troubleshooting/database-api-42501-errors",
|
|
"troubleshooting/database-error-remaining-connection-slots-are-reserved-for-non-replication-superuser-connections-3V3nIb",
|
|
"troubleshooting/database-error-saving-new-user-RU_EwB",
|
|
"troubleshooting/deprecated-rls-features-Pm77Zs",
|
|
"troubleshooting/disabling-prepared-statements-qL8lEL",
|
|
"troubleshooting/discovering-and-interpreting-api-errors-in-the-logs-7xREI9",
|
|
"troubleshooting/disk-size-not-shrinking-after-deleting-data-135390",
|
|
"troubleshooting/do-i-need-to-expose-security-definer-functions-in-row-level-security-policies-iI0uOw",
|
|
"troubleshooting/download-logical-backups",
|
|
"troubleshooting/edge-function-401-error-response",
|
|
"troubleshooting/edge-function-404-error-response",
|
|
"troubleshooting/edge-function-500-error-response",
|
|
"troubleshooting/edge-function-503-response",
|
|
"troubleshooting/edge-function-504-error-response",
|
|
"troubleshooting/edge-function-546-error-response",
|
|
"troubleshooting/edge-function-bundle-size-issues",
|
|
"troubleshooting/edge-function-cpu-limits",
|
|
"troubleshooting/edge-function-dependency-analysis",
|
|
"troubleshooting/edge-function-error-rate-limit-exceeded-for-trace-1094d3",
|
|
"troubleshooting/edge-function-fails-deploy",
|
|
"troubleshooting/edge-function-monitoring-resource-usage",
|
|
"troubleshooting/edge-function-shutdown-reasons-explained",
|
|
"troubleshooting/edge-function-takes-too-long-to-respond",
|
|
"troubleshooting/edge-function-wall-clock-time-limit-reached-Nk38bW",
|
|
"troubleshooting/edge-functions-worker-timeouts-and-websocket-drops",
|
|
"troubleshooting/email-password-login-disabled-supabase-vercel-marketplace-a7dd36",
|
|
"troubleshooting/email-template-not-updating",
|
|
"troubleshooting/enabling-ipv4-addon",
|
|
"troubleshooting/error-connection-refused-when-trying-to-connect-to-supabase-database-hwG0Dr",
|
|
"troubleshooting/error-index-row-size-exceeds-btree-version-4-maximum-for-index-LMmoeU",
|
|
"troubleshooting/error-invalid-byte-sequence-for-encoding-utf8-0x00-when-accessing-triggers-or-webhooks-e78cf8",
|
|
"troubleshooting/error-invalid-totp-code-entered-CukLCj",
|
|
"troubleshooting/error-no-pghbaconf-entry-for-host-xxxxxxxxxxx-user-postgres-database-postgres-ssl-off-GOt5Ja",
|
|
"troubleshooting/error-prepared-statement-xxx-already-exists-3laqeM",
|
|
"troubleshooting/error-target-organization-is-not-managed-by-vercel-marketplace-during-project-transfer-5262c3",
|
|
"troubleshooting/exhaust-disk-io",
|
|
"troubleshooting/exhaust-ram",
|
|
"troubleshooting/exhaust-swap",
|
|
"troubleshooting/failed-to-fetch-in-dashboard-and-other-areas----browser-extension-dyDTRU",
|
|
"troubleshooting/failed-to-restore-from-backup-all-subscriptions-and-replication-slots-must-be-dropped-before-a-backup-can-be-restored-L-rCvt",
|
|
"troubleshooting/failed-to-retrieve-tables",
|
|
"troubleshooting/failed-to-run-sql-query-connection-terminated-due-to-connection-timeout",
|
|
"troubleshooting/fetch-requests-to-api-endpoints-arent-showing-the-session-UbUwRs",
|
|
"troubleshooting/fixing-520-errors-in-the-database-rest-api-Ur5-B2",
|
|
"troubleshooting/forbidden-resource-error-from-the-cli-L6rm6l",
|
|
"troubleshooting/get-detailed-storage-metrics-with-the-aws-cli-587a7d",
|
|
"troubleshooting/google-auth-fails-for-some-users-XcFXEu",
|
|
"troubleshooting/grafana-not-displaying-data-sXJrMj",
|
|
"troubleshooting/high-cpu-and-slow-queries-with-error-must-be-a-superuser-to-terminate-superuser-process",
|
|
"troubleshooting/high-cpu-usage",
|
|
"troubleshooting/high-latency-with-supabase-client-z0pZzR",
|
|
"troubleshooting/how-can-i-revoke-execution-of-a-postgresql-function-2GYb0A",
|
|
"troubleshooting/how-do-i-check-gotrueapi-version-of-a-supabase-project-lQAnOR",
|
|
"troubleshooting/how-do-i-make-the-cookies-httponly-vwweFx",
|
|
"troubleshooting/how-do-i-reset-my-supabase-database-password-oTs5sB",
|
|
"troubleshooting/how-do-i-update-connection-pool-settings-in-my-dashboard-wAxTJ_",
|
|
"troubleshooting/how-do-you-troubleshoot-nextjs---supabase-auth-issues-riMCZV",
|
|
"troubleshooting/how-long-does-it-take-to-restore-a-database-from-a-point-in-time-backup-pitr-qO8gOG",
|
|
"troubleshooting/how-postgres-chooses-which-index-to-use-_JHrf4",
|
|
"troubleshooting/how-to-bypass-cooldown-period",
|
|
"troubleshooting/how-to-change-max-database-connections-_BQ8P5",
|
|
"troubleshooting/how-to-check-if-my-queries-are-being-blocked-by-other-queries-NSKtR1",
|
|
"troubleshooting/how-to-delete-a-role-in-postgres-8-AvxY",
|
|
"troubleshooting/how-to-delete-vercel-linked-projects-9d08aa",
|
|
"troubleshooting/how-to-interpret-and-explore-the-postgres-logs-OuCIOj",
|
|
"troubleshooting/how-to-migrate-from-supabase-auth-helpers-to-ssr-package-5NRunM",
|
|
"troubleshooting/how-to-view-database-metrics-uqf2z_",
|
|
"troubleshooting/http-api-issues",
|
|
"troubleshooting/http-status-codes",
|
|
"troubleshooting/i-am-not-receiving-password-reset-emails-for-supabase-dashboard--cO5yf",
|
|
"troubleshooting/identify-lovable-cloud-or-supabase-backend",
|
|
"troubleshooting/importing-stripe-or-other-modules-from-esmsh-on-deno-edge-functions-throws-an-error-TmbB5p",
|
|
"troubleshooting/increase-vector-lookup-speeds-by-applying-an-hsnw-index-ohLHUM",
|
|
"troubleshooting/inserting-into-sequenceserial-table-causes-duplicate-key-violates-unique-constraint-error-pi6DnC",
|
|
"troubleshooting/inspecting-edge-function-environment-variables-wg5qOQ",
|
|
"troubleshooting/insufficient-privilege-when-accessing-pgstatstatements-e5M_EQ",
|
|
"troubleshooting/interpreting-supabase-grafana-cpu-charts-9JSlkC",
|
|
"troubleshooting/interpreting-supabase-grafana-io-charts-MUynDR",
|
|
"troubleshooting/issues-serving-edge-functions-locally",
|
|
"troubleshooting/jwt-expired-error-in-supabase-dashboard-F06k3x",
|
|
"troubleshooting/keeping-free-projects-after-pro-upgrade-Kf9Xm2",
|
|
"troubleshooting/kong-stops-responding-under-heavy-load-locally",
|
|
"troubleshooting/lost-accessforgot-the-mfa-device-nAPT-7",
|
|
"troubleshooting/managing-or-disconnecting-github-oauth-connections-e3dc3b",
|
|
"troubleshooting/manually-created-databases-are-not-visible-in-the-supabase-dashboard-4415aa",
|
|
"troubleshooting/memory-and-swap-usage-explained-aPNgm0",
|
|
"troubleshooting/migrating-auth-users-between-projects",
|
|
"troubleshooting/monitor-supavisor-postgres-connections",
|
|
"troubleshooting/new-branch-doesnt-copy-database",
|
|
"troubleshooting/new-variable-is-null-in-a-trigger-function--l9AOZ",
|
|
"troubleshooting/nextjs-1314-stale-data-when-changing-rls-or-table-data-85b8oQ",
|
|
"troubleshooting/no-toast-messages-on-the-dashboard-BrvP8h",
|
|
"troubleshooting/not-receiving-auth-emails-from-the-supabase-project-OFSNzw",
|
|
"troubleshooting/oauth-sign-in-isnt-redirecting-on-the-server-side-ShGMtr",
|
|
"troubleshooting/otp-verification-failures-token-has-expired-or-otp_expired-errors-5ee4d0",
|
|
"troubleshooting/partitioning-an-existing-table-with-same-name-VEnbzK",
|
|
"troubleshooting/pausing-pro-projects-vNL-2a",
|
|
"troubleshooting/performing-administration-tasks-on-the-server-side-with-the-servicerole-secret-BYM4Fa",
|
|
"troubleshooting/pg_cron-launcher-crashes-with-duplicate-key-value-violates-unique-constraint-cc6472",
|
|
"troubleshooting/pgcron-debugging-guide-n1KTaz",
|
|
"troubleshooting/pgrst106-the-schema-must-be-one-of-the-following-error-when-querying-an-exposed-schema",
|
|
"troubleshooting/pkce-flow-errors-cannot-parse-response-or-zgotmplz-in-magic-link-emails-433665",
|
|
"troubleshooting/postgrest-error-400-column-example_tableexample_column-does-not-exist-when-using-or-operators-46ff23",
|
|
"troubleshooting/postgrest-error-pgrst002-could-not-query-the-database-for-the-schema-cache-c396e9",
|
|
"troubleshooting/postgrest-not-recognizing-new-columns-or-functions-bd75f5",
|
|
"troubleshooting/postgrest-not-recognizing-objects-in-schema",
|
|
"troubleshooting/powerbi-service-error-the-remote-certificate-is-invalid-according-to-the-validation-procedure-640a98",
|
|
"troubleshooting/prisma-error-management-Cm5P_o",
|
|
"troubleshooting/project-status-reports-unhealthy-services",
|
|
"troubleshooting/rclone-error-s3-protocol-error-received-listing-v1-with-istruncated-set-no-nextmarker-and-no-contents-e64d34",
|
|
"troubleshooting/realtime-concurrent-peak-connections-quota-jdDqcp",
|
|
"troubleshooting/realtime-connections-timed_out-status",
|
|
"troubleshooting/realtime-debugging-with-logger",
|
|
"troubleshooting/realtime-handling-silent-disconnections-in-backgrounded-applications-592794",
|
|
"troubleshooting/realtime-heartbeat-messages",
|
|
"troubleshooting/realtime-project-suspended-for-exceeding-quotas",
|
|
"troubleshooting/realtime-too-many-channels-error",
|
|
"troubleshooting/realtime-warn-sending-broadcast-message",
|
|
"troubleshooting/refresh-postgrest-schema",
|
|
"troubleshooting/relation-objects-does-not-exist-error-during-storage-uploads-8f21f0",
|
|
"troubleshooting/resolving-42p01-relation-does-not-exist-error-W4_9-V",
|
|
"troubleshooting/resolving-500-status-authentication-errors-7bU5U8",
|
|
"troubleshooting/resolving-cannot-execute-update-in-a-read-only-transaction-on-transaction-pooler-connections-ef582c",
|
|
"troubleshooting/resolving-database-hostname-and-managing-your-ip-address-pVlwE0",
|
|
"troubleshooting/restore-project-after-90-days-pause",
|
|
"troubleshooting/rls-performance-and-best-practices-Z5Jjwv",
|
|
"troubleshooting/rls-simplified-BJTcS8",
|
|
"troubleshooting/rotating-anon-service-and-jwt-secrets-1Jq6yd",
|
|
"troubleshooting/running-explain-analyze-on-functions",
|
|
"troubleshooting/scan-error-on-column-confirmation_token-converting-null-to-string-is-unsupported-during-auth-login-a0c686",
|
|
"troubleshooting/schema-pg_pgrst_no_exposed_schemas-does-not-exist",
|
|
"troubleshooting/security-of-anonymous-sign-ins-iOrGCL",
|
|
"troubleshooting/seeing-no-pghbaconf-entry-for-host-errors-in-postgres-and-they-come-from-an-ip-address-that-i-dont-recognize-4gds9f",
|
|
"troubleshooting/should-i-set-a-shorter-max-age-parameter-on-the-cookies-8sbF4V",
|
|
"troubleshooting/slow-execution-of-alter-table-on-large-table-when-changing-column-type-qmZRpZ",
|
|
"troubleshooting/soft-deletes-with-supabase-js",
|
|
"troubleshooting/sso-error-you-do-not-have-permissions-to-join-this-organization-or-prompts-to-create-new-organization",
|
|
"troubleshooting/steps-to-improve-query-performance-with-indexes-q8PoC9",
|
|
"troubleshooting/storage-error-403-forbidden-new-row-violates-row-level-security-policy-on-upload-a94384",
|
|
"troubleshooting/supabase--your-network-ipv4-and-ipv6-compatibility-cHe3BP",
|
|
"troubleshooting/supabase-cli-failed-sasl-auth-or-invalid-scram-server-final-message",
|
|
"troubleshooting/supabase-dashboard-not-loading-project-not-loading-on-dashboard-LfMq9F",
|
|
"troubleshooting/supabase-grafana-memory-charts",
|
|
"troubleshooting/supabase-project-provisioned-via-bolt-not-visible-in-dashboard-7188fc",
|
|
"troubleshooting/supabase-storage-inefficient-folder-operations-and-hierarchical-rls-challenges-b05a4d",
|
|
"troubleshooting/supavisor-and-connection-terminology-explained-9pr_ZO",
|
|
"troubleshooting/supavisor-error-circuit-breaker-open-after-password-rotation-0fdb72",
|
|
"troubleshooting/supavisor-faq-YyP5tI",
|
|
"troubleshooting/too-many-connections-for-database-postgres",
|
|
"troubleshooting/tracking-postgres-role-activity-to-specific-dashboard-users-8d3715",
|
|
"troubleshooting/transfer-edge-function-from-one-project-to-another",
|
|
"troubleshooting/transferring-from-cloud-to-self-host-in-supabase-2oWNvW",
|
|
"troubleshooting/troubleshooting-connect_timeout-or-hanging-queries-in-vercel-serverless-functions-775f92",
|
|
"troubleshooting/unable-to-call-edge-function",
|
|
"troubleshooting/unable-to-deploy-edge-function",
|
|
"troubleshooting/understanding-postgresql-explain-output-Un9dqX",
|
|
"troubleshooting/understanding-postgresql-logging-levels-and-how-they-impact-your-project-KXiJRm",
|
|
"troubleshooting/understanding-the-usage-summary-on-the-dashboard-D7Gnle",
|
|
"troubleshooting/unexpected-behavior-with-authupdateuser-phone-phone-linked-to-incorrect-user-id-45368f",
|
|
"troubleshooting/unused-external-import-warning-vite-rollup",
|
|
"troubleshooting/upload-file-size-restrictions-Y4wQLT",
|
|
"troubleshooting/using-google-smtp-with-supabase-custom-smtp-ZZzU4Y",
|
|
"troubleshooting/using-sqlalchemy-with-supabase-FUqebT",
|
|
"troubleshooting/vercel-integration-environment-variables-not-syncing-for-persistent-git-branches-b9191e",
|
|
"troubleshooting/webhook-debugging-guide-M8sk47",
|
|
"troubleshooting/why-am-i-being-redirected-to-the-wrong-url-when-using-auth-redirectto-option-_vqIeO",
|
|
"troubleshooting/why-are-there-gaps-in-my-postgres-id-sequence-Frifus",
|
|
"troubleshooting/why-cant-i-uploadlistetc-my-public-bucket-Z6CmGt",
|
|
"troubleshooting/why-do-i-see-auth--api-requests-in-the-dashboard-my-app-has-no-users-CyadiO",
|
|
"troubleshooting/why-is-my-camelcase-name-not-working-in-postgres-functions-or-rls-policies-EJMzVd",
|
|
"troubleshooting/why-is-my-select-returning-an-empty-data-array-and-i-have-data-in-the-table-xvOPgx",
|
|
"troubleshooting/why-is-my-service-role-key-client-getting-rls-errors-or-not-returning-data-7_1K9z",
|
|
"troubleshooting/why-is-my-supabase-api-call-not-returning-PGzXw0",
|
|
"troubleshooting/why-supabase-edge-functions-cannot-provide-static-egress-ips-for-whitelisting-3d78b0",
|
|
"troubleshooting/will-backups-be-accessible-from-the-dashboard-immediately-after-upgrading-to-a-paid-plan-hXY4rs"
|
|
]
|