diff --git a/vercel.json b/vercel.json index 89c2b76b2b8..b5ce5303a16 100644 --- a/vercel.json +++ b/vercel.json @@ -24,10 +24,16 @@ }, { "source": "/rss", "destination": "https://www-internal.supabase.io/new/rss.xml" }, { "source": "/rss.xml", "destination": "https://www-internal.supabase.io/new/rss.xml" }, + { "source": "/blog/rss.xml", "destination": "https://www-internal.supabase.io/new/rss.xml" }, + { "source": "/blog/rss", "destination": "https://www-internal.supabase.io/new/rss.xml" }, { "source": "/beta", "destination": "https://www-internal.supabase.io/new/beta" }, { "source": "/:match*", "destination": "https://docs-rose.vercel.app/:match*" } ], "redirects": [ + { + "source": "/blog/2021/03/08/toad-a-link-shorterner-with-simple-apis-for-low-coders", + "destination": "/blog/2021/03/08/toad-a-link-shortener-with-simple-apis-for-low-coders" + }, { "source": "/blog/2020/07/10/surviving-hacker-news", "destination": "/blog/2020/07/10/alpha-launch-postmortem" diff --git a/web/docs/guides/auth.mdx b/web/docs/guides/auth.mdx index 6dcf73a89ef..07dd70f09c2 100644 --- a/web/docs/guides/auth.mdx +++ b/web/docs/guides/auth.mdx @@ -104,9 +104,183 @@ where auth.uid() = todos.user_id; -- Policy is implicitly added. 5. The user's UID can be used in Policies to restrict access to rows. Supabase provides a special function in Postgres, `auth.uid()`, which extracts the user's UID from the JWT. This is especially useful when creating Policies. - + +## Policy Examples + +Here are some examples to show you the power of PostgreSQL's Row Level Security. Each policy is attached to a table, and the policy is executed +every time a the table is accessed. + +### Allow read access + +```sql +-- 1. Create table +create table profiles ( + id uuid references auth.users, + avatar_url text +); + +-- 2. Enable RLS +alter table profiles + enable row level security; + +-- 3. Create Policy +create policy "Public profiles are viewable by everyone." + on profiles for select using ( + true + ); +``` + +1. Creates a table called `profiles` in the public schema (default schema) +2. Enables Row Level Security +3. Creates a Policy which allows all `select` queries to run. + + +### Restrict updates + +```sql +-- 1. Create table +create table profiles ( + id uuid references auth.users, + avatar_url text +); + +-- 2. Enable RLS +alter table profiles + enable row level security; + +-- 3. Create Policy +create policy "Users can update their own profiles." + on profiles for update using ( + auth.uid() = id + ); +``` + +1. Creates a table called `profiles` in the public schema (default schema) +2. Enables Row Level Security +3. Creates a Policy which allows logged in users to update their own data. + + +### Policies with joins + +Policies can even include table joins. This example shows how you can query "external" tables to build more advanced rules. + +```sql +create table teams ( + id serial primary key, + name text +); + +-- 2. Create many to many join +create table members ( + team_id bigint references teams, + user_id uuid references auth.users +); + +-- 3. Enable RLS +alter table teams + enable row level security; + +-- 4. Create Policy +create policy "Team members can update team details if they belong to the team." + on teams + for update using ( + auth.uid() in ( + select user_id from members + where team_id = id + ) + ); +``` + +### Verifying email domains + +Postgres has a function `right(string, n)` that returns the rightmost n characters of a string. +You could use this to match staff member's email domains. + +```sql +-- 1. Create table +create table leaderboard ( + id uuid references auth.users, + high_score bigint +); + +-- 2. Enable RLS +alter table leaderboard + enable row level security; + +-- 3. Create Policy +create policy "Only Blizzard staff can update leaderboard" + on leaderboard + for update using ( + right(auth.email(), 13) = '@blizzard.com' + ); +``` + +### Advanced Policies + +Use the full power of SQL to build extremely advanced rules. + +In this example we will create a `posts` and `comments` database and then create a policy that depends on another policy. +(In this case the comments policy depends on the posts policy.) + +```sql +create table posts ( + id serial primary key, + creator_id uuid not null references auth.users(id), + title text not null, + body text not null, + publish_date date not null default now(), + audience uuid[] null -- many to many table ommited for brevity +); + +create table comments ( + id serial primary key, + post_id int not null references posts(id) on delete cascade, + user_id uuid not null references auth.users(id), + body text not null, + comment_date date not null default now() +); + +create policy "Creator can see thier own posts" +on posts +for select +using ( + auth.uid() = posts.creator_id +); + +create policy "Logged in users can see the posts if they belong to the post 'audience'." +on posts +for select +using ( + auth.uid() = any (posts.audience) +); + +create policy "Users can see all comments for posts they have access to." +on comments +for select +using ( + exists ( + select 1 from posts + where posts.id = comments.post_id + ) +); +``` + + ## Tips +### You don't have to use Policies + +You can also put your authorization rules in your middleware, +similar to how you would create security rules with any other `backend <-> middleware <-> frontend` architecture. + +Policies are a tool. In the case of "serverless/Jastack" setups, they are especially effective because you don't have to deploy any middleware at all. + +However if you want to use another Authorization method for your applications, that's also fine. Supabase is "just Postgres", so if your application +works with Postgres, then it also works with Supabase. + +Tip: make sure to enable Row Level Security for all your tables, so that your tables are inaccessible. Then use the "Service" which we provide. +"Service" are designed to bypass RLS. + ### Check authentication settings on Supabase Navigate to Authentication > Settings on [app.supabase.io](https://app.supabase.io), and you'll be able to change settings for things like: diff --git a/web/docs/learn/auth-deep-dive/google-oauth.md b/web/docs/learn/auth-deep-dive/google-oauth.md index 237c84f2607..7830ab9ece4 100644 --- a/web/docs/learn/auth-deep-dive/google-oauth.md +++ b/web/docs/learn/auth-deep-dive/google-oauth.md @@ -12,6 +12,71 @@ How to add Google OAuth Logins to your Supabase Application. +### Logging in with external OAuth providers + +Connecting social logins such as Google, Github, or Facebook couldn't be easier. In this guide we'll walk you through the process of connecting Google, but the process is basically the same for all of the providers which includes: azure, bitbucket, github, gitlab, facebook, and google. + +First you'll need to create a google project inside their [cloud console](https://console.cloud.google.com/home/dashboard), in other providers they may refer to this as an "app" and is usually available on the company's developer portal. + +![Create a new Google Project inside cloud console](/img/auth-5-1.png) + +Once you have a project, type "OAuth" into the search bar and open up "OAuth Consent Screen" + +![Open the OAuth consent screen](/img/auth-5-2.png) + +Select 'External' and proceed to fill out the rest of the form fields + +![Select External on the OAuth form](/img/auth-5-3.png) + +Next open up Credentials page on the left + +![Open up Credentials page](/img/auth-5-4.png) + +And click to create a new set of credentials, select OAuth client ID as the option + +![Create new oauth client id credentials](/img/auth-5-5.png) + +Now choose Web Application (assuming you're creating a web app) and in the Authorized redirect URI section you need to add: `https:///supabase.co/auth/v1/callback`. You can find your Supabase URL in Settings > API inside the Supabase dashboard. + +![Add your redirect URI](/img/auth-5-6.png) + +Now you can grab the client ID and secret from the pop up, and insert them into the google section inside the Supabase dashboard in Auth > Settings: + +![take client id and secret](/img/auth-5-7.png) + +![insert client id and secret into supabase dashboard in auth > auth](/img/auth-5-8.png) + +Hit save. Now you should be able to navigate in the browser to: + +``` +https://.supabase.co/auth/v1/authorize?provider=google +``` + +And log in to your service using any google or gmail account. + +You can additionally add a query parameter `redirect_to=` to the end of the URL for example: + +``` +https://.supabase.co/auth/v1/authorize?provider=google&redirect_to=http://localhost:3000/welcome +``` + +But make sure any URL you enter here is on the same host as the site url that you have entered on the Auth > Settings page on the Supabase dashboard. (There is additional functionality coming soon, where you'll be able to add additional URLs to the allow list). + +If you want to redirect the user to a specific page in your website or app after a successful authentication. + +You also have the option of requesting additional scopes from the oauth provider. Let's say for example you want the ability to send emails on behalf of the user's gmail account. You can do this by adding the query parameter `scopes`, like: + +``` +https://.supabase.co/auth/v1/authorize?provider=google&https://www.googleapis.com/auth/gmail.send +``` + +Note however that your app will usually have to be verified by Google before you can request advanced scopes such as this. + +The only thing left to implement is the UI, but if you prefer to use something pre-built, we have a handy [Auth Widget](https://github.com/supabase/ui/#using-supabase-ui-auth), where you can enable/disable whichever auth providers you want to support. + +For any support please get in touch at beta at supabase.io or for feature requests open an issue in the [backend](https://github.com/supabase/gotrue) or [frontend](https://github.com/supabase/gotrue-js) repos. + + ### Resources - JWT debugger: https://jwt.io/​ diff --git a/web/static/img/auth-5-1.png b/web/static/img/auth-5-1.png new file mode 100644 index 00000000000..e90534de2d6 Binary files /dev/null and b/web/static/img/auth-5-1.png differ diff --git a/web/static/img/auth-5-2.png b/web/static/img/auth-5-2.png new file mode 100644 index 00000000000..125dbb44a2c Binary files /dev/null and b/web/static/img/auth-5-2.png differ diff --git a/web/static/img/auth-5-3.png b/web/static/img/auth-5-3.png new file mode 100644 index 00000000000..143e520df0d Binary files /dev/null and b/web/static/img/auth-5-3.png differ diff --git a/web/static/img/auth-5-4.png b/web/static/img/auth-5-4.png new file mode 100644 index 00000000000..767dadd0c78 Binary files /dev/null and b/web/static/img/auth-5-4.png differ diff --git a/web/static/img/auth-5-5.png b/web/static/img/auth-5-5.png new file mode 100644 index 00000000000..feb332dbe6b Binary files /dev/null and b/web/static/img/auth-5-5.png differ diff --git a/web/static/img/auth-5-6.png b/web/static/img/auth-5-6.png new file mode 100644 index 00000000000..c90310a4c06 Binary files /dev/null and b/web/static/img/auth-5-6.png differ diff --git a/web/static/img/auth-5-7.png b/web/static/img/auth-5-7.png new file mode 100644 index 00000000000..a3f259be06e Binary files /dev/null and b/web/static/img/auth-5-7.png differ diff --git a/web/static/img/auth-5-8.png b/web/static/img/auth-5-8.png new file mode 100644 index 00000000000..a114192d358 Binary files /dev/null and b/web/static/img/auth-5-8.png differ diff --git a/www/_blog/2021-03-08-toad-a-link-shorterner-with-simple-apis-for-low-coders.mdx b/www/_blog/2021-03-08-toad-a-link-shortener-with-simple-apis-for-low-coders.mdx similarity index 97% rename from www/_blog/2021-03-08-toad-a-link-shorterner-with-simple-apis-for-low-coders.mdx rename to www/_blog/2021-03-08-toad-a-link-shortener-with-simple-apis-for-low-coders.mdx index f5910d56f8a..a87778aaeb0 100644 --- a/www/_blog/2021-03-08-toad-a-link-shorterner-with-simple-apis-for-low-coders.mdx +++ b/www/_blog/2021-03-08-toad-a-link-shortener-with-simple-apis-for-low-coders.mdx @@ -1,5 +1,5 @@ --- -title: Toad, a link shorterner with simple APIs for low-coders +title: Toad, a link shortener with simple APIs for low-coders description: An easy-to-use link shortening tool with simple APIs author: rory_wilding author_title: Supabase diff --git a/www/lib/rss.tsx b/www/lib/rss.tsx index 4061ec57ef6..1ea6f62644e 100644 --- a/www/lib/rss.tsx +++ b/www/lib/rss.tsx @@ -1,8 +1,8 @@ const generateRssItem = (post: any): string => ` - https://supabase.io/blog/${post.slug} + https://supabase.io/blog/${post.url} ${post.title} - https://supabase.io/blog/${post.slug} + https://supabase.io/blog/${post.url} ${post.description} ${new Date(post.date).toUTCString()} diff --git a/www/public/rss.xml b/www/public/rss.xml index 46568679b34..824e56f1e37 100644 --- a/www/public/rss.xml +++ b/www/public/rss.xml @@ -5,269 +5,253 @@ https://supabase.io Latest news from Supabase en - Wed, 24 Mar 2021 16:00:00 GMT + Sun, 21 Mar 2021 16:00:00 GMT - https://supabase.io/blog/2021-03-25-launch-week - Launch week - https://supabase.io/blog/2021-03-25-launch-week - Five days of Supabase. - Wed, 24 Mar 2021 16:00:00 GMT - - - - https://supabase.io/blog/2021-03-25-angels-of-supabase - Angels of Supabase - https://supabase.io/blog/2021-03-25-angels-of-supabase - Meet the investors of Supabase. - Wed, 24 Mar 2021 16:00:00 GMT - - - - https://supabase.io/blog/2021-03-22-In-The-Loop + https://supabase.io/blog/2021/03/22/In-The-Loop Developers stay up to date with intheloop.dev - https://supabase.io/blog/2021-03-22-In-The-Loop + https://supabase.io/blog/2021/03/22/In-The-Loop Learn why Kevin is building intheloop.dev with Supabase Sun, 21 Mar 2021 16:00:00 GMT - https://supabase.io/blog/2021-03-11-using-supabase-replit + https://supabase.io/blog/2021/03/11/using-supabase-replit Using Supabase in Replit - https://supabase.io/blog/2021-03-11-using-supabase-replit + https://supabase.io/blog/2021/03/11/using-supabase-replit Free hosted relational database from within your node.js repl Wed, 10 Mar 2021 16:00:00 GMT - https://supabase.io/blog/2021-03-08-toad-a-link-shorterner-with-simple-apis-for-low-coders + https://supabase.io/blog/2021/03/08/toad-a-link-shorterner-with-simple-apis-for-low-coders Toad, a link shorterner with simple APIs for low-coders - https://supabase.io/blog/2021-03-08-toad-a-link-shorterner-with-simple-apis-for-low-coders + https://supabase.io/blog/2021/03/08/toad-a-link-shorterner-with-simple-apis-for-low-coders An easy-to-use link shortening tool with simple APIs Sun, 07 Mar 2021 16:00:00 GMT - https://supabase.io/blog/2021-03-05-postgres-as-a-cron-server + https://supabase.io/blog/2021/03/05/postgres-as-a-cron-server Postgres as a CRON Server - https://supabase.io/blog/2021-03-05-postgres-as-a-cron-server + https://supabase.io/blog/2021/03/05/postgres-as-a-cron-server Running repetitive tasks with your Postgres database. Thu, 04 Mar 2021 16:00:00 GMT - https://supabase.io/blog/2021-03-02-supabase-beta-february-2021 + https://supabase.io/blog/2021/03/02/supabase-beta-february-2021 Supabase Beta February 2021 - https://supabase.io/blog/2021-03-02-supabase-beta-february-2021 + https://supabase.io/blog/2021/03/02/supabase-beta-february-2021 One year of building. Mon, 01 Mar 2021 16:00:00 GMT - https://supabase.io/blog/2021-02-27-cracking-postgres-interview + https://supabase.io/blog/2021/02/27/cracking-postgres-interview Cracking PostgreSQL Interview Questions - https://supabase.io/blog/2021-02-27-cracking-postgres-interview + https://supabase.io/blog/2021/02/27/cracking-postgres-interview Understand the top PostgreSQL Interview Questions Fri, 26 Feb 2021 16:00:00 GMT - https://supabase.io/blog/2021-02-09-case-study-roboflow + https://supabase.io/blog/2021/02/09/case-study-roboflow Roboflow.com choose Supabase to power Paint.wtf leaderboard - https://supabase.io/blog/2021-02-09-case-study-roboflow + https://supabase.io/blog/2021/02/09/case-study-roboflow Learn how Roboflow.com used Supabase to build their Paint.wtf leaderboard Mon, 08 Feb 2021 16:00:00 GMT - https://supabase.io/blog/2021-02-02-supabase-beta-january-2021 + https://supabase.io/blog/2021/02/02/supabase-beta-january-2021 Supabase Beta January 2021 - https://supabase.io/blog/2021-02-02-supabase-beta-january-2021 + https://supabase.io/blog/2021/02/02/supabase-beta-january-2021 Eleven months of building. Mon, 01 Feb 2021 16:00:00 GMT - https://supabase.io/blog/2021-01-02-supabase-beta-december-2020 + https://supabase.io/blog/2021/01/02/supabase-beta-december-2020 Supabase Beta December 2020 - https://supabase.io/blog/2021-01-02-supabase-beta-december-2020 + https://supabase.io/blog/2021/01/02/supabase-beta-december-2020 Ten months of building. Fri, 01 Jan 2021 16:00:00 GMT - https://supabase.io/blog/2020-12-13-supabase-dashboard-performance + https://supabase.io/blog/2020/12/13/supabase-dashboard-performance Making the Supabase Dashboard Supa-fast - https://supabase.io/blog/2020-12-13-supabase-dashboard-performance + https://supabase.io/blog/2020/12/13/supabase-dashboard-performance Improving the performance of the Supabase dashboard Sat, 12 Dec 2020 16:00:00 GMT - https://supabase.io/blog/2020-12-02-supabase-striveschool + https://supabase.io/blog/2020/12/02/supabase-striveschool Supabase Partners With Strive School To Help Teach Open Source - https://supabase.io/blog/2020-12-02-supabase-striveschool + https://supabase.io/blog/2020/12/02/supabase-striveschool Supabase Partners With Strive School To Help Teach Open Source To The Next Generation Of Developers Tue, 01 Dec 2020 16:00:00 GMT - https://supabase.io/blog/2020-12-02-case-study-xendit + https://supabase.io/blog/2020/12/02/case-study-xendit Xendit Built a Counter-Fraud Watchlist for the Fintech Industry - https://supabase.io/blog/2020-12-02-case-study-xendit + https://supabase.io/blog/2020/12/02/case-study-xendit See how Xendit use Supabase to build a full-text search engine. Tue, 01 Dec 2020 16:00:00 GMT - https://supabase.io/blog/2020-12-02-case-study-tayfa + https://supabase.io/blog/2020/12/02/case-study-tayfa TAYFA Built a No-Code Website Builder in Seven Days - https://supabase.io/blog/2020-12-02-case-study-tayfa + https://supabase.io/blog/2020/12/02/case-study-tayfa See how Tayfa went from idea to paying customer in less than 30 days. Tue, 01 Dec 2020 16:00:00 GMT - https://supabase.io/blog/2020-12-02-case-study-monitoro + https://supabase.io/blog/2020/12/02/case-study-monitoro Monitoro Built a Web Crawler Handling Millions of API Requests - https://supabase.io/blog/2020-12-02-case-study-monitoro + https://supabase.io/blog/2020/12/02/case-study-monitoro See how Monitoro built an automated scraping platform using Supabase. Tue, 01 Dec 2020 16:00:00 GMT - https://supabase.io/blog/2020-12-01-supabase-alpha-november-2020 + https://supabase.io/blog/2020/12/01/supabase-alpha-november-2020 Supabase Alpha November 2020 - https://supabase.io/blog/2020-12-01-supabase-alpha-november-2020 + https://supabase.io/blog/2020/12/01/supabase-alpha-november-2020 Nine months of building. Mon, 30 Nov 2020 16:00:00 GMT - https://supabase.io/blog/2020-11-18-postgresql-views + https://supabase.io/blog/2020/11/18/postgresql-views Postgres Views - https://supabase.io/blog/2020-11-18-postgresql-views + https://supabase.io/blog/2020/11/18/postgresql-views Creating and using a view in PostgreSQL. Tue, 17 Nov 2020 16:00:00 GMT - https://supabase.io/blog/2020-11-02-supabase-alpha-october-2020 + https://supabase.io/blog/2020/11/02/supabase-alpha-october-2020 Supabase Alpha October 2020 - https://supabase.io/blog/2020-11-02-supabase-alpha-october-2020 + https://supabase.io/blog/2020/11/02/supabase-alpha-october-2020 Eight months of building. Sun, 01 Nov 2020 16:00:00 GMT - https://supabase.io/blog/2020-10-30-improved-dx + https://supabase.io/blog/2020/10/30/improved-dx Supabase.js 1.0 - https://supabase.io/blog/2020-10-30-improved-dx + https://supabase.io/blog/2020/10/30/improved-dx We're releasing a new version of our Supabase client with some awesome new improvements. Thu, 29 Oct 2020 16:00:00 GMT - https://supabase.io/blog/2020-10-03-supabase-alpha-september-2020 + https://supabase.io/blog/2020/10/03/supabase-alpha-september-2020 Supabase Alpha September 2020 - https://supabase.io/blog/2020-10-03-supabase-alpha-september-2020 + https://supabase.io/blog/2020/10/03/supabase-alpha-september-2020 Seven months of building. Fri, 02 Oct 2020 16:00:00 GMT - https://supabase.io/blog/2020-09-11-supabase-hacktoberfest-2020 + https://supabase.io/blog/2020/09/11/supabase-hacktoberfest-2020 Supabase Hacktoberfest 2020 - https://supabase.io/blog/2020-09-11-supabase-hacktoberfest-2020 + https://supabase.io/blog/2020/09/11/supabase-hacktoberfest-2020 Join us for a celebration of open source software and learn how to contribute to Supabase. Thu, 10 Sep 2020 16:00:00 GMT - https://supabase.io/blog/2020-09-03-supabase-alpha-august-2020 + https://supabase.io/blog/2020/09/03/supabase-alpha-august-2020 Supabase Alpha August 2020 - https://supabase.io/blog/2020-09-03-supabase-alpha-august-2020 + https://supabase.io/blog/2020/09/03/supabase-alpha-august-2020 Six months of building Wed, 02 Sep 2020 16:00:00 GMT - https://supabase.io/blog/2020-08-05-supabase-auth + https://supabase.io/blog/2020/08/05/supabase-auth Supabase Auth - https://supabase.io/blog/2020-08-05-supabase-auth + https://supabase.io/blog/2020/08/05/supabase-auth Authenticate and authorize your users with Supabase Auth Tue, 04 Aug 2020 16:00:00 GMT - https://supabase.io/blog/2020-08-02-supabase-alpha-july-2020 + https://supabase.io/blog/2020/08/02/supabase-alpha-july-2020 Supabase Alpha July 2020 - https://supabase.io/blog/2020-08-02-supabase-alpha-july-2020 + https://supabase.io/blog/2020/08/02/supabase-alpha-july-2020 Five months of building Sat, 01 Aug 2020 16:00:00 GMT - https://supabase.io/blog/2020-08-02-continuous-postgresql-backup-walg + https://supabase.io/blog/2020/08/02/continuous-postgresql-backup-walg Continuous PostgreSQL Backups using WAL-G - https://supabase.io/blog/2020-08-02-continuous-postgresql-backup-walg + https://supabase.io/blog/2020/08/02/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 16:00:00 GMT - https://supabase.io/blog/2020-07-10-alpha-launch-postmortem + https://supabase.io/blog/2020/07/10/alpha-launch-postmortem Alpha Launch Postmortem - https://supabase.io/blog/2020-07-10-alpha-launch-postmortem + https://supabase.io/blog/2020/07/10/alpha-launch-postmortem Everything that went wrong with Supabase's launch Thu, 09 Jul 2020 16:00:00 GMT - https://supabase.io/blog/2020-07-09-postgresql-templates + https://supabase.io/blog/2020/07/09/postgresql-templates What are PostgreSQL Templates? - https://supabase.io/blog/2020-07-09-postgresql-templates + https://supabase.io/blog/2020/07/09/postgresql-templates What are PostgreSQL templates and what are they used for? Wed, 08 Jul 2020 16:00:00 GMT - https://supabase.io/blog/2020-07-17-postgresql-physical-logical-backups + https://supabase.io/blog/2020/07/17/postgresql-physical-logical-backups Physical vs Logical Backups in PostgreSQL - https://supabase.io/blog/2020-07-17-postgresql-physical-logical-backups + https://supabase.io/blog/2020/07/17/postgresql-physical-logical-backups What are physical and logical backups in Postgres? Mon, 06 Jul 2020 16:00:00 GMT - https://supabase.io/blog/2020-07-01-supabase-alpha-june-2020 + https://supabase.io/blog/2020/07/01/supabase-alpha-june-2020 Supabase Alpha June 2020 - https://supabase.io/blog/2020-07-01-supabase-alpha-june-2020 + https://supabase.io/blog/2020/07/01/supabase-alpha-june-2020 Four months of building Tue, 30 Jun 2020 16:00:00 GMT - https://supabase.io/blog/2020-06-15-supabase-steve-chavez + https://supabase.io/blog/2020/06/15/supabase-steve-chavez Steve Chavez has joined Supabase - https://supabase.io/blog/2020-06-15-supabase-steve-chavez + https://supabase.io/blog/2020/06/15/supabase-steve-chavez Steve joins Supabase to help build Auth. Sun, 14 Jun 2020 16:00:00 GMT - https://supabase.io/blog/2020-06-01-supabase-alpha-may-2020 + https://supabase.io/blog/2020/06/01/supabase-alpha-may-2020 Supabase Alpha May 2020 - https://supabase.io/blog/2020-06-01-supabase-alpha-may-2020 + https://supabase.io/blog/2020/06/01/supabase-alpha-may-2020 Three months of building Sun, 31 May 2020 16:00:00 GMT - https://supabase.io/blog/2020-05-01-supabase-alpha-april-2020 + https://supabase.io/blog/2020/05/01/supabase-alpha-april-2020 Supabase Alpha April 2020 - https://supabase.io/blog/2020-05-01-supabase-alpha-april-2020 + https://supabase.io/blog/2020/05/01/supabase-alpha-april-2020 Two months of building Sun, 31 May 2020 16:00:00 GMT