feat: Supabase for Platforms launch (#41056)
* DRAFT: creating some draft docs for PaaS * adds a link in the sidebar * fix images * refactor all images * add changes for functions * more updates * Adds more docs * cleaning up the project launch section * add PaaS project transfer instructions * Apply suggestions from code review Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * updates * add docs on named restore points * remove note about enabling physical backups on v2 * update project claim flow with latest api endpoint * update docs * Update apps/docs/content/guides/integrations/platform-as-a-service.mdx Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Update apps/docs/content/guides/integrations/platform-as-a-service.mdx Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * updates * updates * updates * updates * updates * fix mgmt api links * remove "new" from api keys * updates * updates * add hyperlink ai builder solutions page * feat: Supabase for Platforms launch post # Conflicts: # apps/www/public/rss.xml # Conflicts: # apps/www/public/rss.xml * add blog assets * update marketing copy on ai builder solutions page * docs updates * fix scroll in partnership section hyperlink * format * updates * add words to spelling allowlist * updates * updates --------- Co-authored-by: Copple <10214025+kiwicopple@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@@ -2951,22 +2951,25 @@ export const integrations: NavMenuConstant = {
|
||||
},
|
||||
{
|
||||
name: 'Build Your Own',
|
||||
url: undefined,
|
||||
items: [
|
||||
{
|
||||
name: 'Build a Supabase integration',
|
||||
url: '/guides/integrations/build-a-supabase-integration',
|
||||
name: 'Supabase OAuth Integration',
|
||||
url: '/guides/integrations/build-a-supabase-oauth-integration',
|
||||
items: [
|
||||
{
|
||||
name: 'Overview',
|
||||
url: '/guides/integrations/build-a-supabase-integration' as `/${string}`,
|
||||
url: '/guides/integrations/build-a-supabase-oauth-integration',
|
||||
},
|
||||
{
|
||||
name: 'OAuth scopes',
|
||||
url: '/guides/integrations/build-a-supabase-integration/oauth-scopes' as `/${string}`,
|
||||
url: '/guides/integrations/build-a-supabase-oauth-integration/oauth-scopes',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Supabase for Platforms',
|
||||
url: '/guides/integrations/supabase-for-platforms',
|
||||
},
|
||||
],
|
||||
},
|
||||
{ name: 'Integrations', url: undefined, items: [] },
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
id: 'build-a-supabase-integration'
|
||||
id: 'build-a-supabase-oauth-integration'
|
||||
title: 'Build a Supabase Integration'
|
||||
subtitle: "This guide steps through building a Supabase Integration using OAuth2 and the management API, allowing you to manage users' organizations and projects on their behalf."
|
||||
description: 'Build a Supabase Integration using OAuth2 and the Management API.'
|
||||
446
apps/docs/content/guides/integrations/supabase-for-platforms.mdx
Normal file
@@ -0,0 +1,446 @@
|
||||
---
|
||||
id: 'supabase-for-platform'
|
||||
title: 'Supabase for Platforms'
|
||||
description: 'Use Supabase as a platform for your own business and tools.'
|
||||
subtitle: 'Use Supabase as a platform for your own business and tools.'
|
||||
---
|
||||
|
||||
Supabase is a [Platform as a Service](https://en.wikipedia.org/wiki/Platform_as_a_service) (PaaS) that can be managed programmatically. You can use it to offer the key primitives to your own users, such as [Database](/docs/guides/database/overview), [Auth](/docs/guides/auth), [Edge Functions](/docs/guides/functions), [Storage](/docs/guides/storage), and [Realtime](/docs/guides/realtime). Supabase is commonly used as a platform by AI Builders and frameworks needing a backend.
|
||||
|
||||
This document will guide you on best practices when using Supabase for your own platform and assumes that Supabase projects are in a Supabase organization that you own. If you want to instead interact with projects that your users own, navigate to [OAuth integration](/docs/guides/integrations/build-a-supabase-oauth-integration) for more details.
|
||||
|
||||

|
||||
|
||||
## Overview
|
||||
|
||||
All features of Supabase can be managed through the [Management API](/docs/reference/api/introduction) or the [remote MCP Server](/docs/guides/getting-started/mcp).
|
||||
|
||||
## Launching projects
|
||||
|
||||
Management API endpoints:
|
||||
|
||||
- Create project: [`POST /v1/projects`](https://api.supabase.com/api/v1#tag/projects/post/v1/projects)
|
||||
- Get smart region selection codes: [`GET /v1/projects/available-regions`](https://api.supabase.com/api/v1#tag/projects/get/v1/projects/available-regions)
|
||||
- Check service health: [`GET /v1/projects/{ref}/health`](https://api.supabase.com/api/v1#tag/projects/get/v1/projects/{ref}/health)
|
||||
|
||||
We recommend:
|
||||
|
||||
- **a _very_ secure password for each database**. Do not reuse the same password across databases.
|
||||
- **storing the encrypted version of the password**. Once you set the password during project creation, there is no way to programmatically change the password but you can do so manually in the Supabase Dashboard.
|
||||
- **using smart region selection to ensure there's enough capacity**. The available smart region codes are `americas`, `emea`, and `apac` and you can make a request to [`GET /v1/projects/available-regions`](https://api.supabase.com/api/v1#tag/projects/get/v1/projects/available-regions) for region details.
|
||||
- **make sure that the services are `ACTIVE_HEALTHY` after project creation**. After creating project, confirm the service that you want to make a request to has a status of `ACTIVE_HEALTHY` by polling [`GET /v1/projects/{ref}/health`](https://api.supabase.com/api/v1#tag/projects/get/v1/projects/{ref}/health). For example, before making a request to set an Auth configuration confirm that the Auth service has a status of `ACTIVE_HEALTHY`.
|
||||
|
||||
```sh
|
||||
curl https://api.supabase.com/v1/projects \
|
||||
--request POST \
|
||||
--header "Content-Type: application/json" \
|
||||
--header "Authorization: Bearer YOUR_SECRET_TOKEN" \
|
||||
--data '{
|
||||
"name": "Todo App",
|
||||
"organization_slug": "aaaabbbbccccddddeeee",
|
||||
"db_pass": "SUPER_SECURE_PASSWORD",
|
||||
"region_selection": {
|
||||
"type": "smartGroup",
|
||||
"code": "americas"
|
||||
},
|
||||
"desired_instance_size": "micro"
|
||||
}'
|
||||
```
|
||||
|
||||
### Pico compute instance
|
||||
|
||||
<Admonition type='note' title='Contact us for access to Pico instances'>
|
||||
|
||||
Only select customers have access to Pico instances. Submit this [form](/solutions/ai-builders#talk-to-partnerships-team) to get access.
|
||||
|
||||
</Admonition>
|
||||
|
||||
Pico instance is our newest compute instance and the only one that scales to zero when not used.
|
||||
|
||||
### Recommended API keys
|
||||
|
||||
Management API endpoints:
|
||||
|
||||
- Get the API keys: [`GET /v1/projects/{ref}/api-keys`](https://api.supabase.com/api/v1#tag/secrets/get/v1/projects/{ref}/api-keys)
|
||||
- Enable the API keys: [`POST /v1/projects/{ref}/api-keys`](https://api.supabase.com/api/v1#tag/secrets/post/v1/projects/{ref}/api-keys)
|
||||
|
||||
<Admonition type='note'>
|
||||
|
||||
We are in the process of migrating away from our legacy API keys `anon` and `service_role` and towards API keys `publishable` and `secret`.
|
||||
|
||||
You can learn more by navigating to [Upcoming changes to Supabase API Keys #29260](https://github.com/orgs/supabase/discussions/29260).
|
||||
|
||||
</Admonition>
|
||||
|
||||
Get the API keys by making a [`GET /v1/projects/{ref}/api-keys`](https://api.supabase.com/api/v1#tag/secrets/get/v1/projects/{ref}/api-keys) request.
|
||||
|
||||
```sh
|
||||
curl 'https://api.supabase.com/v1/projects/{ref}/api-keys?reveal=true' \
|
||||
--header 'Authorization: Bearer YOUR_SECRET_TOKEN'
|
||||
```
|
||||
|
||||
If the response includes `"publishable"` and `"secret"` keys then you're all set and you should only use those from now on.
|
||||
|
||||
Otherwise, enable the API keys by making two [`POST /v1/projects/{ref}/api-keys`](https://api.supabase.com/api/v1#tag/secrets/post/v1/projects/{ref}/api-keys) requests, one for `publishable` and another for `secret`.
|
||||
|
||||
```sh
|
||||
curl 'https://api.supabase.com/v1/projects/{ref}/api-keys' \
|
||||
--request POST \
|
||||
--header 'Content-Type: application/json' \
|
||||
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
|
||||
--data '{
|
||||
"type": "publishable",
|
||||
"name": "default"
|
||||
}'
|
||||
```
|
||||
|
||||
```sh
|
||||
curl 'https://api.supabase.com/v1/projects/{ref}/api-keys?reveal=true' \
|
||||
--request POST \
|
||||
--header 'Content-Type: application/json' \
|
||||
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
|
||||
--data '{
|
||||
"type": "secret",
|
||||
"name": "default",
|
||||
"secret_jwt_template": {
|
||||
"role": "service_role"
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
## Changing compute sizes
|
||||
|
||||
Management API endpoint: [`PATCH /v1/projects/{ref}/billing/addons`](https://api.supabase.com/api/v1#tag/billing/patch/v1/projects/{ref}/billing/addons)
|
||||
|
||||
<Admonition type='note'>
|
||||
|
||||
Once you have access to [Pico instances](#pico-compute-instance), you will no longer be able to upgrade or downgrade to Nano instances.
|
||||
|
||||
</Admonition>
|
||||
|
||||
You can upgrade and downgrade compute sizes by making requests to [`PATCH /v1/projects/{ref}/billing/addons`](https://api.supabase.com/api/v1#tag/billing/patch/v1/projects/{ref}/billing/addons).
|
||||
|
||||
```sh
|
||||
curl 'https://api.supabase.com/v1/projects/{ref}/billing/addons' \
|
||||
--request PATCH \
|
||||
--header 'Content-Type: application/json' \
|
||||
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
|
||||
--data '{
|
||||
"addon_type": "compute_instance",
|
||||
"addon_variant": "ci_small"
|
||||
}'
|
||||
```
|
||||
|
||||
## Configuration changes
|
||||
|
||||
Management API endpoints:
|
||||
|
||||
- Auth: [`PATCH /v1/projects/{ref}/config/auth`](https://api.supabase.com/api/v1#tag/auth/patch/v1/projects/{ref}/config/auth)
|
||||
- Data API (PostgREST): [`PATCH /v1/projects/{ref}/postgrest`](https://api.supabase.com/api/v1#tag/rest/patch/v1/projects/{ref}/postgrest)
|
||||
- Edge Functions:
|
||||
- [`PATCH /v1/projects/{ref}/functions/{function_slug}`](https://api.supabase.com/api/v1#tag/edge-functions/patch/v1/projects/{ref}/functions/{function_slug})
|
||||
- [`PUT /v1/projects/{ref}/functions`](https://api.supabase.com/api/v1#tag/edge-functions/put/v1/projects/{ref}/functions)
|
||||
- Storage: [`PATCH /v1/projects/{ref}/config/storage`](https://api.supabase.com/api/v1#tag/storage/patch/v1/projects/{ref}/config/storage)
|
||||
- Realtime: [`PATCH /v1/projects/{ref}/config/realtime`](https://api.supabase.com/api/v1#tag/realtime-config/patch/v1/projects/{ref}/config/realtime)
|
||||
|
||||
You can manage the configuration of all services using the Management API.
|
||||
|
||||
## Development workflow
|
||||
|
||||
Supabase is a _stateful_ service: we store data. If anything breaks in production, you can't "roll back" to a point in time because doing so might cause your users to lose any data that their production environment received since the last checkpoint.
|
||||
|
||||
Because of this, it's important that you adopt a development workflow on behalf of your users:
|
||||
|
||||

|
||||
|
||||
### Creating a `DEV` branch
|
||||
|
||||
Management API endpoint: [`POST /v1/projects/{ref}/branches`](https://api.supabase.com/api/v1#tag/environments/post/v1/projects/{ref}/branches)
|
||||
|
||||
After launching a project, it's important that all changes happen on a development branch. Branches can be treated like ephemeral servers: if anything goes wrong you can either revert the changes or destroy the branch and create a new one based off of production.
|
||||
|
||||
```sh
|
||||
curl 'https://api.supabase.com/v1/projects/{ref}/branches' \
|
||||
--request POST \
|
||||
--header 'Content-Type: application/json' \
|
||||
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
|
||||
--data '{
|
||||
"branch_name": "DEV",
|
||||
"secrets": {
|
||||
"STRIPE_SECRET_KEY":"sk_test_123..."
|
||||
"STRIPE_PUBLISHABLE_KEY":"pk_test_123..."
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
### Make database changes
|
||||
|
||||
Management API endpoint: [`POST /v1/projects/{ref}/database/migrations`](https://api.supabase.com/api/v1#tag/database/post/v1/projects/{ref}/database/migrations)
|
||||
|
||||
<Admonition type='note' title='Contact us for access to migrations endpoint'>
|
||||
|
||||
Only select customers have access to database migrations endpoint. Submit this [form](/solutions/ai-builders#talk-to-partnerships-team) to get access.
|
||||
|
||||
</Admonition>
|
||||
|
||||
For this example we will create a todos table using the [`POST /v1/projects/{ref}/database/migrations`](https://api.supabase.com/api/v1#tag/database/post/v1/projects/{ref}/database/migrations) endpoint.
|
||||
|
||||
```sql
|
||||
create table public.todos (
|
||||
id serial primary key,
|
||||
task text not null
|
||||
);
|
||||
|
||||
alter table public.todos
|
||||
enable row level security;
|
||||
```
|
||||
|
||||
This endpoint will automatically create a migration inside the `supabase_migrations` schema and run the migration. If the schema migration fails, the changes will be rolled back.
|
||||
|
||||
```sh
|
||||
curl https://api.supabase.com/v1/projects/{ref}/database/migrations \
|
||||
--request POST \
|
||||
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{
|
||||
"query": "create table public.todos (id serial primary key, task text not null); alter table public.todos enable row level security;",
|
||||
"name": "Create a todos table"
|
||||
}'
|
||||
```
|
||||
|
||||
### Create a restore point
|
||||
|
||||
<Admonition type="note" title="Contact us for access to restore points">
|
||||
|
||||
Only select customers have access to restore points. Submit this [form](/solutions/ai-builders#talk-to-partnerships-team) to get access.
|
||||
|
||||
</Admonition>
|
||||
|
||||
After every change you make to the database, it's a good idea to create a restore point. This will allow you to roll back the database if you decide to go in a different direction.
|
||||
|
||||
Beware that only database changes are captured when creating a restore point.
|
||||
|
||||
```sh
|
||||
curl https://api.supabase.com/v1/projects/{ref}/database/backups/restore-point \
|
||||
--request POST \
|
||||
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{
|
||||
"name": "abcdefg"
|
||||
}'
|
||||
```
|
||||
|
||||
### Reverting changes
|
||||
|
||||

|
||||
|
||||
<Admonition type="note" title="Contact us for access to restore points">
|
||||
|
||||
Only select customers have access to restore points. Submit this [form](/solutions/ai-builders#talk-to-partnerships-team) to get access.
|
||||
|
||||
</Admonition>
|
||||
|
||||
After creating restore points, you are able to revert back to any restore point that you want.
|
||||
|
||||
```sh
|
||||
curl https://api.supabase.com/v1/projects/{ref}/database/backups/undo \
|
||||
--request POST \
|
||||
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{
|
||||
"name": "abcdefg"
|
||||
}'
|
||||
```
|
||||
|
||||
When you revert changes, you are undo-ing all database changes since the specified restore point, including:
|
||||
|
||||
- Schema changes
|
||||
- Any seed data that you inserted
|
||||
- Any test users who have signed up (and auth tokens for sign ins)
|
||||
- Pointers to files in Supabase Storage.
|
||||
|
||||
It will not affect:
|
||||
|
||||
- Configuration changes
|
||||
- Any secrets that have been added
|
||||
- Storage objects themselves
|
||||
- Any deployed Edge Functions
|
||||
|
||||
### Add seed data
|
||||
|
||||
<Admonition type="caution" title="Do not use production data in branches!">
|
||||
|
||||
It's important that the data in development branches is NOT production data, especially for non-developers who don't understand the implications of working with data. Security and side-effects (e.g. emailing all production users) are two reasons why this is important.
|
||||
|
||||
</Admonition>
|
||||
|
||||
It's common in `DEV` branches to "seed" data. This is basically test data for users. Let's insert the following seed to our new todos table:
|
||||
|
||||
```sql
|
||||
insert into todos (task)
|
||||
values
|
||||
('Task 1'),
|
||||
('Task 2'),
|
||||
('Task 3');
|
||||
```
|
||||
|
||||
You can use the `POST /database/query` endpoint to add data:
|
||||
|
||||
```sh
|
||||
curl https://api.supabase.com/v1/projects/{branch_ref}/database/query \
|
||||
--request POST \
|
||||
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data-binary @- <<EOF
|
||||
{
|
||||
"query": "insert into todos (task) values ('Task 1'), ('Task 2'), ('Task 3');"
|
||||
}
|
||||
EOF
|
||||
```
|
||||
|
||||
### Deploying Edge Functions
|
||||
|
||||
You can create and deploy Edge Functions on a branch and then merge them into Production.
|
||||
|
||||

|
||||
|
||||
```sh
|
||||
curl https://api.supabase.com/v1/projects/functions/deploy \
|
||||
--request POST \
|
||||
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
|
||||
--header 'Content-Type: multipart/form-data' \
|
||||
--form 'file=@path/to/function.zip' \
|
||||
--form 'metadata={
|
||||
"name": "my-function",
|
||||
"entrypoint_path": "index.ts",
|
||||
"import_map_path": "import_map.json",
|
||||
"static_patterns": ["assets/*", "public/*"],
|
||||
"verify_jwt": true
|
||||
}'
|
||||
```
|
||||
|
||||
### Merge all changes
|
||||
|
||||
Management API endpoint: [`POST /v1/branches/{branch_id_or_ref}/merge`](https://api.supabase.com/api/v1#tag/environments/post/v1/branches/{branch_id_or_ref}/merge)
|
||||
|
||||
Once the changes have been made, you can merge the changes into the production project:
|
||||
|
||||
```sh
|
||||
curl https://api.supabase.com/v1/branches/{ref}/merge \
|
||||
--request POST \
|
||||
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{}'
|
||||
```
|
||||
|
||||
Merging changes will automatically merge only the following:
|
||||
|
||||
- Database changes
|
||||
- Deployed Edge Functions
|
||||
|
||||
## Security checks for production
|
||||
|
||||
Management API endpoint: [`GET /v1/projects/{ref}/advisors/security`](https://api.supabase.com/api/v1#tag/advisors/get/v1/projects/{ref}/advisors/security)
|
||||
|
||||
Prior to deploying to production we strongly recommend running the security advisor on the project to make sure the latest changes are secure.
|
||||
|
||||
```sh
|
||||
curl https://api.supabase.com/v1/projects/{ref}/advisors/security \
|
||||
--request GET \
|
||||
--header 'Authorization: Bearer {PAT_OR_USER_TOKEN}' \
|
||||
--header 'Content-Type: application/json'
|
||||
```
|
||||
|
||||
## Disaster recovery for production
|
||||
|
||||
Management API endpoint: [`POST /v1/projects/{ref}/database/backups/restore-pitr`](https://api.supabase.com/api/v1#tag/database/post/v1/projects/{ref}/database/backups/restore-pitr)
|
||||
|
||||

|
||||
|
||||
- Rollbacks can cause data loss. Only use it in `PROD` when absolutely necessary.
|
||||
- Only available in prod when a project has already explicitly enabled PITR prior to rolling back.
|
||||
|
||||
```sh
|
||||
curl https://api.supabase.com/v1/projects/database/backups/restore-pitr \
|
||||
--request POST \
|
||||
--header 'Authorization: Bearer {PAT_OR_USER_TOKEN}' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{
|
||||
"recovery_time_target_unix": 1
|
||||
}'
|
||||
```
|
||||
|
||||
## Claim flow
|
||||
|
||||
Management API endpoint: [`GET /v1/oauth/authorize/project-claim`](https://api.supabase.com/api/v1#tag/oauth/get/v1/oauth/authorize/project-claim)
|
||||
|
||||
<Admonition type="note" title="Contact us for access to claim flow">
|
||||
|
||||
Only select customers have access to claim flow. Submit this [form](/solutions/ai-builders#talk-to-partnerships-team) to get access.
|
||||
|
||||
</Admonition>
|
||||
|
||||
Your users may want to claim the project that currently lives in your org so that they can have more control over it.
|
||||
|
||||
We've enabled transferring the project from your org to your user's org while you continue to retain access to interact with the project through an [OAuth integration](/docs/guides/integrations/build-a-supabase-oauth-integration).
|
||||
|
||||
```sh
|
||||
curl -L "https://api.supabase.com/v1/oauth/authorize/project-claim?project_ref={ref}&client_id={oauth_client_id}&response_type=code&redirect_uri={redirect_uri}" \
|
||||
--request GET \
|
||||
--header 'Authorization: Bearer {PERSONAL_ACCESS_TOKEN}'
|
||||
```
|
||||
|
||||
The user is redirected to a Supabase UI:
|
||||
|
||||
1. Create a new Supabase account or sign in to an existing one
|
||||
2. Create a new Supabase Organization or select an existing one
|
||||
3. Review your OAuth integration's permission scopes
|
||||
4. Review the Project transfer details
|
||||
5. Confirm the OAuth integration and the Project transfer for the selected Organization
|
||||
|
||||
<Admonition type="caution" title="Remove custom configuration before transferring project">
|
||||
|
||||
Before transferring the project to your user's org, make sure to remove any custom configuration that you do not want your user's project to retain.
|
||||
|
||||
</Admonition>
|
||||
|
||||
## Platform kit
|
||||
|
||||
Docs: https://supabase.com/ui/docs/platform/platform-kit
|
||||
|
||||
<div className="video-container mb-8">
|
||||
<iframe
|
||||
className="w-full"
|
||||
src="https://xguihxuzqibwxjnimxev.supabase.co/storage/v1/object/public/videos/marketing/blog/platform-kit/platform-kit.mp4"
|
||||
title="Supabase UI: Platform Kit"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; fullscreen; gyroscope; picture-in-picture; web-share"
|
||||
allowfullscreen
|
||||
autoplay
|
||||
muted
|
||||
loop
|
||||
playsInline
|
||||
/>
|
||||
</div>
|
||||
|
||||
We've created Platform Kit, a collection of UI components that interact with Management API, as a lightweight version of Supabase Dashboard that you can embed directly in your app so your users never have to leave in order to interact with the project.
|
||||
|
||||
## Debugging projects
|
||||
|
||||
Management API endpoint: [`GET /v1/projects/{ref}/analytics/endpoints/logs.all`](https://api.supabase.com/api/v1#tag/analytics/get/v1/projects/{ref}/analytics/endpoints/logs.all)
|
||||
|
||||
When you need to debug a project, you can query the project's logs to see if there are any errors and address them accordingly.
|
||||
|
||||
```sh
|
||||
curl 'https://api.supabase.com/v1/projects/{ref}/analytics/endpoints/logs.all' \
|
||||
--get \
|
||||
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
|
||||
--data-urlencode 'sql=SELECT datetime(timestamp), status_code, path, event_message
|
||||
FROM edge_logs
|
||||
CROSS JOIN UNNEST(metadata) AS metadata
|
||||
CROSS JOIN UNNEST(response) AS response
|
||||
WHERE status_code >= 400
|
||||
ORDER BY timestamp DESC
|
||||
LIMIT 100' \
|
||||
--data-urlencode 'iso_timestamp_start=2025-03-23T00:00:00Z' \
|
||||
--data-urlencode 'iso_timestamp_end=2025-03-23T01:00:00Z'
|
||||
```
|
||||
BIN
apps/docs/public/img/integrations/change-flow.png
Normal file
|
After Width: | Height: | Size: 170 KiB |
BIN
apps/docs/public/img/integrations/change-functions.png
Normal file
|
After Width: | Height: | Size: 270 KiB |
BIN
apps/docs/public/img/integrations/paas-intro.png
Normal file
|
After Width: | Height: | Size: 184 KiB |
BIN
apps/docs/public/img/integrations/revert.png
Normal file
|
After Width: | Height: | Size: 127 KiB |
BIN
apps/docs/public/img/integrations/rollback.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
@@ -95,7 +95,7 @@ Display all the data in your database:
|
||||
|
||||
The library is 100% shadcn/ui compatible by leveraging the [component registry](https://x.com/shadcn/status/1829646556318089509) feature. Components are styled with shadcn/ui and Tailwind CSS and are completely customizable. Read the [original launch post](https://supabase.com/blog/supabase-ui-library) for more details, or check out the docs: [ui.supabase.com](https://supabase.com/ui)
|
||||
|
||||
## Supabase as a Service
|
||||
## Supabase for Platforms
|
||||
|
||||
While we started Supabase as Service directly for developers, more and more companies are building on top of Supabase to provide critical infrastructure for their own users. Today, [30% of Supabase sign ups](https://x.com/kiwicopple/status/1894251335224320000) can be attributed to some sort of AI Builder:
|
||||
|
||||
|
||||
174
apps/www/_blog/2025-12-05-introducing-supabase-for-platforms.mdx
Normal file
@@ -0,0 +1,174 @@
|
||||
---
|
||||
title: 'Introducing Supabase for Platforms'
|
||||
description: Use Supabase as a platform for your own business and tools
|
||||
author: wenbo
|
||||
image: 2025-12-05-introducing-supabase-for-platforms/og.png
|
||||
thumb: 2025-12-05-introducing-supabase-for-platforms/thumb.png
|
||||
categories:
|
||||
- product
|
||||
- launch-week
|
||||
date: '2025-12-05'
|
||||
toc_depth: 2
|
||||
---
|
||||
|
||||
Today, we're launching **Supabase for Platforms**—a white-label offering that lets platforms provision and manage fully managed backends on behalf of their users.
|
||||
|
||||
AI builders and agentic coding have fundamentally changed how software gets built in 2025. Supabase has become the default backend for this shift, with [Lovable](https://lovable.dev), [Bolt.new](https://bolt.new), Vercel's [v0](https://v0.app), [Figma Make](https://www.figma.com/make), and many others building on top of Supabase projects owned by their users to develop full-stack applications. The growth has been staggering:
|
||||
|
||||
- Lovable has nearly 8 million users. The company hit $100 million in ARR just eight months after launch, then doubled to $200 million four months later. Users create more than 100,000 new apps on the platform every day.
|
||||
- Bolt.new has about 5 million users. The company reached $4 million in ARR just 30 days after launch, $20 million in two months, and $40 million in five months.
|
||||
|
||||
But as these platforms scaled, we heard consistent feedback: they wanted a more seamless flow so their users don't have to think at all about provisioning and configuring their backends. That's when **Supabase for Platforms** was born.
|
||||
|
||||
Leading AI builders like Lovable, Bolt.new, and Baidu's [MeDo](https://medo.dev) have already started using **Supabase for Platforms** to create millions of Supabase projects in the last few months alone, making full-stack development more accessible and easier than ever.
|
||||
|
||||
And while AI builders are leading the way, **Supabase for Platforms** is built for any platform or tool that wants to offer managed backends.
|
||||
|
||||
# What is Supabase for Platforms?
|
||||
|
||||
**Supabase for Platforms** lets you white-label Supabase and provision backends for your users—all managed through our [Management API](/docs/reference/api/introduction) or [remote MCP Server](/docs/guides/getting-started/mcp).
|
||||
|
||||
Your users get the full Supabase stack:
|
||||
|
||||
- Database (Postgres)
|
||||
- Auth
|
||||
- Edge Functions
|
||||
- Storage
|
||||
- Realtime
|
||||
|
||||
You control the entire experience. Your users get the full power of Supabase.
|
||||
|
||||
With **Supabase for Platforms**, you can:
|
||||
|
||||
- Offer a complete white-label backend to your users entirely powered by Supabase
|
||||
- Pay only for compute hours consumed with our newest Pico instances that scale to zero
|
||||
- Access features purpose-built for managing backends on behalf of your users
|
||||
- Embed a lightweight Supabase Dashboard directly in your app through Platform Kit, so your users never leave your tooling
|
||||
- Let your users "claim" (transfer) their projects to their own Supabase orgs whenever they're ready, while you maintain access to those projects through OAuth integration
|
||||
|
||||
**Supabase for Platforms** and the full feature set is available to select AI Builders. [Contact us](/solutions/ai-builders#talk-to-partnerships-team) if you'd like to get started.
|
||||
|
||||
# How does it work?
|
||||
|
||||
Some AI builders want to manage infrastructure on behalf of their users. With a central organization, you create and own projects in your Supabase org. Users can claim those projects into their own Supabase org later if they want full control.
|
||||
|
||||
This model works well when your users don't know or care about infrastructure. You handle the complexity—they focus on features.
|
||||
|
||||
<Admonition title='Want users to bring their own Supabase accounts instead?'>
|
||||
|
||||
With [OAuth integrations](/docs/guides/integrations/build-a-supabase-integration), users connect their existing Supabase org to your tool. They own and manage their projects directly, and you get API access to help them build.
|
||||
|
||||
This model works well when your users are developers who already use Supabase or want more control from the start.
|
||||
|
||||
</Admonition>
|
||||
|
||||
[Contact us](/solutions/ai-builders#talk-to-partnerships-team) to enable central organization management.
|
||||
|
||||
# Features available today
|
||||
|
||||
These features are available through the [Management API](/docs/reference/api/introduction) or [remote MCP Server](/docs/guides/getting-started/mcp) right now.
|
||||
|
||||
## Launch projects
|
||||
|
||||
Create projects programmatically. We highly recommend using smart region selection to ensure capacity.
|
||||
|
||||
[Docs](/docs/guides/integrations/supabase-for-platforms#launching-projects)
|
||||
|
||||
## Manage configuration
|
||||
|
||||
Update settings for Auth, Data API (PostgREST), Edge Functions, Storage, and Realtime through the Management API. Every setting in the Supabase Dashboard is available for configuration programmatically.
|
||||
|
||||
[Docs](/docs/guides/integrations/supabase-for-platforms#configuration-changes)
|
||||
|
||||
## Deploy Edge Functions
|
||||
|
||||
Deploy functions directly through the API. No CLI required.
|
||||
|
||||
[Docs](/docs/guides/integrations/supabase-for-platforms#deploying-edge-functions)
|
||||
|
||||
## Change compute sizes
|
||||
|
||||
Upgrade or downgrade compute as your users' needs change.
|
||||
|
||||
[Docs](docs/guides/integrations/supabase-for-platforms#changing-compute-sizes)
|
||||
|
||||
## Run security checks
|
||||
|
||||
Use the security advisor API to check projects before deploying to production. Catch issues before your users, and their users, do.
|
||||
|
||||
[Docs](/docs/guides/integrations/supabase-for-platforms#security-checks-for-production)
|
||||
|
||||
## API keys
|
||||
|
||||
Get and manage API keys for each project. We recommend using the `publishable` and `secret` API keys instead of the legacy `anon` and `service_role` keys.
|
||||
|
||||
For more information, read the announcement [here](https://github.com/orgs/supabase/discussions/29260).
|
||||
|
||||
[Docs](/docs/guides/integrations/supabase-for-platforms#recommended-api-keys)
|
||||
|
||||
## Development Environments
|
||||
|
||||
Create ephemeral development environments for each project using branching. Your users can make changes safely on a branch, then merge to production. If something goes wrong, destroy the branch and start fresh based off production.
|
||||
|
||||
[Docs](/docs/guides/integrations/supabase-for-platforms#creating-a-dev-branch)
|
||||
|
||||
## Platform Kit
|
||||
|
||||
<div className="video-container mb-8">
|
||||
<iframe
|
||||
className="w-full"
|
||||
src="https://xguihxuzqibwxjnimxev.supabase.co/storage/v1/object/public/videos/marketing/blog/platform-kit/platform-kit.mp4"
|
||||
title="Supabase UI: Platform Kit"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; fullscreen; gyroscope; picture-in-picture; web-share"
|
||||
allowfullscreen
|
||||
autoplay
|
||||
muted
|
||||
loop
|
||||
playsInline
|
||||
/>
|
||||
</div>
|
||||
|
||||
We built [Platform Kit](/ui/docs/platform/platform-kit), a collection of UI components for the Management API. Embed a lightweight version of the Supabase Dashboard directly in your app. Your users can manage their backend without leaving your product.
|
||||
|
||||
[Docs](/ui/docs/platform/platform-kit)
|
||||
|
||||
# Features available to select AI Builders
|
||||
|
||||
These features are available to a subset of our AI Builder customers. [Contact us](/solutions/ai-builders#talk-to-partnerships-team) to get access.
|
||||
|
||||
## Compute that scales to zero
|
||||
|
||||
We offer Pico instances that scale to zero when not in use. This is ideal for platforms with many projects that have variable usage. You only pay for what your users actually use.
|
||||
|
||||
[Docs](/docs/guides/integrations/supabase-for-platforms#pico-compute-instance)
|
||||
|
||||
## Restore points
|
||||
|
||||
Once you have development environments, create restore points after every backend change. Roll back if something goes wrong. This gives your users confidence as they’re developing.
|
||||
|
||||
[Docs](/docs/guides/integrations/supabase-for-platforms#create-a-restore-point)
|
||||
|
||||
## Database migrations
|
||||
|
||||
Run schema migrations through the API. Changes are tracked automatically. If a migration fails, it rolls back.
|
||||
|
||||
[Docs](/docs/guides/integrations/supabase-for-platforms#make-database-changes)
|
||||
|
||||
## Claim flow
|
||||
|
||||
Let users transfer projects from your organization to their own. You retain API access to continue helping them build. They get full ownership and control.
|
||||
|
||||
This is useful when users want to eventually manage their own infrastructure and billing.
|
||||
|
||||
[Docs](/docs/guides/integrations/supabase-for-platforms#claim-flow)
|
||||
|
||||
# Recommended development flow
|
||||
|
||||
Supabase stores data. You cannot simply roll back production changes without risking data loss. Check out the [docs](/docs/guides/integrations/supabase-for-platforms#development-workflow) for our recommended dev/production workflow.
|
||||
|
||||
[Docs](/docs/guides/integrations/supabase-for-platforms#development-workflow)
|
||||
|
||||
## Get started
|
||||
|
||||
- [Read the documentation](/docs/guides/platform/supabase-for-platforms)
|
||||
- [Contact us](/solutions/ai-builders#talk-to-partnerships-team) if you're building an AI platform or coding tool
|
||||
@@ -7,30 +7,45 @@ interface Props {}
|
||||
|
||||
const UseCases: FC<Props> = () => {
|
||||
return (
|
||||
<SectionContainer className="text grid gap-8 lg:gap-12 md:grid-cols-2 xl:pt-20">
|
||||
<SectionContainer
|
||||
id="talk-to-partnerships-team"
|
||||
className="text grid gap-8 lg:gap-12 md:grid-cols-2 xl:pt-20 scroll-mt-20"
|
||||
>
|
||||
<div className="md:h-full w-full flex flex-col justify-between gap-4 lg:gap-8">
|
||||
<div className="flex flex-col gap-2 md:max-w-md">
|
||||
<h1 className="h1 !m-0">
|
||||
Talk to our
|
||||
<br className="hidden md:block" /> partnership team
|
||||
<br className="hidden md:block" /> Partnerships team
|
||||
</h1>
|
||||
<p className="md:text-lg text-foreground-lighter">
|
||||
Explore custom pricing and infrastructure options.
|
||||
</p>
|
||||
</div>
|
||||
<ConnectCallout className="hidden md:flex" />
|
||||
<PlatformConnectCallout className="hidden md:flex" />
|
||||
<OAuthConnectCallout className="hidden md:flex" />
|
||||
</div>
|
||||
<PlatformConnectCallout className="md:hidden" />
|
||||
<OAuthConnectCallout className="md:hidden" />
|
||||
<TalkToPartnershipTeamForm />
|
||||
<ConnectCallout className="md:hidden" />
|
||||
</SectionContainer>
|
||||
)
|
||||
}
|
||||
|
||||
const ConnectCallout: FC<{ className?: string }> = ({ className }) => (
|
||||
const PlatformConnectCallout: FC<{ className?: string }> = ({ className }) => (
|
||||
<div className={cn('border rounded-lg p-4 md:p-6 bg-surface-75 flex flex-col gap-2', className)}>
|
||||
<h5>Connect your app to Supabase now</h5>
|
||||
<h5>Supabase for Platforms</h5>
|
||||
<p className="text-foreground-lighter">
|
||||
Set up a Supabase OAuth app so your users can start interacting with their Supabase Project.
|
||||
White label Supabase backends for your platform or tools.
|
||||
</p>
|
||||
<TextLink url="/docs/guides/integrations/supabase-for-platforms" label="View docs" />
|
||||
</div>
|
||||
)
|
||||
|
||||
const OAuthConnectCallout: FC<{ className?: string }> = ({ className }) => (
|
||||
<div className={cn('border rounded-lg p-4 md:p-6 bg-surface-75 flex flex-col gap-2', className)}>
|
||||
<h5>Connect your app to your user's Supabase org now</h5>
|
||||
<p className="text-foreground-lighter">
|
||||
Set up a Supabase OAuth app so you can start interacting with your user's Supabase project.
|
||||
</p>
|
||||
<TextLink
|
||||
url="https://supabase.com/docs/guides/integrations/build-a-supabase-integration"
|
||||
|
||||
@@ -6,12 +6,11 @@ import SectionContainer from '../Layouts/SectionContainer'
|
||||
|
||||
export default function FeaturesGrid(props: any) {
|
||||
const hasExtendedCards = props.features.some(
|
||||
(f: any) =>
|
||||
f.id === 'project-claim-flow' || f.id === 'platform-kit' || f.id === 'pico-instances'
|
||||
(f: any) => f.id === 'claim-flow' || f.id === 'platform-kit' || f.id === 'pico-instances'
|
||||
)
|
||||
|
||||
return (
|
||||
<SectionContainer className="flex flex-col gap-4 xl:pt-20">
|
||||
<SectionContainer id={props.id} className="flex flex-col gap-4 xl:pt-20 scroll-mt-20">
|
||||
<div className="flex flex-col gap-2 max-w-xl">
|
||||
<h2 className="h2 text-foreground-lighter !m-0">{props.heading}</h2>
|
||||
<p className="p !text-foreground-lighter max-w-md">{props.subheading}</p>
|
||||
@@ -40,7 +39,7 @@ export default function FeaturesGrid(props: any) {
|
||||
[&_.next-image--dynamic-fill]:rounded-none"
|
||||
/>
|
||||
<Content card={props.features.find((f: any) => f.id === 'branching')} />
|
||||
<Content card={props.features.find((f: any) => f.id === 'project-claim-flow')} />
|
||||
<Content card={props.features.find((f: any) => f.id === 'claim-flow')} />
|
||||
<Content card={props.features.find((f: any) => f.id === 'platform-kit')} />
|
||||
<Content
|
||||
card={props.features.find((f: any) => f.id === 'pico-instances')}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
grid-template-areas:
|
||||
'postgres mgmt-api'
|
||||
'pricing branching'
|
||||
'project-claim-flow platform-kit'
|
||||
'claim-flow platform-kit'
|
||||
'pico-instances pico-instances';
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
.features-grid-extended {
|
||||
grid-template-areas:
|
||||
'postgres mgmt-api mgmt-api'
|
||||
'pricing branching project-claim-flow'
|
||||
'pricing branching claim-flow'
|
||||
'platform-kit pico-instances pico-instances';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,8 +43,8 @@ const data: {
|
||||
type: 'primary' as any,
|
||||
},
|
||||
{
|
||||
label: 'Connect your app',
|
||||
href: 'https://supabase.com/docs/guides/integrations/build-a-supabase-integration',
|
||||
label: 'Build your integration',
|
||||
href: '/solutions/ai-builders#talk-to-partnerships-team',
|
||||
type: 'default' as any,
|
||||
},
|
||||
],
|
||||
@@ -181,8 +181,8 @@ const data: {
|
||||
],
|
||||
},
|
||||
features: {
|
||||
id: 'features',
|
||||
heading: <span className="text-foreground">Supabase as a Service</span>,
|
||||
id: 'supabase-for-platforms',
|
||||
heading: <span className="text-foreground">Supabase for Platforms</span>,
|
||||
subheading:
|
||||
'Build a delightful next-generation tools experience for your customers, backed by a powerful white-label Supabase backend.',
|
||||
features: [
|
||||
@@ -491,17 +491,6 @@ const data: {
|
||||
backend.
|
||||
</>
|
||||
),
|
||||
img: (
|
||||
<Image
|
||||
src={{
|
||||
dark: '/images/solutions/ai-builders/mgmt-api-permissions-dark.png',
|
||||
light: '/images/solutions/ai-builders/mgmt-api-permissions-light.png',
|
||||
}}
|
||||
alt="Management Api Permissions panel"
|
||||
width={900}
|
||||
height={900}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{
|
||||
id: 'branching',
|
||||
@@ -549,14 +538,14 @@ const data: {
|
||||
),
|
||||
subheading: (
|
||||
<>
|
||||
<span className="text-foreground">Offer production and development branches.</span>{' '}
|
||||
Enable your customers to deploy and test changes without affecting their main production
|
||||
<span className="text-foreground">Offer development branches.</span> Enable your
|
||||
customers to deploy and test changes without affecting their main production
|
||||
applications.
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
id: 'project-claim-flow',
|
||||
id: 'claim-flow',
|
||||
icon: Timer,
|
||||
heading: (
|
||||
<>
|
||||
@@ -582,7 +571,7 @@ const data: {
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
Project claim flow
|
||||
Claim flow
|
||||
</>
|
||||
),
|
||||
subheading: (
|
||||
@@ -636,7 +625,7 @@ const data: {
|
||||
<span className="text-foreground">
|
||||
UI components for the Management API that you can embed directly in your app
|
||||
</span>{' '}
|
||||
so they never have to leave it to interact with their project.
|
||||
so your users never have to leave it to interact with their projects.
|
||||
</>
|
||||
),
|
||||
},
|
||||
@@ -681,7 +670,7 @@ const data: {
|
||||
strokeLinejoin="round"
|
||||
/>
|
||||
</svg>
|
||||
Compute instance on shared architecture
|
||||
Pico instances
|
||||
</>
|
||||
),
|
||||
subheading: (
|
||||
|
||||
@@ -2434,6 +2434,11 @@ module.exports = [
|
||||
source: '/docs/guides/platform/oauth-apps/authorize-an-oauth-app',
|
||||
destination: '/docs/guides/platform/oauth-apps/build-a-supabase-integration',
|
||||
},
|
||||
{
|
||||
permanent: true,
|
||||
source: '/docs/guides/platform/oauth-apps/build-a-supabase-integration',
|
||||
destination: '/docs/guides/platform/oauth-apps/build-a-supabase-oauth-integration',
|
||||
},
|
||||
{ permanent: true, source: '/docs/reference/cli/config', destination: '/docs/guides/cli/config' },
|
||||
{
|
||||
permanent: true,
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { NextPage } from 'next'
|
||||
import dynamic from 'next/dynamic'
|
||||
import { NextSeo } from 'next-seo'
|
||||
import { useRouter } from 'next/router'
|
||||
import { useEffect } from 'react'
|
||||
|
||||
import Layout from 'components/Layouts/Default'
|
||||
import ProductHeader from 'components/Sections/ProductHeader2'
|
||||
@@ -16,38 +18,54 @@ const FeaturesGrid = dynamic(() => import('components/Solutions/FeaturesGrid'))
|
||||
const VideosSection = dynamic(() => import('components/Solutions/Videos'))
|
||||
const CTAForm = dynamic(() => import('components/Solutions/CTAForm'))
|
||||
|
||||
const Enterprise: NextPage = () => (
|
||||
<>
|
||||
<NextSeo
|
||||
title={content.metadata.metaTitle}
|
||||
description={content.metadata.metaDescription}
|
||||
openGraph={{
|
||||
title: content.metadata.metaTitle,
|
||||
description: content.metadata.metaDescription,
|
||||
url: `https://supabase.com/solutions/ai-builders`,
|
||||
images: [
|
||||
{
|
||||
url: `/images/solutions/ai-builders/ai-builders-og.png`,
|
||||
},
|
||||
],
|
||||
}}
|
||||
/>
|
||||
<Layout className="overflow-visible">
|
||||
<SolutionsStickyNav activeItem={Solutions.aiBuilders} type="skill-based" />
|
||||
<ProductHeader
|
||||
{...content.heroSection}
|
||||
className="[&_h1]:2xl:!text-5xl bg-default border-0 lg:pb-8 [&_.ph-footer]:mt-0 [&_.ph-footer]:lg:mt-16 [&_.ph-footer]:xl:mt-32"
|
||||
sectionContainerClassName="lg:gap-4"
|
||||
footer={<AIBuildersLogos className="mt-16 md:mt-0" />}
|
||||
footerPosition="left"
|
||||
const Enterprise: NextPage = () => {
|
||||
const { asPath } = useRouter()
|
||||
|
||||
useEffect(() => {
|
||||
const hash = asPath.split('#')[1]
|
||||
if (!hash) return
|
||||
|
||||
setTimeout(() => {
|
||||
const element = document.getElementById(hash)
|
||||
if (element) {
|
||||
element.scrollIntoView({ behavior: 'smooth' })
|
||||
}
|
||||
}, 100)
|
||||
}, [asPath])
|
||||
|
||||
return (
|
||||
<>
|
||||
<NextSeo
|
||||
title={content.metadata.metaTitle}
|
||||
description={content.metadata.metaDescription}
|
||||
openGraph={{
|
||||
title: content.metadata.metaTitle,
|
||||
description: content.metadata.metaDescription,
|
||||
url: `https://supabase.com/solutions/ai-builders`,
|
||||
images: [
|
||||
{
|
||||
url: `/images/solutions/ai-builders/ai-builders-og.png`,
|
||||
},
|
||||
],
|
||||
}}
|
||||
/>
|
||||
<Quotes {...content.quotes} />
|
||||
<WhySupabase {...content.why} />
|
||||
<FeaturesGrid {...content.features} />
|
||||
<VideosSection {...content.testimonials} />
|
||||
<CTAForm />
|
||||
</Layout>
|
||||
</>
|
||||
)
|
||||
<Layout className="overflow-visible">
|
||||
<SolutionsStickyNav activeItem={Solutions.aiBuilders} type="skill-based" />
|
||||
<ProductHeader
|
||||
{...content.heroSection}
|
||||
className="[&_h1]:2xl:!text-5xl bg-default border-0 lg:pb-8 [&_.ph-footer]:mt-0 [&_.ph-footer]:lg:mt-16 [&_.ph-footer]:xl:mt-32"
|
||||
sectionContainerClassName="lg:gap-4"
|
||||
footer={<AIBuildersLogos className="mt-16 md:mt-0" />}
|
||||
footerPosition="left"
|
||||
/>
|
||||
<Quotes {...content.quotes} />
|
||||
<WhySupabase {...content.why} />
|
||||
<FeaturesGrid {...content.features} />
|
||||
<VideosSection {...content.testimonials} />
|
||||
<CTAForm />
|
||||
</Layout>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default Enterprise
|
||||
|
||||
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 92 KiB |
@@ -7,6 +7,13 @@
|
||||
<lastBuildDate>Thu, 04 Dec 2025 00:00:00 -0700</lastBuildDate>
|
||||
<atom:link href="https://supabase.com/rss.xml" rel="self" type="application/rss+xml"/>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/introducing-supabase-for-platforms</guid>
|
||||
<title>Introducing Supabase for Platforms</title>
|
||||
<link>https://supabase.com/blog/introducing-supabase-for-platforms</link>
|
||||
<description>White-label Supabase backends for your platform or tools</description>
|
||||
<pubDate>Thu, 05 Dec 2025 00:00:00 -0700</pubDate>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://supabase.com/blog/adding-async-streaming-to-pg-fdw</guid>
|
||||
<title>Adding Async Streaming to Postgres Foreign Data Wrappers</title>
|
||||
<link>https://supabase.com/blog/adding-async-streaming-to-pg-fdw</link>
|
||||
|
||||
@@ -263,11 +263,13 @@ allow_list = [
|
||||
"OrbStack",
|
||||
"OrioleDB",
|
||||
"OpenTelemetry",
|
||||
"PaaS",
|
||||
"PagerDuty",
|
||||
"PGAudit",
|
||||
"PGroonga",
|
||||
"PgBouncer",
|
||||
"PHI",
|
||||
"Pico",
|
||||
"PingIdentity",
|
||||
"Paulo",
|
||||
# For historical purposes
|
||||
@@ -358,6 +360,8 @@ allow_list = [
|
||||
"https?:\\/\\/\\S+",
|
||||
"i.e.",
|
||||
"imgproxy",
|
||||
"undo-ing",
|
||||
"sign ins",
|
||||
"iOS",
|
||||
"localStorage",
|
||||
"localhost",
|
||||
|
||||