mirror of
https://github.com/supabase/supabase.git
synced 2026-10-05 09:25:06 +03:00
<!-- CURSOR_AGENT_PR_BODY_BEGIN --> ## Stack Draft stack extracted from `docs/monitoring`. Merge bottom-up. The troubleshooting *catalog* rewrite (`content/troubleshooting` and the Diagnosing UI) stays out of scope. 1. #49503 move inspect and advisors 2. #49501 split Studio logs from ClickHouse queries 3. #49500 treat reports as signal dashboards 4. #49502 add Observe the data hub 5. #49506 add agent setup components 6. #49504 add hire-an-agent templates 7. **#49505** restructure observability nav, overview, Detecting, and flatten Observe the data ← **this PR** ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Docs update. Top layer in the observability stack. ## What is the current behavior? The section is still titled Monitoring and Debugging, with a Debugging / Monitoring split that does not match the new pages. The debugging guide is still the master layer-isolation + symptom table. Observe the data is split into “what data” vs “where to observe it,” which duplicates the source pages. ## What is the new behavior? - Section title is Observability - Overview groups Observe the data, Detect and resolve, Hire an agent, and Export - **Observe the data is flattened by source.** Logs, Metrics API, Database, Advisors, and Reports each list where to read that source. There is no separate MCP/API/CLI/Studio nav group. - **Observe vs Detecting:** Observe is the catalog (what exists, how to access it). Detecting is how to *use* those sources to pick up a Health / Security / Performance / Usage signal. Named errors skip to Diagnosing. - Studio Logs sits under Logs. Reports sits beside the other sources. - Troubleshooting stays in the global menu and also appears as Diagnosing under Detect and resolve ## Additional context This is the last PR in the stack. Together the seven PRs reconstruct the `docs/monitoring` observability IA and guide content, without shipping the troubleshooting catalog overhaul. <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-a3cb5ece-925b-4046-b58a-5d69e9a9d794?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-a3cb5ece-925b-4046-b58a-5d69e9a9d794&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Saxon Fletcher <SaxonF@users.noreply.github.com> Co-authored-by: Nik Richers <nik@validmind.ai>
260 lines
7.3 KiB
JavaScript
260 lines
7.3 KiB
JavaScript
// @ts-check
|
|
import configureBundleAnalyzer from '@next/bundle-analyzer'
|
|
import nextMdx from '@next/mdx'
|
|
import { withSentryConfig } from '@sentry/nextjs'
|
|
import withYaml from 'next-plugin-yaml'
|
|
import rehypeSlug from 'rehype-slug'
|
|
import remarkGfm from 'remark-gfm'
|
|
import { parse as parseToml } from 'smol-toml'
|
|
|
|
import remotePatterns from './lib/remotePatterns.js'
|
|
|
|
const withBundleAnalyzer = configureBundleAnalyzer({
|
|
enabled: process.env.ANALYZE === 'true',
|
|
})
|
|
|
|
const withMDX = nextMdx({
|
|
extension: /\.mdx?$/,
|
|
options: {
|
|
remarkPlugins: [remarkGfm],
|
|
rehypePlugins: [rehypeSlug],
|
|
providerImportSource: '@mdx-js/react',
|
|
},
|
|
})
|
|
|
|
/** @type {import('next').NextConfig} nextConfig */
|
|
const nextConfig = {
|
|
assetPrefix: getAssetPrefix(),
|
|
// Append the default value with md extensions
|
|
pageExtensions: ['ts', 'tsx', 'js', 'jsx', 'md', 'mdx'],
|
|
// reactStrictMode: true,
|
|
// swcMinify: true,
|
|
basePath: process.env.NEXT_PUBLIC_BASE_PATH || '/docs',
|
|
images: {
|
|
dangerouslyAllowSVG: false,
|
|
// @ts-ignore
|
|
remotePatterns,
|
|
},
|
|
webpack: (config) => {
|
|
config.module.rules.push({
|
|
test: /\.include$/,
|
|
type: 'asset/source',
|
|
})
|
|
config.module.rules.push({
|
|
test: /\.toml$/,
|
|
type: 'json',
|
|
parser: {
|
|
parse: parseToml,
|
|
},
|
|
})
|
|
return config
|
|
},
|
|
transpilePackages: [
|
|
'ui',
|
|
'ui-patterns',
|
|
'common',
|
|
'dayjs',
|
|
'shared-data',
|
|
'api-types',
|
|
'icons',
|
|
'next-mdx-remote',
|
|
],
|
|
outputFileTracingIncludes: {
|
|
'/api/crawlers': ['./features/docs/generated/**/*', './docs/ref/**/*'],
|
|
'/api/guides-md/**/*': ['./public/markdown/guides/**/*'],
|
|
'/guides/**/*': ['./content/guides/**/*', './content/troubleshooting/**/*', './examples/**/*'],
|
|
'/reference/**/*': ['./features/docs/generated/**/*', './docs/ref/**/*'],
|
|
},
|
|
serverExternalPackages: ['libpg-query', 'twoslash'],
|
|
async headers() {
|
|
return [
|
|
{
|
|
source: '/:path*',
|
|
headers: [
|
|
{
|
|
key: 'Strict-Transport-Security',
|
|
value: process.env.VERCEL === '1' ? 'max-age=31536000; includeSubDomains; preload' : '',
|
|
},
|
|
{
|
|
key: 'X-Robots-Tag',
|
|
value: 'all',
|
|
},
|
|
{
|
|
key: 'X-Frame-Options',
|
|
value: 'DENY',
|
|
},
|
|
],
|
|
has: [
|
|
{
|
|
type: 'host',
|
|
value: 'supabase.com',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
source: '/:path*',
|
|
headers: [
|
|
{
|
|
key: 'Strict-Transport-Security',
|
|
value: process.env.VERCEL === '1' ? 'max-age=31536000; includeSubDomains; preload' : '',
|
|
},
|
|
{
|
|
key: 'X-Robots-Tag',
|
|
value: 'noindex',
|
|
},
|
|
{
|
|
key: 'X-Frame-Options',
|
|
value: 'DENY',
|
|
},
|
|
],
|
|
has: [
|
|
{
|
|
type: 'host',
|
|
value: '(?:.+\\.vercel\\.app)',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
source: '/favicon/:slug*',
|
|
headers: [{ key: 'cache-control', value: 'public, max-age=86400' }],
|
|
},
|
|
]
|
|
},
|
|
|
|
/**
|
|
* Doc rewrites and redirects are
|
|
* handled by the `www` nextjs config:
|
|
*
|
|
* ./apps/www/lib/redirects.js
|
|
*
|
|
* Only add dev/preview specific redirects
|
|
* in this config.
|
|
*/
|
|
async redirects() {
|
|
return [
|
|
// Redirect root to docs base path in dev/preview envs
|
|
{
|
|
source: '/',
|
|
destination: '/docs',
|
|
basePath: false,
|
|
permanent: false,
|
|
},
|
|
|
|
// Redirect dashboard links in dev/preview envs
|
|
{
|
|
source: '/dashboard/:path*',
|
|
destination: 'https://supabase.com/dashboard/:path*',
|
|
basePath: false,
|
|
permanent: false,
|
|
},
|
|
|
|
// Redirect blog links in dev/preview envs
|
|
{
|
|
source: '/blog/:path*',
|
|
destination: 'https://supabase.com/blog/:path*',
|
|
basePath: false,
|
|
permanent: false,
|
|
},
|
|
|
|
// Redirect old managed pipeline slugs in dev/preview envs
|
|
{
|
|
source: '/guides/database/replication/external-replication-setup',
|
|
destination: '/guides/database/replication/pipelines',
|
|
permanent: true,
|
|
},
|
|
{
|
|
source: '/guides/database/replication/external-replication-monitoring',
|
|
destination: '/guides/database/replication/pipelines-monitoring',
|
|
permanent: true,
|
|
},
|
|
{
|
|
source: '/guides/database/replication/external-replication-faq',
|
|
destination: '/guides/database/replication/pipelines-faq',
|
|
permanent: true,
|
|
},
|
|
{
|
|
source: '/guides/database/replication/replication-setup',
|
|
destination: '/guides/database/replication/pipelines',
|
|
permanent: true,
|
|
},
|
|
{
|
|
source: '/guides/database/replication/replication-monitoring',
|
|
destination: '/guides/database/replication/pipelines-monitoring',
|
|
permanent: true,
|
|
},
|
|
{
|
|
source: '/guides/database/replication/replication-faq',
|
|
destination: '/guides/database/replication/pipelines-faq',
|
|
permanent: true,
|
|
},
|
|
{
|
|
source: '/guides/database/inspect',
|
|
destination: '/guides/monitoring-and-debugging/inspect',
|
|
permanent: true,
|
|
},
|
|
{
|
|
source: '/guides/database/database-advisors',
|
|
destination: '/guides/observability/advisors',
|
|
permanent: true,
|
|
},
|
|
]
|
|
},
|
|
typescript: {
|
|
// On previews, typechecking is run via GitHub Action only for efficiency
|
|
// On production, we turn it on to prevent errors from conflicting PRs getting into
|
|
// prod
|
|
ignoreBuildErrors: process.env.NEXT_PUBLIC_VERCEL_ENV === 'production' ? false : true,
|
|
},
|
|
eslint: {
|
|
// We are already running linting via GH action, this will skip linting during production build on Vercel
|
|
ignoreDuringBuilds: true,
|
|
},
|
|
}
|
|
|
|
const configExport = () => {
|
|
const plugins = [withMDX, withYaml, withBundleAnalyzer]
|
|
// @ts-ignore
|
|
return plugins.reduce((acc, next) => next(acc), nextConfig)
|
|
}
|
|
|
|
export default withSentryConfig(configExport, {
|
|
// For all available options, see:
|
|
// https://www.npmjs.com/package/@sentry/webpack-plugin#options
|
|
|
|
org: 'supabase',
|
|
project: 'docs',
|
|
|
|
// Only print logs for uploading source maps in CI
|
|
silent: !process.env.CI,
|
|
|
|
// For all available options, see:
|
|
// https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/
|
|
|
|
// Upload a larger set of source maps for prettier stack traces (increases build time)
|
|
widenClientFileUpload: true,
|
|
|
|
// Uncomment to route browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers.
|
|
// This can increase your server load as well as your hosting bill.
|
|
// Note: Check that the configured route will not match with your Next.js middleware, otherwise reporting of client-
|
|
// side errors will fail.
|
|
// tunnelRoute: "/monitoring",
|
|
|
|
// Automatically tree-shake Sentry logger statements to reduce bundle size
|
|
disableLogger: true,
|
|
})
|
|
|
|
function getAssetPrefix() {
|
|
// If not force enabled, but not production env, disable CDN
|
|
if (process.env.FORCE_ASSET_CDN !== '1' && process.env.VERCEL_ENV !== 'production') {
|
|
return undefined
|
|
}
|
|
|
|
// Force disable CDN
|
|
if (process.env.FORCE_ASSET_CDN === '-1') {
|
|
return undefined
|
|
}
|
|
|
|
// @ts-ignore
|
|
return `https://frontend-assets.supabase.com/${process.env.SITE_NAME}/${process.env.VERCEL_GIT_COMMIT_SHA.substring(0, 12)}`
|
|
}
|