mirror of
https://github.com/supabase/supabase.git
synced 2026-10-05 09:25:06 +03:00
bot/decrease-eslint-ratchet-baselines
20742
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
a47397d5fe |
fix(common): restore narrow Feature type (#50850)
The platform API now types `ProfileResponse.disabled_features` as `string[]` (since #48981), which collapsed the `Feature` union to plain `string`, so `isFeatureEnabled` accepted any string and typos went uncaught. **Changed:** - `Feature` is now a local `RuntimeFeature` union (the profile-driven flags) plus the keys of `enabled-features.json`, instead of deriving from the API type - `useIsFeatureEnabled` casts the merged runtime disabled list to `Feature[]`, since the profile field is now `string[]` The runtime feature list duplicates what the backend knows. Once the enum is restored in the API spec, `Feature` can go back to deriving from the generated type. ## To test - `pnpm typecheck` passes - Passing a bogus string to `useIsFeatureEnabled` / `isFeatureEnabled` is now a type error - Nothing behavioral changes, so a quick sanity check that the sidebar / billing / org settings still render is enough <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **No user-facing changes** * This update does not change the app’s visible features or behavior. It includes internal typing adjustments only. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com> |
||
|
+8 |
e273d2b818 |
chore(studio): move Explorer SQL Editor link to sidebar footer (#50829)
## What
- Moves the temporary "Switch to SQL Editor" button out of the Explorer
sidebar header into a footer section ("Looking for snippets?") with a
short explanation and an **Open SQL Editor** button.
- Replaces the header slot with a menu for the Explorer startup
preference (**Start page** / **SQL query**), instead of linking out to
account preferences.
## How to test
1. Enable the Explorer feature preview and open
`/project/<ref>/explorer`.
2. **Header menu:** click the ⋮ button next to the Explorer title. Pick
**SQL query**, then check that **Explorer startup** on `/account/me`
shows the same value (and vice versa).
3. **Footer:** click **Open SQL Editor**. You should land in the SQL
Editor with the **Back to Explorer** button in its title bar.
4. Open **Notebooks** or **Chats** in the sidebar and check that the
menu and footer are hidden there, like the old button was.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Choose whether the Explorer opens to the Start page or SQL query from
the Explorer preferences menu. Your selection is saved and retained when
you reopen the menu.
* Access the SQL Editor from the Explorer’s sidebar footer.
* Explorer preferences are available from the Explorer navigation
header.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Tyler <dshukertjr@gmail.com>
Co-authored-by: Nik Richers <nrichers@gmail.com>
Co-authored-by: Danny White <3104761+dnywh@users.noreply.github.com>
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
Co-authored-by: Jordi Enric <37541088+jordienr@users.noreply.github.com>
Co-authored-by: Gildas Garcia <1122076+djhi@users.noreply.github.com>
Co-authored-by: Katerina Skroumpelou <mandarini@users.noreply.github.com>
Co-authored-by: Franek <franek@ferly.co.uk>
Co-authored-by: Franek Richardson <franek@supabase.io>
Co-authored-by: Michał Olszewski <35968924+charconstpointer@users.noreply.github.com>
Co-authored-by: Steven Eubank <47563310+smeubank@users.noreply.github.com>
Co-authored-by: Anthony Lio <lionnet.ant@gmail.com>
Co-authored-by: Joey Lei <6957385+leizerbeam@users.noreply.github.com>
Co-authored-by: Ali Waseem <waseema393@gmail.com>
Co-authored-by: Samir Ketema <6003000+samirketema@users.noreply.github.com>
Co-authored-by: K-Dog (Kevin) <k.grueneberg1994@gmail.com>
|
||
|
|
a5ad2ce745 |
feat: log query/ingest insights (#50570)
We are doing a soft rollout for log pricing including log ingest and log querying. We currently only want to display usage/soft warnings, which is why the metrics are filtered out in some components. |
||
|
|
ad5c4bb879 |
fix: gracefully handle 403s on org invites for project-scoped members (#50876)
## Problem Gracefully handles 403s when getting org invitations as a project-scoped org member. The backend currently returns an empty list with a 200 status, but that will be changing soon - so this PR aims to fix the issue in advance. ## Solution Pretty self explanatory - but here is a before/after (with backend changes) ### Before <img width="2480" height="688" alt="CleanShot 2026-09-24 at 11 02 34 AM@2x" src="https://github.com/user-attachments/assets/13c6ed9e-7580-4962-9920-f49ede9c4592" /> ### After <img width="2466" height="820" alt="CleanShot 2026-09-24 at 11 07 13 AM@2x" src="https://github.com/user-attachments/assets/248f7bb5-1743-41c9-823f-f776a608dd17" /> <!-- ## Preview links If relevant, include links to changed pages for easy review access. Copy the preview base URL from the Vercel bot comment on this PR. Use the following table as an example template. | Site | Live | Preview | Search for | | -------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------- | | WWW | [/blog/your-post](https://supabase.com/blog/your-post) | [/blog/your-post](https://zone-www-dot-com-git-branch-name-supabase.vercel.app/blog/your-post) | unique phrase from the change | | Docs | [/docs/guides/your-page](https://supabase.com/docs/guides/your-page) | [/docs/guides/your-page](https://docs-git-branch-name-supabase.vercel.app/docs/guides/your-page) | unique phrase from the change | | Studio | [/dashboard](https://supabase.com/dashboard) | [/dashboard](https://studio-git-branch-name-supabase.vercel.app/dashboard) | unique phrase from the change | | Design system | [/design-system](https://supabase.com/design-system) | [/design-system](https://design-system-git-branch-name-supabase.vercel.app/design-system) | unique phrase from the change | | UI library | [/library](https://supabase.com/library) | [/library](https://ui-library-git-branch-name-supabase.vercel.app/library) | unique phrase from the change | | Knowledge base | [/kb/guides/your-page](https://supabase.com/kb/guides/your-page) | [/kb/guides/your-page](https://kb-git-branch-name-supabase.vercel.app/kb/guides/your-page) | unique phrase from the change | --> <!-- ## Additional context Optionally add any other context or screenshots. --> ## Review instructions 1. Open the preview 2. Navigate to the `Team` tab in `Organization` 3. Invite a project-scoped member 4. Accept the project-scoped member invite in another browser 5. Navigate to the same `Team` tab as that project-scoped member. ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which references [WORD_LIST](https://github.com/supabase/supabase/blob/master/apps/docs/WORD_LIST.md) and the docs [CONTRIBUTING](https://github.com/supabase/supabase/blob/master/apps/docs/CONTRIBUTING.md) guide <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Organization member lists now load even when invitation details aren’t accessible. * Missing invitation data no longer prevents member lists from loading. * Invitation errors other than access-denied errors, and errors loading members, continue to be reported. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
21df8d02e6 |
Rename best available region option to Auto (#50873)
The region selector's "Best available region" option now reads "Auto" and carries the Recommended badge. Also removes the "Select the region closest to your users for the best performance." description, which was misleading for the auto selection. Fixes FE-4468 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Updates** * The recommended region is now labeled “Auto” in both the selected value and the options list; its “Recommended” badge remains. * Removed general advice to choose a region closest to users. High-availability and local/staging notices are unchanged. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
d15634ae58 |
updated guidance for logs pricing, revised manage logs usage pages, introduction of the grace period(#49656)
Supabase Logs is moving to usage-based pricing. We're announcing changes early so impacted projects have time to adjust before billing begins when the grace period through early 2027. |
||
|
|
0381c5bc23 |
Fix unstable test by increasing its timeout (#50860)
## Problem We have an unstable test that fails the CI too often. ## Solution Increase its timeout. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Tests** * Updated the automated test timing allowance for an organization-switching scenario, helping the test complete reliably when mocked project-list requests take longer. This is a test-only change and does not alter the app’s behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
8ab2197eb8 |
Rename capacity monitor to resource monitor (#50849)
## Problem Capacity felt like a misleading naming for some users ## Solution renaming to resource monitor, to remove confusion with things like AWS capacity. And also leaves some room for interpretation that resource issues worth reporting are not always related to capacity. It could ust be interest in increase consumption. User expectations based on terminology will never be perfect though. ## Preview links https://supabase.com/docs/guides/observability/automate-with-agents/usage?queryGroups=agent-setup&agent-setup=prompt | Docs | [/docs/guides/your-page](https://supabase.com/docs/guides/observability/automate-with-agents/usage?queryGroups=agent-setup&agent-setup=prompt) <!-- ## Additional context Optionally add any other context or screenshots. --> ## Review instructions Provide a clear numbered procedure that the PR reviewer can walk through. 1. For example, `Open the live and preview links side-by-side.` 2. For example, `See the issue is fixed.` ## Checklist Check all before review: - [ ] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [ ] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which references [WORD_LIST](https://github.com/supabase/supabase/blob/master/apps/docs/WORD_LIST.md) and the docs [CONTRIBUTING](https://github.com/supabase/supabase/blob/master/apps/docs/CONTRIBUTING.md) guide <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Renamed “Capacity monitor” to “Resource monitor” across the guide, navigation, and monitoring prompt labels. * Updated the guide to link to the resource-report trigger documentation. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
ed8447a5aa | chore(docs): add Michal Olszewski to humans.txt (#50711) | ||
|
|
3990fb4207 |
Add Franek to humans.txt (#50852)
## Problem I'm missing from humans.txt ## Solution Added me to humans.txt <!-- ## Preview links If relevant, include links to changed pages for easy review access. Copy the preview base URL from the Vercel bot comment on this PR. Use the following table as an example template. | Site | Live | Preview | Search for | | -------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------- | | WWW | [/blog/your-post](https://supabase.com/blog/your-post) | [/blog/your-post](https://zone-www-dot-com-git-branch-name-supabase.vercel.app/blog/your-post) | unique phrase from the change | | Docs | [/docs/guides/your-page](https://supabase.com/docs/guides/your-page) | [/docs/guides/your-page](https://docs-git-branch-name-supabase.vercel.app/docs/guides/your-page) | unique phrase from the change | | Studio | [/dashboard](https://supabase.com/dashboard) | [/dashboard](https://studio-git-branch-name-supabase.vercel.app/dashboard) | unique phrase from the change | | Design system | [/design-system](https://supabase.com/design-system) | [/design-system](https://design-system-git-branch-name-supabase.vercel.app/design-system) | unique phrase from the change | | UI library | [/library](https://supabase.com/library) | [/library](https://ui-library-git-branch-name-supabase.vercel.app/library) | unique phrase from the change | | Knowledge base | [/kb/guides/your-page](https://supabase.com/kb/guides/your-page) | [/kb/guides/your-page](https://kb-git-branch-name-supabase.vercel.app/kb/guides/your-page) | unique phrase from the change | --> <!-- ## Additional context Optionally add any other context or screenshots. --> ## Review instructions Provide a clear numbered procedure that the PR reviewer can walk through. 1. For example, `Open the live and preview links side-by-side.` 2. For example, `See the issue is fixed.` ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [ ] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which references [WORD_LIST](https://github.com/supabase/supabase/blob/master/apps/docs/WORD_LIST.md) and the docs [CONTRIBUTING](https://github.com/supabase/supabase/blob/master/apps/docs/CONTRIBUTING.md) guide <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Updated the public team listing to include Franek Richardson in alphabetical order. This change updates the names shown in the team credits; it does not alter the app’s features, workflows, or behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Franek Richardson <franek@supabase.io> |
||
|
|
9a60994efb |
Update account audit logs to follow unified logs UX (#50799)
## Context This one's just something that I thought about while doing some debugging - our audit logs UI is pretty outdated and hard to skim as the information is very sparse. This is how it currently looks like (specifically Account audit logs for this PR, there's also org audit logs): <img width="1450" height="957" alt="image" src="https://github.com/user-attachments/assets/4b69511e-1d4f-4725-8ea9-78ddacf76942" /> <img width="1450" height="954" alt="image" src="https://github.com/user-attachments/assets/ec099f52-adef-499c-965a-11b8404bf235" /> Am opting to follow the same UX as that of our Unified Logs, so opting to update the UI as such: <img width="1451" height="958" alt="Screenshot 2026-09-23 at 22 04 33" src="https://github.com/user-attachments/assets/016bd26d-4078-42dc-9ff2-5bae9edbc1b2" /> <img width="1451" height="957" alt="Screenshot 2026-09-23 at 22 16 09" src="https://github.com/user-attachments/assets/f038b635-1359-4710-bc84-0f32ace1fb82" /> <img width="1450" height="956" alt="Screenshot 2026-09-23 at 22 16 37" src="https://github.com/user-attachments/assets/7230b94a-c7ec-4550-bb55-5405ebc074a7" /> More importantly, we'll allow users to copy logs as JSON so users can eject to their own agent if needed <img width="1201" height="350" alt="image" src="https://github.com/user-attachments/assets/587ab881-a501-41e6-8c9b-59191a2b2047" /> ## To test - [ ] Mainly just need to make sure that account audit logs still works as expected - it's all read only so just need to ensure that all information that's available before, is still available <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Browse account activity logs with date-range and project filters, project search, sorting, and refresh controls. Results automatically refresh every five minutes. * Choose preset date ranges, select individual logs or ranges of rows, and copy selected entries as formatted JSON. * Open a log to view request, actor, target, and action details, or inspect and copy its raw data. * Select log rows with a mouse or keyboard, and view loading, error, empty-results, and filtered-empty states. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
985ac1a8a1 |
test(docs): drop the removed all agent from the AgentSetup test (#50802)
Removes the `all` case from the `it.each` list in `apps/docs/internals/markdown-schema/AgentSetup.test.ts`. #50784 deleted the Generalist monitoring agent from `monitoring-agents.data.ts` but left this test asking for it, so `preserves the complete all prompt in one code block` fails with `Unknown monitoring agent id: all`. Docs Tests runs against the PR merged with `master`, so every docs PR since that merge has been red on this one test (example: https://github.com/supabase/supabase/actions/runs/35868308412/job/107227347408). No other reference to the removed agent remains under `apps/docs/internals`, `apps/docs/data`, or the AgentSetup component. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Tests** * Updated the agent IDs covered by a markdown schema test. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Joshen Lim <joshenlimek@gmail.com> |
||
|
|
ca28c945db |
Improve Table Editor design and accessibility (#50797)
## Problem Controls in the new table sheet's Columns section had inconsistent styling, alignment and focus states. Some icon-only actions were faint or lacked useful accessible names and tooltips, while related controls used different dropdown treatments. <img width="1428" height="250" alt="image" src="https://github.com/user-attachments/assets/9d1ad80d-2de0-4736-8ddb-0260e10ddacc" /> ## Solution - Align the column headers and fields on the same grid, and keep the foreign key action inside the name field in every state. - Give the drag, foreign key, suggestions, extra options and remove actions consistent button styling, sizing, hover and focus states, with accessible names and tooltips. - Move masking into Extra options and include it in the options count. Remove the separators around the former inline controls. - Use the design system's ComboboxTrigger for column types and align the Default value select's radius with it. Update the suggestions dropdown icon. - Tidy related field labels and update the affected table editor tests. The underlying column values and database behaviour are unchanged. | Original before | Original after | | --- | --- | | <img width="1498" height="392" alt="CleanShot 2026-09-24 at 13 33 40@2x" src="https://github.com/user-attachments/assets/56559e72-f289-44bc-999f-c1f3158c8f65" /> | <img width="1496" height="416" alt="CleanShot 2026-09-24 at 13 32 42@2x" src="https://github.com/user-attachments/assets/d05340fc-a460-4b5c-aaff-41127f692592" /> | ## Review instructions - Open **Table Editor → New table** and inspect the Columns section. Check that Name, Type and Default value headers align with their fields. - Tab through the row actions. Check their focus states, accessible names and tooltips, including the foreign key control with and without a relation. - Drag a column to reorder it, open Extra options and toggle masking. Check the options count and that the other settings still work. - Compare the closed Type and Default value dropdowns, including an enum default value. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Improvements** * Updated the column editor layout and controls for naming, sensitive-data settings, extra options, foreign-key editing, and column removal, with clearer tooltips and more consistent interactions. * Added accessible help tooltips for the Name and Default Value fields. * Updated column-type and suggested-value controls, including clearer guidance for choosing a suggested value. * Sensitive-data settings are now available in the extra-options menu. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Danny White <3104761+dnywh@users.noreply.github.com> |
||
|
|
0d3b73794b |
Joshenlim/fe 4465 experiment with best available region selection (#50851)
## Context Adds a "Best available region" option in the region selector for the project creation form - Should only show up for free plan organizations (will be selected as the default option instead of the recommended option from GET `/available-regions`) - "Recommended" badges will also be hidden in this scenario - Behaviour should be status quo for non free plan organizations <img width="500" alt="image" src="https://github.com/user-attachments/assets/de0a183d-37c0-445d-98ca-c5aaf6353e73" /> ## To test Important to ensure that project creation still behaves as per usual - [ ] Free plan: Creating a project with "best available region" select creates the project if the recommended region from GET `/available-regions` - A quick way to check this is to swap to a paid org and see the "recommended" general region - [ ] Free plan: Can also create a project with other regions selected as per usual - [ ] Non free plan: Can create project as per usual - [ ] Verify that everything is status quo if configcat feature flag is off |
||
|
|
d3f3903b69 |
feat(studio): show recent notebooks on the project homepage (#50825)
<img width="1758" height="1252" alt="image" src="https://github.com/user-attachments/assets/6f5ff072-9b47-4265-924d-0ca22368f6cb" /> ## What With the Explorer feature preview on, the homepage **Reports** row becomes a **Notebooks** row showing the four newest notebooks. - Advisor and notebook cards share a new `HomeCard` layout: same height and header, content anchored to the bottom, 3-line description clamp. - Notebook cards show the cell count, the creation date, and an **Analyze** button that starts the same chat as the Explorer notebook tab (`useAnalyzeNotebook`, now shared by both). - Advisor lint cards replace the assistant dropdown with two icon buttons: **Ask Assistant** and **Copy prompt**. Copy prompt shows a check after copying. - The empty state matches the Reports one. ## How to test 1. Turn on the Explorer feature preview and open a project's Home page. 2. The Reports row should be replaced by Notebooks. With no notebooks, you should see the empty state; **Create your first notebook** opens a new notebook in Explorer. 3. Click a notebook card to open it. Click **Analyze** to start an assistant chat. It should be disabled on a notebook with no cells. 4. On an advisor lint card, check **Ask Assistant** opens the assistant with the lint prompt, and **Copy prompt** copies it and briefly shows a check. 5. Turn the preview off: the Reports row comes back unchanged. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Project home now displays up to four notebooks, with options to create a notebook, open it, and see its cell count. * Start an AI analysis of a notebook directly from its card or from the notebook explorer. Analysis is unavailable for notebooks without cells. * Advisor cards now offer a one-click AI chat and a copyable prompt. * Project home shows notebooks when the Explorer preview is enabled; otherwise, it continues to show custom reports. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
881c124301 |
fix(studio): prevent API Gateway report tab crash (#50847)
## Problem The API Gateway report initializes its request range with the Logs Explorer helper, which leaves `iso_timestamp_end` empty. When an OTEL chart returns sparse microsecond timestamps, the time series filler can interpret them as milliseconds while deriving the end of the range and attempt an unbounded fill, freezing or crashing the browser tab. ## Fix Initialize the report with its date range helper so both request bounds are present. Normalize microsecond timestamps before deriving fill bounds, including the single point case. Add regression tests for sparse OTEL data with both empty and explicit end dates. ## How to test - Open Observability → API Gateway on a project with requests spanning two hourly buckets. The page should render without a tab crash, and the analytics requests should include a nonempty `iso_timestamp_end`. - Run `pnpm --filter studio exec vitest run tests/features/logs/Logs.utils.test.ts` and confirm the microsecond timestamp cases pass. - Run the Studio typecheck and lint checks. The Vitest, typecheck, and lint commands could not run in this worktree because Studio dependencies are not installed. The source diff passed `git diff --check` and received a focused code review. |
||
|
|
3ec44e54d2 |
fix(ui): restore grouped textarea top padding (#50843)
## Problem - Grouped textareas render text too close to the top border. The standalone `Textarea` retains its normal top padding. - `InputGroupTextarea` has overridden the inner textarea with `py-0` since #44282 on 31 March 2026. The group initially supplied `py-2`; #44387 removed that outer padding later the same day, leaving no top spacing. The override was retained during the border and surface updates in #44690 and #48887. - The textarea component page had no grouped textarea example, so this difference was easy to miss. ## Solution - Give the grouped textarea `pt-2` while retaining `pb-0` for block-end addons. The outer group continues to own its border and focus styles. - Add a “With addon” example to the textarea component page to keep this composition visible. ## Review instructions - Open `/design-system/docs/components/textarea` and find “With addon”. Confirm its text has the same top inset as the default textarea and the block-end addon remains below the input. - Open `/design-system/docs/ui-patterns/forms` and find “Textarea Multi-line text input for longer content with addon”. Confirm the text has the same top inset as the standalone textarea example immediately above it. ## Checklist - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added a textarea example with a supporting addon below the text field, showing a 120-character limit. * **Bug Fixes** * Clicking a block-end addon now focuses its textarea as well as an input. * **Documentation** * Added the textarea-with-addon example to the textarea component documentation. * **Style** * Added top padding to textareas within input groups while keeping bottom padding unchanged, adjusting spacing above entered text. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
38fa40e851 |
Joshenlim/fe 4445 explorer export as pdf option 2 (#50786)
## Context Another take on [this PR](https://github.com/supabase/supabase/pull/50733), decided that it's better UX + DX to use a PDF library (`@react-pdf/renderer`) instead for handling exporting Notebooks to PDF. The previous method using `print` involved a lot of sparse patching in various places + had a lot of limitations, not to mention its awkward UX to "Print". There's a lot of code changes in this PR but it's because we're constructing the PDF document based on the notebook's contents using primitives from `@react-pdf/renderer` which gives us a lot more control over the PDF's output. PDF output will differ slightly from the Notebook UI in the browser - Added a custom header in the report which covers the notebook name + project name, and when its exported - Empty markdown cells are skipped - Query cells will show both SQL content + results (either table or chart) - Opting to skip syntax highlighting for SQL content (Can consider separately) - Results will only be included in the PDF if the notebook's been run (Aligns with Copy as Markdown CTA) - For table results, _all_ rows will be rendered (Aligns with Copy as Markdown CTA) Feel free to give it a spin! 🙂 🙏 <img width="248" height="207" alt="image" src="https://github.com/user-attachments/assets/e38c14ba-7ee8-40ce-99b1-fa126453bf0f" /> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added an “Export as PDF” option for notebooks. - PDFs include notebook details, Markdown content, SQL queries, query results, tables, and charts. - Query exports show errors, empty results, row counts, and applicable row limits. - Export progress is displayed while the PDF is generated, and failures are reported via notifications. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
6817c483a7 |
feat(kb): migrate the existing migration guides to kb (#50194)
## 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? - Brings all the migration guides on https://supabase.com/docs/guides/platform/migrating-to-supabase excpet Vercel Postgres ([Vercel Postgres is no longer a product they offer](https://vercel.com/docs/postgres)). - Adds sharp dependency to support image optimizations. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added migration guides for Postgres databases and databases hosted on Amazon RDS, Neon, Heroku, Render, MySQL, and Microsoft SQL Server. * Added guides for migrating authentication users from Auth0 and Firebase to Supabase Auth. * Added guides for migrating Firebase Storage files and Firestore data to Supabase. * Included step-by-step instructions, command examples, troubleshooting guidance, and migration considerations. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Nik Richers <nrichers@gmail.com> |
||
|
|
d067e81a69 |
fix(ui): align primary colours across text, buttons, and controls (#50697)
## Problem Primary colour serves readable text and selected controls, but those uses need different shades. Light mode needs darker text, while dark mode needs a deeper button fill. Fixed brand green on interactive chrome also prevents a custom primary hue from carrying through the interface. Some slider tracks and selected text are hard to read. ## Solution - Keep `--primary` for accessible text and small selected indicators. Use `--primary-solid` for button fills, which need a deeper shade in dark mode. - Add `--primary-bright` for focus rings, selected control chrome, chart accents, and other interactive highlights. It follows `--primary-hue`; `brand-*` stays fixed for Supabase identity. - Make slider troughs clearer and text selection translucent with theme foreground text. - Document the split in the design-system colour guide. | Before | After | | --- | --- | | <img width="980" height="244" alt="Before: light mode primary controls" src="https://github.com/user-attachments/assets/dfae325d-0dfe-4231-8bcd-3f89c4b9d793" /> | <img width="982" height="204" alt="After: light mode primary controls" src="https://github.com/user-attachments/assets/5fdcb531-a6e3-4549-8a13-9d9a5ebe6e20" /> | | <img width="610" height="120" alt="Before: slider track" src="https://github.com/user-attachments/assets/04f768e0-51e8-4d06-9b97-c52f4a34f122" /> | <img width="622" height="126" alt="After: slider track" src="https://github.com/user-attachments/assets/95127f4e-13dc-4f0f-b63c-cf5d70a28b42" /> | | <img width="652" height="512" alt="Before: dark mode controls" src="https://github.com/user-attachments/assets/3f88de66-90cc-40ee-8cf1-b5f4eb87b09a" /> | <img width="658" height="498" alt="After: dark mode controls" src="https://github.com/user-attachments/assets/906bec30-6ca1-4614-9fb3-6cf5e5feec22" /> | ## Review instructions 1. Compare light and dark mode in the [colour usage guide](https://design-system-git-dnywh-fix-bright-brand-chrome-supabase.vercel.app/design-system/docs/color-usage#primary-and-brand-colors). Check primary ink, primary-solid, primary-bright, and fixed brand swatches. 2. In Studio, open the ‘new table’ sheet in [Table Editor](https://studio-staging-git-dnywh-fix-bright-brand-chrome-supabase.vercel.app/dashboard/project/_/editor). Tab through the new table sheet's fields and toggles. Check the focus rings, selected controls, and the sheet's edges in both themes. You do not need to save a table. 3. Select text in Studio in both themes, including a link or primary-coloured label. The selection and text should remain legible. 4. Check the [Field](https://design-system-git-dnywh-fix-bright-brand-chrome-supabase.vercel.app/design-system/docs/components/field) Price Range slider: the unused track should remain visible in both themes. The selected field card border should follow primary-bright. 5. Check the [Button](https://design-system-git-dnywh-fix-bright-brand-chrome-supabase.vercel.app/design-system/docs/components/button) and [Radio Group](https://design-system-git-dnywh-fix-bright-brand-chrome-supabase.vercel.app/design-system/docs/components/radio-group) previews. In dark mode, `primary` button fill should be deeper than primary [text](https://design-system-git-dnywh-fix-bright-brand-chrome-supabase.vercel.app/design-system/docs/color-usage#text); selected radios should remain readable. |
||
|
|
76c4f2b739 |
feat(studio): add time range to project logs filter bar (#50685)
<img width="1079" height="566" alt="image" src="https://github.com/user-attachments/assets/b6f360e9-dfcf-4717-86db-1fc9acc4ae6a" /> ## Problem Project logs only exposed time-range selection through the sidebar. ## Solution Add a Time range property to the filter bar using the sidebar’s picker, preset labels, and date formatting. Keep it synchronized with the sidebar and timeline, including retention checks. ## Review instructions 1. Open Project Logs and select **Time range** in the filter bar. Choose a preset and confirm the sidebar and logs update. 2. Select a custom range and confirm its label matches the sidebar’s date formatting. 3. Change the range in the sidebar or timeline and confirm the filter bar updates. Remove the time-range pill and confirm the range resets without removing other filters. 4. Select a range beyond the plan’s log retention and confirm the upgrade prompt appears. Validation: 67 focused tests passed, Studio typecheck passed, and changed Studio files passed lint. ## Checklist - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [ ] Docs authoring skills (not applicable: no docs-site topic changes) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added human-readable filter value labels while preserving the underlying selections. * Added dedicated log time-range filters with preset and custom ranges. * Added inline date-range picker support for flexible layouts. * Added controls to show or hide filter properties based on availability. * Added consistent date-range formatting and custom range support. * **Bug Fixes** * Invalid or incomplete time-range filters are no longer applied. * Time-range filters remain separate from standard column filters. * Clipboard interactions are limited to the popover date-picker variant. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com> |
||
|
|
a311279d66 |
feat(studio): add range and multi-row selection to DataTableInfinite (#50688)
Stack 3/4 · previous: #50687 · next: #50689 ## Problem `DataTableInfinite` could only open one row at a time. Multi-select meant clicking a separate checkbox column, with no support for ranges or modifier keys. ## Solution This PR only adds shared primitives. Behavior stays the same until a consumer passes `onSelectRow` (wired up in the next PR). - `selectTableRow` (`rowSelection.utils.ts`): a pure reducer for plain, Cmd/Ctrl-toggle, Shift-range, and additive-range selection over the current display order, with a fixed anchor. - `useTableRowSelection`: holds the selection state and resets it when its `scope` (project/filters) changes. - `DataTableProvider` gets an optional `onSelectRow`. When it's set, `DataTableInfinite` rows use it and reflect `row.getIsSelected()`. Rows also get `aria-selected`, Space activates them like Enter, and shift-click no longer selects text. ## Review instructions 1. Read `rowSelection.utils.test.ts`: it covers the selection rules. 2. Open Unified Logs. Row clicks should behave the same as on master. ## Checklist - [ ] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added richer data-table row selection, including multi-select, range selection, toggling, and keyboard support. - Added visual and accessibility feedback for selected rows, including pointer cursor and `aria-selected`. - Preserved selections across paging and live updates while resetting them when filters or projects change. - Added support for external row-selection callbacks. - **Tests** - Added comprehensive coverage for selection behavior and state persistence. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
71a252a445 |
feat(studio): show overview and raw JSON tabs for every log (#50687)
<img width="1086" height="810" alt="image" src="https://github.com/user-attachments/assets/8a9f0c64-145e-4475-a3df-67bd815e2200" /> Stack 2/4 · previous: #50686 · next: #50688 ## Problem The detail panel only showed an Overview tab for log types that have an inspection query. Every other type opened straight to Raw JSON. The panel also had no header saying which log was open. ## Solution - Adds `LogDetail`, which owns the inspection query, loading and error states, and the Raw JSON view. Errors now use `AlertError`. - Adds `LogOverview`, which maps each log type to its overview renderer. Types without one fall back to the new `LogFields`, a generic tree of expandable key/value rows built on `LogFieldRow`. - `ServiceFlowPanel` now shows a header (level dot + event message) above Overview / Raw JSON tabs for every log. - Moves `getLogDataForMetadataVisibility` to `ServiceFlowPanel.utils.ts` and adds `LogLevelDot`. ## Review instructions 1. Select a Realtime (or any other non-inspected) log. The Overview tab should list its fields, with nested objects that expand. 2. Select a Postgres log. The overview should look as before, and Raw JSON should still show the enriched log. 3. Switch between logs and confirm the tabs reset their scroll. ## Checklist - [ ] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added structured log overviews for Postgres, PostgREST, Auth, Storage, and Edge Functions, with a Raw JSON view for log details. - Added expandable log fields with filtering and copy actions, plus visual indicators for log severity. - **Bug Fixes** - Improved display of scalar, nested, date, and empty log values. - **Privacy** - Raw log data respects metadata visibility settings. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
eb738d2b84 |
feat(studio): open copy and filter actions from log detail rows (#50686)
<img width="1353" height="1046" alt="image" src="https://github.com/user-attachments/assets/22c69de8-59ff-4318-9044-c222b01b6154" /> Stack 1/4 · next: #50687 ## Problem In the Unified Logs detail panel, each field row had a small kebab button. Fields that couldn't be filtered fell back to a separate copy button, so the actions weren't consistent. Filter labels also repeated the column id ("Add as filter for method"). ## Solution - Adds `LogFieldRow`: the whole key/value row opens the actions menu on click or Enter. Rows you can filter show filter + copy, and every other row shows copy only. - `DataTableSheetRowAction` always renders the dropdown now. `table` is optional, copy is always available, labels read "Add filter", and the menu aligns to the row. - `DetailRow` is rebuilt on `LogFieldRow`. The section styling is refreshed: bordered collapsibles, no zebra striping, and `heading-default` section titles. The `topDivider` prop is removed. ## Review instructions 1. Open Unified Logs and select a Postgres or PostgREST log. 2. Click a filterable row (such as method or status). You should see "Add filter" and "Copy …" in one menu. 3. Tab to a row that can't be filtered and press Enter. You should see a copy-only menu. ## Checklist - [ ] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added consistent copy and filter actions to log detail rows. * Added keyboard-accessible row actions, including “Add filter” for filterable values. * **UI Improvements** * Updated log detail sections with clearer borders, headings, hover states, spacing, and typography. * Simplified detail row presentation and improved value wrapping and readability. * **Bug Fixes** * Improved handling of empty and filterable log values in detail rows. * **Tests** * Added coverage for copying values and applying filters from detail rows. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
d51ed9f451 |
Update Studio disk IO burst copy (#50809)
## Problem Studio copy ties disk IO burst behavior to compute size thresholds and says the IO budget "resets". Burst eligibility isn't a single size cutoff EBS burst credits refill continuously while disk usage runs below baseline Docs already use this framing (#50016) Fixes PROD-665 ## Solution Three copy changes: - `UnavailableChartBlock.tsx`: the burst balance chart placeholder no longer names a size. It now describes sustained IO with no burst credit pool - `database-charts.ts`: the Disk IO Burst Balance tooltip describes the EBS burst credit pool without referencing instance size - `ResourceExhaustionWarningBanner.constants.ts`: the warning and critical banners say the budget refills whenever disk usage runs below baseline, instead of "resets" ## Review instructions 1. Read the diff. Copy changes only. 2. Optional: on a project with burstable disk IO, open Reports > Database and hover the Disk IO Burst Balance chart title to see the new tooltip. ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which references [WORD_LIST](https://github.com/supabase/supabase/blob/master/apps/docs/WORD_LIST.md) and the docs [CONTRIBUTING](https://github.com/supabase/supabase/blob/master/apps/docs/CONTRIBUTING.md) guide <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Documentation * Updated disk I/O chart messaging to explain that some compute types sustain disk throughput without a burst credit pool to track. * Clarified that disk I/O burst budgets refill when demand is at or below baseline, and that throughput remains at baseline until the budget refills. * Updated the burst-balance chart tooltip to describe how compute uses the EBS burst credit pool. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
4998a137ec |
docs: correct function-to-function call rate limit for Edge Functions (#50806)
Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Kalleby Santos <105971119+kallebysantos@users.noreply.github.com> |
||
|
|
1716d87f59 | fix(studio): cap project name at 256 chars (#50804) | ||
|
|
ce0b778fec |
fix(studio): remove duplicate O T shortcut registration in schema visualizer (#50803)
The schema visualizer bound `schema-visualizer.find-table` (`O` then `T`) twice — once via `useShortcut` and again through the `<Shortcut>` wrapper around `FindTableSelector`, which registers the hotkey itself — so every mount logged a conflict warning and fired both handlers. Removed the redundant standalone hook; the wrapper renders under the same `shortcutsEnabled` gate, so behavior is unchanged. Fixes FE-4454 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Behavior Changes** * The schema visualizer no longer registers the standalone keyboard shortcut handler for Find Table. Find Table remains available from the toolbar. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
5b18f1d084 |
Allow setting null for connection pool size (#50726)
## Context Allows users to "reset" the value for connection pool size in pooler configuration under [database settings](http://supabase.com/dashboard/project/_/database/settings) <img width="500" alt="image" src="https://github.com/user-attachments/assets/4eb98088-1898-423c-8ef6-655fd0573601" /> Refer to the [Linear ticket](https://linear.app/supabase/issue/FE-4425/support-setting-null-for-pool-size-in-pooler-config) for more details about why this change is needed - its a bit of an explanation 😅 🙏 ## To test - [ ] Verify that you can save a pool size, and that the GET `/config/pgbouncer` network request returns `default_pool_size` property in its response - [ ] Verify that you can save while leaving the pool size input field empty, and that the GET `/config/pgbouncer` network request thereafter doesn't return `default_pool_size` in its response <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Preserved the intended database connection pool setting when no default pool size is specified, rather than automatically applying a compute-size-based value. * Explicitly entered pool sizes continue to be saved unchanged. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
f1b7c0aa4d |
docs: update compute size selection screenshots (#50798)
## Problem The Compute & Disk sizes screenshot is outdated after the changes from . https://supabase.com/docs/guides/platform/compute-and-disk#compute The screenshot still shows architecture, core-counts, and CPU labels. Fixes PROD-656 ## Solution A new screenshot has been provided to reflect the latest state of Studio. ## Review instructions Review the screenshot under: /docs/guides/platform/compute-and-disk#compute It should depict what the Studio shows under /dashboard/project/_/settings/infrastructure . Test dark & light mode. | Site | Live | Preview | Search for | | -------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------- | | Docs | [/docs/guides/platform/compute-and-disk#compute](https://supabase.com/docs/guides/platform/compute-and-disk#compute) | [/docs/guides/platform/compute-and-disk#compute](https://docs-git-docs-update-compute-size-screenshot-supabase.vercel.app/docs/guides/platform/compute-and-disk#compute) | N/A (screenshot) | ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [ ] If I wrote a new docs topic or edited an existing topic, I used the /write-the-docs or /edit-the-docs skill, which references [WORD_LIST](https://github.com/supabase/supabase/blob/master/apps/docs/WORD_LIST.md) and the docs [CONTRIBUTING](https://github.com/supabase/supabase/blob/master/apps/docs/CONTRIBUTING.md) guide |
||
|
|
1f3f050573 |
feat(www): clarify database-only positioning on the database page (#50667)
## Summary Clarifies on the database product page that a Supabase project can be used as a standalone Postgres database, and mirrors the change in the page's markdown version (`/database.md`). Ref: GROWTH-1191 ## Changes - **Hero and page metadata**: adds "Use it on its own, or with the rest of the Supabase platform." - **Features section**: intro reframed around the database. The "Just Postgres" card heading adds "standalone". - **`content/md/database.md`**: same sentence in the tagline. New short "Use it as a standalone database" section covering connecting, pooling, pricing, and Free plan pausing. Client libraries marked optional. Pooler naming updated to Supavisor. Links added for the connection guide and `pricing.md`. ## Notes - Pricing figures in the markdown mirror `packages/shared-data/plans.ts` and are static here. - The pausing statement matches `docs/guides/platform/free-project-pausing`. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Documentation** - Clarified that Supabase projects include dedicated, standalone Postgres databases. - Explained that databases can be used independently or alongside the Supabase platform. - Added guidance on connections, pooling, pricing, pausing, and optional client libraries. - Identified Supavisor as the pooling service and added relevant connection and pricing links. - **Content** - Updated database page messaging to highlight built-in security, realtime subscriptions, auto-generated APIs, portability, and no vendor lock-in. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
f508eae926 |
Add Polymet case study (#50793)
## Summary - Adds the Polymet case study (`apps/www/_customers/polymet.mdx`): how Polymet, an AI product designer, runs a real backend for tens of thousands of user projects a month on Supabase with a three-person team and no dedicated backend hire. - Adds light/dark logo assets provided by Polymet. - Content is the final draft reconciled with the customer's (Yus Hilmi, Founder/CEO) approved review edits. Ready for design/eng review. Tracked on [MARKET-2264](https://linear.app/supabase/issue/MARKET-2264/case-study-polymet). ## Test plan - [ ] Case study renders correctly at `/customers/polymet` - [ ] Logo displays correctly in both light and dark mode - [ ] Frontmatter fields (industry, region, company_size, supabase_products) render correctly in any related listing/filter UI 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added a customer story about how Polymet uses Supabase for its users’ projects, including its experience and future plans. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Wendie Cheung <wendie.cheung@supabase.io> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> |
||
|
|
e143c94e5f |
fix(studio): clarify SMTP password field UX when a password is already saved (#50794)
## What The custom SMTP password field showed a "Reveal" and "Copy" button next to text saying "this password cannot be viewed once saved" — contradictory, since those buttons implied there was something to reveal or copy. In reality the backend never returns the saved password, so the field was always blank and those buttons acted on an empty string. ## Why Reported in FE-3765: users found it confusing whether saving other fields would blank out their password, and the Reveal/Copy buttons appeared broken. ## Fix - Removed the non-functional Reveal/Copy buttons from the password input. - When a password is already saved, the field now shows a `••••••••••••••••` placeholder and copy reading "Stored password is hidden. Enter a new password to replace it." — matching the existing `STORED_SECRET_PLACEHOLDER` pattern already used in the Replication destination forms (BigQuery, ClickHouse, Snowflake, etc). - No behavior change: leaving the field blank on save still preserves the existing password (unchanged logic). ## Testing - Manually verified in the running app. - Added a component test (`SmtpForm.test.tsx`) covering both the "password already saved" and "fresh setup" states. - `tsc --noEmit`, `eslint`, and `prettier --check` all pass with no new errors/warnings. Fixes [FE-3765](https://linear.app/supabase/issue/FE-3765/custom-smtp-password-field-ux-issues) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Updates** * Configured SMTP passwords are masked, with a notice that entering a new password will replace the stored one. * For new SMTP setups, the password field prompts for the SMTP server password and does not show the stored-password notice. * The SMTP password field no longer provides controls to reveal or copy the password. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
f3094a29ce |
Remove cloud provider text from project cards (#50754)
Project cards and the project table showed the raw cloud provider (`AWS`, `AWS_K8S`) alongside the region, which is an internal implementation detail. Both now show the region only — matching the table's existing "Region" column header. Fixes FE-4441 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Updates** * Project cards now display the project’s region directly. * Project tables show only the region in the region column, with “N/A” when unavailable. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
fd5ef806d6 |
feat(studio): enable Assistant tracing for High Compliance projects (#50759)
Assistant chats from High Compliance projects now flow to Braintrust like any other project. The constraint that required suppressing them no longer applies, see AI-1241 for the details. `isTracingAllowed` now takes only the project region to maintain EU exclusion. Traces also carry an `isHighComplianceProject` metadata field, so the project's status at the time of the trace is recorded rather than looked up later against a setting customers can toggle. To verify, see [this sample trace](https://www.braintrust.dev/app/supabase.io/p/Assistant/logs?r=afabbdcc-aa89-446e-aa52-78aaa90d44a4&v=Production&s=afabbdcc-aa89-446e-aa52-78aaa90d44a4&tvt=trace) from a High Compliance project on staging which indicates that tracing is now enabled for these projects and that it carries metadata showing the high compliance status. | High Compliance project setting | `isHighComplianceProject` metadata | |--------|--------| | <img width="1554" height="454" alt="CleanShot 2026-09-22 at 5 14 58 PM@2x" src="https://github.com/user-attachments/assets/23901c6e-0d79-44e8-a6dd-43cdedba1799" /> | <img width="1674" height="990" alt="CleanShot 2026-09-22 at 5 17 40 PM@2x" src="https://github.com/user-attachments/assets/fb2fba55-bcc1-4136-a432-b33a5c7f9ca2" /> | Closes AI-1241 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Changes** * AI project compliance information is now represented by a unified high-compliance project status. * AI response tracing is now determined by project region: tracing remains disabled for EU and unknown regions, while known non-EU regions are eligible. * AI feedback and SQL generation now use the updated compliance and regional handling. * **Tests** * Updated coverage to reflect the revised compliance and tracing behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
4730e3a640 |
docs: remove Generalist monitoring agent (#50784)
The Generalist is too broad and doesn't do any one thing well. Removing it to focus on dogfooding the four targeted agents (Health, Security, Performance, Capacity) before revisiting a combined agent. https://github.com/supabase/supabase/pull/50396 new PR since this one became messy with many upstream changes ## Problem I don't like the generalist ## Solution I am removing the generalist <!-- ## Preview links If relevant, include links to changed pages for easy review access. Copy the preview base URL from the Vercel bot comment on this PR. Use the following table as an example template. | Site | Live | Preview | Search for | | -------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------- | | WWW | [/blog/your-post](https://supabase.com/blog/your-post) | [/blog/your-post](https://zone-www-dot-com-git-branch-name-supabase.vercel.app/blog/your-post) | unique phrase from the change | | Docs | [/docs/guides/your-page](https://supabase.com/docs/guides/your-page) | [/docs/guides/your-page](https://docs-git-branch-name-supabase.vercel.app/docs/guides/your-page) | unique phrase from the change | | Studio | [/dashboard](https://supabase.com/dashboard) | [/dashboard](https://studio-git-branch-name-supabase.vercel.app/dashboard) | unique phrase from the change | | Design system | [/design-system](https://supabase.com/design-system) | [/design-system](https://design-system-git-branch-name-supabase.vercel.app/design-system) | unique phrase from the change | | UI library | [/library](https://supabase.com/library) | [/library](https://ui-library-git-branch-name-supabase.vercel.app/library) | unique phrase from the change | | Knowledge base | [/kb/guides/your-page](https://supabase.com/kb/guides/your-page) | [/kb/guides/your-page](https://kb-git-branch-name-supabase.vercel.app/kb/guides/your-page) | unique phrase from the change | --> <!-- ## Additional context Optionally add any other context or screenshots. --> ## Review instructions Simply removing generalist: https://supabase.com/docs/guides/observability/automate-with-agents <img width="305" height="339" alt="image" src="https://github.com/user-attachments/assets/bb537038-799f-4ec6-a357-c4cb3c552cba" /> So generalist will be no mas ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which references [WORD_LIST](https://github.com/supabase/supabase/blob/master/apps/docs/WORD_LIST.md) and the docs [CONTRIBUTING](https://github.com/supabase/supabase/blob/master/apps/docs/CONTRIBUTING.md) guide <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Removed the combined Generalist monitoring guide and its navigation entry. Separate guides for health, security, performance, and usage monitoring remain. * The Generalist agent card and combined monitoring prompt are no longer available. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
1235245e6e |
Recovery codes: delete recovery codes when deleting the last MFA (#50731)
## Problem The API prevents users from deleting their last MFA when they also have recovery codes. However the UI doesn't and they may see an error instead of being guided. ## Solution Delete the recovery codes first. <img width="1080" height="850" alt="image" src="https://github.com/user-attachments/assets/67d999e7-06ff-4c0a-a2cc-11b864cb32f4" /> ## Review instructions Provide a clear numbered procedure that the PR reviewer can walk through. 1. With an account that have only one MFA and recovery codes generated 2. Delete the MFA => You should see the dialog as in above screenshot. Check the presence of _Your recovery codes will be deleted too_ After deletion, you shouldn't see the Recovery codes section anymore. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Bug Fixes** - Improved multi-factor authentication management when recovery codes are available. - Users are warned that recovery codes will be deleted before removing their last authentication factor. - Removing the final authentication factor handles recovery-code deletion first. - Cancelling deletion leaves the factor and recovery codes unchanged. - Recovery-code handling applies only when enabled and relevant to last-factor removal. - Recovery-code management is available in all environments. - Delete actions are disabled while recovery-code status is loading, and an error message appears if recovery codes fail to load. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
564eab8ad7 | chore(self-hosted): update 2026-09-23 - 0.8.2 (#50790) | ||
|
|
3063679f1b |
feat(auth): restore key last-used timestamps FE-2462 FE-4315 (#50732)
## Problem Studio expected aliased fields from the last-used API-key endpoint, but the live endpoint returns OTEL attribute names. This kept legacy API-key activity unavailable and prevented Studio from showing activity for new JWT signing keys. Tracks FE-2462 and FE-4315. ## Fix Normalize the endpoint response at the data boundary, keep the `showApiKeysLastUsed` feature flag, and show activity from the past 24 hours for new JWT signing keys. Legacy HS256 signing keys remain blank because the analytics response does not provide a stable signing-key record ID for them. The request remains hosted-only, permission-gated, and non-blocking, and the existing last-rotated column remains intact. ## How to test - Make a request with a legacy anon or service-role API key, then open Project Settings > API Keys and verify its last request appears. - Make an Auth request signed by a new JWT signing key, then open JWT Keys and verify the matching key shows a Last used timestamp. - Verify a new key without activity shows No requests in the past 24 hours. - Verify the legacy HS256 signing-key row leaves Last used blank. - Expected result: legacy API keys and new JWT signing keys display activity from the shared endpoint without changing self-hosted Studio. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added a **Last used** column for JWT signing keys on supported platforms. * Displays usage timestamps, loading and error states, or when a key has had no requests in the past 24 hours. * Usage tracking now includes both API keys and JWT signing keys. * **Bug Fixes** * Improved handling of usage records for legacy and current keys. * Usage details appear only on supported platforms and for users with the required permissions. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com> |
||
|
|
cee7461a9a |
chore: allow PITR without small compute addon (#50699)
We no longer require Small Compute add-on to configure PITR. |
||
|
|
4b365eb4ee |
fix: pass projectRef/orgSlug to support link in table grid error (#50724)
## Summary Fixes [FE-3987](https://linear.app/supabase/issue/FE-3987/contact-support-pre-fills-the-wrong-supabase-project-id): the "Contact support" button shown in the Table Editor's inline error banner (e.g. "Failed to retrieve rows from table") didn't pass the current project or organization to the support form. This caused the support form to fall back to the user's first organization/project instead of the one actually affected — especially noticeable when the Management API request used to resolve the org also fails. ## Test plan - [ ] Open a project in Studio, go to **Table Editor**, open a table. - [ ] Trigger a failing table query — either block the `rest/v1/<table>` request in DevTools, or apply a filter with a mismatched type (e.g. `id = 'abc'` on an int column). - [ ] On the inline red "Failed to retrieve rows from table" banner, click **Contact support**. - [ ] Confirm the support form pre-fills the **correct organization and project** — the one the failing table actually belongs to. - [ ] Repeat with a project belonging to an organization that is *not* first in your org list, to confirm it's not coincidentally correct. - [ ] Repeat while simulating a Management API failure (e.g. block `api.supabase.com`/`*.supabase.co/platform/*`) to confirm the org still resolves correctly via the `orgSlug` fallback instead of silently defaulting to your first org. - [ ] Sanity check other "Contact support" entry points (header Feedback dropdown, Help sidebar) are unaffected — they use a separate, already-correct code path. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved error handling when project details cannot be loaded, preserving relevant project and organization context. * Improved fallback behavior for identifying the correct organization when project information is unavailable or unresolved. * Support requests opened from error messages now include applicable project and organization information. * Error messages now consistently display available additional actions alongside contact support options. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com> |
||
|
|
d1d9620cdf |
feat(studio): migrate Auth and Realtime reports to OTEL (#50663)
## Problem PR #50638 migrates API Gateway and Data API reports to OTEL, but the shared Auth and Realtime metrics still select legacy BigQuery SQL and the `logs.all` endpoint. ## Fix Route all active hosted shared API reports through the existing OTEL builders after feature flags load. Remove unused report variants and their source-selection abstraction while preserving the legacy BigQuery path for self-hosted Studio. This PR is stacked on #50638. ## How to test - Open the Auth observability report and confirm its seven shared metric requests use `logs.all.otel` with a `/auth` request-path filter. - Open the Realtime observability report and confirm its seven shared metric requests use `logs.all.otel` with a `/realtime` request-path filter. - Open the Data API report and confirm its existing OTEL behavior remains unchanged with a `/rest` request-path filter. - Expected result: hosted reports wait for ConfigCat before querying, while self-hosted Studio continues using the legacy BigQuery path. - Run `./apps/studio/node_modules/.bin/vitest --run apps/studio/components/interfaces/Reports/Reports.constants.otel.test.ts --config apps/studio/vitest.config.ts`. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Changes** - Shared API reports now support filtering by Auth, Realtime, and PostgREST traffic. - Filters for Storage, GraphQL, Functions, and other previously supported traffic types are no longer available. - Report queries now consistently use edge log data, improving consistency across request totals, routes, errors, response times, and network traffic metrics. - OpenTelemetry-backed reporting is now enabled consistently across supported report types where available. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
3ec2dfca44 | fix(stripe-atlas): guard stripe-atlas page in self-hosted mode (#50780) | ||
|
|
ab7783f2ca |
docs: add Mike Podobnik to humans.txt (#50779)
## Problem Mike Podobnik is missing from the team list in `apps/docs/public/humans.txt`. ## Solution Add Mike Podobnik between Michelle Jubrey and Miranda Limonczenko, preserving alphabetical placement and the existing plain-text format. ## Review instructions 1. Confirm the diff adds only `Mike Podobnik`. 2. Verify the name appears between Michelle Jubrey and Miranda Limonczenko. ## Validation - `git diff --check` passes. - Verified a single insertion, no deletions, and correct alphabetical placement between the adjacent entries. - Build and application tests skipped for this static text-only addition. The repository's Prettier check does not include `.txt` files. ## Checklist - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md). - Docs topic authoring checklist is not applicable: this change only adds a name to a plain-text team list. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added Mike Podobnik to the team listing. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com> |
||
|
|
cf5f1545bd |
feat(studio): add notebook permissions to scoped access tokens (#50764)
## Problem
The Management API now has `/v2/projects/{ref}/notebooks`, gated by the
new `project_notebooks_read` / `project_notebooks_write` FGA
permissions. Studio pins `@supabase/shared-types` 0.1.95, which predates
them, so the scoped access token form can't grant them. Tokens created
with every permission selected still get `403 forbidden` on the notebook
endpoints.
## Solution
- Bump `@supabase/shared-types` to 0.1.96 (Studio and shared-data),
which publishes the notebook permissions.
- Add a **Notebooks** entry to the permission catalog (Project category,
next to SQL Snippets).
- Add minimum roles to `FGA_SCOPE_MINIMUM_ROLE`: read is `readonly`,
write is `developer`, matching the OpenFGA model.
The docs permission tables don't change yet. They're built from the
docs' checked-in v2 spec, which doesn't include the notebook endpoints,
so the row appears on the next spec sync.
## Review instructions
1. In the preview, go to **Account → Access Tokens** and create a scoped
token for a project. Check that **Notebooks** is listed under Project,
and set it to Read-write.
2. List notebooks with the new token:
```bash
curl -s -H "Authorization: Bearer $TOKEN"
"https://api.supabase.com/v2/projects/$REF/notebooks"
```
It should return `200` with `{ "links": ..., "data": [...] }`, not
`403`.
3. Optional: create a token with Notebooks set to None, repeat step 2,
and check it returns `403`.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Added project-level notebook permissions to access tokens.
- Access tokens can now grant read-only or developer-level access for
managing shared project notebooks.
- Project notebook permissions are displayed in the token creation
interface and supporting documentation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
||
|
|
c8521c7ed4 |
Add Carson Adam to humans.txt (#50650)
## 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? Update humans text - new joiner Bug fix, feature, docs update, ... ## What is the current behavior? Please link any relevant issues here. ## What is the new behavior? Feel free to include screenshots if it includes visual changes. ## Additional context Add any other context or screenshots. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Documentation** - Added Carson Adam to the team member listing. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
ec574f3a51 |
fix(studio): pass Authorization header to assistant list_policies tool (#50756)
<!-- ccr-slack-attribution --> _Requested by **Saxon Fletcher** · [Slack thread](https://supabase.slack.com/archives/C051L8U2EJF/p1789995309253479?thread_ts=1789995309.253479&cid=C051L8U2EJF)_ Resolves AI-1246 ## Problem **Before:** The Assistant's `list_policies` tool fails in about 70% of traces. It only "succeeds" when the org has AI opt-in disabled, because then it returns the privacy stub and never makes a request. When opt-in is enabled, it runs the pg-meta query server-side with no `Authorization` header, so the request is unauthenticated and fails. The Assistant then falls back to `execute_sql`. **After:** `list_policies` sends the caller's `Authorization` header, the same way `execute_sql` in `studio-tools.ts` already does, so it returns the project's RLS policies. ## Solution `getTools` already receives `authorization` but didn't pass it to `getSchemaTools`. This PR passes it through. `list_policies` builds `{ Authorization }` from it, and `getDatabasePolicies` gets an optional `headersInit` argument that it forwards to `executeSql`, the same pattern `getDatabaseFunctions` uses. Existing client-side callers of `getDatabasePolicies` don't change. Files: `lib/ai/tools/index.ts`, `lib/ai/tools/schema-tools.ts`, `data/database-policies/database-policies-query.ts`, plus tests in `lib/ai/tools/schema-tools.test.ts` (new) and `lib/ai/tools/index.test.ts`. ## Review instructions 1. Read `schema-tools.ts` and compare it with the `authHeaders` handling in `studio-tools.ts` (`execute_sql`). 2. On the preview, use an org with AI opt-in set to at least "schema" and ask the Assistant to list the RLS policies on `public`. `list_policies` should return the policies without falling back to `execute_sql`. Local gates (all passed): - `pnpm typecheck` in `apps/studio` (next typegen + `tsc --noEmit`) - `npx eslint` on touched files: 0 errors. The 2 warnings are on lines this PR doesn't change. - `npx vitest run lib/ai/tools/schema-tools.test.ts lib/ai/tools/index.test.ts lib/ai/tool-filter.test.ts`: 24/24 passed. I also ran the new header test against the old `schema-tools.ts` and it failed, as expected. - `SORT_IMPORTS=false npx prettier --config prettier.config.mjs --check` on touched files Follow-up, not in this PR: `getRlsKnowledge` in `fallback-tools.ts` (self-hosted path) also calls `getDatabasePolicies` without headers, even though a `headers` object is already in scope there. ## AI disclosure Claude Code (agent) wrote this PR from the Slack request. @SaxonF (Saxon Fletcher) is the accountable human owner. A human needs to review it before merge. ## Checklist - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [ ] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill (N/A, no docs changes) 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_0171Mk7SiKYLDDoAQvbDYfeK --- _Generated by [Claude Code](https://claude.ai/code/session_0171Mk7SiKYLDDoAQvbDYfeK)_ --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Joshen Lim <joshenlimek@gmail.com> |
||
|
|
e7e76ca0da |
fix: misleading privatelink dns copy (#50771)
Somewhat urgent update to documentation based on new AWS behavior. Will include additional details when we properly support custom DNS for privatelink <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Updated the PrivateLink endpoint creation guide’s Option A steps and numbering. The DNS record note now stands on its own, without referencing a removed step. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
cd77bebafd |
chore(ui): refresh shared button styles (#50197)
## What kind of change does this PR introduce? UI polish / design system: refreshed button styles, related token tweaks, and a shared floating-button plate. Resolves DEPR-652. ## What is the current behavior? Default, primary, and secondary buttons use older fills, borders, and hover treatments. Primary still leans on brand scale utilities. Default fills don’t always read as raised chrome across surfaces, and floating copy / expand / scroll controls can let busy content show through translucent fills. Call sites hand-roll `rounded-* bg-background` wrappers for that. ## What is the new behavior? Refreshes primary, default, and secondary buttons with medium-weight labels, subtle shadows and inset edges, and smoother transitions. Light-mode default buttons use a raised fill with an accent hover state, primary text is brighter, and inline keyboard shortcuts inherit the button’s colour. Adds `FloatingPlate`: an opaque `bg-popover` shell for floating default buttons (and small clusters). Migrates Studio, Docs-related patterns, www, and `ui-patterns` floaters onto it so busy content no longer shows through translucent fills. Positioning, z-index, and hover/focus reveal stay on the plate’s `className`. Use `rounded="full"` for pills. Also: - Moves primary onto semantic `--primary` / `--primary-hover` (with a light-theme override) instead of brand utility fills - Tokenises button shadows as `--button-shadow-drop` / `--button-shadow-raised` / `--button-shadow-default` on the Button base - Aligns hover direction: darken on light mode, lighten on dark mode for both default and primary - Default fill stays opaque `bg-card` in light (occlusion) and translucent `bg-muted` in dark (adapts to the local surface) - Documents fills and `FloatingPlate` on the design-system Button page (with a live example) - Scales shared radius tokens in Studio and www; medium+ Button sizes use a proportionally softer radius - Fixes www nav CTA centering (`lg:inline-flex` instead of `lg:block`) - Query detail Expand/Collapse wires `aria-expanded` / `aria-controls` | Before | After | | --- | --- | | <img width="1074" height="438" alt="CleanShot 2026-09-18 at 15 52 51@2x" src="https://github.com/user-attachments/assets/ef43da21-b053-4b7e-9ac4-ab8b428228ab" /> | <img width="1090" height="464" alt="CleanShot 2026-09-18 at 15 50 59@2x" src="https://github.com/user-attachments/assets/2ddc55fc-4c8d-499c-a280-f3db3d99023c" /> | | <img width="1082" height="446" alt="CleanShot 2026-09-18 at 15 52 35@2x" src="https://github.com/user-attachments/assets/3dd5452d-325a-4e4a-a79d-26c6c6950a31" /> | <img width="1078" height="446" alt="CleanShot 2026-09-18 at 15 51 13@2x" src="https://github.com/user-attachments/assets/93666385-3e6e-42e0-9891-9cd6bb935b67" /> | ## To test ### Design system - [Button page](https://design-system-git-chore-button-styles-supabase.vercel.app/design-system/docs/components/button): default / primary in light and dark; hover should darken on light, lighten on dark - Same page: [Floating over content](https://design-system-git-chore-button-styles-supabase.vercel.app/design-system/docs/components/button#floating-over-content) / [Floating plate](https://design-system-git-chore-button-styles-supabase.vercel.app/design-system/docs/components/button#floating-plate) example; Copy over SQL should stay opaque - Spot-check hover on a code preview Copy control ### Docs [Docs deploy preview](https://docs-git-chore-button-styles-supabase.vercel.app/docs): - [Docs homepage](https://docs-git-chore-button-styles-supabase.vercel.app/docs): top-right **Sign up** / **Dashboard** primary; menu icon beside it (default icon button) - Shrink below `lg` and open the hamburger drawer: bottom **Sign in** (default) + **Start your project** (primary) medium block buttons - Tab once for **Skip to content** (FloatingPlate) - [MCP guide](https://docs-git-chore-button-styles-supabase.vercel.app/docs/guides/ai-tools/mcp): project picker - [Apple login](https://docs-git-chore-button-styles-supabase.vercel.app/docs/guides/auth/social-login/auth-apple): **Generate Secret Key** button in the Apple Secret Generator - Optional opacity check: any guide code block Copy control (e.g. at the bottom of [Import data into Supabase](https://docs-git-chore-button-styles-supabase.vercel.app/docs/guides/database/import-data)) ### Studio [Studio deploy preview](https://studio-staging-git-chore-button-styles-supabase.vercel.app/): - **Observability → Query Performance**: open a query detail → Expand/Collapse pill + SQL Copy chip (dark: no bleed-through) - **Observability → Query Insights**: select a query → Clear query pill - **Table Editor → any table → Definition** → floating **Open in SQL Editor** - **Connect → Framework → Add files**: Copy on the code tabs (FloatingPlate; light hover follow-up is DEPR-694) - Tab once for **Skip to content** ### WWW - [www deploy preview](https://zone-www-dot-com-git-chore-button-styles-supabase.vercel.app/): nav Sign in / Start your project vertical centering; hero medium CTAs radius --------- Co-authored-by: Danny White <3104761+dnywh@users.noreply.github.com> |
||
|
|
59e2122833 |
docs(pipelines): nest destination guides (#50708)
## Problem Pipeline destination guides live beside the Pipelines overview, so their sidebar hierarchy and URLs do not reflect that they belong to Pipelines. ## Solution Moves the BigQuery, ClickHouse, DuckLake, and Snowflake guides under `/database/replication/pipelines/`, redirects the old URLs in both docs preview (`apps/docs/next.config.mjs`) and production (`apps/www/lib/redirects.js`), and updates internal documentation links. The matching Studio changes, including destination-aware links from the creation sheet, will follow in a separate PR. ## To test - [Pipelines overview](https://docs-git-dnywh-docsnest-pipeline-destinations-supabase.vercel.app/docs/guides/database/replication/pipelines) - Destination guides: [BigQuery](https://docs-git-dnywh-docsnest-pipeline-destinations-supabase.vercel.app/docs/guides/database/replication/pipelines/bigquery), [ClickHouse](https://docs-git-dnywh-docsnest-pipeline-destinations-supabase.vercel.app/docs/guides/database/replication/pipelines/clickhouse), [DuckLake](https://docs-git-dnywh-docsnest-pipeline-destinations-supabase.vercel.app/docs/guides/database/replication/pipelines/ducklake), [Snowflake](https://docs-git-dnywh-docsnest-pipeline-destinations-supabase.vercel.app/docs/guides/database/replication/pipelines/snowflake) - [Old Snowflake URL](https://docs-git-dnywh-docsnest-pipeline-destinations-supabase.vercel.app/docs/guides/database/replication/snowflake) ## Review instructions 1. Open the Pipelines overview and confirm the four destination guides appear beneath Pipelines in the sidebar. 2. Open each destination guide and confirm its nested URL and content load correctly. 3. Open the old Snowflake URL and confirm it redirects to its new location. ## Checklist - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which references [WORD_LIST](https://github.com/supabase/supabase/blob/master/apps/docs/WORD_LIST.md) and the docs [CONTRIBUTING](https://github.com/supabase/supabase/blob/master/apps/docs/CONTRIBUTING.md) guide <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Moved BigQuery, ClickHouse, DuckLake, and Snowflake replication guides to a dedicated pipelines section and updated related navigation and links. * **Bug Fixes** * Added permanent redirects so existing links to the four destination guides continue to work. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |