Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
4557db1
Adding Jason Farber and Sean Thompson to humans (#40123)
supabase-jason Nov 4, 2025
f68bf01
fix(docs): Clarify auth.admin.generateLink does not send emails or OT…
thewheat Nov 4, 2025
a9482fa
fix e2e test: switch schema (#40122)
jordienr Nov 4, 2025
d822de0
feat: add min calls filter to Query Performance FE-2071 (#40125)
jordienr Nov 4, 2025
a0b8229
docs: github actions testing 404 (#39914)
Hallidayo Nov 4, 2025
6a2fb0f
Fix: updated monaco editor to not eat up CMD + i (#40111)
awaseem Nov 4, 2025
47e1134
feat: Vector buckets - initial work (#39597)
ivasilov Nov 4, 2025
62a6ffc
Fix: Fixed string range to account for Z search (#40053)
awaseem Nov 4, 2025
0a8fd27
chore: add athens meetup (#40130)
stylessh Nov 4, 2025
a00fdc1
Fix connection details analytics buckets, remove go to vault CTA for …
joshenlim Nov 4, 2025
80d32c5
Fix button variant in categories on click (#39972)
fujiyuto Nov 4, 2025
91f8cb0
[docs]: fix unreachable pages from nav menu (#40027)
NARUDESIGNS Nov 4, 2025
4f4497e
Rename SvelteKit setup guide's environment variables name in docs (#3…
iarata Nov 4, 2025
ac8d397
docs: Fix SvelteKit OAuth PCKE flow syntax (#39940) (#39944)
olegpolin Nov 4, 2025
84126fa
fix: tailwind xl breakpoint mismatch (#39814)
marsou001 Nov 4, 2025
52cb7b6
feat(docs): add lovable cloud troubleshooting guides (#40115)
tomaspozo Nov 4, 2025
99cb35e
ci(docs): add workflow to sync new guides from supabase/troubleshooti…
charislam Nov 4, 2025
be646f9
docs: Add John Schaeffer to humans.txt (#40139)
jnschaeffer Nov 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .cursor/rules/studio-ui.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ export const MyPageComponent = () => (
- Use our `_Shadcn_` form primitives from `ui` and prefer `FormItemLayout` with layout="flex-row-reverse" for most controls (see `apps/studio/components/interfaces/Settings/Integrations/GithubIntegration/GitHubIntegrationConnectionForm.tsx`).
- Keep imports from `ui` with `_Shadcn_` suffixes.
- Forms should generally be wrapped in a Card unless specified
- If the submit button is outside the form, add a new variable named formId outside the component, and set it as property id on the form element and formId on the button.

### Example (single field)

Expand All @@ -143,6 +144,8 @@ const profileSchema = z.object({
username: z.string().min(2, 'Username must be at least 2 characters'),
})

const formId = `profile-form`

export function ProfileForm() {
const form = useForm<z.infer<typeof profileSchema>>({
resolver: zodResolver(profileSchema),
Expand Down Expand Up @@ -200,6 +203,11 @@ export function ProfileForm() {

- Use a sheet when needing to reveal more complicated forms or information relating to an object and context switching away to a new page would be disruptive e.g. we list auth providers, clicking an auth provider opens a sheet with information about that provider and a form to enable, user can close sheet to go back to providers list

## React Query

- When doing a mutation, always use the mutate function. Always use onSuccess and onError with a toast.success and toast.error.
- Use mutateAsync only if the mutation is part of multiple async actions. Wrap the mutateAsync call with try/catch block and add toast.success and toast.error.

## Tables

- Use the generic ui table components for most tables
Expand Down
72 changes: 72 additions & 0 deletions .github/workflows/docs-sync-auto-troubleshooting.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Sync AI-generated troubleshooting guides from supabase/troubleshooting

name: Sync from supabase/troubleshooting

on:
repository_dispatch:
types: [sync_from_upstream]
workflow_dispatch:

permissions:
contents: write
pull-requests: write

jobs:
sync:
runs-on: ubuntu-latest

steps:
- name: Checkout supabase/supabase
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
with:
persist-credentials: true

- name: Decode the GitHub App Private Key
id: decode
run: |
private_key=$(echo "${{ secrets.DOCS_GITHUB_APP_PRIVATE_KEY }}" | base64 --decode | awk 'BEGIN {ORS="\\n"} {print}' | head -c -2) &> /dev/null
echo "::add-mask::$private_key"
echo "private-key=$private_key" >> "$GITHUB_OUTPUT"

- name: Create GitHub App token for supabase/troubleshooting
id: app-token
uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4
with:
app-id: ${{ vars.DOCS_GITHUB_APP_ID }}
private-key: ${{ steps.decode.outputs.private-key }}
repositories: troubleshooting
permission-contents: read

- name: Checkout supabase/troubleshooting
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
with:
persist-credentials: false
token: ${{ steps.app-token.outputs.token }}
repository: supabase/troubleshooting
path: troubleshooting-upstream

- name: Sync supabase/troubleshooting changes back to supabase/supabase
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config user.name 'github-docs-bot'
git config user.email 'github-docs-bot@supabase.com'
BRANCH_NAME="bot/sync-troubleshooting"
EXISTING_BRANCH=$(git ls-remote --heads origin $BRANCH_NAME)
if [[ -n "$EXISTING_BRANCH" ]]; then
git push origin --delete $BRANCH_NAME
fi
git checkout -b $BRANCH_NAME
rsync --archive --verbose --ignore-existing ./troubleshooting-upstream/guides/ ./apps/docs/content/troubleshooting/
git add apps/docs/content/troubleshooting/
if git diff --quiet --cached; then
echo "No changes to sync"
exit 0
fi
git commit --message "Sync from supabase/troubleshooting"
git push origin $BRANCH_NAME
if gh pr list --state open --head $BRANCH_NAME --json number --jq '.[0].number' | grep -q .; then
gh pr comment "$BRANCH_NAME" --body "Updated troubleshooting sync with latest changes."
else
gh pr create --title "[bot] Sync from supabase/troubleshooting" --body "This PR syncs the latest troubleshooting guides from the supabase/troubleshooting repository." --head $BRANCH_NAME
fi
2 changes: 1 addition & 1 deletion apps/docs/app/contributing/ContributingToC.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ interface TocItem extends HTMLAttributes<HTMLElement> {
}

export function ContributingToc({ className }: { className?: string }) {
const mobileToc = useBreakpoint('xl')
const mobileToc = useBreakpoint('lg')
const [tocItems, setTocItems] = useState<Array<TocItem>>([])

useEffect(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -697,6 +697,7 @@ export const auth: NavMenuConstant = {
name: 'Sessions',
url: '/guides/auth/sessions',
items: [
{ name: 'User sessions', url: '/guides/auth/sessions' },
{ name: 'Implicit flow', url: '/guides/auth/sessions/implicit-flow' },
{ name: 'PKCE flow', url: '/guides/auth/sessions/pkce-flow' },
],
Expand All @@ -711,6 +712,7 @@ export const auth: NavMenuConstant = {
name: 'Server-Side Rendering',
url: '/guides/auth/server-side',
items: [
{ name: 'Overview', url: '/guides/auth/server-side' },
{ name: 'Next.js guide', url: '/guides/auth/server-side/nextjs' },
{
name: 'SvelteKit guide',
Expand Down Expand Up @@ -746,7 +748,7 @@ export const auth: NavMenuConstant = {
{
name: 'Social Login (OAuth)',
url: '/guides/auth/social-login',
items: [...SocialLoginItems],
items: [{ name: 'Overview', url: '/guides/auth/social-login' }, ...SocialLoginItems],
enabled: allAuthProvidersEnabled,
},

Expand All @@ -755,6 +757,7 @@ export const auth: NavMenuConstant = {
url: '/guides/auth/enterprise-sso',
enabled: allAuthProvidersEnabled,
items: [
{ name: 'Overview', url: '/guides/auth/enterprise-sso' },
{
name: 'SAML 2.0',
url: '/guides/auth/enterprise-sso/auth-sso-saml' as `/${string}`,
Expand All @@ -781,6 +784,7 @@ export const auth: NavMenuConstant = {
name: 'Multi-Factor Authentication',
url: '/guides/auth/auth-mfa',
items: [
{ name: 'Overview', url: '/guides/auth/auth-mfa' },
{ name: 'App Authenticator (TOTP)', url: '/guides/auth/auth-mfa/totp' },
{ name: 'Phone', url: '/guides/auth/auth-mfa/phone' },
],
Expand Down Expand Up @@ -831,6 +835,7 @@ export const auth: NavMenuConstant = {
name: 'Auth Hooks',
url: '/guides/auth/auth-hooks',
items: [
{ name: 'Overview', url: '/guides/auth/auth-hooks' },
{
name: 'Custom access token hook',
url: '/guides/auth/auth-hooks/custom-access-token-hook' as `/${string}`,
Expand Down Expand Up @@ -880,7 +885,10 @@ export const auth: NavMenuConstant = {
name: 'JSON Web Tokens (JWT)',
url: '/guides/auth/jwts',
enabled: authFullSecurityEnabled,
items: [{ name: 'Claims Reference', url: '/guides/auth/jwt-fields' }],
items: [
{ name: 'Overview', url: '/guides/auth/jwts' },
{ name: 'Claims Reference', url: '/guides/auth/jwt-fields' },
],
},
{
name: 'JWT Signing Keys',
Expand Down Expand Up @@ -921,6 +929,7 @@ const ormQuickstarts: NavMenuSection = {
name: 'Prisma',
url: '/guides/database/prisma',
items: [
{ name: 'Connecting with Prisma', url: '/guides/database/prisma' as `/${string}` },
{
name: 'Prisma troubleshooting',
url: '/guides/database/prisma/prisma-troubleshooting' as `/${string}`,
Expand Down Expand Up @@ -2008,7 +2017,13 @@ export const ai: NavMenuConstant = {
{
name: 'Vector indexes',
url: '/guides/ai/vector-indexes',
items: vectorIndexItems,
items: [
{
name: 'Overview',
url: '/guides/ai/vector-indexes',
},
...vectorIndexItems,
],
},
{
name: 'Automatic embeddings',
Expand Down Expand Up @@ -2355,6 +2370,10 @@ export const platform: NavMenuConstant = {
name: 'Migrating within Supabase',
url: '/guides/platform/migrating-within-supabase',
items: [
{
name: 'Overview',
url: '/guides/platform/migrating-within-supabase' as `/${string}`,
},
{
name: 'Restore Dashboard backup',
url: '/guides/platform/migrating-within-supabase/dashboard-restore' as `/${string}`,
Expand All @@ -2368,7 +2387,10 @@ export const platform: NavMenuConstant = {
{
name: 'Migrating to Supabase',
url: '/guides/platform/migrating-to-supabase',
items: MIGRATION_PAGES,
items: [
{ name: 'Overview', url: '/guides/platform/migrating-to-supabase' as `/${string}` },
...MIGRATION_PAGES,
],
},
],
},
Expand All @@ -2385,6 +2407,10 @@ export const platform: NavMenuConstant = {
url: '/guides/platform/multi-factor-authentication',
enabled: fullPlatformEnabled,
items: [
{
name: 'Overview',
url: '/guides/platform/multi-factor-authentication' as `/${string}`,
},
{
name: 'Enforce MFA on organization',
url: '/guides/platform/mfa/org-mfa-enforcement' as `/${string}`,
Expand All @@ -2405,6 +2431,7 @@ export const platform: NavMenuConstant = {
url: '/guides/platform/sso',
enabled: fullPlatformEnabled,
items: [
{ name: 'Overview', url: '/guides/platform/sso' as `/${string}` },
{ name: 'SSO with Azure AD', url: '/guides/platform/sso/azure' },
{
name: 'SSO with Google Workspace',
Expand Down Expand Up @@ -2463,8 +2490,12 @@ export const platform: NavMenuConstant = {
},
{
name: 'Manage your usage',
url: '/guides/platform/manage-your-usage' as `/${string}`,
url: '/guides/platform/manage-your-usage',
items: [
{
name: 'Overview',
url: '/guides/platform/manage-your-usage' as `/${string}`,
},
{
name: 'Compute',
url: '/guides/platform/manage-your-usage/compute' as `/${string}`,
Expand Down Expand Up @@ -2563,6 +2594,10 @@ export const platform: NavMenuConstant = {
name: 'AWS Marketplace',
url: '/guides/platform/aws-marketplace',
items: [
{
name: 'Overview',
url: '/guides/platform/aws-marketplace' as `/${string}`,
},
{
name: 'Getting Started',
url: '/guides/platform/aws-marketplace/getting-started',
Expand Down Expand Up @@ -2804,6 +2839,10 @@ export const integrations: NavMenuConstant = {
name: 'Build a Supabase integration',
url: '/guides/integrations/build-a-supabase-integration',
items: [
{
name: 'Overview',
url: '/guides/integrations/build-a-supabase-integration' as `/${string}`,
},
{
name: 'OAuth scopes',
url: '/guides/integrations/build-a-supabase-integration/oauth-scopes' as `/${string}`,
Expand Down
4 changes: 2 additions & 2 deletions apps/docs/content/_partials/oauth_pkce_flow.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -123,12 +123,12 @@ export const GET = async (event) => {
if (code) {
const { error } = await supabase.auth.exchangeCodeForSession(code)
if (!error) {
throw redirect(303, `/${next.slice(1)}`);
redirect(303, `/${next.slice(1)}`);
}
}

// return the user to an error page with instructions
throw redirect(303, '/auth/auth-code-error');
redirect(303, '/auth/auth-code-error');
};
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ hideToc: true
<$CodeTabs>

```text name=.env
VITE_PUBLIC_SUPABASE_URL=<SUBSTITUTE_SUPABASE_URL>
VITE_PUBLIC_SUPABASE_PUBLISHABLE_KEY=<SUBSTITUTE_SUPABASE_PUBLISHABLE_KEY>
PUBLIC_VITE_SUPABASE_URL=<SUBSTITUTE_SUPABASE_URL>
PUBLIC_VITE_SUPABASE_PUBLISHABLE_KEY=<SUBSTITUTE_SUPABASE_PUBLISHABLE_KEY>
```

</$CodeTabs>
Expand All @@ -90,16 +90,16 @@ hideToc: true

```js name=src/lib/supabaseClient.js
import { createClient } from '@supabase/supabase-js';
import { VITE_PUBLIC_SUPABASE_URL, VITE_PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public';
import { PUBLIC_VITE_SUPABASE_URL, PUBLIC_VITE_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public';

export const supabase = createClient(VITE_PUBLIC_SUPABASE_URL, VITE_PUBLIC_SUPABASE_PUBLISHABLE_KEY)
export const supabase = createClient(PUBLIC_VITE_SUPABASE_URL, PUBLIC_VITE_SUPABASE_PUBLISHABLE_KEY)
```

```ts name=src/lib/supabaseClient.ts
import { createClient } from '@supabase/supabase-js';
import { VITE_PUBLIC_SUPABASE_URL, VITE_PUBLIC_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public';
import { PUBLIC_VITE_SUPABASE_URL, PUBLIC_VITE_SUPABASE_PUBLISHABLE_KEY } from '$env/static/public';

export const supabase = createClient(VITE_PUBLIC_SUPABASE_URL, VITE_PUBLIC_SUPABASE_PUBLISHABLE_KEY)
export const supabase = createClient(PUBLIC_VITE_SUPABASE_URL, PUBLIC_VITE_SUPABASE_PUBLISHABLE_KEY)
```

</$CodeTabs>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Our friends at [Basejump](https://usebasejump.com/) have created a useful set of

### Running database tests in CI

Use our GitHub Action to [automate your database tests](/docs/guides/cli/github-action/testing#testing-your-database).
Use our GitHub Action to [automate your database tests](/docs/guides/deployment/ci/testing).

## Testing your Edge Functions

Expand Down
Loading
Loading