Commit Graph
606 Commits
Author SHA1 Message Date
Danny White fdf33e72c4 fix(studio): clean up onboarding returnTo paths (#49283)
## What kind of change does this PR introduce?

Bug fix. Follow-up to #41041 and DEPR-318.

## What is the current behavior?

Marketing "Start your project" links go to `/dashboard`, which redirects
unauthenticated users to `/org` and sets `returnTo=/org`. That value
survives when they switch from sign-in to sign-up, so email verification
still lands on the org list instead of org creation.

## What is the new behavior?

- Sign-in's **Sign up** link rewrites `returnTo=/org` (and
`/organizations`) to `/new`
- Docs mobile menu, www homepage/product CTAs, and solution page CTAs
link to `/dashboard/sign-up` for guests
- Signed-in visitors get the dashboard URL instead, so they never hit
the sign-up form
- Shared `DASHBOARD_SIGN_UP_URL` / `getDashboardCtaHref` helpers for www

Stacked on #41041.

## To test

Stacked on #41041. The studio preview below includes both PRs. www and
docs have their own previews.

### Studio: sign-in → sign-up rewrite

Using the [studio-staging
preview](https://studio-staging-git-dnywh-fixonboarding-return-to-supabase.vercel.app/)
from Vercel checks:

1. Open the preview while logged out. It should land on
`/dashboard/sign-in?returnTo=%2Forg`
2. Click **Sign up**. Expect the URL to include `returnTo=%2Fnew`

### Optional: www CTAs

Using the [www
preview](https://zone-www-dot-com-git-dnywh-fixonboarding-return-to-supabase.vercel.app/):

3. Logged out: homepage, product, or solutions **Start your project**
should go to `/dashboard/sign-up`
4. Logged in: the same CTAs should go to `/dashboard` (not sign-up)
(thought this will be hard if not impossible to test on staging)

### Optional: docs CTAs

Using the [docs
preview](https://docs-git-dnywh-fixonboarding-return-to-supabase.vercel.app/):

5. On mobile nav while logged out, click **Start your project**. Expect
`/dashboard/sign-up`

### Compare on supabase.green

Optional. Just to show what happens currently on `master`:

6. Open **supabase.green** while logged out, then click **Sign up** from
`/dashboard/sign-in?returnTo=%2Forg`. `returnTo` should stay as `/org`

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Start-project and sign-up links now direct visitors to registration
while signed-in users continue to reach the dashboard.
* Homepage, product, solution, and mobile navigation CTAs now provide
consistent authentication-aware destinations.
* Sign-up links preserve return destinations and existing navigation
parameters.

* **Bug Fixes**
* Corrected mobile navigation and marketing CTA links that previously
sent visitors to the dashboard root instead of the appropriate sign-up
flow.


<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-24 17:32:56 +10:00
Pamela Chia 21a27eeb4f feat(www): canonicalize homepage markdown at /index.md (#49384)
The www root markdown lived at an accidental URL: `/.md` served the
homepage markdown only because middleware strips the `.md` suffix and
the empty slug fell through to the homepage allowlist entry, while the
canonical-looking `/index.md` 404'd. The served markdown also opened
with stale legacy positioning copy that no longer matches the site. I
renamed the homepage content slug to `index` end-to-end so `/index.md`
is the one canonical markdown URL.

**Changed:**
- **`/index.md` serves the homepage markdown (200 `text/markdown`)**:
`content/md/homepage.md` renamed to `index.md`; the middleware bare-root
slug mapping, the generator's sort special-case, and the homepage
alternate tag follow, so the tag now advertises `/index.md`.
- **Legacy aliases 308 to the canonical URL**: `/.md`, `/homepage.md`,
and bare `/index` redirect via `lib/redirects.js`; `/llms/homepage.txt`
retargeted straight to `/index.md` to avoid a redirect chain. New
`next.config.test.ts` assertions pin all four.
- **Positioning refreshed**: the markdown now opens with "Supabase is
the Postgres development platform" (matching the site title), replacing
the outdated tagline.
- **Generator safety**: the redirect-exclusion filter in
`generateMdContent.mjs` now exempts the `index` slug (its HTML page is
`/`, not `/index`, so a `/index` redirect never refers to it), and the
build fails if `content/md/index.md` ever goes missing while middleware
still maps `/` to the `index` slug.
- **CI actually runs the new assertions**: I widened the `www-tests.yml`
paths filter to include `apps/www/lib/**/*.js`,
`apps/www/content/md/**`, and `apps/www/scripts/**/*.mjs`. It previously
only matched `.ts*` and the next.config files, so a PR touching only
`lib/redirects.js`, the markdown content, or the generator would skip
the tests that pin these redirects.

**Note:** the existing homepage alternate tag still exists, re-pointed
to the canonical URL. Whether the homepage should advertise a markdown
sibling at all is a separate decision; leaving it aimed at a 308 would
break tag consumers. Positioning wording is editorial, happy to tweak.

## To test
Tested on Vercel preview:
- [x] `curl -si <preview>/index.md`: expect 200 `content-type:
text/markdown`, body opens with the Postgres development platform
positioning and no longer contains the old tagline
- [x] `curl -sI <preview>/.md`: expect 308 with `location: /index.md`
- [x] `curl -sI <preview>/homepage.md` and `curl -sI
<preview>/llms/homepage.txt`: expect 308 with `location: /index.md`
- [x] `curl -sI <preview>/index`: expect 308 with `location: /`
- [x] `curl -s -H "Accept: text/markdown" -o /dev/null -w "%{http_code}
%{content_type}" <preview>/`: expect `200 text/markdown` (bare-URL
negotiation unchanged)
- [x] `curl -s <preview>/ | grep -o 'type="text/markdown"
href="[^"]*"'`: expect href ending `/index.md`

## Linear
- fixes GROWTH-1117



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Added support for `/index.md` as the canonical Markdown representation
of the homepage.
- Added permanent redirects for legacy homepage Markdown and text URLs.
  - Added `/index` to `/` redirect handling.

- **Bug Fixes**
- Updated homepage metadata, alternate links, Markdown negotiation, and
content generation to consistently use the new canonical path.
  - Improved homepage content description.

- **Tests**
- Expanded coverage for homepage Markdown routes, redirects, and URL
matching.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-24 15:19:56 +08:00
Miranda LimonczenkoandClaude Opus 5 70715790b8 chore(www): unpublish and redirect the legacy launch week pages (#49335)
Closes
[FE-4226](https://linear.app/supabase/issue/FE-4226/unpublish-and-redirect-legacy-launch-week-pages)

## 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?

Content removal.

## What is the current behavior?

`/launch-week/x`, `/launch-week/12`, `/launch-week/13`, and
`/launch-week/14` are still published. Each one carries its own page
component and a ticket flow for a launch week that ended. The
accessibility scan flags them, and they hold no SEO value.

This follows #49281, which took down `/launch-week/6` on the same
pattern.

## What is the new behavior?

- Delete the `/launch-week/x`, `/12`, `/13`, and `/14` page routes.
- Redirect each path to its recap blog post, matching the destinations
agreed in `#team-marketing`.
- Point the Launch Week 12, 13, and 14 blog summary components at
`/launch-week` instead of their deleted pages. `LWXSummary` already does
this.
- Drop the `disableStickyNav` and `showLaunchWeekNavMode` checks in
`Nav` that only matched the deleted routes.
- Drop the Launch Week X branches in `useDarkLaunchWeeks` and `_app`.

| Source | Destination |
| --- | --- |
| `/launch-week/x` | `/blog/launch-week-x-best-launches` |
| `/launch-week/12` | `/blog/launch-week-12-top-10` |
| `/launch-week/13` | `/blog/launch-week-13-top-10` |
| `/launch-week/14` | `/blog/launch-week-14-top-10` |

## Additional context

`/launch-week/7` and `/launch-week/8` stay published. Neither has a
recap post to redirect to, so they need a destination decision before
they come down.

The `components/LaunchWeek/{X,12,13,14}` trees stay. `BlogPostRenderer`
imports the summary component from each one, and those summaries read
the same `Releases/data` modules the deleted pages used. The stage and
nav components under those directories are now unreachable, so they need
their own dead-code audit.

Assets under `public/images/launchweek/` are untouched, same as #49281.

## Manual testing

Preview:
https://zone-www-dot-com-git-www-redirect-legacy-launch-weeks-supabase.vercel.app

1. Open
[/launch-week/x](https://zone-www-dot-com-git-www-redirect-legacy-launch-weeks-supabase.vercel.app/launch-week/x).
It returns a 308 and lands on `/blog/launch-week-x-best-launches`.
2. Open
[/launch-week/12](https://zone-www-dot-com-git-www-redirect-legacy-launch-weeks-supabase.vercel.app/launch-week/12).
It returns a 308 and lands on `/blog/launch-week-12-top-10`.
3. Open
[/launch-week/13](https://zone-www-dot-com-git-www-redirect-legacy-launch-weeks-supabase.vercel.app/launch-week/13).
It returns a 308 and lands on `/blog/launch-week-13-top-10`.
4. Open
[/launch-week/14](https://zone-www-dot-com-git-www-redirect-legacy-launch-weeks-supabase.vercel.app/launch-week/14).
It returns a 308 and lands on `/blog/launch-week-14-top-10`.
5. On each of those blog posts, the launch week summary card header
links to `/launch-week`.
6. Open
[/launch-week](https://zone-www-dot-com-git-www-redirect-legacy-launch-weeks-supabase.vercel.app/launch-week),
[/launch-week/7](https://zone-www-dot-com-git-www-redirect-legacy-launch-weeks-supabase.vercel.app/launch-week/7),
and
[/launch-week/8](https://zone-www-dot-com-git-www-redirect-legacy-launch-weeks-supabase.vercel.app/launch-week/8).
All still load.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 15:33:09 -07:00
Miranda LimonczenkoandClaude Opus 5 6edef9f067 chore(www): unpublish the Launch Week 6 page (#49281)
Closes
[FE-4100](https://linear.app/supabase/issue/FE-4100/www-remove-httpssupabasecomlaunch-week6)

## 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?

Content removal.

## What is the current behavior?

`/launch-week/6` is still published. Launch Week 6 ran in December 2022.
The page carries its own 1,085-line component, two CSS modules, and a
Supabase client that reads the `lw6_creators` and `lw6_tickets` tables.

## What is the new behavior?

- Delete the `/launch-week/6` page, its CSS modules, its day data, and
its types.
- Redirect `/launch-week/6` to `/blog/launch-week-6-wrap-up`, which
holds the same content.
- Drop the Launch Week 6 card from the archive section on
`/launch-week/8`, leaving Launch Week 7.

## Additional context

Scope is Launch Week 6 only. Whether the other launch week pages come
down is still open with marketing.

Assets under `public/images/launchweek/` are untouched. Several are
shared across launch weeks, so they need their own audit.

## Manual testing

1. Open
[https://zone-www-dot-com-git-www-remove-launchweek-supabase.vercel.app/launch-week/6](https://zone-www-dot-com-git-www-remove-launchweek-supabase.vercel.app/launch-week/6)
on the deploy preview. It returns a 308 and lands on
`/blog/launch-week-6-wrap-up`.
2. Open [the Launch Week 7
page](https://zone-www-dot-com-git-www-remove-launchweek-supabase.vercel.app/launch-week/7).
It still loads.
3. Open [the Launch Week 8
page](https://zone-www-dot-com-git-www-remove-launchweek-supabase.vercel.app/launch-week/8)
and scroll to "Previous Launch Weeks". Only the Launch Week 7 card
shows.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 11:42:30 -07:00
Prashant Sridharan 344dc26a5e Fixed the event classifier for the events page (#49095)
## 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?

Modified the events page so that it reads the correct category from the
Notion database and displays if it's a hackathon, meetup, etc.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Events now display categories based on their Notion type and category
information.
  * Hackathon events can be identified through category data.
  * Duplicate categories are automatically removed.

* **Bug Fixes**
* Events with unrecognized types now default to the conference category
for consistent display.


<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-14 17:43:17 +08:00
Danny White 2e7a8a3362 chore(www): rename customer logo folders to on-dark and on-light (#48962)
## What kind of change does this PR introduce?

Chore: rename customer logo folders and document the theme contract. No
intended visual change, aside from Phoenix Energy whose two marks were
in the wrong folders.

## What is the current behavior?

Customer logos live at:

- `/images/customers/logos/{slug}.png` (`logo`, light mode)
- `/images/customers/logos/light/{slug}.png` (`logo_inverse`, dark mode)

`light/` actually means “use me on a dark background”.

## What is the new behavior?

Same assets, clearer paths:

- `/images/customers/logos/on-light/{slug}.png` → dark/black mark →
`logo` → light mode
- `/images/customers/logos/on-dark/{slug}.png` → light/white mark →
`logo_inverse` → dark mode

Icon chips stay at `/images/customers/logos/{slug}-icon.svg`. Old
`/images/customers/logos/light/*` URLs redirect to `on-dark`. www README
now has the contract.

# To test

Use the [www
preview](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app).
Toggle light/dark from the site header on each page. Logos should stay
readable (no white-on-white or black-on-black).

1. [Customers
grid](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/customers)
— main `logo` / `logo_inverse` surface. Spot-check Juniver, Phoenix
Energy, and one other card.
2. [Phoenix Energy
story](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/customers/phoenix-energy)
— story header uses `logo` only (on-light, plus a dark-mode brightness
filter). We swapped this pair.
3.
[Homepage](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/)
— “How industry leaders…” section. Icon chips only (`*-icon.svg`); the
wordmark `logo` field is unused here.
4. [Solutions /
Agents](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/solutions/agents)
— Chatbase quote near the top shows both theme variants. Same pattern on
[/healthcare](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/solutions/healthcare),
[/finserv](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/solutions/finserv),
and
[/b2b-saas](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/solutions/b2b-saas).
5. [Contact
sales](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/contact/sales)
— Good Tape / Xendit / Chatbase wordmarks (`on-light`). Same logos on
the demo form at
[/solutions/enterprise](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/solutions/enterprise).
6.
[Enterprise](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/solutions/enterprise)
— Mozilla / Epsilon3 / Pebblely icons in the use-cases section
(`on-dark`).
7.
[Vector](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/modules/vector)
— customer quotes. This is the only page that builds `on-light` /
`on-dark` paths at runtime from the customer slug.
8. [Mobbin
event](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/events/migrating-from-firebase-mobbin)
— company logo uses event `logo` / `logo_light` (dark vs light).
Optional second:
[/events/scale-to-millions-goodtape-auth](https://zone-www-dot-com-git-dnywh-chorecustomer-logo-o-0d7bc1-supabase.vercel.app/events/scale-to-millions-goodtape-auth).

Quick extra: hover **Product** in the site nav. The customer story
thumbnail uses `imgUrl` (`on-light`).

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Documentation
- Clarified customer logo requirements, including separate light and
dark asset locations, monochrome formats, and dark PNG assets for image
generation.

## Updates
- Standardized customer logos across stories, events, sales pages,
solution pages, testimonials, and generated images.
- Improved logo rendering across light and dark themes with dedicated
variants.
- Added permanent redirects for legacy logo URLs while preserving
filename suffixes.

## Tests
- Added coverage verifying legacy logo redirects resolve correctly,
including supported exceptions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-12 03:49:21 +00:00
Saxon Fletcher cb35e1f98e chore(library): update routes, redirects, and naming (#48668)
Our UI Library registry is expanding to include blocks that go beyond UI
and in some cases focus purely on back-end. This PR is a precursor to
adding more back-end related blocks. This PR includes the `ui-library ->
library` rename plus redirects and small UI copy updates. Since this is
a rename we'll need to update Vercel configuration.

## Vercel rollout

Keep the Library project Root Directory as `apps/ui-library`

1. In the **Library** Vercel project, set:

   `NEXT_PUBLIC_BASE_PATH=/library`

Apply it to Preview and Production, then redeploy the Library project.

2. In the **www** Vercel project, add:

`NEXT_PUBLIC_LIBRARY_URL=<current value of NEXT_PUBLIC_UI_LIBRARY_URL>`

Apply it to Preview and Production. Keep `NEXT_PUBLIC_UI_LIBRARY_URL`
during the migration, then redeploy the www project.

3. Deploy in this order:

   1. Library project
   2. www project

4. Validate:

   - `/library`
   - `/library/docs/nextjs/password-based-auth`
   - `/ui` redirects to `/library`
- `/ui/docs/nextjs/password-based-auth` redirects to
`/library/docs/nextjs/password-based-auth`
- `/ui/docs/ai-editors-rules/*` still uses its existing Docs redirects

No Vercel dashboard redirect rules are needed. Environment-variable
changes require a new deployment.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Supabase UI Library has been renamed to **Supabase Library** across
navigation, pages, documentation, and resource links.
* The Library is now available at `/library`, with updated descriptions
covering components, blocks, and developer tools.
* **Bug Fixes**
* Added permanent redirects from legacy `/ui` URLs to corresponding
`/library` paths.
* Updated links throughout the site and documentation to prevent broken
navigation and references.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-11 13:37:32 +10:00
claude[bot]andClaude 86854671e9 feat(www): add Open Authorization Integration Addendum (#48804)
<!-- ccr-slack-attribution -->
_Requested by **Nicole Kramer** · [Slack
thread](https://supabase.slack.com/archives/C0161K73J1J/p1786027145751449)_

## 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?

Feature — a new legal page on the marketing site (`apps/www`).

## What is the current behavior?

**Before:** the Program Addenda page at
`/legal/partner-resources/program-addenda` lists exactly one addendum,
the Integration Partner Addendum. There is no published Open
Authorization (OAuth) addendum anywhere on the site.

## What is the new behavior?

**After:** the Program Addenda page also lists the **Open Authorization
Integration Addendum**, linking to a new page at
`/legal/partner-resources/program-addenda/oauth-partner-addendum`.
Formatting, breadcrumbs, version selector, and listing badge all match
the existing Integration Partner Addendum.

**How:** three files.

-
`apps/www/data/legal/partner-resources/oauth-partner-addendum/20260806-v1.mdx`
— the addendum text, formatted to match
`integration-partner-addendum/20260615-v1.1.mdx` (escaped section-number
periods, `####` run-in headings for the lettered subsections, italic
`_Label_` run-in labels for the enumerated data-protection clauses,
explicit `[url](url)` links).
-
`apps/www/pages/legal/partner-resources/program-addenda/oauth-partner-addendum.tsx`
— the page, mirroring `integration-partner-addendum.tsx` with a
single-version `versions` array.
- `apps/www/lib/addenda.ts` — adds a small `TITLE_OVERRIDES` map. The
listing derives titles by capitalizing slug words, which turns
`oauth-partner-addendum` into "Oauth Partner Addendum"; the override
makes the listing link read the same as the page's `h1`.

No other wiring was needed: the addenda listing is generated from the
directory, so there is no hub entry, redirect, rewrite, sitemap entry,
or `noindex` rule to add.

## Additional context

Two things for the requester to confirm:

- **The effective date is an assumption.** The addendum document itself
contains no date. The listing and version label derive the effective
date from the `YYYYMMDD` filename prefix, so this file is dated **August
6, 2026**, taken from the source document's own filename (`2026.08.06 -
Supabase-OAuthAddendum-ONLINE.docx`). To change it, rename the file — no
code change required.
- **The legal text is a verbatim transcription.** Source wording,
capitalization, and punctuation are preserved exactly as drafted,
including anything that reads like a typo. Only markup was added; the
plain text was diffed against the transcription and is
character-identical. Please review the wording itself rather than
assuming it was copy-edited.

One wording choice that was not in the source document: the page
subheader, "An addendum to the Master Partner Program Agreement
governing OAuth integrations." It mirrors the one-line subheader style
of the existing addendum page and is easy to reword.

## Also fixed here: a literal `(c)` rendered as `©` in legal headings

While formatting the new addendum we hit a rendering bug that turned out
to be **already live on supabase.com**, not new to this branch.

The heading font, **Manrope**, ships a default-on standard `liga`
feature that maps the glyph sequence `parenleft c parenright` to the
copyright glyph. So a literal `(c)` anywhere inside an `h2`–`h6` on the
marketing site paints as `©`. Body copy is unaffected because it uses
Inter, whose subset has no such ligature — which is why this only ever
shows up in headings.

This branch adds a `legal-prose` utility (`font-variant-ligatures:
no-common-ligatures`) in `apps/www/styles/globals.css` and applies it to
two pages:

- the new **Open Authorization Integration Addendum** page (heading
`#### (c) Security.`), and
- the **Master Partner Program Agreement** page, where the `#### (b)
Such indemnity …` heading in section 17.1 contains `… ; or (c) replace
the Covered Materials …` about 600 characters into the line. That page
was **already published**, and rendered "or © replace the Covered
Materials" in production.

The MPPA change is one word — `className="prose"` → `className="prose
legal-prose"`. **No legal text was modified**: no HTML entities, no
zero-width characters, no rewording, no re-hyphenation. The DOM still
holds `U+0028 U+0063 U+0029`; only the font's shaping is suppressed.
Verified in Chromium against the real heading text and the same two font
subsets `next/font` serves: the `(c)` run measures **15.36px** before
the fix (a single `©` glyph) and **22.05px** after (three literal
glyphs), against a 23.30px control for the `(b)` in the same heading.

All 17 `.mdx` files under `apps/www/data/legal/` were swept for `(c)`
and the other Manrope `liga` input sequences (`--`, `->`, `<-`, `(>)`,
`<3`) on heading lines. The only two hits are the two pages fixed above;
nothing else needs the utility today. (Headings do contain
`ff`/`fi`/`fl`/`tt` — those ligatures are ordinary typography and are
intentionally left alone.)

**For future legal pages:** because the cause is the heading font's
default ligature rather than anything about these documents, any new
legal page whose source has `(c)` in a heading will need `legal-prose`
on its prose container too.

**One side effect worth flagging:** `no-common-ligatures` is blunt, so
on those two pages it also suppresses the ordinary `fi`, `ff` and `tt`
ligatures — a sweep of the legal `.mdx` files counts 107 such
occurrences in headings (`fi` 83, `ff` 21, `tt` 3, `fl` 0), so the note
above about leaving them alone holds for the rest of the site rather
than for these two pages. That is a deliberate trade-off: correctness of
the legal text beats typographic polish on two addendum pages. A
narrower alternative exists — `font-feature-settings: "liga" 0` scoped
to just the offending ligature, or overriding only the
`parenleft_c_parenright` substitution — but it is more fragile and more
subset-specific, so push back here if you would rather have that
instead.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01VtcJJGqw5jL1ESwhs8DGCu

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-08-07 15:54:37 +02:00
Nik RichersandNik Richers 1123a74813 spike(docs): chunk Management API reference into one page per endpoint (#48547)
## I have read the CONTRIBUTING.md file.

YES

## What kind of change does this PR introduce?

This is an experimental spike that splits the Management API reference
into one statically-generated page per endpoint, instead of the single
monolithic page that currently renders all ~172 operations at
`/reference/api`.
Relates to DOCS-1268.

## What is the current behavior?

- Linear item: Spike: chunk Management API reference into one page per
endpoint
- `/reference/api/introduction` (and every other API deep link) renders
one ~35MB page containing all 172 endpoints, per `known-issues.md`'s
"Reference page length" note — a known UX/LLM issue with no per-endpoint
pages today
- All API reference "navigation" is actually `preventDefault` +
`pushState` + `scrollIntoView` within that one page (see
`Reference.navigation.client.tsx`)

## What is the new behavior?

- New `generateStaticParamsForApi()` in `Reference.utils.ts` emits one
static param per API operation slug (~172 pages), independent of the SDK
static-params generator
- Fixed the permanent `/docs/reference/api` ->
`/docs/reference/api/start` redirect in `apps/www/lib/redirects.js`
(`start` was never a real content slug — it only worked because the old
routing collapsed every sub-path to the monolith); now points straight
at `introduction`, and `/start` itself still redirects there so old
links/bookmarks don't 404
- `middleware.ts` only normalizes the bare `/reference/api` request now;
`/reference/api/<slug>` falls through to the real per-operation page (or
404s if the slug is unknown)
- `Reference.apiPage.tsx` branches on the resolved slug: no slug now
redirects to `/reference/api/introduction` (the monolith-rendering
branch is removed entirely — `ClientLibIntroduction`/`RefSections` are
no longer used in this file), a slug renders just that one section via
the existing `SectionSwitch`/`ApiEndpointSection`/`MarkdownSection` — no
duplicated rendering logic
- `Reference.navigation.tsx` / `Reference.navigation.client.tsx` gained
an opt-in `realNavigation` prop; only the API reference's two
`<ReferenceNavigation>` call sites set it, so SDK/CLI/self-hosting
sidebar behavior is byte-for-byte unchanged
- Per-operation page metadata (title/description/canonical URL)

### Explicitly out of scope for this spike

- `internals/generate-reference-markdown.ts` (the LLM `api.md` export) —
still a single file, not split per endpoint
- Any change to SDK, CLI, or self-hosting reference rendering or
navigation
- A hypothetical 2+-segment API path (`/reference/api/foo/bar`)
previously collapsed silently to the monolith; it now 404s. Not
reachable by any existing internal link today.

## Additional context

- Worktree:
`~/GitHub/supabase/supabase-worktrees/nrichers/nikrichers/docs-1268-spike-chunk-management-api-reference-into-one-page-per`
- Verification:

| Check | Result |
| --- | --- |
| `pnpm typecheck` (apps/docs) | ✅ pass |
| `GET /reference/api` (bare) | ✅ 307, redirects to
`/reference/api/introduction` (monolith removed) |
| `GET /reference/api/introduction` | ✅ 200, new chunked page |
| `GET /reference/api/v1-get-performance-advisors` | ✅ 200, new chunked
page — confirmed via content size (~1.5MB vs ~35.5MB monolith) and
heading-count diffing that only one operation renders |
| `GET /reference/api/not-a-real-slug` | ✅ 404, confirms new static
params + `dynamicParams=false` work as designed |
| `GET /reference/cli`, `GET /reference/self-hosting-storage` | ✅ 200,
unaffected — same shared nav components, no `realNavigation` passed |
| `GET /reference/javascript`, `GET /reference/python` | ⚠️ 404 locally
— not a regression; these need `codegen:references:new` output +
`dev:secrets:pull` (internal env vars) that weren't run in this sandbox,
unrelated to any file this PR touches |

### Before & After

**Example (left: prod; right: PR)**

<img width="2664" height="1667" alt="image"
src="https://github.com/user-attachments/assets/c00e59ab-208b-44fb-be52-80270404fcc5"
/>


Preview is deployed:
https://vercel.com/supabase/docs/43RzVCY6MkAbUuaDxdf9dPz7qsBu

| Before (production) | After (PR preview) |
| --- | --- |
| - [Bare `/reference/api` (redirects to
Introduction)](https://supabase.com/docs/reference/api)<br>-
[Introduction](https://supabase.com/docs/reference/api/introduction)<br>-
[Get performance
advisors](https://supabase.com/docs/reference/api/v1-get-performance-advisors)<br>-
[Get security
advisors](https://supabase.com/docs/reference/api/v1-get-security-advisors)<br>-
[Create log
drain](https://supabase.com/docs/reference/api/v2-create-log-drain)<br>-
[Delete log
drain](https://supabase.com/docs/reference/api/v2-delete-log-drain)<br>-
[Get project function combined
stats](https://supabase.com/docs/reference/api/v1-get-project-function-combined-stats)<br>-
[Get project
logs](https://supabase.com/docs/reference/api/v1-get-project-logs)<br>-
[Get project logs
all](https://supabase.com/docs/reference/api/v1-get-project-logs-all)<br>-
[Get project usage api
count](https://supabase.com/docs/reference/api/v1-get-project-usage-api-count)<br>-
[Get project usage request
count](https://supabase.com/docs/reference/api/v1-get-project-usage-request-count)<br>-
[List log
drains](https://supabase.com/docs/reference/api/v2-list-log-drains)<br>-
[Update log
drain](https://supabase.com/docs/reference/api/v2-update-log-drain)<br>-
[Create a sso
provider](https://supabase.com/docs/reference/api/v1-create-a-sso-provider)<br>-
[Create legacy signing
key](https://supabase.com/docs/reference/api/v1-create-legacy-signing-key)<br>-
[Create project signing
key](https://supabase.com/docs/reference/api/v1-create-project-signing-key)<br>-
[Create project tpa
integration](https://supabase.com/docs/reference/api/v1-create-project-tpa-integration)<br>-
[Delete a sso
provider](https://supabase.com/docs/reference/api/v1-delete-a-sso-provider)<br>-
[Delete project tpa
integration](https://supabase.com/docs/reference/api/v1-delete-project-tpa-integration)<br>-
[Get a sso
provider](https://supabase.com/docs/reference/api/v1-get-a-sso-provider)<br>-
[Get auth service
config](https://supabase.com/docs/reference/api/v1-get-auth-service-config)<br>-
[Get legacy signing
key](https://supabase.com/docs/reference/api/v1-get-legacy-signing-key)<br>-
[Get project signing
key](https://supabase.com/docs/reference/api/v1-get-project-signing-key)<br>-
[Get project signing
keys](https://supabase.com/docs/reference/api/v1-get-project-signing-keys)<br>-
[Get project tpa
integration](https://supabase.com/docs/reference/api/v1-get-project-tpa-integration)<br>-
[List all sso
provider](https://supabase.com/docs/reference/api/v1-list-all-sso-provider)<br>-
[List project tpa
integrations](https://supabase.com/docs/reference/api/v1-list-project-tpa-integrations)<br>-
[Remove project signing
key](https://supabase.com/docs/reference/api/v1-remove-project-signing-key)<br>-
[Update a sso
provider](https://supabase.com/docs/reference/api/v1-update-a-sso-provider)<br>-
[Update auth service
config](https://supabase.com/docs/reference/api/v1-update-auth-service-config)<br>-
[Update project signing
key](https://supabase.com/docs/reference/api/v1-update-project-signing-key)<br>-
[Apply project
addon](https://supabase.com/docs/reference/api/v1-apply-project-addon)<br>-
[List project
addons](https://supabase.com/docs/reference/api/v1-list-project-addons)<br>-
[Remove project
addon](https://supabase.com/docs/reference/api/v1-remove-project-addon)<br>-
[Accept invite external jit
access](https://supabase.com/docs/reference/api/v1-accept-invite-external-jit-access)<br>-
[Apply a
migration](https://supabase.com/docs/reference/api/v1-apply-a-migration)<br>-
[Authorize jit
access](https://supabase.com/docs/reference/api/v1-authorize-jit-access)<br>-
[Create login
role](https://supabase.com/docs/reference/api/v1-create-login-role)<br>-
[Delete invite external jit
access](https://supabase.com/docs/reference/api/v1-delete-invite-external-jit-access)<br>-
[Delete jit
access](https://supabase.com/docs/reference/api/v1-delete-jit-access)<br>-
[Delete login
roles](https://supabase.com/docs/reference/api/v1-delete-login-roles)<br>-
[Disable readonly mode
temporarily](https://supabase.com/docs/reference/api/v1-disable-readonly-mode-temporarily)<br>-
[Enable database
webhook](https://supabase.com/docs/reference/api/v1-enable-database-webhook)<br>-
[Generate typescript
types](https://supabase.com/docs/reference/api/v1-generate-typescript-types)<br>-
[Get a
migration](https://supabase.com/docs/reference/api/v1-get-a-migration)<br>-
[Get a
snippet](https://supabase.com/docs/reference/api/v1-get-a-snippet)<br>-
[Get backup
schedule](https://supabase.com/docs/reference/api/v1-get-backup-schedule)<br>-
[Get database
metadata](https://supabase.com/docs/reference/api/v1-get-database-metadata)<br>-
[Get database
openapi](https://supabase.com/docs/reference/api/v1-get-database-openapi)<br>-
[Get jit
access](https://supabase.com/docs/reference/api/v1-get-jit-access)<br>-
[Get jit access
config](https://supabase.com/docs/reference/api/v1-get-jit-access-config)<br>-
[Get pooler
config](https://supabase.com/docs/reference/api/v1-get-pooler-config)<br>-
[Get postgres
config](https://supabase.com/docs/reference/api/v1-get-postgres-config)<br>-
[Get project pgbouncer
config](https://supabase.com/docs/reference/api/v1-get-project-pgbouncer-config)<br>-
[Get readonly mode
status](https://supabase.com/docs/reference/api/v1-get-readonly-mode-status)<br>-
[Get ssl enforcement
config](https://supabase.com/docs/reference/api/v1-get-ssl-enforcement-config)<br>-
[Invite external jit
access](https://supabase.com/docs/reference/api/v1-invite-external-jit-access)<br>-
[List all
backups](https://supabase.com/docs/reference/api/v1-list-all-backups)<br>-
[List all
snippets](https://supabase.com/docs/reference/api/v1-list-all-snippets)<br>-
[List jit
access](https://supabase.com/docs/reference/api/v1-list-jit-access)<br>-
[List migration
history](https://supabase.com/docs/reference/api/v1-list-migration-history)<br>-
[Patch a
migration](https://supabase.com/docs/reference/api/v1-patch-a-migration)<br>-
[Read only
query](https://supabase.com/docs/reference/api/v1-read-only-query)<br>-
[Remove a read
replica](https://supabase.com/docs/reference/api/v1-remove-a-read-replica)<br>-
[Restore pitr
backup](https://supabase.com/docs/reference/api/v1-restore-pitr-backup)<br>-
[Rollback
migrations](https://supabase.com/docs/reference/api/v1-rollback-migrations)<br>-
[Run a
query](https://supabase.com/docs/reference/api/v1-run-a-query)<br>-
[Setup a read
replica](https://supabase.com/docs/reference/api/v1-setup-a-read-replica)<br>-
[Update backup
schedule](https://supabase.com/docs/reference/api/v1-update-backup-schedule)<br>-
[Update database
password](https://supabase.com/docs/reference/api/v1-update-database-password)<br>-
[Update jit
access](https://supabase.com/docs/reference/api/v1-update-jit-access)<br>-
[Update jit access
config](https://supabase.com/docs/reference/api/v1-update-jit-access-config)<br>-
[Update pooler
config](https://supabase.com/docs/reference/api/v1-update-pooler-config)<br>-
[Update postgres
config](https://supabase.com/docs/reference/api/v1-update-postgres-config)<br>-
[Update ssl enforcement
config](https://supabase.com/docs/reference/api/v1-update-ssl-enforcement-config)<br>-
[Upsert a
migration](https://supabase.com/docs/reference/api/v1-upsert-a-migration)<br>-
[Activate custom
hostname](https://supabase.com/docs/reference/api/v1-activate-custom-hostname)<br>-
[Activate vanity subdomain
config](https://supabase.com/docs/reference/api/v1-activate-vanity-subdomain-config)<br>-
[Check vanity subdomain
availability](https://supabase.com/docs/reference/api/v1-check-vanity-subdomain-availability)<br>-
[Deactivate vanity subdomain
config](https://supabase.com/docs/reference/api/v1-deactivate-vanity-subdomain-config)<br>-
[Get hostname
config](https://supabase.com/docs/reference/api/v1-get-hostname-config)<br>-
[Get vanity subdomain
config](https://supabase.com/docs/reference/api/v1-get-vanity-subdomain-config)<br>-
[Update hostname
config](https://supabase.com/docs/reference/api/v1-update-hostname-config)<br>-
[Verify dns
config](https://supabase.com/docs/reference/api/v1-verify-dns-config)<br>-
[Bulk update
functions](https://supabase.com/docs/reference/api/v1-bulk-update-functions)<br>-
[Create a
function](https://supabase.com/docs/reference/api/v1-create-a-function)<br>-
[Delete a
function](https://supabase.com/docs/reference/api/v1-delete-a-function)<br>-
[Deploy a
function](https://supabase.com/docs/reference/api/v1-deploy-a-function)<br>-
[Get a
function](https://supabase.com/docs/reference/api/v1-get-a-function)<br>-
[Get a function
body](https://supabase.com/docs/reference/api/v1-get-a-function-body)<br>-
[List all
functions](https://supabase.com/docs/reference/api/v1-list-all-functions)<br>-
[Update a
function](https://supabase.com/docs/reference/api/v1-update-a-function)<br>-
[Count action
runs](https://supabase.com/docs/reference/api/v1-count-action-runs)<br>-
[Create a
branch](https://supabase.com/docs/reference/api/v1-create-a-branch)<br>-
[Delete a
branch](https://supabase.com/docs/reference/api/v1-delete-a-branch)<br>-
[Diff a
branch](https://supabase.com/docs/reference/api/v1-diff-a-branch)<br>-
[Disable preview
branching](https://supabase.com/docs/reference/api/v1-disable-preview-branching)<br>-
[Get a
branch](https://supabase.com/docs/reference/api/v1-get-a-branch)<br>-
[Get a branch
config](https://supabase.com/docs/reference/api/v1-get-a-branch-config)<br>-
[Get action
run](https://supabase.com/docs/reference/api/v1-get-action-run)<br>-
[Get action run
logs](https://supabase.com/docs/reference/api/v1-get-action-run-logs)<br>-
[List action
runs](https://supabase.com/docs/reference/api/v1-list-action-runs)<br>-
[List all
branches](https://supabase.com/docs/reference/api/v1-list-all-branches)<br>-
[Merge a
branch](https://supabase.com/docs/reference/api/v1-merge-a-branch)<br>-
[Push a
branch](https://supabase.com/docs/reference/api/v1-push-a-branch)<br>-
[Reset a
branch](https://supabase.com/docs/reference/api/v1-reset-a-branch)<br>-
[Restore a
branch](https://supabase.com/docs/reference/api/v1-restore-a-branch)<br>-
[Update a branch
config](https://supabase.com/docs/reference/api/v1-update-a-branch-config)<br>-
[Update action run
status](https://supabase.com/docs/reference/api/v1-update-action-run-status)<br>-
[Authorize
user](https://supabase.com/docs/reference/api/v1-authorize-user)<br>-
[Exchange oauth
token](https://supabase.com/docs/reference/api/v1-exchange-oauth-token)<br>-
[Oauth authorize project
claim](https://supabase.com/docs/reference/api/v1-oauth-authorize-project-claim)<br>-
[Revoke
token](https://supabase.com/docs/reference/api/v1-revoke-token)<br>-
[Assign organization member
role](https://supabase.com/docs/reference/api/v2-assign-organization-member-role)<br>-
[Create an
organization](https://supabase.com/docs/reference/api/v1-create-an-organization)<br>-
[Get an
organization](https://supabase.com/docs/reference/api/v1-get-an-organization)<br>-
[Get organization
entitlements](https://supabase.com/docs/reference/api/v1-get-organization-entitlements)<br>-
[List all
organizations](https://supabase.com/docs/reference/api/v1-list-all-organizations)<br>-
[List organization
members](https://supabase.com/docs/reference/api/v1-list-organization-members)<br>-
[List organization
members](https://supabase.com/docs/reference/api/v2-list-organization-members)<br>-
[List organization
roles](https://supabase.com/docs/reference/api/v2-list-organization-roles)<br>-
[Create organization
invitations](https://supabase.com/docs/reference/api/v2-create-organization-invitations)<br>-
[Get
profile](https://supabase.com/docs/reference/api/v1-get-profile)<br>-
[Cancel a project
restoration](https://supabase.com/docs/reference/api/v1-cancel-a-project-restoration)<br>-
[Create a
project](https://supabase.com/docs/reference/api/v1-create-a-project)<br>-
[Create private link
association](https://supabase.com/docs/reference/api/v2-create-private-link-association)<br>-
[Delete a
project](https://supabase.com/docs/reference/api/v1-delete-a-project)<br>-
[Delete network
bans](https://supabase.com/docs/reference/api/v1-delete-network-bans)<br>-
[Delete private link
association](https://supabase.com/docs/reference/api/v2-delete-private-link-association)<br>-
[Get all projects for
organization](https://supabase.com/docs/reference/api/v1-get-all-projects-for-organization)<br>-
[Get available
regions](https://supabase.com/docs/reference/api/v1-get-available-regions)<br>-
[Get database
disk](https://supabase.com/docs/reference/api/v1-get-database-disk)<br>-
[Get disk
utilization](https://supabase.com/docs/reference/api/v1-get-disk-utilization)<br>-
[Get network
restrictions](https://supabase.com/docs/reference/api/v1-get-network-restrictions)<br>-
[Get postgres upgrade
eligibility](https://supabase.com/docs/reference/api/v1-get-postgres-upgrade-eligibility)<br>-
[Get postgres upgrade
status](https://supabase.com/docs/reference/api/v1-get-postgres-upgrade-status)<br>-
[Get
project](https://supabase.com/docs/reference/api/v1-get-project)<br>-
[Get project disk autoscale
config](https://supabase.com/docs/reference/api/v1-get-project-disk-autoscale-config)<br>-
[Get services
health](https://supabase.com/docs/reference/api/v1-get-services-health)<br>-
[List all network
bans](https://supabase.com/docs/reference/api/v1-list-all-network-bans)<br>-
[List all network bans
enriched](https://supabase.com/docs/reference/api/v1-list-all-network-bans-enriched)<br>-
[List all
projects](https://supabase.com/docs/reference/api/v1-list-all-projects)<br>-
[List available restore
versions](https://supabase.com/docs/reference/api/v1-list-available-restore-versions)<br>-
[List private link
associations](https://supabase.com/docs/reference/api/v2-list-private-link-associations)<br>-
[Modify database
disk](https://supabase.com/docs/reference/api/v1-modify-database-disk)<br>-
[Patch network
restrictions](https://supabase.com/docs/reference/api/v1-patch-network-restrictions)<br>-
[Pause a
project](https://supabase.com/docs/reference/api/v1-pause-a-project)<br>-
[Preview a project
transfer](https://supabase.com/docs/reference/api/v2-preview-a-project-transfer)<br>-
[Restart a
project](https://supabase.com/docs/reference/api/v1-restart-a-project)<br>-
[Restore a
project](https://supabase.com/docs/reference/api/v1-restore-a-project)<br>-
[Transfer a
project](https://supabase.com/docs/reference/api/v2-transfer-a-project)<br>-
[Update a
project](https://supabase.com/docs/reference/api/v1-update-a-project)<br>-
[Update network
restrictions](https://supabase.com/docs/reference/api/v1-update-network-restrictions)<br>-
[Upgrade postgres
version](https://supabase.com/docs/reference/api/v1-upgrade-postgres-version)<br>-
[Get realtime
config](https://supabase.com/docs/reference/api/v1-get-realtime-config)<br>-
[Shutdown
realtime](https://supabase.com/docs/reference/api/v1-shutdown-realtime)<br>-
[Update realtime
config](https://supabase.com/docs/reference/api/v1-update-realtime-config)<br>-
[Get postgrest service
config](https://supabase.com/docs/reference/api/v1-get-postgrest-service-config)<br>-
[Update postgrest service
config](https://supabase.com/docs/reference/api/v1-update-postgrest-service-config)<br>-
[Bulk create
secrets](https://supabase.com/docs/reference/api/v1-bulk-create-secrets)<br>-
[Bulk delete
secrets](https://supabase.com/docs/reference/api/v1-bulk-delete-secrets)<br>-
[Create project api
key](https://supabase.com/docs/reference/api/v1-create-project-api-key)<br>-
[Delete project api
key](https://supabase.com/docs/reference/api/v1-delete-project-api-key)<br>-
[Get pgsodium
config](https://supabase.com/docs/reference/api/v1-get-pgsodium-config)<br>-
[Get project api
key](https://supabase.com/docs/reference/api/v1-get-project-api-key)<br>-
[Get project api
keys](https://supabase.com/docs/reference/api/v1-get-project-api-keys)<br>-
[Get project legacy api
keys](https://supabase.com/docs/reference/api/v1-get-project-legacy-api-keys)<br>-
[List all
secrets](https://supabase.com/docs/reference/api/v1-list-all-secrets)<br>-
[Update pgsodium
config](https://supabase.com/docs/reference/api/v1-update-pgsodium-config)<br>-
[Update project api
key](https://supabase.com/docs/reference/api/v1-update-project-api-key)<br>-
[Update project legacy api
keys](https://supabase.com/docs/reference/api/v1-update-project-legacy-api-keys)<br>-
[Get storage
config](https://supabase.com/docs/reference/api/v1-get-storage-config)<br>-
[List all
buckets](https://supabase.com/docs/reference/api/v1-list-all-buckets)<br>-
[Update storage
config](https://supabase.com/docs/reference/api/v1-update-storage-config)
| - [Bare `/reference/api` (redirects to
Introduction)](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api)<br>-
[Introduction](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/introduction)<br>-
[Get performance
advisors](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-performance-advisors)<br>-
[Get security
advisors](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-security-advisors)<br>-
[Create log
drain](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-create-log-drain)<br>-
[Delete log
drain](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-delete-log-drain)<br>-
[Get project function combined
stats](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-function-combined-stats)<br>-
[Get project
logs](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-logs)<br>-
[Get project logs
all](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-logs-all)<br>-
[Get project usage api
count](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-usage-api-count)<br>-
[Get project usage request
count](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-usage-request-count)<br>-
[List log
drains](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-list-log-drains)<br>-
[Update log
drain](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-update-log-drain)<br>-
[Create a sso
provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-a-sso-provider)<br>-
[Create legacy signing
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-legacy-signing-key)<br>-
[Create project signing
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-project-signing-key)<br>-
[Create project tpa
integration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-project-tpa-integration)<br>-
[Delete a sso
provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-a-sso-provider)<br>-
[Delete project tpa
integration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-project-tpa-integration)<br>-
[Get a sso
provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-sso-provider)<br>-
[Get auth service
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-auth-service-config)<br>-
[Get legacy signing
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-legacy-signing-key)<br>-
[Get project signing
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-signing-key)<br>-
[Get project signing
keys](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-signing-keys)<br>-
[Get project tpa
integration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-tpa-integration)<br>-
[List all sso
provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-sso-provider)<br>-
[List project tpa
integrations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-project-tpa-integrations)<br>-
[Remove project signing
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-remove-project-signing-key)<br>-
[Update a sso
provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-a-sso-provider)<br>-
[Update auth service
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-auth-service-config)<br>-
[Update project signing
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-project-signing-key)<br>-
[Apply project
addon](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-apply-project-addon)<br>-
[List project
addons](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-project-addons)<br>-
[Remove project
addon](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-remove-project-addon)<br>-
[Accept invite external jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-accept-invite-external-jit-access)<br>-
[Apply a
migration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-apply-a-migration)<br>-
[Authorize jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-authorize-jit-access)<br>-
[Create login
role](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-login-role)<br>-
[Delete invite external jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-invite-external-jit-access)<br>-
[Delete jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-jit-access)<br>-
[Delete login
roles](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-login-roles)<br>-
[Disable readonly mode
temporarily](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-disable-readonly-mode-temporarily)<br>-
[Enable database
webhook](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-enable-database-webhook)<br>-
[Generate typescript
types](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-generate-typescript-types)<br>-
[Get a
migration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-migration)<br>-
[Get a
snippet](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-snippet)<br>-
[Get backup
schedule](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-backup-schedule)<br>-
[Get database
metadata](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-database-metadata)<br>-
[Get database
openapi](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-database-openapi)<br>-
[Get jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-jit-access)<br>-
[Get jit access
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-jit-access-config)<br>-
[Get pooler
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-pooler-config)<br>-
[Get postgres
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-postgres-config)<br>-
[Get project pgbouncer
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-pgbouncer-config)<br>-
[Get readonly mode
status](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-readonly-mode-status)<br>-
[Get ssl enforcement
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-ssl-enforcement-config)<br>-
[Invite external jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-invite-external-jit-access)<br>-
[List all
backups](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-backups)<br>-
[List all
snippets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-snippets)<br>-
[List jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-jit-access)<br>-
[List migration
history](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-migration-history)<br>-
[Patch a
migration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-patch-a-migration)<br>-
[Read only
query](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-read-only-query)<br>-
[Remove a read
replica](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-remove-a-read-replica)<br>-
[Restore pitr
backup](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-restore-pitr-backup)<br>-
[Rollback
migrations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-rollback-migrations)<br>-
[Run a
query](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-run-a-query)<br>-
[Setup a read
replica](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-setup-a-read-replica)<br>-
[Update backup
schedule](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-backup-schedule)<br>-
[Update database
password](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-database-password)<br>-
[Update jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-jit-access)<br>-
[Update jit access
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-jit-access-config)<br>-
[Update pooler
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-pooler-config)<br>-
[Update postgres
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-postgres-config)<br>-
[Update ssl enforcement
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-ssl-enforcement-config)<br>-
[Upsert a
migration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-upsert-a-migration)<br>-
[Activate custom
hostname](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-activate-custom-hostname)<br>-
[Activate vanity subdomain
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-activate-vanity-subdomain-config)<br>-
[Check vanity subdomain
availability](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-check-vanity-subdomain-availability)<br>-
[Deactivate vanity subdomain
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-deactivate-vanity-subdomain-config)<br>-
[Get hostname
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-hostname-config)<br>-
[Get vanity subdomain
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-vanity-subdomain-config)<br>-
[Update hostname
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-hostname-config)<br>-
[Verify dns
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-verify-dns-config)<br>-
[Bulk update
functions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-bulk-update-functions)<br>-
[Create a
function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-a-function)<br>-
[Delete a
function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-a-function)<br>-
[Deploy a
function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-deploy-a-function)<br>-
[Get a
function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-function)<br>-
[Get a function
body](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-function-body)<br>-
[List all
functions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-functions)<br>-
[Update a
function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-a-function)<br>-
[Count action
runs](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-count-action-runs)<br>-
[Create a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-a-branch)<br>-
[Delete a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-a-branch)<br>-
[Diff a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-diff-a-branch)<br>-
[Disable preview
branching](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-disable-preview-branching)<br>-
[Get a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-branch)<br>-
[Get a branch
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-branch-config)<br>-
[Get action
run](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-action-run)<br>-
[Get action run
logs](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-action-run-logs)<br>-
[List action
runs](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-action-runs)<br>-
[List all
branches](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-branches)<br>-
[Merge a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-merge-a-branch)<br>-
[Push a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-push-a-branch)<br>-
[Reset a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-reset-a-branch)<br>-
[Restore a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-restore-a-branch)<br>-
[Update a branch
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-a-branch-config)<br>-
[Update action run
status](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-action-run-status)<br>-
[Authorize
user](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-authorize-user)<br>-
[Exchange oauth
token](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-exchange-oauth-token)<br>-
[Oauth authorize project
claim](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-oauth-authorize-project-claim)<br>-
[Revoke
token](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-revoke-token)<br>-
[Assign organization member
role](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-assign-organization-member-role)<br>-
[Create an
organization](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-an-organization)<br>-
[Get an
organization](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-an-organization)<br>-
[Get organization
entitlements](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-organization-entitlements)<br>-
[List all
organizations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-organizations)<br>-
[List organization
members](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-organization-members)<br>-
[List organization
members](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-list-organization-members)<br>-
[List organization
roles](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-list-organization-roles)<br>-
[Create organization
invitations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-create-organization-invitations)<br>-
[Get
profile](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-profile)<br>-
[Cancel a project
restoration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-cancel-a-project-restoration)<br>-
[Create a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-a-project)<br>-
[Create private link
association](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-create-private-link-association)<br>-
[Delete a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-a-project)<br>-
[Delete network
bans](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-network-bans)<br>-
[Delete private link
association](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-delete-private-link-association)<br>-
[Get all projects for
organization](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-all-projects-for-organization)<br>-
[Get available
regions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-available-regions)<br>-
[Get database
disk](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-database-disk)<br>-
[Get disk
utilization](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-disk-utilization)<br>-
[Get network
restrictions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-network-restrictions)<br>-
[Get postgres upgrade
eligibility](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-postgres-upgrade-eligibility)<br>-
[Get postgres upgrade
status](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-postgres-upgrade-status)<br>-
[Get
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project)<br>-
[Get project disk autoscale
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-disk-autoscale-config)<br>-
[Get services
health](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-services-health)<br>-
[List all network
bans](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-network-bans)<br>-
[List all network bans
enriched](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-network-bans-enriched)<br>-
[List all
projects](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-projects)<br>-
[List available restore
versions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-available-restore-versions)<br>-
[List private link
associations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-list-private-link-associations)<br>-
[Modify database
disk](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-modify-database-disk)<br>-
[Patch network
restrictions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-patch-network-restrictions)<br>-
[Pause a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-pause-a-project)<br>-
[Preview a project
transfer](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-preview-a-project-transfer)<br>-
[Restart a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-restart-a-project)<br>-
[Restore a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-restore-a-project)<br>-
[Transfer a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-transfer-a-project)<br>-
[Update a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-a-project)<br>-
[Update network
restrictions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-network-restrictions)<br>-
[Upgrade postgres
version](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-upgrade-postgres-version)<br>-
[Get realtime
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-realtime-config)<br>-
[Shutdown
realtime](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-shutdown-realtime)<br>-
[Update realtime
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-realtime-config)<br>-
[Get postgrest service
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-postgrest-service-config)<br>-
[Update postgrest service
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-postgrest-service-config)<br>-
[Bulk create
secrets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-bulk-create-secrets)<br>-
[Bulk delete
secrets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-bulk-delete-secrets)<br>-
[Create project api
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-project-api-key)<br>-
[Delete project api
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-project-api-key)<br>-
[Get pgsodium
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-pgsodium-config)<br>-
[Get project api
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-api-key)<br>-
[Get project api
keys](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-api-keys)<br>-
[Get project legacy api
keys](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-legacy-api-keys)<br>-
[List all
secrets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-secrets)<br>-
[Update pgsodium
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-pgsodium-config)<br>-
[Update project api
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-project-api-key)<br>-
[Update project legacy api
keys](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-project-legacy-api-keys)<br>-
[Get storage
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-storage-config)<br>-
[List all
buckets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-buckets)<br>-
[Update storage
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-storage-config)
|

174 links per column: the bare `/reference/api` route plus all 173 API
reference sections (Introduction + 172 operations). The bare-route link
now redirects to Introduction on *both* sides (production already did
via the `apps/www` fix earlier in this PR; the preview now matches,
since the monolith-rendering branch is removed). For the other 173
links, production still resolves every one to today's same ~35MB
monolith (all 172 endpoints on one page, regardless of which slug you
clicked), while the preview serves each as its own individual
per-endpoint page — click through any pair to compare page
weight/content directly.

### Test plan

- [ ] Open the PR preview and confirm `/reference/api/introduction` and
a handful of `/reference/api/<operation-slug>` URLs render as individual
pages (not the full monolith)
- [ ] Confirm the API reference sidebar navigates between real pages
(URL changes, page reloads) without console errors
- [ ] Confirm `/reference/javascript/...`, `/reference/cli`, and
`/reference/self-hosting-*` render exactly as they do on production (no
regression)
- [ ] Confirm `/reference/api` (bare) now redirects to
`/reference/api/introduction` instead of rendering all 172 operations





<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added individual pages for Management API operations with
operation-specific titles, descriptions, metadata, and share previews.
* API reference navigation now supports full page navigation between
sections and operations.
* **Bug Fixes**
* Updated API reference routing to preserve direct links to operation
pages.
  * Unknown API operations now return a not-found page.
* **Documentation**
* Updated Management API links and redirects to use the new API
introduction page.
  * Bare API reference URLs now redirect to the introduction.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Nik Richers <nik@validmind.ai>
2026-08-03 14:03:06 -07:00
Francesco SansalvadoreandClaude 00d12c305c Include Migration steps in changelog bodySection (#48496)
## 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?

Feature / refactor

## What is the current behavior?

The changelog entry parser extracts `## Migration steps` as a separate
field (`migrationSteps`), and the `bodySection` stops before it. This
requires consumers to handle migration steps separately from the main
body content.

## What is the new behavior?

The `bodySection` now includes `## Migration steps` as part of the
rendered body content. The `migrationSteps` field has been removed from
the `ChangelogEntry` type. The `bodySection` extraction now stops at
internal-only planning sections (`## Rollout timeline`, `## Comms
timeline`) instead of at migration steps, allowing migration steps to be
included in the public-facing body.

## Additional context

- Updated `parseChangelogEntryFile` to extract `bodySection` through
migration steps, excluding only internal planning tables
- Updated the `ChangelogEntry` type documentation to clarify that
`bodySection` includes migration steps
- Added a test case verifying that migration steps are included in the
rendered body while internal sections are excluded
- This simplifies the API by consolidating public body content into a
single field

https://claude.ai/code/session_01X5ikaawVPZwMT5C2dWUyJY

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Improvements**
* Changelog entries now include all public content following the Body
section, including relevant subsections and rollout information.
* Migration guidance is included directly within the main changelog body
for a clearer reading experience.
* Internal notes, communications, and planning details remain excluded
from displayed changelog content.
* Unmatched internal markers now correctly hide all subsequent content
from public changelogs.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-31 16:33:48 +02:00
Pamela Chia c4c58ef3e3 feat: remove pandadoc dpa request flow (#48525)
Terms of Service v3 (effective August 1, 2026, #48482) incorporates the
Data Processing Addendum by reference, so customers no longer sign a
separate DPA. Legal confirmed the PandaDoc signing flow can go;
previously signed DPAs remain binding. This removes the frontend flow
only. I'll remove the platform endpoint (`POST
/platform/organizations/{slug}/documents/dpa`) separately once the
PandaDoc contract conversation wraps.

**Changed:**

- **Dashboard DPA card no longer requests PandaDoc documents**: the
Request DPA button and confirm modal are replaced with a View DPA link
to the canonical legal page, with evergreen copy explaining the DPA is
part of the Terms. Tracked via the same `document_view_button_clicked`
event the other document cards use.
- **Legacy `/legal/dpa` page retired**: the page told users to request a
signed DPA from the dashboard, which no longer exists. It now
permanently redirects to
`/legal/customer-resources/data-processing-addendum` (the follow-up
already flagged in #48483), and the footer link is removed. The
`dpa_pdf_opened` and `dpa_request_button_clicked` events are removed
with their last call sites. The latest privacy version links the
canonical page directly; archived v1/v2 keep their original `/legal/dpa`
link, served by the redirect.
- **Orphaned DPA PDFs removed**: the four dated `Supabase+DPA+*.pdf`
files under `/downloads/docs` had zero remaining references once the
signing flow is gone. No redirect: nothing links these URLs, so they
404.
- **Subscription tracking**: the subprocessor updates form now fires
`www_subprocessor_updates_subscribed` on successful submit, so we can
measure uptake of the notification list that replaces per-customer DPA
emails.

## To test

Verified on the Vercel previews (Playwright):

- [x] Studio: `/org/_/documents` shows the DPA card with the
incorporation copy and a working View DPA link (href = canonical page);
no Request DPA button, no PandaDoc mention; TIA/SOC2/ISO27001/HIPAA
cards unaffected
- [x] www: `/legal/dpa` permanently redirects to
`/legal/customer-resources/data-processing-addendum`; footer no longer
shows DPA; zero console errors
- [x] www: subscribing on the subprocessor page succeeds (200 from the
form route, profile created with topic_4) and fires
`www_subprocessor_updates_subscribed` (201 from the telemetry endpoint);
test profile unsubscribed afterwards
- [x] www: `/downloads/docs/Supabase+DPA+260601.pdf` returns 404 with no
redirect; DPA card copy verified without the effective date

## Linear

- fixes GROWTH-1068
2026-07-31 16:18:25 +08:00
bf5a729f2d docs(telemetry): rename section and restructure as Monitoring and Debugging (#48243)
## Summary

- Renames the **Telemetry** nav section to **Monitoring and Debugging**
(nav label + sidebar title)
- Rewrites the section overview (`telemetry.mdx`) as a clean navigation
page using `ContentListings` — three panels (Debugging / Monitoring / AI
& automation) with no how-to prose
- Adds new `telemetry.data.ts` content-listings data file with three
groups registered in `index.ts`
- Adds a new **Debugging** guide (`debugging.mdx`) — request-stack
model, symptom-to-layer router with troubleshooting links for every
service, logging guidance
- Adds cross-links between `debugging.mdx`, `logs.mdx`, and
`advanced-log-filtering.mdx`
- Adds a new **AI agents and MCP** page (`ai-agents.mdx`) — MCP tools
table, `get_logs` usage, debugging skill workflow
- Restructures sidebar into three groups: **Debugging** / **Monitoring**
/ **AI & automation**

## Motivation

- No central entry point existed for debugging — content was scattered
across products with no index
- The overview page had almost no links for agents to follow
- The section name "Telemetry" caused confusion (also used for CLI usage
telemetry)
- Unblocks the `supabase` debugging skill, which routes agents to this
section as its source of truth

## Test plan

- [ ] `/docs/guides/telemetry` — three ContentListings panels render, no
prose how-to text
- [ ] `/docs/guides/telemetry.md` (markdown) — clean link list,
navigable by LLMs
- [ ] `/docs/guides/telemetry/debugging` — renders correctly, symptom
table links resolve
- [ ] `/docs/guides/telemetry/ai-agents` — new page renders correctly
- [ ] Sidebar shows 3 groups: Debugging / Monitoring / AI & automation
- [ ] All cross-links between debugging, logs, and
advanced-log-filtering resolve


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Summary

- **New Features**
- Added new documentation coverage for AI agent–assisted monitoring and
debugging, including an observability-driven troubleshooting workflow.

- **Documentation**
- Updated the “Telemetry” area to “Monitoring and Debugging” with a
refreshed landing page and reorganized sections (Debugging, Monitoring,
and AI).
- Revised the debugging and logs guides to improve step-by-step guidance
and highlight advanced log filtering.

- **Navigation**
- Renamed and restructured the top-level navigation entry to reflect the
new Monitoring and Debugging content layout.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Jeremias Menichelli <jmenichelli@gmail.com>
2026-07-30 15:19:00 +02:00
claude[bot]andClaude 76a9ba968c refactor(www): unify legal page shells and versioning (#48483)
<!-- ccr-slack-attribution -->
_Requested by **Francesco Sansalvadore, Nicole Kramer** · [Slack
thread](https://supabase.slack.com/archives/C0161K73J1J/p1785399057853249?thread_ts=1785399057.853249&cid=C0161K73J1J)_

## 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?

Refactor of the marketing site's legal pages, plus two small content
fixes (removal of duplicated dates, two heading corrections) and two
permanent redirects.

## What is the current behavior?

The documents linked from the Legal Hub are built three different ways:

- `/terms` and `/enterprise-terms` render a plain inline heading with no
breadcrumbs.
- `/sla`, `/support-policy`, `/aup` and `/privacy` are standalone MDX
pages carrying their own layout.
- `/legal/dpa` has a one-off centered heading and grid of its own.

On top of that, the documents that already have a version selector
*also* print a "Last Modified" line inside the document body, so the
same fact is stated twice on the page. On `/terms` and
`/enterprise-terms` the two statements disagree: the selector says
"Version 2 — May 6, 2026" while the body says "Last Modified: 1 May
2026".

`/privacy` handles its history differently again — earlier versions live
at their own archived URLs (`/privacy-260316` and `/privacy-250528`),
strung together by "Previous Version" links at the bottom of each page.

## What is the new behavior?

Every legal page now renders through one shell: `PageHeader` with a
`PageBreadcrumb`, so the Legal Hub is one click away from any document.

- The duplicate "Last Modified" rows are removed from the five versioned
documents. The version selector is now the single place a date appears.
- `/aup` and `/privacy` gain the version selector.
- `/privacy`'s three historical versions are now selectable from the one
page, and the two old archived URLs permanently redirect to it.
- `/sla` and `/support-policy` pick up the shell and breadcrumbs but
intentionally show neither a date nor a selector — neither document has
ever carried one, and Legal asked that the SLA stay that way for now.

Implementation-wise the canonical pattern is the one the Data Processing
Addendum page was already using: `DefaultLayout` > `NextSeo` >
`PageHeader` (with a `breadcrumb` slot) > `MDXProvider` >
`SectionContainer className="prose"` > `LegalDocVersions`. The
standalone MDX pages were moved to `apps/www/data/legal/<slug>/vN.mdx`
as bare content partials, with a new TSX shell taking over the original
route. No route changed except the two archived privacy pages, which
redirect.

Dates were carried across from the "Last Modified" lines being deleted
rather than invented: `/aup` becomes Version 1 — June 1, 2026, and
privacy v1/v2/v3 become May 28 2025, March 16 2026 and May 13 2026.

## Additional context

**This is a stacked PR.** It is sequenced behind three PRs that touch
the same files and should land first: the Terms of Service v3 bump, the
Enterprise SaaS Subscription Agreement v3 bump, and #48481 (DPA
effective date → August 1, 2026). #48481 edits the very "Last Modified"
line this PR removes from the DPA content file, so a trivial conflict
there is expected. This branch will be rebased onto master before it
leaves draft.

**Two contracts now contain a clause that no longer describes the
page.** `apps/www/data/legal/terms/v1.mdx` and `v2.mdx` — and the same
sentence in the MPPA and both integration-partner addenda — still read
"The date on which the Agreement was last modified will be updated at
the top of this Agreement". There is no longer a date in the document
body; it sits in the version selector above it. Left untouched here
because it is contract text, but Legal should re-word it.

**The date mismatch is resolved in favour of the selector.** On `/terms`
and `/enterprise-terms`, deleting the body line leaves May 6, 2026 as
the only date on the page. Nicole Kramer confirmed in Slack that May 6
is the correct date.

**Two headings change visibly**, to line up with the labels used on the
Legal Hub: "Terms of service" → "Terms of Service", and "Service Level
Agreements" → "Service Level Agreement".

**`/legal/dpa` now looks almost identical to
`/legal/customer-resources/data-processing-addendum`** — same heading,
same breadcrumb, different content. The legacy page is a PDF download
plus a signing flow and was deliberately left live, but the overlap is
more obvious than it was. Redirecting it to the versioned page is the
natural follow-up; it is not done here.

**Build verification was incomplete in this environment.** `pnpm
install` could not finish because `npm.jsr.io` is blocked by network
policy (403), so `next build` never gave a real signal. What did run and
pass:

- `tsc --noEmit` on `apps/www`, with output byte-identical to clean
master
- ESLint on every changed file — 0 errors
- Prettier using the repo's actual config
- a direct MDX compile of all 14 `data/legal/**/*.mdx` files using the
app's own MDX options

The one thing left unverified is webpack resolving
`ui-patterns/PrivacySettings` from the privacy content's new directory.
CI will confirm that.

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-30 14:05:46 +02:00
Matt Rossman 8dc0f93c59 feat(www): serve evals frontend at /evals (#48321)
## Changes

Proxies `supabase.com/evals` to the
[evals](https://github.com/supabase/evals) frontend, following a similar
rewrite pattern as `/ui` and `/design-system`. The evals app already
serves under an `/evals` base path per supabase/evals#125.

The destination is hardcoded rather than an env var because the evals
app lives in a separate repo, and there’s not much benefit to a fully
local dev flow here, so the target URL is kept the same in every
environment.

## Before merge

- Disable deployment protection on the evals Vercel project, otherwise
`supabase.com/evals` will show a Vercel login page
- Wait until closer to Evals announcement target (July 30th)

Closes AI-826


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
  * Added routing for the `/evals` section and its subpages.
* Evals pages now load from the designated hosted destination while
preserving URL paths.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-29 17:44:49 -04:00
shaziya a4937812b1 feat(www): add Sign in with ChatGPT (beta) blog post (#48418)
## 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?

Content: adds a new blog post.

## What is the current behavior?

N/A

## What is the new behavior?

Adds the blog post announcing Sign in with ChatGPT (beta).

- Authors: Cemal Kılıç, Gregor Vand
- Categories: `product` · Tags: `auth`, `chatgpt`, `integrations`

## Additional context

Pre-flight checks (per CONTRIBUTING.md):
- [x] Prettier passes on the changed files
- [x] Vercel preview build succeeds for `www`

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Documentation**
  * Added a blog post announcing the “Sign in with ChatGPT” beta.
* Documented signing in to Supabase with ChatGPT and connecting Supabase
through ChatGPT and Codex.
* Added guidance on consent, account onboarding, access revocation, and
getting started.
* **Chores**
* Updated an author’s displayed role from “Technical Program Manager” to
“Product.”

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-29 09:55:48 -07:00
Alaister YoungandAlaister Young ca2b50a0a7 chore(ui-patterns): collapse the admonition shim into ui-patterns/Admonition (#48377)
Follow-up to #48344: collapses the two resolution paths for the
Admonition module into one.

`src/admonition.tsx` was a back-compat shim re-exporting
`src/Admonition/`. Two ways to resolve one module is exactly what
produced the macOS self-import bug fixed in #48344, and the local
typecheck errors that #48374 worked around. This removes the shim and
standardizes on the PascalCase subpath, matching every other export in
the package.

**Changed:**

- Codemodded all 246 `ui-patterns/admonition` imports to
`ui-patterns/Admonition` (240 `.tsx`, 5 `.mdx`, 1 `.ts` across studio,
docs, www, design-system, and lite-studio)
- Pointed the 5 internal `'../admonition'` imports back at the
`'../Admonition'` directory

**Removed:**

- `packages/ui-patterns/src/admonition.tsx`, and its `./admonition`
entry in the exports map (regenerated with `pnpm gen:exports`)

## To test

- `grep -r "ui-patterns/admonition" --include='*.ts*'` → no hits
- `pnpm test:case-hazards` → passes
- `pnpm typecheck` → all 15 tasks green
- `pnpm --filter studio run lint:ratchet` → passes
- `pnpm --filter ui-patterns vitest run src/Admonition` → 11 tests pass

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Standardized Admonition component imports across the application and
documentation.
* Improved compatibility with case-sensitive environments by using the
canonical component path.
  * Removed the legacy Admonition import entry point.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
2026-07-29 00:48:56 +08:00
claude[bot]andClaude a72259b3f0 feat(www): group careers page jobs by department (#48358)
<!-- ccr-slack-attribution -->
_Requested by **Dasha Nikolov, Ivan Vasilov** · [Slack
thread](https://supabase.slack.com/archives/C0161K73J1J/p1785158372513869?thread_ts=1785158372.513869&cid=C0161K73J1J)_

**Before:** the careers page lists open roles under one heading per
individual team (Auth, Data API, Functions, Realtime, Storage, ...).

**After:** roles are grouped under their top-level department heading
(Engineering, Design, ...), collapsing the per-team split.

## 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?

Feature / enhancement to the marketing site (`apps/www`) careers page.

## What is the current behavior?

Open positions on the careers page are grouped by individual team,
producing one `<h3>` heading per team (Auth, Data API, Functions,
Realtime, Storage, ...). This fragments the list into many small groups.

## What is the new behavior?

Roles are grouped under their top-level department heading (Engineering,
Design, ...), so related teams are collapsed under a single department
section.

**How:** added a `department: string` field to `JobItemProps` and group
on `job.department` (from the Ashby public job-board API, which returns
both `department` and `team` as top-level strings per posting) instead
of `job.team`. `groupJobsByTeam` is replaced by `groupJobsByDepartment`
(it had no other callers), `getServerSideProps` now calls it, and the
render loop was updated to key on and display the department heading.
All styling, keys, and job rendering are unchanged.

## Additional context

A Vercel preview deploy will show the result on the careers page.

---
_Generated by [Claude
Code](https://claude.ai/code/session_01GEvKydFSLsHhpBbNJ2PEzg)_

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-27 16:51:38 +02:00
Pamela Chia 9113c2ba04 feat: markdown alternate tags + llms.txt cleanup (#48287)
The June/July marketing redesign (#47271, #47228) rebuilt the homepage
and product pages off the Pages Router, silently dropping their `<link
rel="alternate" type="text/markdown">` head tags, and llms-full.txt has
been accidentally embedding every blog/customer/event page via an
`MD_CONTENT` spread. I restored the tags behind a shared helper, added a
CI drift test so a future redesign can't drop them silently again, and
trimmed both llms files to the agreed docs-index shape.

**Changed:**

- **Markdown siblings advertised again**: homepage, the 5 product pages,
pricing, and blog emit absolute `.md` alternate URLs via a new
`mdAlternates(slug)` helper (the one documented consumer of the tag
parses it from `<head>` and fetches the `.md` sibling, so tags must
point at the sibling, never the page itself).
- **Drift test**: a vitest file walks `content/md/**` and asserts every
markdown-served slug's page wires the helper (or is covered by the Pages
Router `_app.tsx` mechanism, whose alternate-link wiring the test also
asserts directly so removing it fails CI too). Source-level assertions
by design: page modules can't be imported under www's vitest config.
Fails correctly when wiring is removed (verified by hiding a page and by
altering the `_app.tsx` tag).
- **Vector orphan fixed**: `content/md/vector.md` moved to
`modules/vector` matching the live route (the page previously had no
negotiation or tag, and `/modules/vector.md` 404'd); `/vector.md` now
308s to `/modules/vector.md` and the legacy `/llms/vector.txt` redirect
no longer chains.
- **llms.txt + llms-full.txt**: the `## Product Overview` sections are
gone from both, each keeps a `## Pricing` section. This deletes the
hand-maintained links array (a drift trap) and fixes the accidental
~470-page embed, shrinking llms-full.txt from ~9.8MB to ~4.9MB and
dropping the 4.1MB generated content module from that route's serverless
bundle.

**Note:** this PR is scoped to apps/www only. The docs side
(troubleshooting pages and the rest of the docs surface) is handled
separately through a consolidated manifest-gated mechanism; an earlier
troubleshooting-tag commit was reverted out of this branch to keep the
scopes clean.

<details>
<summary>Why alternate tags matter (background)</summary>

Agents ingest markdown far more efficiently than our rendered HTML: a
fraction of the tokens and no extraction step. Since #47770 removed
UA-based serving (UA sniffing broke a major AI app's fetcher and
poisoned CDN caches), markdown is served only on explicit request: a
`.md` suffix URL, an `Accept: text/markdown` header, or llms.txt. That's
the right serving model, but it makes the markdown twin invisible to any
agent that doesn't already know our URL convention, and the major AI
fetchers send browser/wildcard Accept headers, so bare URLs hand them
HTML.

The `<link rel="alternate" type="text/markdown">` head tag is the
standards-based advertisement of the sibling. It has a documented
consumer today: an agent CLI that parses the tag from `<head>` and then
fetches the `.md` sibling, which is also why the tag must point at a
real sibling URL and never at the page itself. Peer docs sites ship this
tag as table stakes. These www pages used to carry it until the
June/July marketing redesign silently dropped it; the drift test in this
PR turns that regression class into a CI failure.

</details>

## To test

Tested locally (www + docs dev servers):
- [x] `/llms.txt` renders `## Documentation` + single-link `## Pricing`,
no Product Overview
- [x] `/llms-full.txt` renders `# Supabase` → `## Pricing` → `##
Documentation`, no Product Overview, ~4.9MB
- [x] Full www suite: 6 files / 71 tests green; drift test fails
correctly when a page is removed or the `_app.tsx` wiring is altered
- [x] `generateMdContent.mjs` emits `modules/vector`, bare `vector` slug
gone

On the Vercel preview (browser-verified with Playwright):
- [x] Alternate tag present on `/`, `/auth`, `/database`, `/storage`,
`/edge-functions`, `/realtime`, `/pricing`, and a blog post: exactly one
tag each, href = preview origin + `.md` sibling
- [x] `/vector.md` → 308 → `/modules/vector.md`, renders as markdown (`#
Supabase Vector`)
- [x] `/llms.txt` shows single-link `## Pricing`, no Product Overview
- [x] Coverage sweep: all 482 `MD_PAGES` slugs + changelog index/entry
curled on the preview; 471 pages carry exactly one tag, all `.md`
siblings 200 as `text/markdown`. The 11 misses are legacy blog slugs
whose HTML 308-redirects away (stale `MD_PAGES` entries predating this
PR, no head to tag; follow-up tracked in Linear)

Post-merge prod:
- [ ] Full llms.txt link sweep (every linked URL 200s; previews can't
cover the docs-hosted links)

## Linear

- fixes GROWTH-1013


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added Markdown alternate links across key product, pricing, blog, and
troubleshooting pages.
* Added Supabase Vector documentation covering features, use cases,
workflows, and technical details.
* Updated AI-focused documentation indexes with dedicated pricing
content.
  * Added redirects for updated Vector documentation URLs.

* **Tests**
* Added coverage to verify Markdown documentation links stay aligned
with available pages.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-27 17:06:16 +08:00
shaziya ddd0f3e8d8 feat(www): update Grafana Cloud blog post authors (#48284)
## 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?

Content update — updates the author byline on an existing blog post
(`apps/www`).

## What is the current behavior?

The "Observability for every Supabase project with Grafana Cloud" post
lists a single author (`raminder_singh`).

## What is the new behavior?

Updates the byline to the three authors credited in the source doc: Alex
Hall, Matt Linkous, and Raminder Singh.

- Adds a new `authors.json` entry for `alex_hall` (GitHub `alexhall`,
Engineering)
- `matt_linkous` and `raminder_singh` already existed
- Updates the post frontmatter: `author: alex_hall, matt_linkous,
raminder_singh`

## Additional context

- Source doc:
[Notion](https://app.notion.com/p/supabase/Blog-Post-Grafana-Cloud-Partner-drop-3455004b775f8108935feefecd87623f)
- Follow-up to #47716 (the original post, already merged)
- Pre-flight: Prettier passes; `authors.json` is valid JSON

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Documentation**
* Updated the Grafana Cloud observability blog post to credit all
contributing authors.
* Added an author profile for Alex Hall, including their role and
profile details.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-24 06:27:49 +01:00
shaziya b6e574e5cd fix(www): stop on-demand mdx events from winning the events marquee (#48264)
## 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?

Bug fix — the [events index](https://supabase.com/events) was featuring
the TRAE webinar in its marquee days after the event happened, instead
of the next genuinely upcoming event (the Dublin meetup), and counting
it toward the "Webinar" filter chip alongside actually-upcoming
webinars.

## What is the current behavior?

`getMdxEvents()` in `lib/events.ts` only excludes past events by
comparing dates against the start of today in UTC. It doesn't check
`onDemand` at all. The TRAE event's timestamp
(`2026-07-22T19:00:00.000-07:00`) converts to `2026-07-23T02:00:00Z`,
which is still "today or later" by that UTC cutoff — so even though the
event already happened and flipped to `onDemand: true`, it kept getting
returned as an "upcoming" event. Since the events marquee
(`featuredEvent`) just picks the earliest-dated event from that pool,
TRAE kept winning over the actually-upcoming Dublin meetup, and it kept
counting toward the "Webinar" filter chip.

## What is the new behavior?

`getMdxEvents()` now excludes any event with `onDemand: true` outright,
regardless of how its date converts across timezones — on-demand events
belong solely in the on-demand bucket (`getOnDemandMdxEvents`), not the
upcoming/marquee pool. Verified locally: the "Webinar" filter chip count
on `/events` drops to 0 with this in place (previously counted TRAE),
while the TRAE event's card in the on-demand list still correctly shows
its "Webinar" tag and "Supabase Live" line, matching the other on-demand
webinars (Perplexity, Datadog) — only its bucket assignment changed, not
its labeling.

## Additional context

Couldn't verify the marquee itself locally since the Luma events API
returns a 500 in local dev (missing credentials, pre-existing/unrelated
to this change). Confirmed independently via the production Luma API
that the Dublin meetup (`2026-07-28T17:00:00Z`) is genuinely the next
chronological event, so it will naturally take over the marquee once
this ships — no hardcoding needed.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
  * On-demand events are no longer shown in the upcoming events list.
* Upcoming events continue to be filtered by their relevant date, while
on-demand event listings remain unchanged.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-23 20:19:55 +01:00
312d05af4b fix(www): changelog frontmatter (#48249)
## 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?

Security/bug fix

## What is the current behavior?

The changelog entry parser exposes all YAML frontmatter fields parsed by
`matter()` directly to the client via Next.js props. This includes
private fields like `internal:` (escalation teams, notes) and
`reviewers:`, which get serialized into the page's `__NEXT_DATA__` and
are visible in View Source even if never rendered.

## What is the new behavior?

- Added `PUBLIC_FRONTMATTER_KEYS` constant that explicitly allowlists
only the fields safe to expose to the browser
- Added `toPublicFrontmatter()` function that filters frontmatter down
to the allowlist, dropping `internal:`, `reviewers:`, and any other
private keys
- Updated `parseChangelogEntryFile()` to apply the allowlist before
returning frontmatter to callers
- Added comprehensive unit tests covering both the filtering logic and
the integration with the parser

This uses an allowlist approach rather than a denylist, so new private
fields added upstream won't silently leak to clients.

## Additional context

The allowlist is kept in sync with `ChangelogEntryFrontmatter` in
`changelog-repo.ts` per the code comment. Tests verify that:
- Only allowlisted keys are present in the returned frontmatter
- Private fields like `internal` and `reviewers` are never exposed
- Public fields flow through untouched
- Undefined values are omitted from the result

https://claude.ai/code/session_017uSmnCLsskFYR7YH8DKGkr

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added a shared changelog title renderer that safely displays titles as
inline Markdown.
* Added plain-text title extraction for consistent headings and SEO
metadata.
* **Bug Fixes**
* Prevented private/internal changelog frontmatter (including reviewer
metadata) from being exposed to browser-rendered pages.
* Ensured featured and non-featured changelog timelines stay consistent
even when some entries fail to serialize.
* Improved the changelog detail not-found behavior to revalidate instead
of caching 404s indefinitely.
* **Tests**
* Added coverage for public frontmatter allowlisting, date normalization
(`publish_date`/sorting), and `sortDate` consistency across YAML
variations.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Lukas Bernert <lukas@bernert.at>
2026-07-23 08:26:01 -07:00
Francesco Sansalvadore 7c20cc574c feat(www): new changelog sync (#47880)
## What kind of change does this PR introduce?

Sync changelog from private supabase/changelog.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
  * Changelog entries now come from the structured changelog repository.
* Added filters for change type, product stage, and self-hosted impact.
* Updated badge UI for affected products and change types with filter
links.
* Changelog detail sidebar now shows lifecycle stage, sunset dates, and
self-hosted impact (when available).

* **Improvements**
  * Product category discovery and filtering now use affected products.
  * Discussion links show only when legacy discussion data is present.
* RSS feeds and generated changelog markdown now use the updated
metadata.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-23 11:16:39 +02:00
Miranda Limonczenko 359974d071 fix(docs) Fix local broken links (#48212)
Closes DOCS-1202

## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## Problem

We have broken local links in docs.

I ran locally tests that crawl through all of our docs and flags broken
local links.

## Solution

This PR fixes local links where they were errored. The report I
generated had false-positives, so there are fewer fixes than initially
thought.

## Preview checklist

Docs preview:
https://docs-git-docs-fix-broken-local-links-supabase.vercel.app
WWW preview (redirects):
https://zone-www-dot-com-git-docs-fix-broken-local-links-supabase.vercel.app

| Page | Live (broken) | Preview (fixed) | Where to look |
| --- | --- | --- | --- |
| Amazon Bedrock |
[Live](https://supabase.com/docs/guides/ai/integrations/amazon-bedrock)
|
[Preview](https://docs-git-docs-fix-broken-local-links-supabase.vercel.app/docs/guides/ai/integrations/amazon-bedrock)
| **You'll also need** → `A Postgres database with the pgvector
extension` |
| Getting started |
[Live](https://supabase.com/docs/guides/getting-started) |
[Preview](https://docs-git-docs-fix-broken-local-links-supabase.vercel.app/docs/guides/getting-started)
| Tutorial cards → **Expo React Native Social Auth** |
| Product security |
[Live](https://supabase.com/docs/guides/security/product-security) |
[Preview](https://docs-git-docs-fix-broken-local-links-supabase.vercel.app/docs/guides/security/product-security)
| **Database** list → `Superuser access and unsupported operations` |
| OAuth flows |
[Live](https://supabase.com/docs/guides/auth/oauth-server/oauth-flows) |
[Preview](https://docs-git-docs-fix-broken-local-links-supabase.vercel.app/docs/guides/auth/oauth-server/oauth-flows)
| End of page, before **Next steps** → `OAuth methods in supabase-js` |
| ElevenLabs TTS |
[Live](https://supabase.com/docs/guides/functions/examples/elevenlabs-generate-speech-stream)
|
[Preview](https://docs-git-docs-fix-broken-local-links-supabase.vercel.app/docs/guides/functions/examples/elevenlabs-generate-speech-stream)
| **Dependencies** → ElevenLabs `JavaScript SDK` |
| ElevenLabs STT |
[Live](https://supabase.com/docs/guides/functions/examples/elevenlabs-transcribe-speech)
|
[Preview](https://docs-git-docs-fix-broken-local-links-supabase.vercel.app/docs/guides/functions/examples/elevenlabs-transcribe-speech)
| **Dependencies** → ElevenLabs `JavaScript SDK` |
| Realtime error codes |
[Live](https://supabase.com/docs/guides/realtime/error_codes) |
[Preview](https://docs-git-docs-fix-broken-local-links-supabase.vercel.app/docs/guides/realtime/error_codes)
| `RealtimeDisabledForTenant` → reference link |
| Expo social auth redirect (legacy) |
[Live](https://supabase.com/docs/guides/with-expo-social-auth) |
[Preview](https://zone-www-dot-com-git-docs-fix-broken-local-links-supabase.vercel.app/docs/guides/with-expo-social-auth)
| Should land on the Expo social auth quickstart |
| Expo social auth redirect (old tutorials path) |
[Live](https://supabase.com/docs/guides/getting-started/tutorials/with-expo-social-auth)
|
[Preview](https://zone-www-dot-com-git-docs-fix-broken-local-links-supabase.vercel.app/docs/guides/getting-started/tutorials/with-expo-social-auth)
| Should land on the Expo social auth quickstart |

### Manual testing

1. For each row, open the **Live** link and find the linked text in
**Where to look**.
2. Click the link and confirm it 404s or lands on the wrong page.
3. Open the matching **Preview** link, find the same linked text, and
click it.
4. Confirm the preview link resolves to the correct destination:
   - Amazon Bedrock → `/docs/guides/database/extensions/pgvector`
- Getting started →
`/docs/guides/auth/quickstarts/with-expo-react-native-social-auth`
   - Product security → `/docs/guides/database/postgres/roles-superuser`
   - OAuth flows → `/docs/reference/javascript/auth-admin-oauth-server`
- ElevenLabs TTS / STT → `https://github.com/elevenlabs/elevenlabs-js`
- Realtime error codes →
`/docs/guides/troubleshooting/realtime-project-suspended-for-exceeding-quotas`
- Redirect rows →
`/docs/guides/auth/quickstarts/with-expo-react-native-social-auth`

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Documentation**
* Updated links for pgvector, OAuth, ElevenLabs SDK, and database
security guidance.
  * Corrected the Expo React Native social authentication tutorial link.
* Updated Realtime troubleshooting references to the current
documentation path.

* **Bug Fixes**
* Fixed redirects for Expo social authentication guides so legacy URLs
reach the correct quickstart.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-22 11:49:04 -07:00
da74f52421 chore(www): Unified Logs open beta blog post (#47645)
Draft blog post announcing Unified Logs in open beta.

Post: `apps/www/_blog/2026-07-06-unified-logs-open-beta.mdx`

### Before publishing
- [ ] Confirm publish date

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Documentation**
* Announced the open beta of Unified Logs, including a single unified,
searchable log stream across multiple services.
* Introduced log-type filtering with counts, shareable filter/search
links, live tailing, and a zoomable timeline for log-volume exploration.
* Added per-request details showing request progression and an option to
view raw JSON, plus support for forwarding logs externally via Log
Drains.
* **Content Updates**
  * Added a new author profile entry.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: kemal <hello@kemal.earth>
Co-authored-by: Shane <o@shaneermitano.com>
Co-authored-by: Ana <30495040+ana1337x@users.noreply.github.com>
2026-07-16 09:59:27 -04:00
Saxon FletcherandIvan Vasilov 932b5dc3b8 Remove skills page from ui library (#47947)
<img width="1033" height="861" alt="image"
src="https://github.com/user-attachments/assets/54a104df-1db9-4b97-89db-6eec671b3af7"
/>

Removes the above AI Skills page from our ui library and instead
redirects to the more up to date ai skills docs page.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added a direct “Install Skills” link to the AI Skills documentation
guide.
* Added a permanent redirect from the legacy prompts URL to the new AI
Skills guide.

* **Documentation**
* Updated the docs side navigation to list component pages under
“Blocks”.
* Removed the AI Skills page content and its navigation/search entries.
* Removed the AI editor rules documentation/registry entries, so they no
longer appear in the generated documentation set.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
2026-07-15 15:08:34 +02:00
Francesco Sansalvadore 13330e6328 fix(ui): expandable video preview image (#47964)
## What kind of change does this PR introduce?

Restore preview image on ExpandableVideo trigger component.

## What is the current behavior?
<img width="1441" height="698" alt="Screenshot 2026-07-15 at 14 08 58"
src="https://github.com/user-attachments/assets/bdb1c4be-71a9-4601-b5c9-ab4fc97c48d1"
/>

<img width="1273" height="701" alt="Screenshot 2026-07-15 at 14 09 05"
src="https://github.com/user-attachments/assets/b8026bcc-3d43-4faa-873b-1745b32c166c"
/>

## What is the new behavior?
<img width="1434" height="678" alt="Screenshot 2026-07-15 at 14 08 53"
src="https://github.com/user-attachments/assets/8a3e64d1-5fe7-4ab9-a71b-3de5808d28b9"
/>

<img width="1160" height="672" alt="Screenshot 2026-07-15 at 14 08 48"
src="https://github.com/user-attachments/assets/db598a47-ed8e-435b-b3ef-8ae9e76761a2"
/>

---

Also fixed a border-b issue on the PartnerCatalogDetail.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
  - Added thumbnail previews for partner catalog YouTube videos.
- Improved video preview presentation with clearer overlays and stronger
image blur.

- **Bug Fixes**
  - Updated image loading support for YouTube thumbnail URLs.
  - Refined sticky tab header spacing and alignment while scrolling.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-15 14:53:32 +02:00
Andrey A. 7cffbcc47f docs(cli): add local-dev workflow guide and restructure CLI docs (#47932) 2026-07-15 14:48:31 +02:00
d23f86021a feat(www): Partner Catalog update (#46757)
## Info architecture change around "Partners"

The www "integrations" now become more partner-driven.
`/partners/integrations` -> now Partner Catalog under
`/partners/catalog` (old links redirect to new paths)

Moved them close together in the nav dropdown and in the footer
<img width="494" height="336" alt="Screenshot 2026-07-09 at 11 06 41"
src="https://github.com/user-attachments/assets/a875fef0-0ab8-47ca-8756-d658b27c4892"
/>
<img width="1149" height="665" alt="Screenshot 2026-07-09 at 11 09 48"
src="https://github.com/user-attachments/assets/9631bb72-fe25-4fb4-b1af-9f14a37d02e7"
/>

## /partners 

This page remains untouched in this PR, updates to layout, content and
intake form are delegated to #47874

## /partners/catalog

Listed in the
[catalog](https://zone-www-dot-com-git-feat-www-partners-pages-supabase.vercel.app/partners/catalog)
are now partners. Some partners match with a listing.

<img width="1207" height="866" alt="Screenshot 2026-07-09 at 11 14 17"
src="https://github.com/user-attachments/assets/b65216be-976f-4ef5-91f8-1ad49da87b45"
/>

## /partners/catalog/[partner]

Each partner can have one or more "listings" which are either 
- simple guides
- foreign data wrappers
- dashboard integrations

Integrations available in the dashboard now all have a prominent
"Install integration" cta to open it in the dashboard [integrations
page](https://supabase.com/dashboard/project/_/integrations).

<img width="1269" height="776" alt="Screenshot 2026-07-09 at 11 16 51"
src="https://github.com/user-attachments/assets/3c7bb715-ffce-4d0a-905f-9a660c3b1f5a"
/>

## Docs

Update docs →
[Preview](https://docs-git-feat-www-partners-pages-supabase.vercel.app/docs/guides/integrations)
- remove "Supabase marketplace"
- use "Dashboard Integrations and Partner Catalog
- update integrations in sidenav to link to updated /partners/catalog/**
listings

<img width="1520" height="696" alt="Screenshot 2026-07-15 at 12 54 47"
src="https://github.com/user-attachments/assets/9f5a2794-4536-4299-97df-9732d3d75b4c"
/>

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added a Partner Catalog experience with search, category filters,
official-partner toggle, responsive filtering (sidebar + bottom sheet),
grid/list views, and featured partners.
* Added Partner Catalog detail pages with tabbed listings, MDX-rendered
content, image gallery with zoom overlay, and “add/install” actions.
* **Improvements**
* Updated “Become a Partner” layout and form support for prefilled
values and checkbox-group fields (including validation).
* Updated navigation/footer/docs and partner tile links to use Partner
Catalog routes; expanded redirects from legacy integrations paths.
  * Added public agent-skills discovery manifest.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Alan Daniel <stylesshjs@gmail.com>
Co-authored-by: Alex Hall <alex.hall@supabase.io>
Co-authored-by: Miranda Limonczenko <miranda.limonczenko@supabase.io>
2026-07-15 11:10:51 +00:00
Sean Oliver 99d064e754 fix(www): add missing partner slug redirects (#47901)
## 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?

Bug fix.

## What is the current behavior?

Partner slugs were renamed from underscores to hyphens, but the redirect
map only got partially updated. #46264 added entries for `refine_dev`
and `supabase_wrapper_stripe`. Four others were missed and still hard
404, even though their replacement pages are live:

| 404s today | Replacement page (200) |
|---|---|
| `/partners/integrations/atomic_crm` |
`/partners/integrations/atomic-crm` |
| `/partners/integrations/sequin_io` | `/partners/integrations/sequin` |
| `/partners/integrations/supabase_wrapper_bigquery` |
`/partners/integrations/bigquery-wrapper` |
| `/partners/integrations/supabase_wrapper_firebase` |
`/partners/integrations/firebase-wrapper` |

These are the URLs Google has indexed and that external sites link to,
so that traffic lands on an error page instead of the partner. Roughly
1.3k pageviews/month.

Worth flagging for the reviewer: partner slugs come from the database,
not the codebase, so renaming one doesn't force a matching redirect
entry and nothing catches it at build time. This will happen again.

## What is the new behavior?

Four `permanent: true` redirects added to `apps/www/lib/redirects.js`,
matching the two that already exist in the partners block.

## Additional context

Found while [digging into a decline in /partners
traffic](https://supabase.slack.com/archives/C0161K73J1J/p1783931237132339).
This accounts for ~7% of that decline — the rest is happening on
healthy, indexed pages and is a separate question.

Not included here: a few partner URLs 404 with no replacement page
(`getstream_io`, `fezto`, `trevor_io`, `zapp_run`) — those partners look
genuinely gone. Pointing them at `/partners/integrations` would hold
onto more link equity than a hard 404, but that's a product call rather
than a bug fix. Happy to add if people want it.

Verified each old URL currently 404s and each destination returns 200.
No duplicate `source` entries introduced. Prettier passes.
2026-07-14 14:36:11 +08:00
shaziya 82495cb455 blog: Searchable field-level encryption on Supabase with CipherStash (#47751)
## 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?

### Blog post: Searchable field-level encryption on Supabase with
CipherStash

Partner drop announcing the CipherStash integration. **Scheduled to go
live July 9, 2026.**

- Author: `bilharmer` (title corrected to CISO)
- Category: `product`
- URL: `/blog/searchable-field-level-encryption-with-cipherstash`


### Outstanding before merge
- [x] Marketing +1 in `#team-marketing`.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Documentation**
* Published a new blog post about searchable field-level encryption with
Supabase and CipherStash, including setup guidance, integration details,
and a video walkthrough.
* **Content Updates**
  * Updated an author profile title from “CSO” to “CISO.”

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-09 01:49:07 -07:00
Francesco Sansalvadore aa764e4013 chore(www): refine www styling (#47499)
### Logo positioning bug on Safari

#### Before
<img width="1538" height="1404" alt="CleanShot 2026-07-01 at 07 11
55@2x_b0d735b7df6470afb861f4e82cfeed554743cec621475197e07ff39a98c5c506"
src="https://github.com/user-attachments/assets/dc8483bd-5a2a-4d89-9b90-d0ab3529b4b5"
/>


#### After
<img width="1177" height="526" alt="Screenshot 2026-07-01 at 15 25 59"
src="https://github.com/user-attachments/assets/e5ab66eb-56eb-4f1b-8a66-783aafad069d"
/>

### Uniform h1 styling

#### Before
Font-weight too heavy
<img width="721" height="504" alt="Screenshot 2026-07-01 at 15 55 53"
src="https://github.com/user-attachments/assets/4dc4e157-f746-4626-9ec7-5e893d7155ba"
/>

#### After
<img width="693" height="410" alt="Screenshot 2026-07-01 at 15 56 04"
src="https://github.com/user-attachments/assets/c012d6e5-0889-4466-b2b2-56d1c9516e27"
/>

### AI Builders platform card
### Before
<img width="675" height="573" alt="Screenshot 2026-07-01 at 16 18 31"
src="https://github.com/user-attachments/assets/a34e2fde-115b-45e8-8d44-9fc32c22c0a1"
/>

### After
<img width="640" height="576" alt="Screenshot 2026-07-01 at 16 18 23"
src="https://github.com/user-attachments/assets/45ebf1c7-6508-40de-a755-dda17824979a"
/>

### Logo theme-awareness on 404 page

#### Before
<img width="1053" height="670" alt="Screenshot 2026-07-02 at 11 22 45"
src="https://github.com/user-attachments/assets/d1f45cc8-00ad-48ad-a21a-3b92bf6097f0"
/>

#### After
<img width="1053" height="666" alt="Screenshot 2026-07-02 at 11 22 28"
src="https://github.com/user-attachments/assets/8b6435aa-da87-46f3-9d5c-750f8222edb1"
/>

---

Plus other minor padding/spacing issues:
- remove customer stories in homepage
- use correct container width and align "Use Supabase with [framework]"
section
- restore default `--font-sm` sizing as it resulted too small for www

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes / UI Improvements**
* Refined spacing, layout, and responsive styling across multiple
homepage sections.
* Improved featured logo positioning and adjusted community/hero copy
sizing.
  * Updated site typography for better readability and wrapping.
* Refreshed the 404 experience with a smoother reveal animation and
consistent layout.
  * Updated deep dark-mode behavior to apply only during launch weeks.
* **Performance**
* Lazy-loaded multiple homepage sections to improve initial load and
perceived speed.
* **SEO / New Features**
  * Added a dedicated 404 page that disables indexing.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-03 03:14:43 +10:00
Francesco Sansalvadore acbb19a69a feat: www & docs fonts (#47227)
Update marketing website and docs with new sans-serif fonts:
- `Inter` - sans-serif for all body text
- `Manrope` - sans-serif for headings

PR breakdown of #43455 
Related: #47226 #47228 #47236
2026-07-01 12:59:00 +02:00
shaziyaandClaude Sonnet 4.6 90526fe0b0 feat(www): OpenCode integration blog post (#47419)
## 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?

**Changes:**
- New blog post: `/blog/agentic-coding-on-supabase-with-opencode`
- New author entry: Eric Kharitonashvili (`ekhar`) in `authors.json`
- Blog images and author avatar

## Checklist

- [x] Blog post reviewed internally and approved
- [x] Reviewed and approved by OpenCode
([doc](https://docs.google.com/document/d/1Azyt7Ot0Q8bxBF3YOLdks8CPME-SKVUr-WXGl2HDJR8/edit?tab=t.0))
- [x] Images added
- [x] Video embed added
- [x] Author added to `authors.json`
- [ ] Marketing +1 in `#team-marketing`

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 08:56:51 +00:00
shaziya d582d3cd8f feat(www): add TRAE webinar event landing page (#47415)
## 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?

- Adds event landing page for the Supabase x TRAE webinar (July 22, 2026
at 7pm PT)
- Adds Gary Qi (TRAE) to authors.json
- Adds TRAE logos and Gary Qi avatar

## Test plan

- [ ] Preview the page at `/events/supabase-trae-high-quality-apps`
- [ ] Confirm speaker cards render correctly
- [ ] Confirm TRAE logo appears in the event header

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added a new MDX event page for an upcoming webinar about building
high-quality Supabase apps with TRAE.
* Included event details such as schedule, duration, timezone, speaker
information, and a registration/CTA link.
* Added supporting content covering what attendees will learn, plus live
Q&A and recording availability.
* Updated the authors list by adding Gary Qi to support refreshed
speaker/content attribution.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-29 12:46:40 -07:00
Riccardo Busetti df7a0ca3f7 feat(replication): Evaluate new product name (#47066) 2026-06-24 16:36:23 +02:00
Prashant Sridharan 4dd3a0aacf Fix events page (#47089)
## 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?

As context, the events page pulls data from our webinar MDX files, Luma
(for Hackathons, Events, and Meetups), and Notion (for third-party
events we participate in). I recently unified our multiple Luma
calendars into one and started using tags for Luma events.

I fixed a few things on the /events page:

1. Webinars now show the proper location instead of "Unknown"
2. Event cards now show location properly depending on where the source
of the events are
3. Event data is pulled from Luma and categorized based on tags.
Fallback tag is "event" if a tag is absent

Note that this structure assume that Notion events are third-party, Luma
events are first-party (Hosted by Supabase), and Webinars are always
online. This is a safe assumption for the time being, but I will revisit
in the future if that changes.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
  * Events now display tags and categories from Luma event data.
* Webinar events are identified and labeled as "Supabase Live" with a
video icon for improved visibility.

* **Improvements**
* Enhanced event metadata display with improved location and category
information.
* Streamlined event categorization for more consistent handling across
event sources.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-18 18:58:27 +01:00
Francesco Sansalvadore dfc2dede05 chore(www): integration partner addendum - v1.1 (#46931)
Update integration partner addenda.
2026-06-15 10:31:31 +00:00
Mrinal Paliwal e26dc700e4 feat(www): use 'Publish to Web Title' for Notion event names (#46888)
## 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?

Feature

## What is the current behavior?

Event names use 'Event Name' property from Notion database

## What is the new behavior?

Prefer the 'Publish to Web Title' property for displaying event names,
falling back to the 'Event Name'

## Additional context

N/A

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Event titles now prioritize the "Publish to Web Title" field when
available, falling back to the generic title only if that
publish-specific value is empty—improves accuracy of displayed event
titles.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-12 23:00:56 +05:30
Prashant Sridharan 1036b0e20f Added a new webinar landing page (#46670)
## 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?

New landing page for an upcoming webinar with Perplexity.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* New webinar event now available: "Workflows That Scale: Supabase +
Perplexity Computer for Small Businesses" with event details, agenda,
speaker information, and registration link.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-05 10:23:00 +01:00
Raminder Singh e33331fa92 feat: use the new timestamp published at and built by columns (#46552)
This PR starts using the new `built_by`, `published_in_marketplace_at`,
and `published_in_catalog_at` columns in preparation for removing the
old deprecated fields `publish_marketplace`, `publish_dashboard`.

- [x] Test dashboard changes in preview.
- [x] Test www changes in preview.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Updated marketplace integration identification to use publication
status instead of publish flags for more accurate filtering and display.
* Corrected the developer attribution field displayed for technology
partner integrations to reflect accurate authorship information.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-03 14:57:38 +05:30
Aleksi ImmonenandJordi Enric 86076c07f7 redirect /blog/pricing to /pricing (#46160)
## Summary

- Adds a 301 redirect from `/blog/pricing` to `/pricing`
- The 2021 beta pricing post has an "Out of date" banner but still ranks
~position 2 for pricing queries, sending users to stale plans
- Redirect passes accumulated link equity to the canonical pricing page

## Changes

- `apps/www/lib/redirects.js` — one entry added at the top of the array

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **Improvements**
* Added permanent redirect routing to direct users from the blog pricing
page to the main pricing page, ensuring seamless navigation.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/46160?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Jordi Enric <jordi.err@gmail.com>
2026-06-03 11:25:06 +02:00
Jeremias Menichelli b18814faaa Revert "fix: move reference pages to hash navigation and apply redirect rules" (#46541) 2026-06-01 13:00:36 +02:00
Jeremias Menichelli 92dfbac899 fix: move reference pages to hash navigation and apply redirect rules (#46501) 2026-05-29 15:32:51 +00:00
Pamela Chia b42bebf4c9 chore(llms): consolidate /llms.txt to single root path (#46468)
## Summary

Removes the preemptive 301 redirects from `/docs/llms.txt` and
`/docs/llms-full.txt` to root, and switches the docs homepage
`rel=alternate` to an absolute URL. The `/docs/*` paths never had a
producer in `apps/docs` (no route handler, no static file at
`public/llms.txt` or `public/llms-full.txt`); the redirects were cruft
from before the root paths were canonical. Now `/docs/llms*` cleanly
404s and the only advertised path is the root canonical per llmstxt.org.

## Changes

- Delete `/docs/llms.txt` and `/docs/llms-full.txt` 301 entries from
`apps/www/lib/redirects.js`
- Switch `apps/docs/app/page.tsx` rel=alternate `text/markdown` from
relative `/llms-full.txt` to absolute
`https://supabase.com/llms-full.txt`, so `basePath: '/docs'` does not
reconstruct the now-dead `/docs/llms-full.txt` path

## Testing

Verify on Vercel preview:

- [ ] `curl -sI -L <preview>/docs/llms.txt` returns 404 (no producer,
redirect removed)
- [ ] `curl -sI -L <preview>/docs/llms-full.txt` returns 404
- [ ] `curl -sI -L <preview>/llms.txt` returns 200 with `content-type:
text/plain`
- [ ] `curl -sI -L <preview>/llms-full.txt` returns 200, ~9 MB body
- [ ] `curl -s <preview>/docs/ | grep 'rel="alternate".*llms-full'`
shows the absolute `https://supabase.com/llms-full.txt` href (no
`/docs/` prefix)

Caveat: the absolute alternate URL points at production from preview
deploys. Acceptable because Vercel previews are `noindex` by default and
the existing `canonical: BASE_PATH` already crosses environments via
basePath resolution.

## Linear

- fixes GROWTH-881


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Updated documentation URL references to use absolute Supabase-hosted
paths
* Reorganized legacy product documentation redirects to new
markdown-based routes

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/46468?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-29 13:08:16 +08:00
Alan Daniel 47d85e5235 fix(marketing/forms): resolve CRM config server-side, not from client (#46239)
## 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?

Bug fix (security hardening).

## What is the current behavior?


[PRODSEC-120](https://linear.app/supabase/issue/PRODSEC-120/mythos-ant-2026-btrnt5a3-server-action-accepts-client-controlled-crm)
— the marketing form server action accepts the full \`crm\` config
(Notion \`database_id\`, HubSpot \`formGuid\`, Customer.io \`event\`,
\`staticProperties\`, etc.) from the client, so a crafted submission can
write to any Notion database the integration token reaches, post to any
HubSpot form in the portal, or trigger arbitrary Customer.io events.

## What is the new behavior?

The client now posts only \`{ slug, formId }\` plus the field values;
\`submitFormAction\` validates the ref with Zod, looks the trusted CRM
config up from the in-process \`_go/**\` page registry via a resolver
wired up in \`instrumentation.ts\`, and fails closed if the form isn't
found. \`SectionRenderer\` also strips \`crm\` from the section before
it crosses into the client bundle (so \`database_id\` / \`formGuid\` no
longer ship in page HTML), \`getAllGoPages\` rejects any form section
with \`crm\` but no stable \`id\`, and per-submission size/character
limits were tightened.

## Additional context

Separate follow-ups (not in this PR): confirm \`NOTION_FORMS_API_KEY\`
is write-only and scoped to the forms subtree, and chase down the
\`NOTION_EVENTS_API_KEY\` validity issue raised on the Linear ticket.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
- Forms now support unique identifiers for enhanced tracking and
management
  - Server-side form configuration management for improved reliability

* **Improvements**
- Enhanced form validation during page initialization to catch
configuration issues
- Improved form submission handling with better error detection and
reporting
  - Strengthened form operations with fail-safe configuration resolution

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/46239?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-27 17:37:09 +01:00
Francesco Sansalvadore 7651c98c4e chore(www): improve search in partners directory (#46390)
In the partner integrations directory, search and find results even
while inputting sub-strings.

For example find Stripe even if you just typed out "str".
Current behaviour is that you need to type full words to match findings.

## Before


https://github.com/user-attachments/assets/d8b0fd2e-ba50-4530-a800-dbecc49e9bc6

## After


https://github.com/user-attachments/assets/cc48a89a-5800-4e97-a29b-e020b1b29476
2026-05-26 18:08:17 +02:00
Vaibhav 5987421afe fix: link redirect (#46264)
- closes https://github.com/supabase/supabase/issues/46236

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Documentation**
* Added a permanent redirect so requests to the old guide URL
/docs/guides/integrations/refine_dev now automatically route to the new
/partners/integrations/refine location, ensuring users following
outdated links land on the updated integration documentation.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/46264?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-22 11:26:58 +01:00
Prashant SridharanandAlan Daniel 8cd39680ef Added on-demand webinars as an option in the event list (#46215)
## 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?

Added a pill for on-demand webinars in the /events page. Previously,
webinars were not shown if they had passed. But we embed the video for
the webinar into the landing page so people can discover and find it.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added an "On-demand" event category with dedicated filtering and a
separate on-demand view
* Events page now loads on-demand content and shows "On-demand" badges
where appropriate

* **UI/UX Improvements**
* Banner hides when viewing on-demand events; subtitle updates per view
* Event card layout and badge placement refined; sorting and empty-state
messaging adapt to selected category

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/46215?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Alan Daniel <stylesshjs@gmail.com>
2026-05-21 16:20:17 +01:00
Prashant Sridharan 3356525028 Fix event linking behavior (#46083)
## 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?

1. Removed the upcoming Figma webinar and postponed it until later
2. Fixed the event linking behavior for MDX events on the page. MDX
events should link to the MDX page, not the CTA.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Updates**
* Event links now intelligently route based on event configuration:
external event URLs open in new tabs when available, while default
events navigate to internal event detail pages within the application
* This provides event organizers with flexible options for directing
attendees to external event platforms or internal event information
pages
  * Event entries updated to support new link routing functionality

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/46083?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-18 21:45:07 +01:00
Tomás PozoandChris Chinchilla 9d46004210 docs: rewrite Securing Edge Functions guide around @supabase/server (#45959)
## 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.

## What is the current behavior?

The "Securing Edge Functions" guide (`/docs/guides/functions/auth`)
opens with two conceptual sections — "Understanding authorization
headers" and "The `verify_jwt` platform check" — followed by a "Common
auth patterns" section that re-implements the same four use cases twice:
once without an SDK using `Deno.serve` + manual `createClient` + manual
`Authorization` header forwarding, and again using `@supabase/server`.
The recommended path is buried below background reading and a
legacy-style implementation.

Linear: COM-235.

## What is the new behavior?

The guide now leads with practical how-tos built on `@supabase/server`:

- Authenticated user calls (`auth: 'user'`)
- Service-to-service calls (`auth: 'secret'`)
- Public functions (`auth: 'none'`)
- External webhooks (`auth: 'none'` + signature verification)
- Combining modes
- Custom error responses
- Environment variables

The two conceptual sections are extracted into a new sibling page at
`/docs/guides/functions/auth-headers` ("Authorization headers"), linked
from the top of the how-to page and added to the side nav between
"Securing your functions" and "Legacy JWT secret".

The legacy SDK-less examples are removed. The mode table uses the
unnamed forms (`'secret'`, `'publishable'`), and a note in the
service-to-service section introduces the `'secret:<name>'` /
`'publishable:<name>'` syntax for callers that want to scope to a
specific named key.

## Additional context

Each section preserves the "who calls this and why" framing from the
original (cron jobs, workers, and `pg_net` for service-to-service;
`supabase.functions.invoke` for authenticated user calls; signed webhook
providers for external webhooks).

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Documentation**
* Added a new guide explaining Edge Functions authentication headers,
JWT validation, and API key handling
* Redesigned core authentication guide to focus on the primary wrapper
approach with clearer examples and common scenarios
* Improved navigation and added redirects to make authentication docs
easier to find and access

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/45959?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Chris Chinchilla <chris.ward@supabase.io>
2026-05-18 08:43:23 -05:00