diff --git a/apps/docs/components/MDX/project_setup.mdx b/apps/docs/components/MDX/project_setup.mdx
index f1f72f08e64..2003a3a2220 100644
--- a/apps/docs/components/MDX/project_setup.mdx
+++ b/apps/docs/components/MDX/project_setup.mdx
@@ -2,22 +2,19 @@ import UserManagementSQLTemplate from './user_management_quickstart_sql_template
import { Tabs } from 'ui'
export const TabPanel = Tabs.Panel
-# Project set up
+## Project setup
-Before we start building we're going to set up our Database and API. This is as simple as starting a new Project in Supabase
-and then creating a "schema" inside the database.
+Before we start building we're going to set up our Database and API. This is as simple as starting a new Project in Supabase and then creating a "schema" inside the database.
-## Create a project
+### Create a project
-1. Go to [app.supabase.com](https://app.supabase.com).
-1. Click on "New Project".
+1. [Create a new project](https://app.supabase.com) in the Supabase Dashboard.
1. Enter your project details.
1. Wait for the new database to launch.
-## Set up the database schema
+### Set up the database schema
-Now we are going to set up the database schema. We can use the "User Management Starter" quickstart in the SQL Editor,
-or you can just copy/paste the SQL from below and run it yourself.
+Now we are going to set up the database schema. We can use the "User Management Starter" quickstart in the SQL Editor, or you can just copy/paste the SQL from below and run it yourself.
-
-
-
@@ -48,20 +36,10 @@ or you can just copy/paste the SQL from below and run it yourself.
-## Get the API Keys
+### Get the API Keys
Now that you've created some database tables, you are ready to insert data using the auto-generated API.
-We just need to get the URL and `anon` key from the API settings.
+We just need to get the Project URL and `anon` key from the API settings.
-1. Go to the [Settings](https://app.supabase.com/project/_/settings) page in the Dashboard.
-2. Click **API** in the sidebar.
-3. Find your API `URL`, `anon`, and `service_role` keys on this page.
-
-
+1. Go to the [API Settings](https://app.supabase.com/project/_/settings/api) page in the Dashboard.
+1. Find your Project `URL`, `anon`, and `service_role` keys on this page.
diff --git a/apps/docs/components/MDX/quickstart_intro.mdx b/apps/docs/components/MDX/quickstart_intro.mdx
index f0e62650870..d20d9f32ece 100644
--- a/apps/docs/components/MDX/quickstart_intro.mdx
+++ b/apps/docs/components/MDX/quickstart_intro.mdx
@@ -1,9 +1,5 @@
-This example provides the steps to build a basic user management app. It includes:
+This tutorial demonstrates how to build a basic user management app. The app authenticates and identifies the user, stores their profile information in the database, and allows the user to log in, update their profile details, and upload a profile photo. The app uses:
-- Supabase [Database](/docs/guides/database): a Postgres database for storing your user data.
-- Supabase [Auth](/docs/guides/auth): users can sign in with magic links (no passwords, only email).
-- Supabase [Storage](/docs/guides/storage): users can upload a photo.
-- [Row Level Security](/docs/guides/auth#row-level-security): data is protected so that individuals can only access their own data.
-- Instant [APIs](/docs/guides/database/api): APIs will be automatically generated when you create your database tables.
-
-By the end of this guide you'll have an app which allows users to login and update some basic profile details:
+- [Supabase Database](/docs/guides/database) - a Postgres database for storing your user data and [Row Level Security](/docs/guides/auth#row-level-security) so data is protected and users can only access their own information.
+- [Supabase Auth](/docs/guides/auth) - users log in through magic links sent to their email (without having to set up passwords).
+- [Supabase Storage](/docs/guides/storage) - users can upload a profile photo.
diff --git a/apps/docs/components/Navigation/Navigation.constants.ts b/apps/docs/components/Navigation/Navigation.constants.ts
index bac77730696..94f40fce1ee 100644
--- a/apps/docs/components/Navigation/Navigation.constants.ts
+++ b/apps/docs/components/Navigation/Navigation.constants.ts
@@ -278,6 +278,7 @@ export const menuItems: NavMenu = {
{ name: 'Performance Tuning', url: '/guides/platform/performance', items: [] },
{ name: 'Permissions', url: '/guides/platform/permissions', items: [] },
{ name: 'Production Readiness', url: '/guides/platform/going-into-prod', items: [] },
+ { name: 'SSL Enforcement', url: '/guides/platform/ssl-enforcement', items: [] },
{ name: 'Troubleshooting', url: '/guides/platform/troubleshooting', items: [] },
],
},
diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts
index f4e2f661f21..6354ad15db1 100644
--- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts
+++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts
@@ -51,7 +51,7 @@ export const gettingstarted = {
{
name: 'Framework Quickstarts',
items: [
- { name: 'ReactJS', url: '/guides/getting-started/quickstarts/reactjs', items: [] },
+ { name: 'React', url: '/guides/getting-started/quickstarts/reactjs', items: [] },
{ name: 'NextJS', url: '/guides/getting-started/quickstarts/nextjs', items: [] },
{ name: 'Flutter', url: '/guides/getting-started/quickstarts/flutter', items: [] },
{ name: 'SvelteKit', url: '/guides/getting-started/quickstarts/sveltekit', items: [] },
@@ -63,7 +63,7 @@ export const gettingstarted = {
name: 'Web app tutorials',
items: [
{
- name: 'Next.js',
+ name: 'NextJS',
url: '/guides/getting-started/tutorials/with-nextjs',
items: [],
},
@@ -498,6 +498,7 @@ export const functions = {
{ name: 'Storage Caching', url: '/guides/functions/examples/storage-caching', items: [] },
{ name: 'Stripe Webhooks', url: '/guides/functions/examples/stripe-webhooks', items: [] },
{ name: 'Telegram Bot', url: '/guides/functions/examples/telegram-bot', items: [] },
+ { name: 'Upstash Redis', url: '/guides/functions/examples/upstash-redis', items: [] },
],
},
],
@@ -586,6 +587,7 @@ export const platform = {
{ name: 'Network Restrictions', url: '/guides/platform/network-restrictions', items: [] },
{ name: 'Performance Tuning', url: '/guides/platform/performance', items: [] },
{ name: 'Permissions', url: '/guides/platform/permissions', items: [] },
+ { name: 'SSL Enforcement', url: '/guides/platform/ssl-enforcement', items: [] },
],
},
{
@@ -850,14 +852,14 @@ export const reference = {
export const reference_javascript_v1 = {
icon: 'reference-javascript',
- title: 'javascript',
+ title: 'JavaScript',
url: '/guides/reference/javascript',
parent: '/reference',
}
export const reference_javascript_v2 = {
icon: 'reference-javascript',
- title: 'javascript',
+ title: 'JavaScript',
url: '/guides/reference/javascript',
parent: '/reference',
}
@@ -878,7 +880,7 @@ export const reference_dart_v1 = {
export const reference_csharp_v0 = {
icon: 'reference-csharp',
- title: 'c#',
+ title: 'C#',
url: 'guides/reference/csharp',
parent: '/reference',
}
diff --git a/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx b/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx
index 4588fc5864e..2fd9b545aa8 100644
--- a/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx
+++ b/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx
@@ -89,16 +89,7 @@ const TopNavBarRef: FC = () => {
+
+export const quickstarts = [
+ {
+ title: 'React',
+ href: '/guides/getting-started/quickstarts/reactjs',
+ description:
+ 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a React app.',
+ icon: '/docs/img/icons/react-icon',
+ },
+ {
+ title: 'NextJS',
+ href: '/guides/getting-started/quickstarts/nextjs',
+ description:
+ 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a NextJS app.',
+ icon: '/docs/img/icons/nextjs-icon',
+ },
+ {
+ title: 'Flutter',
+ href: '/guides/getting-started/quickstarts/flutter',
+ description:
+ 'Learn how to create a Supabase project, add some sample data to your database, and query the data from a Flutter app.',
+ icon: '/docs/img/icons/flutter-icon',
+ },
+]
+
export const webapps = [
{
title: 'NextJS',
@@ -109,6 +165,9 @@ export const webapps = [
'Learn how to build a user management app with SvelteKit and Supabase Database, Auth, and Storage functionality.',
icon: '/docs/img/icons/svelte-icon',
},
+]
+
+export const mobile = [
{
title: 'Flutter',
href: '/guides/getting-started/tutorials/with-flutter',
diff --git a/apps/docs/pages/guides/getting-started/quickstarts/sveltekit.mdx b/apps/docs/pages/guides/getting-started/quickstarts/sveltekit.mdx
index 2bea7515a9a..f4989365455 100644
--- a/apps/docs/pages/guides/getting-started/quickstarts/sveltekit.mdx
+++ b/apps/docs/pages/guides/getting-started/quickstarts/sveltekit.mdx
@@ -67,7 +67,7 @@ export const meta = {
```bash Terminal
- cd my-app && npm install @supabase/supabase-js
+ cd myapp && npm install @supabase/supabase-js
```
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx
index ae2870332c2..819cf492c20 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-angular.mdx
@@ -1,19 +1,18 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-angular',
- title: 'Quickstart: Angular',
+ title: 'Build a User Management App with Angular',
description: 'Learn how to use Supabase in your Angular App.',
- sidebar_label: 'Angular',
}

-### GitHub
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/angular-user-management).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/angular-user-management).
+
@@ -192,11 +191,7 @@ export class AuthComponent {
/>
-
@@ -529,13 +524,8 @@ export class AccountComponent implements OnInit {
-## Next steps
-
At this stage you have a fully functional application!
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
-
export const Page = ({ children }) =>
export default Page
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-expo.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-expo.mdx
index 192caa40725..5c47ae577b3 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-expo.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-expo.mdx
@@ -1,20 +1,18 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-expo',
- title: 'Quickstart: Expo',
+ title: 'Build a User Management App with Expo',
description: 'Learn how to use Supabase in your React Native App.',
- sidebar_label: 'Expo',
- hide_table_of_contents: false,
}

-### GitHub
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/expo-user-management).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/expo-user-management).
+
@@ -504,13 +502,8 @@ expo prebuild
-## Next steps
-
At this stage you have a fully functional application!
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
-
export const Page = ({ children }) =>
export default Page
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx
index 478390cf7c0..af7ff9fd3e6 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-flutter.mdx
@@ -1,19 +1,18 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-flutter',
- title: 'Quickstart: Flutter',
+ title: 'Build a User Management App with Flutter',
description: 'Learn how to use Supabase in your Flutter App.',
- sidebar_label: 'Flutter',
}

-### GitHub
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/flutter-user-management).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/flutter-user-management).
+
@@ -77,7 +76,7 @@ Add an intent-filter to enable deep linking:
```
-For iOS, edit the ios/Runner/Info.plist file.
+For iOS, edit the ios/Runner/Info.plist file.
Add CFBundleURLTypes to enable deep linking:
@@ -797,14 +796,13 @@ class _AccountPageState extends State {
-Congratulations, that is it! You have now built a fully functional user management app using Flutter and Supabase!
+Congratulations, you've built a fully functional user management app using Flutter and Supabase!
## See also
- [Flutter Tutorial: building a Flutter chat app](https://supabase.com/blog/flutter-tutorial-building-a-chat-app)
- [Flutter Tutorial - Part 2: Authentication and Authorization with RLS](https://supabase.com/blog/flutter-authentication-and-authorization-with-rls)
-
export const Page = ({ children }) =>
export default Page
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-ionic-angular.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-ionic-angular.mdx
index 4616bb796b0..43516ef65f3 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-ionic-angular.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-ionic-angular.mdx
@@ -1,19 +1,18 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-ionic-angular',
- title: 'Quickstart: Ionic Angular',
+ title: 'Build a User Management App with Ionic Angular',
description: 'Learn how to use Supabase in your Ionic Angular App.',
- sidebar_label: 'Ionic Angular',
}

-### GitHub
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/mhartington/supabase-ionic-angular).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/mhartington/supabase-ionic-angular).
+
@@ -526,14 +525,9 @@ template: `
-## Next steps
-
At this stage you have a fully functional application!
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
-
-## Resources
+## See also
- [Authentication in Ionic Angular with Supabase](https://supabase.com/blog/authentication-in-ionic-angular)
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-ionic-react.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-ionic-react.mdx
index 3c7c9847b96..3e3d261a5e4 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-ionic-react.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-ionic-react.mdx
@@ -1,19 +1,18 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-ionic-react',
- title: 'Quickstart: Ionic React',
+ title: 'Build a User Management App with Ionic React',
description: 'Learn how to use Supabase in your Ionic React App.',
- sidebar_label: 'Ionic React',
}

-### GitHub
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/mhartington/supabase-ionic-react).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/mhartington/supabase-ionic-react).
+
@@ -499,13 +498,8 @@ return (
-## Next steps
-
At this stage you have a fully functional application!
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
-
export const Page = ({ children }) =>
export default Page
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-ionic-vue.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-ionic-vue.mdx
index b5599980212..dc884f9d8d5 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-ionic-vue.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-ionic-vue.mdx
@@ -1,19 +1,18 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-ionic-vue',
- title: 'Quickstart: Ionic Vue',
+ title: 'Build a User Management App with Ionic Vue',
description: 'Learn how to use Supabase in your Ionic Vue App.',
- sidebar_label: 'Ionic Vue',
}

-### GitHub
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/mhartington/supabase-ionic-vue).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/mhartington/supabase-ionic-vue).
+
@@ -559,13 +558,8 @@ export default defineComponent({
-## Next steps
-
At this stage you have a fully functional application!
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
-
export const Page = ({ children }) =>
export default Page
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-nextjs.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-nextjs.mdx
index a63a164a42b..bbee6933442 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-nextjs.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-nextjs.mdx
@@ -1,10 +1,8 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-nextjs',
- title: 'Quickstart: Next.js',
+ title: 'Build a User Management App with NextJS',
description: 'Learn how to use Supabase in your Next App.',
- sidebar_label: 'Next.js',
video: 'https://www.youtube.com/v/0Fs96oZ4se0',
}
@@ -12,7 +10,7 @@ export const meta = {

-### Video Guide
+## Video Guide
-### GitHub
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-ts-user-management).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-ts-user-management).
+
@@ -723,17 +722,15 @@ return (
-## Next steps
-
At this stage you have a fully functional application!
-- See the complete [example on GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-ts-user-management) and deploy it to Vercel.
-- Explore the [pre-built Auth UI for React](/docs/guides/auth/auth-helpers/auth-ui).
-- Explore the [Auth Helpers for Next.js](/docs/guides/auth/auth-helpers/nextjs).
-- Explore the [Supabase Cache Helpers](https://github.com/psteinroe/supabase-cache-helpers).
-- See the [Next.js Subscription Payments Starter](https://github.com/vercel/nextjs-subscription-payments) template on GitHub.
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
+## See also
+
+- See the complete [example on GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nextjs-ts-user-management) and deploy it to Vercel
+- Explore the [pre-built Auth UI for React](/docs/guides/auth/auth-helpers/auth-ui)
+- Explore the [Auth Helpers for Next.js](/docs/guides/auth/auth-helpers/nextjs)
+- Explore the [Supabase Cache Helpers](https://github.com/psteinroe/supabase-cache-helpers)
+- See the [Next.js Subscription Payments Starter](https://github.com/vercel/nextjs-subscription-payments) template on GitHub
export const Page = ({ children }) =>
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx
index 844c10dc2a4..be8fcf69c34 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-nuxt-3.mdx
@@ -1,19 +1,18 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-nuxt-3',
- title: 'Quickstart: Nuxt 3',
+ title: 'Build a User Management App with Nuxt 3',
description: 'Learn how to use Supabase in your Nuxt 3 App.',
- sidebar_label: 'Nuxt 3',
}

-### Github
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/nuxt3-user-management).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/nuxt3-user-management).
+
@@ -66,7 +65,27 @@ export default defineNuxtConfig({
Let's set up a Vue component to manage logins and sign ups. We'll use Magic Links, so users can sign in with their email without using passwords.
-```html title=/components/Auth.vue
+```vue title=/components/Auth.vue
+
+
-
-
```
### User state
@@ -116,7 +116,70 @@ To access the user information, use the composable [useSupabaseUser](https://sup
After a user is signed in we can allow them to edit their profile details and manage their account.
Let's create a new component for that called `Account.vue`.
-```html title=components/Account.vue
+```vue title=components/Account.vue
+
+
-
-
```
### Launch!
Now that we have all the components in place, let's update `app.vue`:
-```html title=app.vue
+```vue title=app.vue
+
+
-
-
```
Once that's done, run this in a terminal window:
@@ -242,7 +246,65 @@ Every Supabase project is configured with [Storage](/docs/guides/storage) for ma
Let's create an avatar for the user so that they can upload a profile photo. We can start by creating a new component:
-```html title=components/Avatar.vue
+```vue title=components/Avatar.vue
+
+
-
-
```
### Add the new widget
And then we can add the widget to the Account page:
-```html title=components/Account.vue
+```vue title=components/Account.vue
+
+
-
-
```
-That is it! You should now be able to upload a profile photo to Supabase Storage.
-
### Storage management
-## Next steps
-
-At this stage you have a fully functional application!
-
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
+That is it! You should now be able to upload a profile photo to Supabase Storage and you have a fully functional application.
export const Page = ({ children }) =>
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx
index 981c7b33d9b..73c30cd56cb 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-react.mdx
@@ -1,19 +1,18 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-react',
- title: 'Quickstart: React',
+ title: 'Build a User Management App with React',
description: 'Learn how to use Supabase in your React App.',
- sidebar_label: 'React',
}

-### GitHub
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/react-user-management).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/react-user-management).
+
@@ -401,13 +400,8 @@ return (
-## Next steps
-
At this stage you have a fully functional application!
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
-
export const Page = ({ children }) =>
export default Page
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx
index bb541748411..cbc647692aa 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-redwoodjs.mdx
@@ -1,49 +1,19 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-redwoodjs',
- title: 'Quickstart: RedwoodJS',
+ title: 'Build a User Management App with RedwoodJS',
description: 'Learn how to use Supabase in your RedwoodJS App.',
- sidebar_label: 'RedwoodJS',
}
-## Intro
-
-For the sake of consistency with the other framework Quickstart examples, we'll build a RedwoodJS a little differently than normal.
-
-We **_won't use_** Prisma to connect to the Supabase Postgres database or [Prisma migrations](https://redwoodjs.com/docs/cli-commands#prisma-migrate) as one typically might in a Redwood app.
-Instead, we'll rely on the Supabase client to do some of the work on the **web** side and use the client again on the **API** side to do data fetching as well.
-
-That means you will want to refrain from running any `yarn rw prisma migrate` commands and also double check your build commands on deployment to ensure Prisma won't reset your database.
-
-
-
-TLDR; Prisma currently doesn't support cross-schema foreign keys, so introspecting the schema fails due to how your Supabase `public` schema references the `auth.users`.
-
-
-
-This example provides the steps to build a simple user management app (from scratch!) using Supabase and [RedwoodJS](https://redwoodjs.com/docs/introduction). It includes:
-
-- Supabase [Database](/docs/guides/database): a Postgres database for storing your user data.
-- Supabase [Auth](/docs/guides/auth): users can sign in with magic links (no passwords, only email).
-- Supabase [Storage](/docs/guides/storage): users can upload a photo.
-- Instant [APIs](/docs/guides/database/api): APIs will be automatically generated when you create your database tables.
-- [Row Level Security](/docs/guides/auth#row-level-security): data is protected so that individuals can only access their own data.
-
-By the end of this guide you'll have an app which allows users to login and update some basic profile details:
+

-
-Note: For RedwoodJS apps, port will be 8910
-
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/redwoodjs/redwoodjs-supabase-quickstart).
-### GitHub
-
-If you get stuck at any point, take a look at [this repo](https://github.com/redwoodjs/redwoodjs-supabase-quickstart).
-
{/* ## Video demo */}
{/* Coming soon. */}
@@ -84,138 +54,14 @@ The **`web side`** is built with React. Redwood's router makes it simple to map
Pages may contain a "Layout" component to wrap content. They also contain "Cells" and regular React components.
Cells allow you to declaratively manage the lifecycle of a component that fetches and displays data.
-
-
-For the sake of consistency with the other framework Quickstart examples, we'll build a RedwoodJS a little differently than normal.
+For the sake of consistency with the other framework tutorials, we'll build this app a little differently than normal.
We **_won't use_** Prisma to connect to the Supabase Postgres database or [Prisma migrations](https://redwoodjs.com/docs/cli-commands#prisma-migrate) as one typically might in a Redwood app.
Instead, we'll rely on the Supabase client to do some of the work on the **`web`** side and use the client again on the **`api`** side to do data fetching as well.
-
+That means you will want to refrain from running any `yarn rw prisma migrate` commands and also double check your build commands on deployment to ensure Prisma won't reset your database. Prisma currently doesn't support cross-schema foreign keys, so introspecting the schema fails due
+to how your Supabase `public` schema references the `auth.users`.
-## Project set up
-
-Before we start building we're going to set up our Database and API. This is as simple as starting a new Project in Supabase
-and then creating a "schema" inside the database.
-
-
-
-When setting up Supabase, you'll interact with your project dashboard. However, most of the RedwoodJS setup steps will interact with the [Redwood CLI](https://redwoodjs.com/docs/cli-commands) to generate routes, pages, components, and more.
-So be sure to have a terminal at the ready and in your project directory.
-
-
-
-### Create a project
-
-1. Go to [app.supabase.com](https://app.supabase.com).
-1. Click on "New Project".
-1. Enter your project details.
-1. Wait for the new database to launch.
-
-### Set up the database schema
-
-Now we are going to set up the database schema. We can use the "User Management Starter" quickstart in the SQL Editor,
-or you can just copy/paste the SQL from below and run it yourself.
-
-
-
-
-1. Go to the [SQL Editor](https://app.supabase.com/project/_/sql) page in the Dashboard.
-2. Click **User Management Starter**.
-3. Click **Run**.
-
-
-
-
-
-
-```sql
--- Create a table for public "profiles"
-create table profiles (
- id uuid references auth.users not null,
- updated_at timestamp with time zone,
- username text unique,
- avatar_url text,
- website text,
-
- primary key (id),
- unique(username),
- constraint username_length check (char_length(username) >= 3)
-);
-
-alter table profiles enable row level security;
-
-create policy "Public profiles are viewable by everyone."
- on profiles for select
- using ( true );
-
-create policy "Users can insert their own profile."
- on profiles for insert
- with check ( auth.uid() = id );
-
-create policy "Users can update own profile."
- on profiles for update
- using ( auth.uid() = id );
-
--- Set up Realtime!
-begin;
- drop publication if exists supabase_realtime;
- create publication supabase_realtime;
-commit;
-alter publication supabase_realtime add table profiles;
-
--- Set up Storage!
-insert into storage.buckets (id, name)
-values ('avatars', 'avatars');
-
-create policy "Avatar images are publicly accessible."
- on storage.objects for select
- using ( bucket_id = 'avatars' );
-
-create policy "Anyone can upload an avatar."
- on storage.objects for insert
- with check ( bucket_id = 'avatars' );
-
-```
-
-
-
-
-#### Important Note about Prisma and Migrations
-
-
-
-Because this Quick Start does not use Prisma to manage the database schema, seed it, or run migrations, you **need** to take extra care when running some of the typical Redwood CLI commands.
-
-
-
-### Get the API Keys
-
-Now that you've created some database tables, you are ready to insert data using the auto-generated API.
-We just need to get the URL as well as the `anon`, `service_role` and `JWT_SECRET` keys from the API settings.
-
-1. Go to the [API Settings](https://app.supabase.com/project/_/settings/api) page in the Dashboard.
-2. Find your API `URL`, `anon`, and `service_role` keys on this page.
-
-
+
## Building the App
@@ -291,7 +137,7 @@ And finally, you will also need to save **just** the `web side` environment vari
```bash title=redwood.toml
[web]
- title = "Supabase Redwood Quickstart"
+ title = "Supabase Redwood Tutorial"
port = 8910
apiProxyPath = "/.redwood/functions"
includeEnvironmentVariables = ["SUPABASE_URL", "SUPABASE_KEY"]
@@ -343,9 +189,7 @@ yarn rw dev
```
-
-Note: You can also use the alias `rw` for `redwood`, as in `yarn rw` to run Redwood CLI commands
-
+ `rw` is an alias for `redwood`, as in `yarn rw` to run Redwood CLI commands.
You should see a "Welcome to RedwoodJS" page and a message about not having any pages yet.
@@ -365,7 +209,7 @@ yarn rw generate page home /
-Note: the slash `/` is important here as it creates a root level route.
+The `/` is important here as it creates a root level route.
@@ -601,14 +445,10 @@ const Account = () => {
export default Account
```
-
-
-Note: You'll see the use of `useAuth()` several times in the quickstart. Redwood's `useAuth` hook provides convenient ways to access
+You'll see the use of `useAuth()` several times. Redwood's `useAuth` hook provides convenient ways to access
logIn, logOut, currentUser, and access the `supabase` authenticate client. We'll use it to get an instance
of the supabase client to interact with your API.
-
-
### Update Home Page
Now that we have all the components in place, let's update your `HomePage` page to use them:
@@ -785,12 +625,10 @@ return (
-## Next steps
-
At this stage you have a fully functional application!
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
+## See also
+
- Learn more about [RedwoodJS](https://redwoodjs.com)
- Visit the [RedwoodJS Discourse Community](https://community.redwoodjs.com)
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-solidjs.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-solidjs.mdx
index eaf47892298..c56047307f9 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-solidjs.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-solidjs.mdx
@@ -1,19 +1,18 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-solidjs',
- title: 'Quickstart: SolidJS',
+ title: 'Build a User Management App with SolidJS',
description: 'Learn how to use Supabase in your SolidJS App.',
- sidebar_label: 'SolidJS',
}

-### GitHub
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/solid-user-management).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/solid-user-management).
+
@@ -419,13 +418,8 @@ return (
-## Next steps
-
At this stage you have a fully functional application!
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
-
export const Page = ({ children }) =>
export default Page
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-svelte.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-svelte.mdx
index 5195fa8b135..9e362231fa3 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-svelte.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-svelte.mdx
@@ -1,19 +1,18 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-svelte',
- title: 'Quickstart: Svelte',
+ title: 'Build a User Management App with Svelte',
description: 'Learn how to use Supabase in your Svelte App.',
- sidebar_label: 'Svelte',
}

-### GitHub
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/svelte-user-management).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/svelte-user-management).
+
@@ -372,13 +371,8 @@ And then we can add the widget to the Account page:
-## Next steps
-
At this stage you have a fully functional application!
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
-
export const Page = ({ children }) =>
export default Page
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx
index 614dac516e2..a99cce9b9d9 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx
@@ -1,19 +1,18 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-sveltekit',
- title: 'Quickstart: SvelteKit',
+ title: 'Build a User Management App with SvelteKit',
description: 'Learn how to use Supabase in your SvelteKit App.',
- sidebar_label: 'SvelteKit',
}

-### GitHub
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/sveltekit-user-management).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/sveltekit-user-management).
+
@@ -438,13 +437,8 @@ And then we can add the widget to the Account page:
-## Next steps
-
At this stage you have a fully functional application!
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
-
export const Page = ({ children }) =>
export default Page
diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx
index b40659546fe..5480df2d4aa 100644
--- a/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx
+++ b/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx
@@ -1,19 +1,18 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
- id: 'with-vue-3',
- title: 'Quickstart: Vue 3',
+ title: 'Build a User Management App with Vue 3',
description: 'Learn how to use Supabase in your Vue 3 App.',
- sidebar_label: 'Vue 3',
}

-### GitHub
-
-Should you get stuck while working through the guide, refer to [this repo](https://github.com/supabase/supabase/tree/master/examples/user-management/vue3-user-management).
+
+ If you get stuck while working through this guide, refer to the [full example on
+ GitHub](https://github.com/supabase/supabase/tree/master/examples/user-management/vue3-user-management).
+
@@ -68,30 +67,30 @@ Optionally, update [src/style.css](https://raw.githubusercontent.com/supabase/su
Set up an `src/components/Auth.vue` component to manage logins and sign ups. We'll use Magic Links, so users can sign in with their email without using passwords.
-```html title=/src/components/Auth.vue
+```vue title=/src/components/Auth.vue
@@ -120,82 +119,82 @@ Set up an `src/components/Auth.vue` component to manage logins and sign ups. We'
After a user is signed in we can allow them to edit their profile details and manage their account.
Create a new `src/components/Account.vue` component to handle this.
-```html title=src/components/Account.vue
+```vue title=src/components/Account.vue
@@ -233,24 +232,24 @@ Create a new `src/components/Account.vue` component to handle this.
Now that we have all the components in place, let's update `App.vue`:
-```html title=src/App.vue
+```vue title=src/App.vue
@@ -279,56 +278,56 @@ Every Supabase project is configured with [Storage](/docs/guides/storage) for ma
Create a new `src/components/Avatar.vue` component that allows users to upload profile photos:
-```html title=src/components/Avatar.vue
+```vue title=src/components/Avatar.vue
@@ -344,7 +343,7 @@ Create a new `src/components/Avatar.vue` component that allows users to upload p
- // Import the new component
- import Avatar from './Avatar.vue'
+// Import the new component
+import Avatar from './Avatar.vue'
@@ -383,13 +382,8 @@ And then we can add the widget to the Account page in `src/components/Account.vu
-## Next steps
-
At this stage you have a fully functional application!
-- Got a question? [Ask here](https://github.com/supabase/supabase/discussions).
-- Sign in: [app.supabase.com](https://app.supabase.com)
-
export const Page = ({ children }) =>
export default Page
diff --git a/apps/docs/pages/guides/platform/network-restrictions.mdx b/apps/docs/pages/guides/platform/network-restrictions.mdx
index ce2f320a023..0564d57560a 100644
--- a/apps/docs/pages/guides/platform/network-restrictions.mdx
+++ b/apps/docs/pages/guides/platform/network-restrictions.mdx
@@ -8,9 +8,7 @@ export const meta = {
-Network Restrictions are currently in beta and are being slowly made available to all projects.
-
-The current iteration of Network Restrictions applies to connections to Postgres and PgBouncer. Support for restricting connections to PostgREST, Storage, and Auth will be added at a later date.
+Network Restrictions is currently in beta and is slowly being made available to all projects. [Contact support](https://app.supabase.com/support/new) if you'd like to request early access.
@@ -20,6 +18,7 @@ To get started:
1. [Install](/docs/guides/cli) the Supabase CLI 1.22.0+.
1. [Log in](/docs/guides/cli/local-development#log-in-to-the-supabase-cli) to your Supabase account using the CLI.
+1. If your project was created before 23rd December 2022, it will need to be [upgraded to the latest Supabase version](/docs/guides/platform/migrating-and-upgrading-projects) before Network Restrictions can be used.
1. Ensure that you have [Owner or Admin permissions](/docs/guides/platform/access-control#manage-team-members) for the project that you are enabling network restrictions.
## Check restrictions
@@ -67,8 +66,8 @@ Restrictions applied successfully: true
## Limitations
-1. Network Restrictions do not currently apply to APIs offered over HTTPS (e.g. PostgREST, Storage, Auth).
-1. Network Restrictions should not be used if you require you need to connect to your Postgres database using Edge Functions.
+- The current iteration of Network Restrictions applies to connections to Postgres and PgBouncer and doesn't currently apply to APIs offered over HTTPS (e.g., PostgREST, Storage, and Auth).
+- Network Restrictions should not be used if you need to connect to your Postgres database using Edge Functions.
export const Page = ({ children }) =>
diff --git a/apps/docs/pages/guides/platform/ssl-enforcement.mdx b/apps/docs/pages/guides/platform/ssl-enforcement.mdx
new file mode 100644
index 00000000000..ee70d7fbcaf
--- /dev/null
+++ b/apps/docs/pages/guides/platform/ssl-enforcement.mdx
@@ -0,0 +1,58 @@
+import Layout from '~/layouts/DefaultGuideLayout'
+
+export const meta = {
+ title: 'Postgres SSL Enforcement',
+ description: 'Enforce SSL usage for all Postgres connections',
+}
+
+
+
+Postgres SSL Enforcement is currently in beta and is slowly being made available to all projects. [Contact support](https://app.supabase.com/support/new) if you'd like to request early access.
+
+
+
+Your Supabase project supports connecting to the Postgres DB without SSL enabled to maximize client compatibility. For increased security, you can prevent clients from connecting if they're not using SSL.
+
+SSL enforcement only applies to connections to both Postgres and PgBouncer ("Connection Pooler"); all HTTP APIs offered by Supabase (e.g., PostgREST, Storage, Auth) automatically enforce SSL on all incoming connections.
+
+To get started:
+
+1. [Install](/docs/guides/cli) the Supabase CLI 1.37.0+.
+1. [Log in](/docs/guides/cli/local-development#log-in-to-the-supabase-cli) to your Supabase account using the CLI.
+1. Ensure that you have [Owner or Admin permissions](/docs/guides/platform/access-control#manage-team-members) for the project that you are enabling SSL enforcement.
+
+## Check enforcement status
+
+You can use the `get` subcommand of the CLI to check whether SSL is currently being enforced:
+
+```bash
+> supabase ssl-enforcement --project-ref {ref} get --experimental
+SSL is being enforced.
+```
+
+Or similarly, if SSL is not being enforced, you will see:
+
+```bash
+> supabase ssl-enforcement --project-ref {ref} get --experimental
+SSL is *NOT* being enforced.
+```
+
+## Update enforcement
+
+The `update` subcommand is used to change the SSL enforcement status for your project:
+
+```bash
+> supabase ssl-enforcement --project-ref {ref} update --enable-db-ssl-enforcement --experimental
+SSL is now being enforced.
+```
+
+Similarly, to disable SSL enforcement:
+
+```bash
+> supabase ssl-enforcement --project-ref {ref} update --disable-db-ssl-enforcement --experimental
+SSL is *NOT* being enforced.
+```
+
+export const Page = ({ children }) =>
+
+export default Page
diff --git a/apps/docs/pages/index.mdx b/apps/docs/pages/index.mdx
index 0f687a9929e..d8aebeb4157 100644
--- a/apps/docs/pages/index.mdx
+++ b/apps/docs/pages/index.mdx
@@ -125,7 +125,7 @@ export const meta = {
md:items-center md:gap-3
">
diff --git a/apps/docs/public/humans.txt b/apps/docs/public/humans.txt
index e3e3d2da62d..60e064da4b0 100644
--- a/apps/docs/public/humans.txt
+++ b/apps/docs/public/humans.txt
@@ -18,7 +18,6 @@ Dave Wilson
Div Arora
Egor Romanov
Fabrizio Fenoglio
-Francisco Mazzoni
Haydn Maley
Hieu Pham
Inian P
diff --git a/apps/www/_blog/2023-02-03-openai-embeddings-postgres-vector.mdx b/apps/www/_blog/2023-02-03-openai-embeddings-postgres-vector.mdx
index caf2c2bd758..264b04033f6 100644
--- a/apps/www/_blog/2023-02-03-openai-embeddings-postgres-vector.mdx
+++ b/apps/www/_blog/2023-02-03-openai-embeddings-postgres-vector.mdx
@@ -7,7 +7,7 @@ thumb: embeddings/og_pgvector.png
tags:
- postgres
- ai
-date: '2023-01-06'
+date: '2023-02-06'
toc_depth: 3
---
diff --git a/apps/www/_blog/2023-02-07-chatgpt-supabase-docs.mdx b/apps/www/_blog/2023-02-07-chatgpt-supabase-docs.mdx
new file mode 100644
index 00000000000..6c1b29a9e70
--- /dev/null
+++ b/apps/www/_blog/2023-02-07-chatgpt-supabase-docs.mdx
@@ -0,0 +1,116 @@
+---
+title: 'Supabase Clippy: ChatGPT for Supabase Docs'
+description: Creating a ChatGPT interface for the Supabase documentation.
+author: paul_copplestone
+image: docsgpt/og_supabase_clippy.png
+thumb: docsgpt/og_supabase_clippy.png
+tags:
+ - ai
+ - docs
+date: '2023-02-07'
+toc_depth: 3
+---
+
+We all know that Microsoft's real agenda for pouring billions into OpenAI to revive their favorite friend Clippy.
+Today, we're doing our part to support the momentum by releasing “Supabase Clippy” for our docs (and we don't expect this name to last long before the lawyers catch on).
+
+
+
+Want to try it out? It's a hidden feature while in MVP - visit [supabase.com/docs](/docs) and hit `cmd` + `/` to pull up the search box (sorry mobile users).
+
+# ChatGPT for Supabase Docs
+
+Last launch week we [released](/blog/new-supabase-docs-built-with-nextjs) our new documentation site to improve the developer experience, especially for new users.
+
+When we first started Supabase our docs were very concise. We deliberately withheld "non-critical information" so that developers could consume everything in one sitting.
+
+Our product suite has grown in the past 2 years and our docs have grown as a result. There's a lot to read. We're also attracting developers who've never used Postgres before, and it's becoming incumbent on us to train these developers on best-practices.
+
+
+
+### The “ask” interface
+
+Developers have recently gained an the ability to trust a bot. Where Clippy failed, ChatGPT succeeded.
+
+This is convenient timing for us, since our documentation content is more than the average developer wants to consume in one go. Today we're providing a similar interface to ChatGPT which is trained on our own docs.
+
+
+
+To keep your expectations low, this implementation is a 1-week MVP. We're sharing this iteration to gather feedback and to teach you how to build something similar.
+
+## How it's built
+
+It's built with Supabase/Postgres, and consists of several key parts:
+
+1. Parsing the Supabase docs into sections.
+2. Creating embeddings for each section using OpenAI's embeddings API.
+3. Storing the embeddings in Postgres using the pgvector extension.
+4. Getting a user's question.
+5. Query the Postgres database for the most relevant documents related to the question.
+6. Inject these documents as context for GPT-3 to reference in its answer.
+7. Streaming the results back to the user in realtime.
+
+All the changes we made are in [this](https://github.com/supabase/supabase/pull/12056) Pull Request. Greg is here to explain every step in full detail:
+
+
+
+
+
+You can find a full write up in our previous blog post: [Storing OpenAI embeddings in Postgres with pgvector](https://supabase.com/blog/openai-embeddings-postgres-vector).
+
+## What's next
+
+This current version is very basic, which makes it a good starting point if you want to build something similar.
+
+- **Expand the knowledge base:** Create embeddings for our reference docs, GitHub Discussions, Discord discussions, etc. The current iteration is only using the Guides.
+- **Caching:** Cache queries so that we can provide answers instantly to similar/matching questions.
+- **User-assisted improvements:** Ability to thumbs-up responses for relevance.
+- **Beyond search:** perhaps we can make this interface interactive, guiding users through instructions.
+
+## Bonus: The power of open source
+
+One of the most interesting things about this feature was _how_ it happened - almost completely from open source contributions. A short series of events:
+
+### A friendly email
+
+A few weeks ago I received an email, drawing our attention to a [Pull Request](https://github.com/supabase/postgres/pull/472) in our [`postgres`](https://github.com/supabase/postgres) GitHub repo:
+
+
+
+### A friendly chat
+
+After we merged the PR, I reached out to see if Greg was interested in helping with some documentation or a blog post to help the community to use pgvector. On the call, Greg surprised me with an initial prototype where he had ingested the Supabase docs for a ChatGPT-like experience. I was suitably impressed and suggested that we could explore ways to work together to build it into the Supabase docs. He wasted no time:
+
+
+
+
+
+### A friendly collaboration
+
+We sponsored Greg to work on an MVP with us, along with some guides to help developers do the same. He [pushed all his changes](https://github.com/supabase/supabase/pull/12056) to the Supabase Docs, and we wrote a [blog post](/blog/openai-embeddings-postgres-vector) together to help developers build something similar.
+
+If you re-read the events above and swap “Supabase” for any other big-tech company, you'll grasp how impossible this series of events is for any company that's not open source. All the code that was contributed is licensed liberally, so we didn't need to jump through IP checklists. Our docs are publicly available on GitHub, so Greg could build his prototype without being granted access.
+
+We're incredibly grateful for Greg's work here, so if you like what he's done then consider supporting him by checking out [prmpts.ai](https://prmpts.ai/) and following him on twitter: [@ggrdson](https://twitter.com/ggrdson).
+
+While you're at it, consider supporting [@ankane](https://github.com/ankane)'s great work on [pgvector](https://github.com/pgvector/pgvector) by starring them on GitHub, and sending your thanks.
+
+## Try it out
+
+Want to try Supabase Clippy? It's a hidden feature while in MVP - visit [supabase.com/docs](/docs) and hit `cmd` + `/` to pull up the search box (sorry mobile users).
+
+If you have any comments we'd love to hear them in our [ShowHN](https://news.ycombinator.com/item?id=34695306).
diff --git a/apps/www/_blog/2023-02-08-supabase-beta-january-2023.mdx b/apps/www/_blog/2023-02-08-supabase-beta-january-2023.mdx
new file mode 100644
index 00000000000..1e527906a7a
--- /dev/null
+++ b/apps/www/_blog/2023-02-08-supabase-beta-january-2023.mdx
@@ -0,0 +1,135 @@
+---
+title: Supabase Beta January 2023
+description: New Postgres extensions, pg_graphql updates, changes to Edge Functions, and more!
+author: ant_wilson
+image: 2023-02-08-january-beta-update/supabase-beta-update-january-2023.jpg
+thumb: 2023-02-08-january-beta-update/supabase-beta-update-january-2023.jpg
+tags:
+ - release-notes
+date: '2023-02-08'
+toc_depth: 3
+---
+
+We have so much good stuff this month that it’s hard to fit in a single blog post 🚢.
+
+We’ve got some new Postgres extensions, GraphQL updates, changes to Edge Functions, and more!
+
+## Storing OpenAI embeddings in Postgres with pgvector
+
+
+
+pgvector is a popular PostgreSQL extension for storing embeddings and performing vector similarity search. It was one of the most requested extensions by the AI/ML community and is now available thanks to [gregnr](https://github.com/gregnr).
+
+[Read the announcement](https://supabase.com/blog/openai-embeddings-postgres-vector)
+
+## Meet Supabase Clippy: ChatGPT for Docs
+
+
+
+Greg wasted no time and took pgvector for a spin, he combined it with OpenAI to build Supabase Clippy, a next-generation doc search. The first implementation is a 1-week MVP and fully open source, so you can build on top of it.
+
+- [Read the blog post](https://supabase.com/blog/chatgpt-supabase-docs)
+- [Watch the video tutorial](https://www.youtube.com/watch?v=Yhtjd7yGGGA)
+
+## Client library reference: Python and C#
+
+
+
+We have released extensive reference docs for C# and Python, detailing every object and method. What are you going to build?
+
+- [C# Client Library](https://supabase.com/docs/reference/csharp/)
+- [Python Client Library](https://supabase.com/docs/reference/python/initializing)
+
+## pg_graphql now supports Views, Materialized Views, and Foreign Tables
+
+
+
+Views, Materialized Views, and Foreign Tables are three database objects that provide a powerful way to access and organize and transform data without duplication.
+
+[Read the docs](https://supabase.github.io/pg_graphql/views/)
+
+## Automatic WebP detection for Image Transformation
+
+
+
+WebP is a modern image format that provides superior lossless and lossy compression for images on the web. We are enabling format conversion by default for anyone who has Image Transformations. You can opt out by including format: origin in the transformation parameters.
+
+[Read the docs](https://supabase.com/docs/guides/storage/image-transformations#automatic-image-optimisation-webp)
+
+## Quick product updates
+
+- Postgres Extension: Another powerful and time-tested extension, pg_repack, is added to Supabase. [[PR]](https://github.com/supabase/postgres/pull/492)
+
+- Auth: Multi-tab session support using the new browser BroadcastChannel API. If a user logs out on one tab, they will now be logged out on all tabs. [[PR]](https://github.com/supabase/gotrue-js/pull/566)
+
+- Postgres: Superior speed with lz4 database compression. [[PR]](https://github.com/supabase/postgres/pull/490)
+
+- Postgres: Use ICU locales and collations for text attribute ordering in database queries. [[PR]](https://github.com/supabase/postgres/pull/491)
+
+- Docs: New guide on scheduling functions with pg_cron. [[Guide]](https://supabase.com/docs/guides/functions/schedule-functions)
+
+- Edge Functions: You can now download source codes of deployed edge functions from the CLI. [[Doc]](https://supabase.com/docs/reference/cli/supabase-functions-download)
+
+- Edge Functions: building a Discord Slash Bot. [[Video Tutorial]](https://www.youtube.com/watch?v=J24Bvo_m7DM)
+
+## Deploy Supabase on DigitalOcean
+
+
+
+We teamed up with DigitalOcean to level up self-hosted Supabase. This guide shows how to host Supabase on DigitalOcean using Sendgrid, Packer, and Terraform. More collaborations coming soon!
+
+[Get started](https://docs.digitalocean.com/developer-center/hosting-supabase-on-digitalocean/).
+
+## 45k Github stars (and counting!)
+
+
+
+We hit two big milestones: 45k stars and Supabase is one the top 200 most-popular repos on Github 💥
+
+Massive thanks to the community for all the support 👁️⚡️👁️
+
+[Supabase Repo.](https://github.com/supabase/supabase)
+
+## Made with Supabase
+
+
+
+[supermeme.ai](https://www.supermeme.ai/) | Two things that we are fans of are memes and AI. Just describe your thoughts and let AI create original memes for you. Available in 110+ languages!
+
+Discover other great projects: [Made with Supabase](https://www.madewithsupabase.com/).
+
+## Extended Community Highlights
+
+
+
+- JWT Helper for Supabase by Zuplo. [Tool](https://zuplo.com/blog/2023/01/05/supabase-jwt-auth-helper/)
+
+- ClickHouse and PostgreSQL - a Match Made in Data Heaven - Part 2. [Blog Post](https://clickhouse.com/blog/migrating-data-between-clickhouse-postgres-part-2)
+- Building a Startup from Scratch: My Mistakes as CTO. [Blog Post](https://egor-romanov.medium.com/building-a-startup-from-scratch-my-mistakes-as-cto-b20b463e0058)
+- We are sponsoring TreeHacks, Stanford University's premier hackathon and one of the largest hackathons in the USA. [Hackathon](https://www.treehacks.com)
+- Set up a Svelte to-do list on self-hosted Supabase + authentication. [Tutorial](https://blog.cpbprojects.me/set-up-a-svelte-todo-list-on-self-hosted-supabase-email-sign-up-google-facebook-auth-host-on-github-pages)
+- Vercel wrote a case study about how much we love TurboRepo (and Vercel in general 🖤). [Case Study](https://vercel.com/customers/how-supabase-elevated-their-developer-experience-with-turborepo)
+- A Very Basic Scraper/Aggregator Site in Next.js with Go Cloud Functions and Supabase. [Article](https://chriscoyier.net/2023/01/23/a-very-basic-scraper-aggregator-site-in-next-js-with-go-cloud-functions-and-supabase/)
+- Supabase CDC Webhooks to Memphis REST Gateway. [Article](https://memphis.dev/blog/supabase-cdc-webhooks-to-memphis-rest-gateway/)
+- How I Replaced Revue With a Custom-Built Newsletter Service Using Nuxt 3, Supabase, Serverless, and Amazon SES. [Article](https://mokkapps.de/blog/how-i-replaced-revue-with-a-custom-built-newsletter-service-using-nuxt-3-supabase-serverless-and-amazon-ses/)
+- Nuxt 3, Tailwind, and Supabase Crash Course. [Video Course](https://www.youtube.com/watch?v=A-G6lPHctPs)
+- WhatsApp in React Native. [Part 1](https://dev.to/jacksbridger/whatsapp-ui-in-react-native-part-1-4nbm), [Part 2](https://dev.to/nsmet/chat-backend-with-supabase-socketio-55nn), [Part 3](https://dev.to/jacksbridger/whatsapp-in-react-native-part-3-1gmf)
+- Distributed GraphQL with Hasura and Supabase. [Docs](https://www.section.io/docs/tutorials/distributed-apis/distributed-hasura-supabase/)
+
+## We're Hiring
+
+Come join one of the fastest-growing open source projects ever 🤗
+
+- [Integrations / Marketplace Lead](https://boards.greenhouse.io/supabase/jobs/4775849004)
+- [Cloud Platform / Site Reliability Engineer](https://boards.greenhouse.io/supabase/jobs/4307459004)
+- [Social Media and Community Manager](https://boards.greenhouse.io/supabase/jobs/4777008004)
+
+We've redesigned our [Careers page](https://supabase.com/careers) to better reflect our mission, values, and culture.
+
+## Meme Zone
+
+As always, one of our favorite memes from last month. [Follow us on Twitter](https://twitter.com/supabase) for more.
+
+
+
+See you next month!
diff --git a/apps/www/lib/redirects.js b/apps/www/lib/redirects.js
index 756c7e131cb..e73aa509b57 100644
--- a/apps/www/lib/redirects.js
+++ b/apps/www/lib/redirects.js
@@ -1852,4 +1852,9 @@ module.exports = [
source: '/docs/guides/examples',
destination: '/docs/guides/resources/examples',
},
+ {
+ permanent: true,
+ source: '/docs/reference/javascript/v0/rpc',
+ destination: '/docs/reference/javascript/rpc',
+ },
]
diff --git a/apps/www/public/images/blog/2023-02-08-january-beta-update/beta-update-january-meme.jpeg b/apps/www/public/images/blog/2023-02-08-january-beta-update/beta-update-january-meme.jpeg
new file mode 100644
index 00000000000..5d695174922
Binary files /dev/null and b/apps/www/public/images/blog/2023-02-08-january-beta-update/beta-update-january-meme.jpeg differ
diff --git a/apps/www/public/images/blog/2023-02-08-january-beta-update/chatgpt-for-supabase-docs.png b/apps/www/public/images/blog/2023-02-08-january-beta-update/chatgpt-for-supabase-docs.png
new file mode 100644
index 00000000000..bd7b06bd39a
Binary files /dev/null and b/apps/www/public/images/blog/2023-02-08-january-beta-update/chatgpt-for-supabase-docs.png differ
diff --git a/apps/www/public/images/blog/2023-02-08-january-beta-update/github-45k.png b/apps/www/public/images/blog/2023-02-08-january-beta-update/github-45k.png
new file mode 100644
index 00000000000..55c416727d5
Binary files /dev/null and b/apps/www/public/images/blog/2023-02-08-january-beta-update/github-45k.png differ
diff --git a/apps/www/public/images/blog/2023-02-08-january-beta-update/image-transformation.png b/apps/www/public/images/blog/2023-02-08-january-beta-update/image-transformation.png
new file mode 100644
index 00000000000..da06c876e5c
Binary files /dev/null and b/apps/www/public/images/blog/2023-02-08-january-beta-update/image-transformation.png differ
diff --git a/apps/www/public/images/blog/2023-02-08-january-beta-update/pg-graphql.png b/apps/www/public/images/blog/2023-02-08-january-beta-update/pg-graphql.png
new file mode 100644
index 00000000000..ae85ded06ee
Binary files /dev/null and b/apps/www/public/images/blog/2023-02-08-january-beta-update/pg-graphql.png differ
diff --git a/apps/www/public/images/blog/2023-02-08-january-beta-update/pgvector.png b/apps/www/public/images/blog/2023-02-08-january-beta-update/pgvector.png
new file mode 100644
index 00000000000..0e06fe5dbae
Binary files /dev/null and b/apps/www/public/images/blog/2023-02-08-january-beta-update/pgvector.png differ
diff --git a/apps/www/public/images/blog/2023-02-08-january-beta-update/references.png b/apps/www/public/images/blog/2023-02-08-january-beta-update/references.png
new file mode 100644
index 00000000000..da5ac03c9a1
Binary files /dev/null and b/apps/www/public/images/blog/2023-02-08-january-beta-update/references.png differ
diff --git a/apps/www/public/images/blog/2023-02-08-january-beta-update/self-host-supabase-digital-ocean.png b/apps/www/public/images/blog/2023-02-08-january-beta-update/self-host-supabase-digital-ocean.png
new file mode 100644
index 00000000000..fbeac1d608f
Binary files /dev/null and b/apps/www/public/images/blog/2023-02-08-january-beta-update/self-host-supabase-digital-ocean.png differ
diff --git a/apps/www/public/images/blog/2023-02-08-january-beta-update/supabase-beta-update-january-2023.jpg b/apps/www/public/images/blog/2023-02-08-january-beta-update/supabase-beta-update-january-2023.jpg
new file mode 100644
index 00000000000..f8ba97d4f8d
Binary files /dev/null and b/apps/www/public/images/blog/2023-02-08-january-beta-update/supabase-beta-update-january-2023.jpg differ
diff --git a/apps/www/public/images/blog/docsgpt/clippy.png b/apps/www/public/images/blog/docsgpt/clippy.png
new file mode 100644
index 00000000000..6995b48bfb5
Binary files /dev/null and b/apps/www/public/images/blog/docsgpt/clippy.png differ
diff --git a/apps/www/public/images/blog/docsgpt/greg.png b/apps/www/public/images/blog/docsgpt/greg.png
new file mode 100644
index 00000000000..3e6eb4298a9
Binary files /dev/null and b/apps/www/public/images/blog/docsgpt/greg.png differ
diff --git a/apps/www/public/images/blog/docsgpt/indexes.png b/apps/www/public/images/blog/docsgpt/indexes.png
new file mode 100644
index 00000000000..08484086e18
Binary files /dev/null and b/apps/www/public/images/blog/docsgpt/indexes.png differ
diff --git a/apps/www/public/images/blog/docsgpt/og_supabase_clippy.png b/apps/www/public/images/blog/docsgpt/og_supabase_clippy.png
new file mode 100644
index 00000000000..e11fc54e755
Binary files /dev/null and b/apps/www/public/images/blog/docsgpt/og_supabase_clippy.png differ
diff --git a/apps/www/public/rss.xml b/apps/www/public/rss.xml
index 3debdf27d81..13f28e65e6c 100644
--- a/apps/www/public/rss.xml
+++ b/apps/www/public/rss.xml
@@ -5,1085 +5,1099 @@
https://supabase.com
Latest news from Supabaseen
- Thu, 05 Jan 2023 23:11:00 +0000
+ Tue, 07 Feb 2023 03:03:30 +0000
+ https://supabase.com/blog/supabase-beta-january-2023
+ Supabase Beta January 2023
+ https://supabase.com/blog/supabase-beta-january-2023
+ New Postgres extensions, pg_graphql updates, changes to Edge Functions, and more!
+ Tue, 07 Feb 2023 03:03:30 +0000
+
+
+ https://supabase.com/blog/chatgpt-supabase-docs
+ Supabase Clippy: ChatGPT for Supabase Docs
+ https://supabase.com/blog/chatgpt-supabase-docs
+ Creating a ChatGPT interface for the Supabase documentation.
+ Mon, 06 Feb 2023 03:03:30 +0000
+
+https://supabase.com/blog/openai-embeddings-postgres-vectorStoring OpenAI embeddings in Postgres with pgvector
https://supabase.com/blog/openai-embeddings-postgres-vector
An example of how to build an AI-powered search engine using OpenAI's embeddings and PostgreSQL.
- Thu, 05 Jan 2023 23:11:00 +0000
+ Sun, 05 Feb 2023 03:03:30 +0000https://supabase.com/blog/supabase-beta-december-2022Supabase Beta December 2022
https://supabase.com/blog/supabase-beta-december-2022
This month the Beta Update is a Launch Week 6 Special, where we review the cascade of announcements.
- Wed, 04 Jan 2023 23:11:00 +0000
+ Wed, 04 Jan 2023 03:03:30 +0000https://supabase.com/blog/launch-week-6-hackathon-winnersLaunch Week 6 Hackathon Winners
https://supabase.com/blog/launch-week-6-hackathon-winners
Announcing the winners of the Launch Week 6 Hackathon!
- Mon, 02 Jan 2023 23:11:00 +0000
+ Mon, 02 Jan 2023 03:03:30 +0000https://supabase.com/blog/vault-now-in-betaSupabase Vault is now in Beta
https://supabase.com/blog/vault-now-in-beta
A Postgres extension to store encrypted secrets and encrypt data.
- Thu, 15 Dec 2022 23:11:00 +0000
+ Thu, 15 Dec 2022 03:03:30 +0000https://supabase.com/blog/postgrest-11-prereleasePostgREST 11 pre-release
https://supabase.com/blog/postgrest-11-prerelease
Describes new features of PostgREST 11 pre-release
- Thu, 15 Dec 2022 23:11:00 +0000
+ Thu, 15 Dec 2022 03:03:30 +0000https://supabase.com/blog/postgres-point-in-time-recoveryPoint in Time Recovery is now available for Pro projects
https://supabase.com/blog/postgres-point-in-time-recovery
We're making PITR available for more projects, with a new Dashboard UI that makes it simple to use.
- Thu, 15 Dec 2022 23:11:00 +0000
+ Thu, 15 Dec 2022 03:03:30 +0000https://supabase.com/blog/pg-graphql-v1pg_graphql v1.0
https://supabase.com/blog/pg-graphql-v1
Announcing the v1.0 release of pg_graphql
- Thu, 15 Dec 2022 23:11:00 +0000
+ Thu, 15 Dec 2022 03:03:30 +0000https://supabase.com/blog/new-in-postgres-15What's new in Postgres 15?
https://supabase.com/blog/new-in-postgres-15
Describes the release of Postgres 15, new features and reasons to use it
- Thu, 15 Dec 2022 23:11:00 +0000
+ Thu, 15 Dec 2022 03:03:30 +0000https://supabase.com/blog/launch-week-6-wrap-upLaunch Week 6: Wrap Up
https://supabase.com/blog/launch-week-6-wrap-up
That's a wrap on Supabase Launch Week Day 6. Here's everything we shipped in one long blog post.
- Thu, 15 Dec 2022 23:11:00 +0000
+ Thu, 15 Dec 2022 03:03:30 +0000https://supabase.com/blog/launch-week-6-community-dayCommunity Day
https://supabase.com/blog/launch-week-6-community-day
Wrapping up Launch Week 6 with contributors, partners, and friends.
- Thu, 15 Dec 2022 23:11:00 +0000
+ Thu, 15 Dec 2022 03:03:30 +0000https://supabase.com/blog/custom-domain-namesCustom Domain Names
https://supabase.com/blog/custom-domain-names
Change your Supabase project's domain name to your own domain.
- Thu, 15 Dec 2022 23:11:00 +0000
+ Thu, 15 Dec 2022 03:03:30 +0000https://supabase.com/blog/postgres-foreign-data-wrappers-rustSupabase Wrappers, a Postgres FDW framework written in Rust
https://supabase.com/blog/postgres-foreign-data-wrappers-rust
A framework for building Postgres Foreign Data Wrappers which connects to Stripe, Firebase, Clickhouse, and more.
- Wed, 14 Dec 2022 23:11:00 +0000
+ Wed, 14 Dec 2022 03:03:30 +0000https://supabase.com/blog/mfa-auth-via-rlsMulti-factor Authentication via Row Level Security Enforcement
https://supabase.com/blog/mfa-auth-via-rls
MFA Auth with enforcement via RLS
- Tue, 13 Dec 2022 23:11:00 +0000
+ Tue, 13 Dec 2022 03:03:30 +0000https://supabase.com/blog/storage-image-resizing-smart-cdnSupabase Storage v2: Image resizing and Smart CDN
https://supabase.com/blog/storage-image-resizing-smart-cdn
We're introducing new features for Supabase Storage: Image resizing and a Smart CDN.
- Mon, 12 Dec 2022 23:11:00 +0000
+ Mon, 12 Dec 2022 03:03:30 +0000https://supabase.com/blog/new-supabase-docs-built-with-nextjsNew Supabase Docs, built with Next.js
https://supabase.com/blog/new-supabase-docs-built-with-nextjs
We've redesigned our Docs and migrated to Next.js
- Sun, 11 Dec 2022 23:11:00 +0000
+ Sun, 11 Dec 2022 03:03:30 +0000https://supabase.com/blog/postgres-crdtpg_crdt - an experimental CRDT extension for Postgres
https://supabase.com/blog/postgres-crdt
Embedding Yjs and Automerge into Postgres for collaborative applications.
- Fri, 09 Dec 2022 23:11:00 +0000
+ Fri, 09 Dec 2022 03:03:30 +0000https://supabase.com/blog/who-we-hireWho We Hire at Supabase
https://supabase.com/blog/who-we-hire
Traits we look for to maintain a culture of shipping fast and often
- Thu, 08 Dec 2022 23:11:00 +0000
+ Thu, 08 Dec 2022 03:03:30 +0000https://supabase.com/blog/launch-week-6-hackathonLaunch Week 6 Hackathon
https://supabase.com/blog/launch-week-6-hackathon
Build an Open Source Project, Win $1500 and the Supabase Darkmode Keyboard
- Thu, 08 Dec 2022 23:11:00 +0000
+ Thu, 08 Dec 2022 03:03:30 +0000https://supabase.com/blog/supabase-beta-november-2022Supabase Beta November 2022
https://supabase.com/blog/supabase-beta-november-2022
We are preparing everything for Launch Week 6, but we still had time to ship some goodies this month!
- Tue, 06 Dec 2022 23:11:00 +0000
+ Tue, 06 Dec 2022 03:03:30 +0000https://supabase.com/blog/the-supabase-content-stormThe Supabase Content Storm
https://supabase.com/blog/the-supabase-content-storm
We worked with +30 content creators to drop a mountain of content simultaneously.
- Mon, 05 Dec 2022 23:11:00 +0000
+ Mon, 05 Dec 2022 03:03:30 +0000https://supabase.com/blog/transparent-column-encryption-with-postgresTransparent Column Encryption with Postgres
https://supabase.com/blog/transparent-column-encryption-with-postgres
Using pgsodium's Transparent Column Encryption to encrypt data and provide your users with row-level encryption.
- Wed, 30 Nov 2022 23:11:00 +0000
+ Wed, 30 Nov 2022 03:03:30 +0000https://supabase.com/blog/sql-or-nosql-both-with-postgresqlSQL or NoSQL? Why not use both (with PostgreSQL)?
https://supabase.com/blog/sql-or-nosql-both-with-postgresql
How to turn Postgres into an easy-to-use NoSQL database that retains all the power of SQL
- Wed, 23 Nov 2022 23:11:00 +0000
+ Wed, 23 Nov 2022 03:03:30 +0000https://supabase.com/blog/flutter-authentication-and-authorization-with-rlsFlutter Authentication and Authorization with RLS
https://supabase.com/blog/flutter-authentication-and-authorization-with-rls
Learn how you can secure your Flutter app using Supabase Row Level Security.
- Mon, 21 Nov 2022 23:11:00 +0000
+ Mon, 21 Nov 2022 03:03:30 +0000https://supabase.com/blog/fetching-and-caching-supabase-data-in-next-js-server-componentsFetching and caching Supabase data in Next.js 13 Server Components
https://supabase.com/blog/fetching-and-caching-supabase-data-in-next-js-server-components
Next.js 13 introduces new data fetching and caching methods to enable React Server Components and Suspense.
- Wed, 16 Nov 2022 23:11:00 +0000
+ Wed, 16 Nov 2022 03:03:30 +0000https://supabase.com/blog/authentication-in-ionic-angularAuthentication in Ionic Angular with Supabase
https://supabase.com/blog/authentication-in-ionic-angular
Learn how to build an Ionic Angular app with authentication, Row Level Security, and Magic Link auth.
- Mon, 07 Nov 2022 23:11:00 +0000
+ Mon, 07 Nov 2022 03:03:30 +0000https://supabase.com/blog/supabase-beta-update-october-2022Supabase Beta October 2022
https://supabase.com/blog/supabase-beta-update-october-2022
New SDKs, quickstarts, Functions tricks, and more. But, more importantly, Launch Week 6️ has a date!
- Tue, 01 Nov 2022 23:11:00 +0000
+ Tue, 01 Nov 2022 02:02:30 +0000https://supabase.com/blog/postgresql-commitfestWhat is PostgreSQL commitfest and how to contribute
https://supabase.com/blog/postgresql-commitfest
A time-tested method for contributing to the core Postgres code
- Wed, 26 Oct 2022 22:10:00 +0000
+ Wed, 26 Oct 2022 02:02:30 +0000https://supabase.com/blog/supabase-flutter-sdk-v1-releasedsupabase-flutter v1 Released
https://supabase.com/blog/supabase-flutter-sdk-v1-released
We've released supabase-flutter v1. More intuitive way of accessing Supabase from your Flutter application.
- Thu, 20 Oct 2022 22:10:00 +0000
+ Thu, 20 Oct 2022 02:02:30 +0000https://supabase.com/blog/supabase-js-v2-releasedsupabase-js v2 Released
https://supabase.com/blog/supabase-js-v2-released
We've released supabase-js v2. Updated examples, quickstarts, and an improved experience.
- Wed, 19 Oct 2022 22:10:00 +0000
+ Wed, 19 Oct 2022 02:02:30 +0000https://supabase.com/blog/postgres-full-text-search-vs-the-restPostgres Full Text Search vs the rest
https://supabase.com/blog/postgres-full-text-search-vs-the-rest
Comparing one of the most popular Postgres features against alternatives
- Thu, 13 Oct 2022 22:10:00 +0000
+ Thu, 13 Oct 2022 02:02:30 +0000https://supabase.com/blog/supabase-beta-update-september-2022Supabase Beta September 2022
https://supabase.com/blog/supabase-beta-update-september-2022
We were too focused on clearing out the backlog so we didn't ship anything new last month... or did we?!
- Tue, 04 Oct 2022 22:10:00 +0000
+ Tue, 04 Oct 2022 02:02:30 +0000https://supabase.com/blog/postgres-wasmPostgres WASM by Snaplet and Supabase
https://supabase.com/blog/postgres-wasm
We're open sourcing postgres-wasm, a PostgresQL server that runs inside a browser, with our friends at Snaplet.
- Sun, 02 Oct 2022 22:10:00 +0000
+ Sun, 02 Oct 2022 02:02:30 +0000https://supabase.com/blog/choosing-a-postgres-primary-keyChoosing a Postgres Primary Key
https://supabase.com/blog/choosing-a-postgres-primary-key
Turns out the question of which identifier to use as a Primary Key is complicated -- we're going to dive into some of the complexity and inherent trade-offs, and figure things out
- Wed, 07 Sep 2022 22:10:00 +0000
+ Wed, 07 Sep 2022 02:02:30 +0000https://supabase.com/blog/supabase-beta-update-august-2022Supabase Beta August 2022
https://supabase.com/blog/supabase-beta-update-august-2022
Launch Week Special. See everything we shipped, plus winners of the Hackathon and the extended Community Highlights
- Tue, 06 Sep 2022 22:10:00 +0000
+ Tue, 06 Sep 2022 02:02:30 +0000https://supabase.com/blog/launch-week-5-hackathon-winnersLaunch Week 5 Hackathon Winners
https://supabase.com/blog/launch-week-5-hackathon-winners
Announcing the winners of the Launch Week 5 Hackathon!
- Wed, 24 Aug 2022 22:10:00 +0000
+ Wed, 24 Aug 2022 02:02:30 +0000https://supabase.com/blog/building-a-realtime-trello-board-with-supabase-and-angularBuilding a Realtime Trello Board with Supabase and Angular
https://supabase.com/blog/building-a-realtime-trello-board-with-supabase-and-angular
Go beyond the hello world example with this real world project.
- Tue, 23 Aug 2022 22:10:00 +0000
+ Tue, 23 Aug 2022 02:02:30 +0000https://supabase.com/blog/supabase-vaultSupabase Vault
https://supabase.com/blog/supabase-vault
Today we're announcing Vault, a Postgres extension for managing secrets and encryption inside your database.
- Thu, 18 Aug 2022 22:10:00 +0000
+ Thu, 18 Aug 2022 02:02:30 +0000https://supabase.com/blog/postgrest-v10PostgREST v10: EXPLAIN and Improved Relationship Detection
https://supabase.com/blog/postgrest-v10
Today, PostgREST 10 was released. Let's take a look at some of the new features that go hand in hand with supabase-js v2.
- Thu, 18 Aug 2022 22:10:00 +0000
+ Thu, 18 Aug 2022 02:02:30 +0000https://supabase.com/blog/pg-jsonschema-a-postgres-extension-for-json-validationpg_jsonschema: JSON Schema support for Postgres
https://supabase.com/blog/pg-jsonschema-a-postgres-extension-for-json-validation
Today we're releasing pg_jsonschema, a Postgres extension for JSON validation.
- Thu, 18 Aug 2022 22:10:00 +0000
+ Thu, 18 Aug 2022 02:02:30 +0000https://supabase.com/blog/launch-week-5-one-more-thingOne more thing
https://supabase.com/blog/launch-week-5-one-more-thing
Let's be honest, it's never just one more thing.
- Thu, 18 Aug 2022 22:10:00 +0000
+ Thu, 18 Aug 2022 02:02:30 +0000https://supabase.com/blog/launch-week-5-community-dayCommunity Day
https://supabase.com/blog/launch-week-5-community-day
Wrapping up Launch Week 5 with contributors, partners, and friends.
- Thu, 18 Aug 2022 22:10:00 +0000
+ Thu, 18 Aug 2022 02:02:30 +0000https://supabase.com/blog/supabase-realtime-multiplayer-general-availabilityRealtime: Multiplayer Edition
https://supabase.com/blog/supabase-realtime-multiplayer-general-availability
Announcing the general availability of Realtime's Broadcast and Presence.
- Wed, 17 Aug 2022 22:10:00 +0000
+ Wed, 17 Aug 2022 02:02:30 +0000https://supabase.com/blog/supabase-soc2Supabase is SOC2 compliant
https://supabase.com/blog/supabase-soc2
Supabase is now SOC2 compliant. Learn how we got here and what it means for our customers.
- Tue, 16 Aug 2022 22:10:00 +0000
+ Tue, 16 Aug 2022 02:02:30 +0000https://supabase.com/blog/supabase-js-v2supabase-js v2
https://supabase.com/blog/supabase-js-v2
A look at supabase-js v2, which brings type support and focuses on quality-of-life improvements for developers.
- Mon, 15 Aug 2022 22:10:00 +0000
+ Mon, 15 Aug 2022 02:02:30 +0000https://supabase.com/blog/supabase-cli-v1-and-admin-api-betaSupabase CLI v1 and Management API Beta
https://supabase.com/blog/supabase-cli-v1-and-admin-api-beta
We are moving Supabase CLI v1 out of beta, and releasing Management API beta.
- Sun, 14 Aug 2022 22:10:00 +0000
+ Sun, 14 Aug 2022 02:02:30 +0000https://supabase.com/blog/supabase-series-bSupabase Series B
https://supabase.com/blog/supabase-series-b
Supabase raised $80M in May, bringing our total funding to $116M.
- Thu, 11 Aug 2022 22:10:00 +0000
+ Thu, 11 Aug 2022 02:02:30 +0000https://supabase.com/blog/launch-week-5-hackathonLaunch Week 5 Hackathon
https://supabase.com/blog/launch-week-5-hackathon
Build to win $1500 - Friday 12th to Monday 21st August 2022
- Tue, 09 Aug 2022 22:10:00 +0000
+ Tue, 09 Aug 2022 02:02:30 +0000https://supabase.com/blog/slack-consolidate-slackbot-to-consolidate-messagesSlack Consolidate: a slackbot built with Python and Supabase
https://supabase.com/blog/slack-consolidate-slackbot-to-consolidate-messages
A slackbot to consolidate messages from different channels using Supabase, Slack SDK and Python
- Mon, 08 Aug 2022 22:10:00 +0000
+ Mon, 08 Aug 2022 02:02:30 +0000https://supabase.com/blog/supabase-beta-update-july-2022Supabase Beta July 2022
https://supabase.com/blog/supabase-beta-update-july-2022
Launch Week Golden Tickets, Flutter SDK 1.0 Developer Preview and more...
- Tue, 02 Aug 2022 22:10:00 +0000
+ Tue, 02 Aug 2022 02:02:30 +0000https://supabase.com/blog/supabase-flutter-sdk-1-developer-previewSupabase Flutter SDK 1.0 Developer Preview
https://supabase.com/blog/supabase-flutter-sdk-1-developer-preview
Supabase Flutter SDK is getting a major update and we need your help making it better.
- Mon, 01 Aug 2022 22:10:00 +0000
+ Mon, 01 Aug 2022 02:02:30 +0000https://supabase.com/blog/seen-by-in-postgresqlImplementing "seen by" functionality with Postgres
https://supabase.com/blog/seen-by-in-postgresql
Different approaches for tracking visitor counts with PostgreSQL.
- Sun, 17 Jul 2022 22:10:00 +0000
+ Sun, 17 Jul 2022 02:02:30 +0000https://supabase.com/blog/supabase-auth-helpers-with-sveltekit-supportRevamped Auth Helpers for Supabase (with SvelteKit support)
https://supabase.com/blog/supabase-auth-helpers-with-sveltekit-support
Supabase Auth Helpers now have improved developer experience, Sveltekit support, and more.
- Tue, 12 Jul 2022 22:10:00 +0000
+ Tue, 12 Jul 2022 02:02:30 +0000https://supabase.com/blog/beta-update-june-2022Supabase Beta June 2022
https://supabase.com/blog/beta-update-june-2022
Auth Helpers, Unlimited Free Projects, CLI and more...
- Tue, 05 Jul 2022 22:10:00 +0000
+ Tue, 05 Jul 2022 02:02:30 +0000https://supabase.com/blog/flutter-tutorial-building-a-chat-appFlutter Tutorial: building a Flutter chat app
https://supabase.com/blog/flutter-tutorial-building-a-chat-app
Learn how to build a Flutter chat app with open source and scalable backend (inc. auth, realtime, database, and more).
- Wed, 29 Jun 2022 22:10:00 +0000
+ Wed, 29 Jun 2022 02:02:30 +0000https://supabase.com/blog/visualizing-supabase-data-using-metabaseVisualizing Supabase Data using Metabase
https://supabase.com/blog/visualizing-supabase-data-using-metabase
How to create different kinds of charts out of data stored in Supabase using Metabase.
- Tue, 28 Jun 2022 22:10:00 +0000
+ Tue, 28 Jun 2022 02:02:30 +0000https://supabase.com/blog/partial-postgresql-data-dumps-with-rlsPartial data dumps using Postgres Row Level Security
https://supabase.com/blog/partial-postgresql-data-dumps-with-rls
Using RLS to create seed files for local PostgreSQL testing.
- Mon, 27 Jun 2022 22:10:00 +0000
+ Mon, 27 Jun 2022 02:02:30 +0000https://supabase.com/blog/loading-data-supabase-pythonPython data loading with Supabase
https://supabase.com/blog/loading-data-supabase-python
An example of how to load data into Supabase using supabase-py
- Thu, 16 Jun 2022 22:10:00 +0000
+ Thu, 16 Jun 2022 02:02:30 +0000https://supabase.com/blog/beta-update-may-2022Supabase Beta May 2022
https://supabase.com/blog/beta-update-may-2022
Product and community updates including wildcard auth redirects, edge functions with webhooks, and Prometheus endpoints for everybody.
- Tue, 31 May 2022 22:10:00 +0000
+ Tue, 31 May 2022 02:02:30 +0000https://supabase.com/blog/how-supabase-accelerates-development-of-all-pull-togetherHow Mike Lyndon is using Supabase to accelerate development of AllPullTogether
https://supabase.com/blog/how-supabase-accelerates-development-of-all-pull-together
Mike Lyndon is learning web development as he builds AllPullTogether, and Supabase is helping him accelerate what he can accomplish.
- Wed, 25 May 2022 22:10:00 +0000
+ Wed, 25 May 2022 02:02:30 +0000https://supabase.com/blog/partner-gallery-works-with-supabaseWorks With Supabase - announcing our Partner Gallery
https://supabase.com/blog/partner-gallery-works-with-supabase
Introducing our Partner Gallery - open source and made with Supabase.
- Tue, 19 Apr 2022 22:10:00 +0000
+ Tue, 19 Apr 2022 02:02:30 +0000https://supabase.com/blog/bring-the-func-hackathon-winnersBring the Func Hackathon Winners 2022
https://supabase.com/blog/bring-the-func-hackathon-winners
Celebrating many amazing OSS Hackathon projects using GraphQL and Edge Functions.
- Sun, 17 Apr 2022 22:10:00 +0000
+ Sun, 17 Apr 2022 02:02:30 +0000https://supabase.com/blog/beta-update-march-2022Supabase Beta March 2022
https://supabase.com/blog/beta-update-march-2022
Functions, GraphQL, and much more.
- Thu, 14 Apr 2022 22:10:00 +0000
+ Thu, 14 Apr 2022 02:02:30 +0000https://supabase.com/blog/supabrewSupabrew - Never Code Thirsty
https://supabase.com/blog/supabrew
A light and refreshing non-alcoholic beer for devs.
- Thu, 31 Mar 2022 22:10:00 +0000
+ Fri, 01 Apr 2022 02:02:30 +0000https://supabase.com/blog/supabase-realtime-with-multiplayer-featuresSupabase Realtime, with Multiplayer Features
https://supabase.com/blog/supabase-realtime-with-multiplayer-features
Today we're announced Realtime, with multiplayer features. Realtime enables broadcast, presence, and listening to database changes delivered over WebSockets.
- Thu, 31 Mar 2022 22:10:00 +0000
+ Fri, 01 Apr 2022 02:02:30 +0000https://supabase.com/blog/hackathon-bring-the-funcHackathon: Bring the Func(🕺)
https://supabase.com/blog/hackathon-bring-the-func
Build open-source projects with our latest features, win limited edition swag and plant a tree!
- Thu, 31 Mar 2022 22:10:00 +0000
+ Fri, 01 Apr 2022 02:02:30 +0000https://supabase.com/blog/supabase-edge-functionsEdge Functions are now available in Supabase
https://supabase.com/blog/supabase-edge-functions
Today we're launching Edge Functions. Edge Functions let you execute Typescript code close to your users, no matter where they're located.
- Wed, 30 Mar 2022 22:10:00 +0000
+ Wed, 30 Mar 2022 02:02:30 +0000https://supabase.com/blog/supabase-enterpriseIntroducing Supabase Enterprise
https://supabase.com/blog/supabase-enterprise
Today we are releasing Supabase Enterprise, a suite of features to scale your project.
- Tue, 29 Mar 2022 22:10:00 +0000
+ Tue, 29 Mar 2022 02:02:30 +0000https://supabase.com/blog/graphql-now-availableGraphQL is now available in Supabase
https://supabase.com/blog/graphql-now-available
GraphQL support is now in general availability on the Supabase platform via our open source PostgreSQL extension, pg_graphql (beta).
- Mon, 28 Mar 2022 22:10:00 +0000
+ Mon, 28 Mar 2022 02:02:30 +0000https://supabase.com/blog/community-day-lw4Community Day
https://supabase.com/blog/community-day-lw4
Kicking off Launch Week 4 with contributors, partners, and friends.
- Sun, 27 Mar 2022 22:10:00 +0000
+ Sun, 27 Mar 2022 02:02:30 +0000https://supabase.com/blog/supabase-launch-week-fourSupabase Launch Week 4
https://supabase.com/blog/supabase-launch-week-four
Launch Week 4: One new feature every day for an entire week. Starting Monday 28th March.
- Thu, 24 Mar 2022 23:11:00 +0000
+ Thu, 24 Mar 2022 02:02:30 +0000https://supabase.com/blog/should-i-open-source-my-companyShould I Open Source my Company?
https://supabase.com/blog/should-i-open-source-my-company
The unexpected upsides of building in public
- Thu, 24 Mar 2022 23:11:00 +0000
+ Thu, 24 Mar 2022 02:02:30 +0000https://supabase.com/blog/auditPostgres Auditing in 150 lines of SQL
https://supabase.com/blog/audit
PostgreSQL has a robust set of features which we can leverage to create a generic auditing solution in 150 lines of SQL.
- Mon, 07 Mar 2022 23:11:00 +0000
+ Mon, 07 Mar 2022 03:03:30 +0000https://supabase.com/blog/supabase-beta-january-2022Supabase Beta January 2022
https://supabase.com/blog/supabase-beta-january-2022
New auth providers, SMS providers, and new videos.
- Mon, 21 Feb 2022 23:11:00 +0000
+ Mon, 21 Feb 2022 03:03:30 +0000https://supabase.com/blog/supabase-beta-december-2021Supabase Beta December 2021
https://supabase.com/blog/supabase-beta-december-2021
New crypto extension, Postgres videos, and a bunch of cool integrations.
- Wed, 19 Jan 2022 23:11:00 +0000
+ Wed, 19 Jan 2022 03:03:30 +0000https://supabase.com/blog/product-hunt-golden-kitty-awards-2021Golden Kitty Awards Ceremony Watch Party with Supabase
https://supabase.com/blog/product-hunt-golden-kitty-awards-2021
Hang out with us while watching the Product Hunt Golden Kitty Awards Ceremony
- Wed, 19 Jan 2022 23:11:00 +0000
+ Wed, 19 Jan 2022 03:03:30 +0000https://supabase.com/blog/holiday-hackdays-winners-2021Holiday Hackdays Winners 2021
https://supabase.com/blog/holiday-hackdays-winners-2021
Celebrating many amazing projects submitted to our Holiday Hackdays Hackathon.
- Thu, 16 Dec 2021 23:11:00 +0000
+ Thu, 16 Dec 2021 03:03:30 +0000https://supabase.com/blog/beta-november-2021-launch-week-recapSupabase Beta November 2021: Launch Week Recap
https://supabase.com/blog/beta-november-2021-launch-week-recap
We wrapped up November with Supabase's third Launch Week. Here's all the awesome stuff that got shipped ...
- Tue, 14 Dec 2021 23:11:00 +0000
+ Tue, 14 Dec 2021 03:03:30 +0000https://supabase.com/blog/supabase-holiday-hackdays-hackathonKicking off the Holiday Hackdays
https://supabase.com/blog/supabase-holiday-hackdays-hackathon
Build cool stuff and celebrate open-source software with us during the Holiday Hackdays!
- Thu, 02 Dec 2021 23:11:00 +0000
+ Thu, 02 Dec 2021 03:03:30 +0000https://supabase.com/blog/pg-graphqlpg_graphql: A GraphQL extension for PostgreSQL
https://supabase.com/blog/pg-graphql
GraphQL support is in development for PostgreSQL + Supabase.
- Thu, 02 Dec 2021 23:11:00 +0000
+ Thu, 02 Dec 2021 03:03:30 +0000https://supabase.com/blog/launch-week-three-friday-five-more-thingsFive more things
https://supabase.com/blog/launch-week-three-friday-five-more-things
It's never just one more thing!
- Thu, 02 Dec 2021 23:11:00 +0000
+ Thu, 02 Dec 2021 03:03:30 +0000https://supabase.com/blog/supabase-acquires-logflareSupabase acquires Logflare
https://supabase.com/blog/supabase-acquires-logflare
Today, we're ecstatic to announce that Logflare is joining Supabase.
- Wed, 01 Dec 2021 23:11:00 +0000
+ Wed, 01 Dec 2021 03:03:30 +0000https://supabase.com/blog/realtime-row-level-security-in-postgresqlRealtime Postgres RLS now available on Supabase
https://supabase.com/blog/realtime-row-level-security-in-postgresql
Realtime database changes are now broadcast to authenticated users, respecting the same PostgreSQL policies that you use for Row Level Security.
- Tue, 30 Nov 2021 23:11:00 +0000
+ Tue, 30 Nov 2021 03:03:30 +0000https://supabase.com/blog/supabase-studioSupabase Studio
https://supabase.com/blog/supabase-studio
The same Dashboard that you're using on our Platform is now available for local development and Self-Hosting.
- Mon, 29 Nov 2021 23:11:00 +0000
+ Mon, 29 Nov 2021 03:03:30 +0000https://supabase.com/blog/community-day-lw3Community Day
https://supabase.com/blog/community-day-lw3
Kicking off launch week by highlighting the communities around Supabase.
- Sun, 28 Nov 2021 23:11:00 +0000
+ Sun, 28 Nov 2021 03:03:30 +0000https://supabase.com/blog/whats-new-in-postgres-14New in PostgreSQL 14: What every developer should know
https://supabase.com/blog/whats-new-in-postgres-14
A quick look at some new features and functionality in PostgreSQL 14.
- Sat, 27 Nov 2021 23:11:00 +0000
+ Sat, 27 Nov 2021 03:03:30 +0000https://supabase.com/blog/postgrest-9PostgREST 9
https://supabase.com/blog/postgrest-9
New features and updates in PostgREST version 9.
- Fri, 26 Nov 2021 23:11:00 +0000
+ Fri, 26 Nov 2021 03:03:30 +0000https://supabase.com/blog/supabase-launch-week-the-trilogySupabase Launch Week III: Holiday Special
https://supabase.com/blog/supabase-launch-week-the-trilogy
Tis the season to be shipping.
- Thu, 25 Nov 2021 23:11:00 +0000
+ Thu, 25 Nov 2021 03:03:30 +0000https://supabase.com/blog/supabase-how-we-launchHow we launch at Supabase
https://supabase.com/blog/supabase-how-we-launch
The history and methodology of Supabase Launch Week.
- Thu, 25 Nov 2021 23:11:00 +0000
+ Thu, 25 Nov 2021 03:03:30 +0000https://supabase.com/blog/supabase-beta-october-2021Supabase Beta October 2021
https://supabase.com/blog/supabase-beta-october-2021
Three new Auth providers, multi-schema support, and we're gearing up for another Launch Week.
- Sat, 06 Nov 2021 23:11:00 +0000
+ Sat, 06 Nov 2021 02:02:30 +0000https://supabase.com/blog/supabase-series-aSupabase $30m Series A
https://supabase.com/blog/supabase-series-a
Supabase just raised $30M, bringing our total funding to $36M.
- Wed, 27 Oct 2021 22:10:00 +0000
+ Wed, 27 Oct 2021 02:02:30 +0000https://supabase.com/blog/replenysh-time-to-value-in-less-than-24-hoursReplenysh uses Supabase to implement OTP in less than 24-hours
https://supabase.com/blog/replenysh-time-to-value-in-less-than-24-hours
Learn how Replenysh uses Supabase to power the circular economy, redefining how brands interact with their customers and products.
- Mon, 18 Oct 2021 22:10:00 +0000
+ Mon, 18 Oct 2021 02:02:30 +0000https://supabase.com/blog/hacktoberfest-hackathon-winners-2021Hacktoberfest Hackathon Winners 2021
https://supabase.com/blog/hacktoberfest-hackathon-winners-2021
Celebrating many amazing projects submitted to our Hacktoberfest Hackathon.
- Wed, 13 Oct 2021 22:10:00 +0000
+ Wed, 13 Oct 2021 02:02:30 +0000https://supabase.com/blog/supabase-beta-sept-2021Supabase Beta Sept 2021
https://supabase.com/blog/supabase-beta-sept-2021
Hackathon, Aborting request, UI updates, and now Hiring.
- Sun, 03 Oct 2021 22:10:00 +0000
+ Sun, 03 Oct 2021 02:02:30 +0000https://supabase.com/blog/supabase-hacktoberfest-hackathon-2021Supabase Hacktoberfest Hackathon 2021
https://supabase.com/blog/supabase-hacktoberfest-hackathon-2021
We're running another Supabase Hackathon during Hacktoberfest!
- Mon, 27 Sep 2021 22:10:00 +0000
+ Mon, 27 Sep 2021 02:02:30 +0000https://supabase.com/blog/supabase-beta-august-2021Supabase Beta August 2021
https://supabase.com/blog/supabase-beta-august-2021
Fundraising, Realtime Security, custom SMS templates, and deployments in South Korea.
- Thu, 09 Sep 2021 22:10:00 +0000
+ Thu, 09 Sep 2021 02:02:30 +0000https://supabase.com/blog/supabase-beta-july-2021Supabase Beta July 2021
https://supabase.com/blog/supabase-beta-july-2021
Discord Logins, Vercel Integration, Full text search, and OAuth guides.
- Wed, 11 Aug 2021 22:10:00 +0000
+ Wed, 11 Aug 2021 02:02:30 +0000https://supabase.com/blog/hackathon-winnersOpen Source Hackathon Winners
https://supabase.com/blog/hackathon-winners
Let the medal ceremony begin for the best projects submitted during the Supabase Hackathon.
- Sun, 08 Aug 2021 22:10:00 +0000
+ Sun, 08 Aug 2021 02:02:30 +0000https://supabase.com/blog/supabase-swag-storeSupabase Swag Store
https://supabase.com/blog/supabase-swag-store
Today we are officially launching the Supabase Swag Store.
- Thu, 29 Jul 2021 22:10:00 +0000
+ Thu, 29 Jul 2021 02:02:30 +0000https://supabase.com/blog/supabase-functions-updatesUpdates for Supabase Functions
https://supabase.com/blog/supabase-functions-updates
The question on everyone's mind - are we launching Supabase Functions? Well, it's complicated.
- Thu, 29 Jul 2021 22:10:00 +0000
+ Thu, 29 Jul 2021 02:02:30 +0000https://supabase.com/blog/1-the-supabase-hackathonThe Supabase Hackathon
https://supabase.com/blog/1-the-supabase-hackathon
A whole week of Hacking for Fun and Prizes.
- Thu, 29 Jul 2021 22:10:00 +0000
+ Thu, 29 Jul 2021 02:02:30 +0000https://supabase.com/blog/supabase-reports-and-metricsSupabase Reports and Metrics
https://supabase.com/blog/supabase-reports-and-metrics
We're exposing a full set of metrics in your projects, so that you can build better (and faster) products for your users.
- Wed, 28 Jul 2021 22:10:00 +0000
+ Wed, 28 Jul 2021 02:02:30 +0000https://supabase.com/blog/supabase-auth-passwordless-sms-loginSupabase Auth v2: Phone Auth now available
https://supabase.com/blog/supabase-auth-passwordless-sms-login
Phone Auth is available today on all new and existing Supabase projects.
- Tue, 27 Jul 2021 22:10:00 +0000
+ Tue, 27 Jul 2021 02:02:30 +0000https://supabase.com/blog/mobbin-supabase-200000-usersMobbin uses Supabase to authenticate 200,000 users
https://supabase.com/blog/mobbin-supabase-200000-users
Learn how Mobbin migrated 200,000 users from Firebase for a better authentication experience.
- Tue, 27 Jul 2021 22:10:00 +0000
+ Tue, 27 Jul 2021 02:02:30 +0000https://supabase.com/blog/storage-betaSupabase Storage now in Beta
https://supabase.com/blog/storage-beta
Supabase Storage moves into Beta.
- Mon, 26 Jul 2021 22:10:00 +0000
+ Mon, 26 Jul 2021 02:02:30 +0000https://supabase.com/blog/spot-flutter-with-postgresSpot: a video sharing app built with Flutter
https://supabase.com/blog/spot-flutter-with-postgres
Spot is a geolocation-based video-sharing app with some social networking features.
- Mon, 26 Jul 2021 22:10:00 +0000
+ Mon, 26 Jul 2021 02:02:30 +0000https://supabase.com/blog/supabase-postgres-13Supabase is now on Postgres 13.3
https://supabase.com/blog/supabase-postgres-13
From today, new Supabase projects will be on a version of Supabase Postgres that runs on Postgres 13.3.
- Sun, 25 Jul 2021 22:10:00 +0000
+ Sun, 25 Jul 2021 02:02:30 +0000https://supabase.com/blog/supabase-community-daySupabase Community Day
https://supabase.com/blog/supabase-community-day
Community Day
- Sun, 25 Jul 2021 22:10:00 +0000
+ Sun, 25 Jul 2021 02:02:30 +0000https://supabase.com/blog/epsilon3-self-hostingEpsilon3 Self-Host Supabase To Revolutionize Space Operations
https://supabase.com/blog/epsilon3-self-hosting
Learn how the team at Epsilon3 use Supabase to help teams execute secure and reliable operations in an industry that project spend runs into the billions.
- Sun, 25 Jul 2021 22:10:00 +0000
+ Sun, 25 Jul 2021 02:02:30 +0000https://supabase.com/blog/supabase-launch-week-sqlSupabase Launch Week II: The SQL
https://supabase.com/blog/supabase-launch-week-sql
Five days of Supabase. Again.
- Wed, 21 Jul 2021 22:10:00 +0000
+ Wed, 21 Jul 2021 02:02:30 +0000https://supabase.com/blog/roles-postgres-hooksProtecting reserved roles with PostgreSQL Hooks
https://supabase.com/blog/roles-postgres-hooks
Using Postgres Hooks to protect functionality in your Postgres database.
- Thu, 01 Jul 2021 22:10:00 +0000
+ Thu, 01 Jul 2021 02:02:30 +0000https://supabase.com/blog/supabase-beta-june-2021Supabase Beta June 2021
https://supabase.com/blog/supabase-beta-june-2021
Discord Logins, Vercel Integration, Full text search, and OAuth guides.
- Tue, 01 Jun 2021 22:10:00 +0000
+ Tue, 01 Jun 2021 02:02:30 +0000https://supabase.com/blog/supabase-beta-may-2021Supabase Beta May 2021
https://supabase.com/blog/supabase-beta-may-2021
Apple & Twitter Logins, Supabase Grid, Go & Swift Libraries.
- Tue, 01 Jun 2021 22:10:00 +0000
+ Tue, 01 Jun 2021 02:02:30 +0000https://supabase.com/blog/supabase-beta-april-2021Supabase Beta April 2021
https://supabase.com/blog/supabase-beta-april-2021
Supabase "gardening" - stability, security, and community support.
- Tue, 04 May 2021 22:10:00 +0000
+ Tue, 04 May 2021 02:02:30 +0000https://supabase.com/blog/supabase-beta-march-2021Supabase Beta March 2021
https://supabase.com/blog/supabase-beta-march-2021
Launch week, Storage, Supabase CLI, Connection Pooling, Supabase UI, and Pricing.
- Mon, 05 Apr 2021 22:10:00 +0000
+ Mon, 05 Apr 2021 02:02:30 +0000https://supabase.com/blog/supabase-workflowsWorkflows are coming to Supabase
https://supabase.com/blog/supabase-workflows
Functions are great, but you know what's better?
- Thu, 01 Apr 2021 22:10:00 +0000
+ Thu, 01 Apr 2021 02:02:30 +0000https://supabase.com/blog/supabase-pgbouncerPgBouncer is now available in Supabase
https://supabase.com/blog/supabase-pgbouncer
Better support for Serverless and Postgres.
- Thu, 01 Apr 2021 22:10:00 +0000
+ Thu, 01 Apr 2021 02:02:30 +0000https://supabase.com/blog/supabase-dot-comSupabase Dot Com
https://supabase.com/blog/supabase-dot-com
The Supabase Domain name is changing.
- Thu, 01 Apr 2021 22:10:00 +0000
+ Thu, 01 Apr 2021 02:02:30 +0000https://supabase.com/blog/supabase-nft-marketplaceSupabase Launches NFT Marketplace
https://supabase.com/blog/supabase-nft-marketplace
A fully encrypted NFT platform to protect and transact your digital assets
- Wed, 31 Mar 2021 22:10:00 +0000
+ Thu, 01 Apr 2021 02:02:30 +0000https://supabase.com/blog/supabase-cliSupabase CLI
https://supabase.com/blog/supabase-cli
Local development, database migrations, and self-hosting.
- Tue, 30 Mar 2021 22:10:00 +0000
+ Wed, 31 Mar 2021 02:02:30 +0000https://supabase.com/blog/supabase-storageStorage is now available in Supabase
https://supabase.com/blog/supabase-storage
Launching Supabase Storage and how you can use it in your apps
- Mon, 29 Mar 2021 22:10:00 +0000
+ Tue, 30 Mar 2021 02:02:30 +0000https://supabase.com/blog/pricingSupabase Beta Pricing
https://supabase.com/blog/pricing
Supabase launches Beta pricing structure
- Sun, 28 Mar 2021 22:10:00 +0000
+ Mon, 29 Mar 2021 02:02:30 +0000https://supabase.com/blog/launch-weekLaunch week
https://supabase.com/blog/launch-week
Five days of Supabase.
- Wed, 24 Mar 2021 23:11:00 +0000
+ Wed, 24 Mar 2021 02:02:30 +0000https://supabase.com/blog/angels-of-supabaseAngels of Supabase
https://supabase.com/blog/angels-of-supabase
Meet the investors of Supabase.
- Wed, 24 Mar 2021 23:11:00 +0000
+ Wed, 24 Mar 2021 02:02:30 +0000https://supabase.com/blog/In-The-LoopDevelopers stay up to date with intheloop.dev
https://supabase.com/blog/In-The-Loop
Learn why Kevin is building intheloop.dev with Supabase
- Sun, 21 Mar 2021 23:11:00 +0000
+ Mon, 22 Mar 2021 02:02:30 +0000https://supabase.com/blog/using-supabase-replitUsing Supabase in Replit
https://supabase.com/blog/using-supabase-replit
Free hosted relational database from within your node.js repl
- Wed, 10 Mar 2021 23:11:00 +0000
+ Thu, 11 Mar 2021 03:03:30 +0000https://supabase.com/blog/toad-a-link-shortener-with-simple-apis-for-low-codersToad, a link shortener with simple APIs for low-coders
https://supabase.com/blog/toad-a-link-shortener-with-simple-apis-for-low-coders
An easy-to-use link shortening tool with simple APIs
- Sun, 07 Mar 2021 23:11:00 +0000
+ Mon, 08 Mar 2021 03:03:30 +0000https://supabase.com/blog/postgres-as-a-cron-serverPostgres as a CRON Server
https://supabase.com/blog/postgres-as-a-cron-server
Running repetitive tasks with your Postgres database.
- Thu, 04 Mar 2021 23:11:00 +0000
+ Fri, 05 Mar 2021 03:03:30 +0000https://supabase.com/blog/supabase-beta-february-2021Supabase Beta February 2021
https://supabase.com/blog/supabase-beta-february-2021
One year of building.
- Mon, 01 Mar 2021 23:11:00 +0000
+ Tue, 02 Mar 2021 03:03:30 +0000https://supabase.com/blog/cracking-postgres-interviewCracking PostgreSQL Interview Questions
https://supabase.com/blog/cracking-postgres-interview
Understand the top PostgreSQL Interview Questions
- Fri, 26 Feb 2021 23:11:00 +0000
+ Sat, 27 Feb 2021 03:03:30 +0000https://supabase.com/blog/case-study-roboflowRoboflow.com choose Supabase to power Paint.wtf leaderboard
https://supabase.com/blog/case-study-roboflow
Learn how Roboflow.com used Supabase to build their Paint.wtf leaderboard
- Mon, 08 Feb 2021 23:11:00 +0000
+ Tue, 09 Feb 2021 03:03:30 +0000https://supabase.com/blog/supabase-beta-january-2021Supabase Beta January 2021
https://supabase.com/blog/supabase-beta-january-2021
Eleven months of building.
- Mon, 01 Feb 2021 23:11:00 +0000
+ Tue, 02 Feb 2021 03:03:30 +0000https://supabase.com/blog/supabase-beta-december-2020Supabase Beta December 2020
https://supabase.com/blog/supabase-beta-december-2020
Ten months of building.
- Fri, 01 Jan 2021 23:11:00 +0000
+ Sat, 02 Jan 2021 03:03:30 +0000https://supabase.com/blog/supabase-dashboard-performanceMaking the Supabase Dashboard Supa-fast
https://supabase.com/blog/supabase-dashboard-performance
Improving the performance of the Supabase dashboard
- Sat, 12 Dec 2020 23:11:00 +0000
+ Sun, 13 Dec 2020 03:03:30 +0000https://supabase.com/blog/supabase-striveschoolSupabase Partners With Strive School To Help Teach Open Source
https://supabase.com/blog/supabase-striveschool
Supabase Partners With Strive School To Help Teach Open Source To The Next Generation Of Developers
- Tue, 01 Dec 2020 23:11:00 +0000
+ Wed, 02 Dec 2020 03:03:30 +0000https://supabase.com/blog/case-study-xenditXendit Built a Counter-Fraud Watchlist for the Fintech Industry
https://supabase.com/blog/case-study-xendit
See how Xendit use Supabase to build a full-text search engine.
- Tue, 01 Dec 2020 23:11:00 +0000
+ Wed, 02 Dec 2020 03:03:30 +0000https://supabase.com/blog/case-study-tayfaTAYFA Built a No-Code Website Builder in Seven Days
https://supabase.com/blog/case-study-tayfa
See how Tayfa went from idea to paying customer in less than 30 days.
- Tue, 01 Dec 2020 23:11:00 +0000
+ Wed, 02 Dec 2020 03:03:30 +0000https://supabase.com/blog/case-study-monitoroMonitoro Built a Web Crawler Handling Millions of API Requests
https://supabase.com/blog/case-study-monitoro
See how Monitoro built an automated scraping platform using Supabase.
- Tue, 01 Dec 2020 23:11:00 +0000
+ Wed, 02 Dec 2020 03:03:30 +0000https://supabase.com/blog/supabase-alpha-november-2020Supabase Alpha November 2020
https://supabase.com/blog/supabase-alpha-november-2020
Nine months of building.
- Mon, 30 Nov 2020 23:11:00 +0000
+ Tue, 01 Dec 2020 03:03:30 +0000https://supabase.com/blog/postgresql-viewsPostgres Views
https://supabase.com/blog/postgresql-views
Creating and using a view in PostgreSQL.
- Tue, 17 Nov 2020 23:11:00 +0000
+ Wed, 18 Nov 2020 03:03:30 +0000https://supabase.com/blog/supabase-alpha-october-2020Supabase Alpha October 2020
https://supabase.com/blog/supabase-alpha-october-2020
Eight months of building.
- Sun, 01 Nov 2020 23:11:00 +0000
+ Mon, 02 Nov 2020 03:03:30 +0000https://supabase.com/blog/improved-dxSupabase.js 1.0
https://supabase.com/blog/improved-dx
We're releasing a new version of our Supabase client with some awesome new improvements.
- Thu, 29 Oct 2020 23:11:00 +0000
+ Fri, 30 Oct 2020 02:02:30 +0000https://supabase.com/blog/supabase-alpha-september-2020Supabase Alpha September 2020
https://supabase.com/blog/supabase-alpha-september-2020
Seven months of building.
- Fri, 02 Oct 2020 22:10:00 +0000
+ Sat, 03 Oct 2020 02:02:30 +0000https://supabase.com/blog/supabase-hacktoberfest-2020Supabase Hacktoberfest 2020
https://supabase.com/blog/supabase-hacktoberfest-2020
Join us for a celebration of open source software and learn how to contribute to Supabase.
- Thu, 10 Sep 2020 22:10:00 +0000
+ Fri, 11 Sep 2020 02:02:30 +0000https://supabase.com/blog/supabase-alpha-august-2020Supabase Alpha August 2020
https://supabase.com/blog/supabase-alpha-august-2020
Six months of building
- Wed, 02 Sep 2020 22:10:00 +0000
+ Thu, 03 Sep 2020 02:02:30 +0000https://supabase.com/blog/supabase-authSupabase Auth
https://supabase.com/blog/supabase-auth
Authenticate and authorize your users with Supabase Auth
- Tue, 04 Aug 2020 22:10:00 +0000
+ Wed, 05 Aug 2020 02:02:30 +0000https://supabase.com/blog/supabase-alpha-july-2020Supabase Alpha July 2020
https://supabase.com/blog/supabase-alpha-july-2020
Five months of building
- Sat, 01 Aug 2020 22:10:00 +0000
+ Sun, 02 Aug 2020 02:02:30 +0000https://supabase.com/blog/continuous-postgresql-backup-walgContinuous PostgreSQL Backups using WAL-G
https://supabase.com/blog/continuous-postgresql-backup-walg
Have you ever wanted to restore your database's state to a particular moment in time? This post explains how, using WAL-G.
- Sat, 01 Aug 2020 22:10:00 +0000
+ Sun, 02 Aug 2020 02:02:30 +0000https://supabase.com/blog/alpha-launch-postmortemAlpha Launch Postmortem
https://supabase.com/blog/alpha-launch-postmortem
Everything that went wrong with Supabase's launch
- Thu, 09 Jul 2020 22:10:00 +0000
+ Fri, 10 Jul 2020 02:02:30 +0000https://supabase.com/blog/postgresql-templatesWhat are PostgreSQL Templates?
https://supabase.com/blog/postgresql-templates
What are PostgreSQL templates and what are they used for?
- Wed, 08 Jul 2020 22:10:00 +0000
+ Thu, 09 Jul 2020 02:02:30 +0000https://supabase.com/blog/postgresql-physical-logical-backupsPhysical vs Logical Backups in PostgreSQL
https://supabase.com/blog/postgresql-physical-logical-backups
What are physical and logical backups in Postgres?
- Mon, 06 Jul 2020 22:10:00 +0000
+ Tue, 07 Jul 2020 02:02:30 +0000https://supabase.com/blog/supabase-alpha-june-2020Supabase Alpha June 2020
https://supabase.com/blog/supabase-alpha-june-2020
Four months of building
- Tue, 30 Jun 2020 22:10:00 +0000
+ Wed, 01 Jul 2020 02:02:30 +0000https://supabase.com/blog/supabase-steve-chavezSteve Chavez has joined Supabase
https://supabase.com/blog/supabase-steve-chavez
Steve joins Supabase to help build Auth.
- Sun, 14 Jun 2020 22:10:00 +0000
+ Mon, 15 Jun 2020 02:02:30 +0000https://supabase.com/blog/supabase-alpha-may-2020Supabase Alpha May 2020
https://supabase.com/blog/supabase-alpha-may-2020
Three months of building
- Sun, 31 May 2020 22:10:00 +0000
+ Mon, 01 Jun 2020 02:02:30 +0000https://supabase.com/blog/supabase-alpha-april-2020Supabase Alpha April 2020
https://supabase.com/blog/supabase-alpha-april-2020
Two months of building
- Sun, 31 May 2020 22:10:00 +0000
+ Mon, 01 Jun 2020 02:02:30 +0000
diff --git a/examples/edge-functions/supabase/functions/upstash-redis-counter/.env.example b/examples/edge-functions/supabase/functions/upstash-redis-counter/.env.example
new file mode 100644
index 00000000000..d0785c19978
--- /dev/null
+++ b/examples/edge-functions/supabase/functions/upstash-redis-counter/.env.example
@@ -0,0 +1,2 @@
+UPSTASH_REDIS_REST_URL=
+UPSTASH_REDIS_REST_TOKEN=
\ No newline at end of file
diff --git a/examples/edge-functions/supabase/functions/upstash-redis-counter/README.md b/examples/edge-functions/supabase/functions/upstash-redis-counter/README.md
new file mode 100644
index 00000000000..3d33a9e7dd7
--- /dev/null
+++ b/examples/edge-functions/supabase/functions/upstash-redis-counter/README.md
@@ -0,0 +1,31 @@
+# Upstash Redis in Supabase Edge Functions
+
+A Redis counter example that stores a [hash](https://redis.io/commands/hincrby/) of function invocation count per region.
+
+## Redis database setup
+
+Create a Redis database using the [Upstash Console](https://console.upstash.com/) or [Upstash CLI](https://github.com/upstash/cli).
+
+Select the `Global` type to minimize the latency from all edge locations. Copy the `UPSTASH_REDIS_REST_URL` and `UPSTASH_REDIS_REST_TOKEN` to your .env file. You'll find them under **Details > REST API > .env**.
+
+```bash
+cp supabase/functions/upstash-redis-counter/.env.example supabase/functions/upstash-redis-counter/.env
+```
+
+## Run locally
+
+Make sure you have the latest version of the [Supabase CLI installed](https://supabase.com/docs/guides/cli#installation).
+
+```bash
+supabase start
+supabase functions serve upstash-redis-counter --no-verify-jwt --env-file supabase/functions/upstash-redis-counter/.env
+```
+
+Navigate to http://localhost:54321/functions/v1/upstash-redis-counter.
+
+## Deploy
+
+```bash
+supabase functions deploy upstash-redis-counter --no-verify-jwt
+supabase secrets set --env-file supabase/functions/upstash-redis-counter/.env
+```
diff --git a/examples/edge-functions/supabase/functions/upstash-redis-counter/index.ts b/examples/edge-functions/supabase/functions/upstash-redis-counter/index.ts
new file mode 100644
index 00000000000..911424209c9
--- /dev/null
+++ b/examples/edge-functions/supabase/functions/upstash-redis-counter/index.ts
@@ -0,0 +1,41 @@
+// Follow this setup guide to integrate the Deno language server with your editor:
+// https://deno.land/manual/getting_started/setup_your_environment
+// This enables autocomplete, go to definition, etc.
+
+import { serve } from 'https://deno.land/std@0.177.0/http/server.ts'
+import { Redis } from 'https://deno.land/x/upstash_redis@v1.19.3/mod.ts'
+
+console.log(`Function "upstash-redis-counter" up and running!`)
+
+serve(async (_req) => {
+ try {
+ const redis = new Redis({
+ url: Deno.env.get('UPSTASH_REDIS_REST_URL')!,
+ token: Deno.env.get('UPSTASH_REDIS_REST_TOKEN')!,
+ })
+
+ const deno_region = Deno.env.get('DENO_REGION')
+ if (deno_region) {
+ // Increment region counter
+ await redis.hincrby('supa-edge-counter', deno_region, 1)
+ } else {
+ // Increment localhost counter
+ await redis.hincrby('supa-edge-counter', 'localhost', 1)
+ }
+
+ // Get all values
+ const counterHash: Record | null = await redis.hgetall('supa-edge-counter')
+ const counters = Object.entries(counterHash!)
+ .sort(([, a], [, b]) => b - a) // sort desc
+ .reduce((r, [k, v]) => ({ total: r.total + v, regions: { ...r.regions, [k]: v } }), {
+ total: 0,
+ regions: {},
+ })
+
+ return new Response(JSON.stringify({ counters }), { status: 200 })
+ } catch (error) {
+ return new Response(JSON.stringify({ error: error.message }), { status: 200 })
+ }
+})
+
+// To invoke, navigate to 'http://localhost:54321/functions/v1/upstash-redis-counter'.
diff --git a/examples/user-management/nextjs-ts-user-management/README.md b/examples/user-management/nextjs-ts-user-management/README.md
index 088fac3bb24..d910a95a3e7 100644
--- a/examples/user-management/nextjs-ts-user-management/README.md
+++ b/examples/user-management/nextjs-ts-user-management/README.md
@@ -1,4 +1,4 @@
-# Supabase Next.js User Management
+# Supabase Next.js Auth & User Management Starter
This example will set you up for a very common situation: users can sign up or sign in and then update their account with public profile information, including a profile image.
@@ -27,7 +27,13 @@ The Vercel deployment will guide you through creating a Supabase account and pro
[](https://vercel.com/new/git/external?repository-url=https%3A%2F%2Fgithub.com%2Fsupabase%2Fsupabase%2Ftree%2Fmaster%2Fexamples%2Fuser-management%2Fnextjs-ts-user-management&project-name=supabase-user-management&repository-name=supabase-user-management&demo-title=Supabase%20User%20Management&demo-description=An%20example%20web%20app%20using%20Supabase%20and%20Next.js&demo-url=https%3A%2F%2Fsupabase-nextjs-ts-user-management.vercel.app&demo-image=https%3A%2F%2Fi.imgur.com%2FZ3HkQqe.png&integration-ids=oac_jUduyjQgOyzev1fjrW83NYOv&external-id=nextjs-user-management)
-## Build from scratch
+## Build locally
+
+Or create a new projec locally with `create-next-app`:
+
+```bash
+npx create-next-app -e with-supabase
+```
### 1. Create new project
@@ -129,6 +135,23 @@ create policy "Anyone can update their own avatar." on storage.objects
for update using ( auth.uid() = owner ) with check (bucket_id = 'avatars');
```
+## More Supabase Examples & Resources
+
+## Examples
+
+These official examples are maintained by the Supabase team:
+
+- [Next.js Subscription Payments Starter](https://github.com/vercel/nextjs-subscription-payments)
+- [Next.js Slack Clone](https://github.com/supabase/supabase/tree/master/examples/slack-clone/nextjs-slack-clone)
+- [Next.js 13 Data Fetching](https://github.com/supabase/supabase/tree/master/examples/caching/with-nextjs-13)
+- [And more...](https://github.com/supabase/supabase/tree/master/examples)
+
+## Other resources
+
+- [[Docs] Next.js User Management Quickstart](https://supabase.com/docs/guides/getting-started/tutorials/with-nextjs)
+- [[Egghead.io] Build a SaaS product with Next.js, Supabase and Stripe](https://egghead.io/courses/build-a-saas-product-with-next-js-supabase-and-stripe-61f2bc20)
+- [[Blog] Fetching and caching Supabase data in Next.js 13 Server Components](https://supabase.com/blog/fetching-and-caching-supabase-data-in-next-js-server-components)
+
## Authors
- [Supabase](https://supabase.com)
diff --git a/examples/user-management/nextjs-ts-user-management/components/Account.tsx b/examples/user-management/nextjs-ts-user-management/components/Account.tsx
index 3d88551769f..68577a28385 100644
--- a/examples/user-management/nextjs-ts-user-management/components/Account.tsx
+++ b/examples/user-management/nextjs-ts-user-management/components/Account.tsx
@@ -14,36 +14,36 @@ export default function Account({ session }: { session: Session }) {
const [avatar_url, setAvatarUrl] = useState(null)
useEffect(() => {
- getProfile()
- }, [session])
+ async function getProfile() {
+ try {
+ setLoading(true)
+ if (!user) throw new Error('No user')
- async function getProfile() {
- try {
- setLoading(true)
- if (!user) throw new Error('No user')
+ let { data, error, status } = await supabase
+ .from('profiles')
+ .select(`username, website, avatar_url`)
+ .eq('id', user.id)
+ .single()
- let { data, error, status } = await supabase
- .from('profiles')
- .select(`username, website, avatar_url`)
- .eq('id', user.id)
- .single()
+ if (error && status !== 406) {
+ throw error
+ }
- if (error && status !== 406) {
- throw error
+ if (data) {
+ setUsername(data.username)
+ setWebsite(data.website)
+ setAvatarUrl(data.avatar_url)
+ }
+ } catch (error) {
+ alert('Error loading user data!')
+ console.log(error)
+ } finally {
+ setLoading(false)
}
-
- if (data) {
- setUsername(data.username)
- setWebsite(data.website)
- setAvatarUrl(data.avatar_url)
- }
- } catch (error) {
- alert('Error loading user data!')
- console.log(error)
- } finally {
- setLoading(false)
}
- }
+
+ getProfile()
+ }, [session, user, supabase])
async function updateProfile({
username,
diff --git a/examples/user-management/nextjs-ts-user-management/components/Avatar.tsx b/examples/user-management/nextjs-ts-user-management/components/Avatar.tsx
index 6831ffbf280..4eba7554236 100644
--- a/examples/user-management/nextjs-ts-user-management/components/Avatar.tsx
+++ b/examples/user-management/nextjs-ts-user-management/components/Avatar.tsx
@@ -19,21 +19,21 @@ export default function Avatar({
const [uploading, setUploading] = useState(false)
useEffect(() => {
- if (url) downloadImage(url)
- }, [url])
-
- async function downloadImage(path: string) {
- try {
- const { data, error } = await supabase.storage.from('avatars').download(path)
- if (error) {
- throw error
+ async function downloadImage(path: string) {
+ try {
+ const { data, error } = await supabase.storage.from('avatars').download(path)
+ if (error) {
+ throw error
+ }
+ const url = URL.createObjectURL(data)
+ setAvatarUrl(url)
+ } catch (error) {
+ console.log('Error downloading image: ', error)
}
- const url = URL.createObjectURL(data)
- setAvatarUrl(url)
- } catch (error) {
- console.log('Error downloading image: ', error)
}
- }
+
+ if (url) downloadImage(url)
+ }, [url, supabase.storage])
const uploadAvatar: React.ChangeEventHandler = async (event) => {
try {
diff --git a/examples/user-management/nextjs-ts-user-management/components/Footer.tsx b/examples/user-management/nextjs-ts-user-management/components/Footer.tsx
index ec6577c7ab6..f1bf7abc6e1 100644
--- a/examples/user-management/nextjs-ts-user-management/components/Footer.tsx
+++ b/examples/user-management/nextjs-ts-user-management/components/Footer.tsx
@@ -1,4 +1,4 @@
-export default function Footer({}) {
+export default function Footer() {
return (
@@ -9,6 +9,7 @@ export default function Footer({}) {