@@ -9,7 +6,7 @@
# Supabase
-[Supabase](https://supabase.io) is an open source Firebase alternative. We're building the features of Firebase using enterprise-grade open source tools.
+[Supabase](https://supabase.io) is an open source Firebase alternative. We're building the features of Firebase using enterprise-grade open source tools.
- [x] Hosted Postgres Database
- [x] Realtime subscriptions
@@ -29,7 +26,6 @@ For full documentation, visit [supabase.io/docs](https://supabase.io/docs)
- [GitHub Issues](https://github.com/supabase/supabase/issues). Best for: bugs and errors you encounter using Supabase.
- [Email Support](https://supabase.io/docs/support#business-support). Best for: problems with your database or infrastructure.
-
## Status
- [x] Alpha: We are testing Supabase with a closed set of customers
@@ -39,13 +35,9 @@ For full documentation, visit [supabase.io/docs](https://supabase.io/docs)
We are currently in Public Beta. Watch "releases" of this repo to get notified of major updates.
+
-
-
-
-
-----
-
+---
## How it works
@@ -55,41 +47,33 @@ Supabase is a combination of open source tools. We’re building the features of
Supabase is a [hosted platform](https://app.supabase.io). You can sign up and start using Supabase without installing anything. We are still creating the local development experience - this is now our core focus, along with platform stability.
-

-
- [PostgreSQL](https://www.postgresql.org/) is an object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.
-- [Realtime](https://github.com/supabase/realtime) is an Elixir server that allows you to listen to PostgreSQL inserts, updates, and deletes using websockets. Supabase listens to Postgres' built-in replication functionality, converts the replication byte stream into JSON, then broadcasts the JSON over websockets.
+- [Realtime](https://github.com/supabase/realtime) is an Elixir server that allows you to listen to PostgreSQL inserts, updates, and deletes using websockets. Supabase listens to Postgres' built-in replication functionality, converts the replication byte stream into JSON, then broadcasts the JSON over websockets.
- [PostgREST](http://postgrest.org/) is a web server that turns your PostgreSQL database directly into a RESTful API
- [postgres-meta](https://github.com/supabase/postgres-meta) is a RESTful API for managing your Postgres, allowing you to fetch tables, add roles, and run queries etc.
- [GoTrue](https://github.com/netlify/gotrue) is an SWT based API for managing users and issuing SWT tokens.
- [Kong](https://github.com/Kong/kong) is a cloud-native API gateway.
-
-
#### Client libraries
Our client library is modular. Each sub-library is a standalone implementation for a single external system. This is one of the ways we support existing tools.
- **`supabase-{lang}`**: Combines libraries and adds enrichments.
- - `postgrest-{lang}`: Client library to work with [PostgREST](https://github.com/postgrest/postgrest)
- - `realtime-{lang}`: Client library to work with [Realtime](https://github.com/supabase/realtime)
- - `gotrue-{lang}`: Client library to work with [GoTrue](https://github.com/netlify/gotrue)
+ - `postgrest-{lang}`: Client library to work with [PostgREST](https://github.com/postgrest/postgrest)
+ - `realtime-{lang}`: Client library to work with [Realtime](https://github.com/supabase/realtime)
+ - `gotrue-{lang}`: Client library to work with [GoTrue](https://github.com/netlify/gotrue)
-
-| Repo | Official | Community |
-|-----------------------|--------------------------------------------------|------------------|
-| **`supabase-{lang}`** | [`JS`](https://github.com/supabase/supabase-js) | [`C#`](https://github.com/supabase/supabase-csharp) \| [`Dart`](https://github.com/supabase/supabase-dart) \| [`Python`](https://github.com/supabase/supabase-py) \| `Rust` |
-| `postgrest-{lang}` | [`JS`](https://github.com/supabase/postgrest-js) | [`C#`](https://github.com/supabase/postgrest-csharp) \| [`Dart`](https://github.com/supabase/postgrest-dart) \| [`Python`](https://github.com/supabase/postgrest-py) \| [`Rust`](https://github.com/supabase/postgrest-rs) |
-| `realtime-{lang}` | [`JS`](https://github.com/supabase/realtime-js) | [`C#`](https://github.com/supabase/realtime-csharp) \| [`Dart`](https://github.com/supabase/realtime-dart) \| [`Python`](https://github.com/supabase/realtime-py) \| `Rust` |
-| `gotrue-{lang}` | [`JS`](https://github.com/supabase/gotrue-js) | [`C#`](https://github.com/supabase/gotrue-csharp) \| [`Dart`](https://github.com/supabase/gotrue-dart) \| [`Python`](https://github.com/supabase/gotrue-py) \| `Rust` |
+| Repo | Official | Community |
+| --------------------- | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| **`supabase-{lang}`** | [`JS`](https://github.com/supabase/supabase-js) | [`C#`](https://github.com/supabase/supabase-csharp) \| [`Dart`](https://github.com/supabase/supabase-dart) \| [`Python`](https://github.com/supabase/supabase-py) \| `Rust` |
+| `postgrest-{lang}` | [`JS`](https://github.com/supabase/postgrest-js) | [`C#`](https://github.com/supabase/postgrest-csharp) \| [`Dart`](https://github.com/supabase/postgrest-dart) \| [`Python`](https://github.com/supabase/postgrest-py) \| [`Rust`](https://github.com/supabase/postgrest-rs) |
+| `realtime-{lang}` | [`JS`](https://github.com/supabase/realtime-js) | [`C#`](https://github.com/supabase/realtime-csharp) \| [`Dart`](https://github.com/supabase/realtime-dart) \| [`Python`](https://github.com/supabase/realtime-py) \| `Rust` |
+| `gotrue-{lang}` | [`JS`](https://github.com/supabase/gotrue-js) | [`C#`](https://github.com/supabase/gotrue-csharp) \| [`Dart`](https://github.com/supabase/gotrue-dart) \| [`Python`](https://github.com/supabase/gotrue-py) \| `Rust` |
-
-
-----
+---
## Sponsors
[](https://github.com/sponsors/supabase)
-
diff --git a/examples/javascript-auth/index.html b/examples/javascript-auth/index.html
index b8357fdd5e7..56907baa0ec 100644
--- a/examples/javascript-auth/index.html
+++ b/examples/javascript-auth/index.html
@@ -2,7 +2,7 @@
-
+
diff --git a/examples/javascript-auth/index.js b/examples/javascript-auth/index.js
index 5b16fdf6043..480acb7afa5 100644
--- a/examples/javascript-auth/index.js
+++ b/examples/javascript-auth/index.js
@@ -1,9 +1,9 @@
-var SUPABASE_URL = ''
+var SUPABASE_URL = 'https://ernhobnpmmupjnmxpfbt.supabase.co'
var SUPABASE_KEY =
- ''
+ 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYxMzA5ODU0NCwiZXhwIjoxOTI4Njc0NTQ0fQ.Z9bRrfaL2oGhSuyBckFcdcnRIJDelWJ1II98OnEtLO0'
-var supabase = Supabase.createClient(SUPABASE_URL, SUPABASE_KEY)
+var supabase = supabase.createClient(SUPABASE_URL, SUPABASE_KEY)
window.userToken = null
document.addEventListener('DOMContentLoaded', function (event) {
diff --git a/examples/nextjs-live-tracker-map/.env.local.example b/examples/nextjs-live-tracker-map/.env.local.example
new file mode 100644
index 00000000000..b6fedec92e3
--- /dev/null
+++ b/examples/nextjs-live-tracker-map/.env.local.example
@@ -0,0 +1,2 @@
+NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
+NEXT_PUBLIC_SUPABASE_KEY=your-anon-key
\ No newline at end of file
diff --git a/examples/nextjs-live-tracker-map/README.md b/examples/nextjs-live-tracker-map/README.md
index 4ea79e91113..aa81cb493b0 100644
--- a/examples/nextjs-live-tracker-map/README.md
+++ b/examples/nextjs-live-tracker-map/README.md
@@ -1 +1,51 @@
-# Live Tracker Map [COMING SOON]
+# Live Tracker Map
+
+Build with supabase-js and leafletjs. [[Demo App]](https://realtime-map.vercel.app)
+
+
+
+
+
+
+
+## Test with your own Supabase Project
+
+Note: you have to enable `DISABLE EMAIL CONFIRMATIONS` under your Supabase project settings.
+
+#### Database schema
+
+Go to [app.supabase.io](https://app.supabase.io/), create a new organisation and project if you haven't had one.
+Run this sql query to create required tables.
+
+```sql
+-- Locations
+CREATE TABLE public.locations (
+ id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
+ latitude numeric NOT NULL,
+ longitude numeric NOT NULL,
+ user_id uuid REFERENCES auth.users NOT NULL
+);
+ALTER TABLE public.locations ENABLE ROW LEVEL SECURITY;
+COMMENT ON table public.locations IS 'Individual locations sent by each user.';
+CREATE POLICY "Allow logged-in read access" on public.locations USING ( auth.role() = 'authenticated' );
+CREATE POLICY "Allow individual insert access" on public.locations FOR INSERT WITH CHECK ( auth.uid() = user_id );
+```
+
+#### Setup env vars
+
+Next, copy the `.env.local.example` file in this directory to `.env.local` (which will be ignored by Git):
+
+```bash
+cp .env.local.example .env.local
+```
+
+Then set each variable on `.env.local`:
+
+- `NEXT_PUBLIC_SUPABASE_URL` should be the **API URL**
+- `NEXT_PUBLIC_SUPABASE_KEY` should be the **anon** key
+
+You can get these values from your project dashboard at [app.supabase.io](https://app.supabase.io/).
+
+The **anon** key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data.
+
+> **_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser.
diff --git a/examples/nextjs-live-tracker-map/archive/README.md b/examples/nextjs-live-tracker-map/archive/README.md
deleted file mode 100644
index e0764de6d3f..00000000000
--- a/examples/nextjs-live-tracker-map/archive/README.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# Live Tracker Map [WIP]
-
-Build with supabase auth, realtime and leafletjs. [[Demo App]](https://realtime-map-v2.vercel.app/)
-
-**This `archive` project doesn't use official supabase-js and gotrue-js libs.**
-
-
-
-
-
-
-
-## How to use
-
-#### Clone this folder
-
-```bash
-git clone https://github.com/supabase/supabase
-cd supabase/examples/live-tracker-map
-```
-
-#### Install dependencies
-
-```bash
-npm install
-```
-
-#### Start the app
-
-```bash
-# Open a terminal and run:
-npm run dev
-```
-
-Visit http://localhost:3000 and start testing!
-
-## Test with your own Supabase Project
-
-#### Database schema
-
-Go to [app.supabase.io](https://app.supabase.io/), create a new organisation and project if you haven't had one.
-Run this sql query to create required tables.
-
-```sql
--- USERS
-CREATE TYPE public.user_role AS ENUM ('DRIVER', 'MANAGER');
-CREATE TABLE public.users (
- id uuid NOT NULL PRIMARY KEY, -- UUID from auth.users
- username text,
- role user_role DEFAULT 'DRIVER'::public.user_role
-);
-COMMENT ON table public.users IS 'Profile data for each user.';
-COMMENT ON column public.users.id IS 'References the internal Supabase Auth user.';
-ALTER TABLE public.users REPLICA IDENTITY FULL; -- Send "previous data" on change
-ALTER TABLE public.users ENABLE ROW LEVEL SECURITY;
-CREATE POLICY "Allow logged-in read access" on public.users FOR SELECT USING ( auth.role() = 'authenticated' );
-CREATE POLICY "Allow individual insert access" on public.users FOR INSERT WITH CHECK ( auth.uid() = id );
-CREATE POLICY "Allow individual update access" on public.users FOR UPDATE USING ( auth.uid() = id );
-
--- LOCATIONS
-CREATE TABLE public.locations (
- id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
- latitude numeric NOT NULL,
- longitude numeric NOT NULL,
- user_id uuid REFERENCES public.users NOT NULL
-);
-ALTER TABLE public.locations REPLICA IDENTITY FULL; -- Send "previous data" on change
-ALTER TABLE public.locations ENABLE ROW LEVEL SECURITY;
-COMMENT ON table public.locations IS 'Individual locations sent by each user.';
-CREATE POLICY "Allow logged-in read access" on public.locations USING ( auth.role() = 'authenticated' );
-CREATE POLICY "Allow individual insert access" on public.locations FOR INSERT WITH CHECK ( auth.uid() = user_id );
-```
-
-#### Setup env vars
-
-Next, copy the `.env.local.example` file in this directory to `.env.local` (which will be ignored by Git):
-
-```bash
-cp .env.local.example .env.local
-```
-
-Then set each variable on `.env.local`:
-
-- `NEXT_PUBLIC_SUPABASE_ENDPOINT` should be the **API URL**
-- `NEXT_PUBLIC_SUPABASE_APIKEY` should be the **anon** key
-
-You can get these values from your project dashboard at [app.supabase.io](https://app.supabase.io/).
-
-The **anon** key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data.
-
-> **_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser.
diff --git a/examples/nextjs-live-tracker-map/archive/components/MapView.js b/examples/nextjs-live-tracker-map/archive/components/MapView.js
deleted file mode 100644
index 3d137bf7f13..00000000000
--- a/examples/nextjs-live-tracker-map/archive/components/MapView.js
+++ /dev/null
@@ -1,81 +0,0 @@
-import { useState, useEffect, useRef } from 'react'
-import { MapContainer, TileLayer, Polyline } from 'react-leaflet'
-import { RoundToFixDecimals } from "lib/Utils"
-import TextLog from "components/TextLog"
-
-function randomColor() {
- var array = ["black", "magenta", "blue", "indigo", "green", "blueviolet"];
- return array[Math.floor(Math.random() * array.length)];
-}
-
-function MapView({ supabase, center, zoom }) {
- const [log, setLog] = useState(undefined)
- const [positions, setPositions] = useState([])
- const [userPositionsDict, setUserPositionsDict] = useState([])
- const mySubscription = useRef(false)
-
- useEffect(() => {
- let newLog = `Start listerning...`
- newLog += positions.map(item => { return `\nuser_id=${item.user_id} lat=${RoundToFixDecimals(item.lat)} long=${RoundToFixDecimals(item.lng)}` })
- setLog(newLog)
- }, [positions])
-
- useEffect(() => {
- // Listen to INSERT event on locations table
- mySubscription.current = supabase
- .from('locations')
- .on('INSERT', payload => {
- console.log('Change received!', payload)
- const { new: newItem } = payload
- const { id, user_id, latitude, longitude } = newItem
-
- let userPositions = userPositionsDict[user_id]
- if (userPositions) userPositions.data = [...userPositions.data, { id, user_id, lat: latitude, lng: longitude }]
- else userPositions = { color: randomColor(), data: [{ id, user_id, lat: latitude, lng: longitude }] }
-
- setPositions([...positions, { id, user_id, lat: latitude, lng: longitude }])
- setUserPositionsDict({ ...userPositionsDict, [user_id]: userPositions })
- })
- .subscribe()
-
- return () => {
- if (mySubscription.current) supabase.removeSubscription(mySubscription.current)
- }
- }, [supabase, positions, setPositions, userPositionsDict, setUserPositionsDict])
-
- function drawPolylines() {
- // console.log(userPositionsDict)
- function drawPolyline(color, data) {
- const polyline = data.map(item => {
- if (!item) return
- const { lat, lng } = item
- return [lat, lng]
- })
- return
- }
-
- let result = Object.keys(userPositionsDict).map(key => {
- const item = userPositionsDict[key]
- if (!item) return
-
- const { color, data } = item
- return drawPolyline(color, data)
- })
-
- return result
- }
-
- return (
-
+ >
+ )
+}
+
+const styles = {
+ inputContainer: {
+ marginBottom: '15px',
+ },
+ input: {
+ border: '1px solid var(--ifm-panel-border-color)',
+ borderRadius: 4,
+ backgroundColor: 'var(--custom-background-color-diff)',
+ color: 'var(--ifm-font-color-base)',
+ margin: 0,
+ padding: '6px 8px',
+ width: 300,
+ },
+ column: {
+ margin: '5px 0px',
+ padding: '0px 5px',
+ },
+ card: {
+ border: '1px solid var(--ifm-panel-border-color)',
+ borderRadius: 5,
+ padding: 8,
+ },
+ title: {
+ margin: 0,
+ fontSize: '0.9rem',
+ border: '1px solid var(--ifm-panel-border-color)',
+ },
+ description: {
+ fontSize: '0.8rem',
+ margin: 0,
+ },
+}
diff --git a/web/src/css/custom.css b/web/src/css/custom.css
index 7d196ab5a39..6e03d26dd9b 100755
--- a/web/src/css/custom.css
+++ b/web/src/css/custom.css
@@ -1268,6 +1268,10 @@ html[data-theme='dark'] .navbar-item-twitter:before {
/* New CSS */
+code {
+ border: 1px solid var(--ifm-hr-border-color);
+}
+
.tabs {
margin: 0;
font-size: 0.7rem;
diff --git a/web/src/data/extensions.json b/web/src/data/extensions.json
new file mode 100644
index 00000000000..f0201a70055
--- /dev/null
+++ b/web/src/data/extensions.json
@@ -0,0 +1,506 @@
+[
+ {
+ "name": "address_standardizer",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "Used to parse an address into constituent elements. Generally used to support geocoding address normalization step."
+ },
+ {
+ "name": "address_standardizer-3",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "Used to parse an address into constituent elements. Generally used to support geocoding address normalization step."
+ },
+ {
+ "name": "address_standardizer_data_us",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "Address Standardizer US dataset example"
+ },
+ {
+ "name": "address_standardizer_data_us-3",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "Address Standardizer US dataset example"
+ },
+ {
+ "name": "adminpack",
+ "schema": null,
+ "default_version": "2.0",
+ "installed_version": null,
+ "comment": "administrative functions for PostgreSQL"
+ },
+ {
+ "name": "amcheck",
+ "schema": null,
+ "default_version": "1.2",
+ "installed_version": null,
+ "comment": "functions for verifying relation integrity"
+ },
+ {
+ "name": "autoinc",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "functions for autoincrementing fields"
+ },
+ {
+ "name": "bloom",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "bloom access method - signature file based index"
+ },
+ {
+ "name": "btree_gin",
+ "schema": null,
+ "default_version": "1.3",
+ "installed_version": null,
+ "comment": "support for indexing common datatypes in GIN"
+ },
+ {
+ "name": "btree_gist",
+ "schema": null,
+ "default_version": "1.5",
+ "installed_version": null,
+ "comment": "support for indexing common datatypes in GiST"
+ },
+ {
+ "name": "citext",
+ "schema": null,
+ "default_version": "1.6",
+ "installed_version": null,
+ "comment": "data type for case-insensitive character strings"
+ },
+ {
+ "name": "cube",
+ "schema": null,
+ "default_version": "1.4",
+ "installed_version": null,
+ "comment": "data type for multidimensional cubes"
+ },
+ {
+ "name": "dblink",
+ "schema": null,
+ "default_version": "1.2",
+ "installed_version": null,
+ "comment": "connect to other PostgreSQL databases from within a database"
+ },
+ {
+ "name": "dict_int",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "text search dictionary template for integers"
+ },
+ {
+ "name": "dict_xsyn",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "text search dictionary template for extended synonym processing"
+ },
+ {
+ "name": "earthdistance",
+ "schema": null,
+ "default_version": "1.1",
+ "installed_version": null,
+ "comment": "calculate great-circle distances on the surface of the Earth"
+ },
+ {
+ "name": "file_fdw",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "foreign-data wrapper for flat file access"
+ },
+ {
+ "name": "fuzzystrmatch",
+ "schema": null,
+ "default_version": "1.1",
+ "installed_version": null,
+ "comment": "determine similarities and distance between strings"
+ },
+ {
+ "name": "hstore",
+ "schema": null,
+ "default_version": "1.6",
+ "installed_version": null,
+ "comment": "data type for storing sets of (key, value) pairs"
+ },
+ {
+ "name": "hstore_plpython3u",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "transform between hstore and plpython3u"
+ },
+ {
+ "name": "http",
+ "schema": "extensions",
+ "default_version": "1.3",
+ "installed_version": "1.3",
+ "comment": "HTTP client for PostgreSQL, allows web page retrieval inside the database."
+ },
+ {
+ "name": "insert_username",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "functions for tracking who changed a table"
+ },
+ {
+ "name": "intagg",
+ "schema": null,
+ "default_version": "1.1",
+ "installed_version": null,
+ "comment": "integer aggregator and enumerator (obsolete)"
+ },
+ {
+ "name": "intarray",
+ "schema": null,
+ "default_version": "1.2",
+ "installed_version": null,
+ "comment": "functions, operators, and index support for 1-D arrays of integers"
+ },
+ {
+ "name": "isn",
+ "schema": null,
+ "default_version": "1.2",
+ "installed_version": null,
+ "comment": "data types for international product numbering standards"
+ },
+ {
+ "name": "jsonb_plpython3u",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "transform between jsonb and plpython3u"
+ },
+ {
+ "name": "lo",
+ "schema": null,
+ "default_version": "1.1",
+ "installed_version": null,
+ "comment": "Large Object maintenance"
+ },
+ {
+ "name": "ltree",
+ "schema": null,
+ "default_version": "1.1",
+ "installed_version": null,
+ "comment": "data type for hierarchical tree-like structures"
+ },
+ {
+ "name": "ltree_plpython3u",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "transform between ltree and plpython3u"
+ },
+ {
+ "name": "moddatetime",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "functions for tracking last modification time"
+ },
+ {
+ "name": "pageinspect",
+ "schema": null,
+ "default_version": "1.7",
+ "installed_version": null,
+ "comment": "inspect the contents of database pages at a low level"
+ },
+ {
+ "name": "pg_buffercache",
+ "schema": null,
+ "default_version": "1.3",
+ "installed_version": null,
+ "comment": "examine the shared buffer cache"
+ },
+ {
+ "name": "pg_cron",
+ "schema": "extensions",
+ "default_version": "1.3",
+ "installed_version": "1.3",
+ "comment": "Job scheduler for PostgreSQL"
+ },
+ {
+ "name": "pg_freespacemap",
+ "schema": null,
+ "default_version": "1.2",
+ "installed_version": null,
+ "comment": "examine the free space map (FSM)"
+ },
+ {
+ "name": "pg_prewarm",
+ "schema": null,
+ "default_version": "1.2",
+ "installed_version": null,
+ "comment": "prewarm relation data"
+ },
+ {
+ "name": "pg_stat_statements",
+ "schema": null,
+ "default_version": "1.7",
+ "installed_version": null,
+ "comment": "track execution statistics of all SQL statements executed"
+ },
+ {
+ "name": "pg_trgm",
+ "schema": null,
+ "default_version": "1.4",
+ "installed_version": null,
+ "comment": "text similarity measurement and index searching based on trigrams"
+ },
+ {
+ "name": "pg_visibility",
+ "schema": null,
+ "default_version": "1.2",
+ "installed_version": null,
+ "comment": "examine the visibility map (VM) and page-level visibility info"
+ },
+ {
+ "name": "pgaudit",
+ "schema": null,
+ "default_version": "1.4",
+ "installed_version": null,
+ "comment": "provides auditing functionality"
+ },
+ {
+ "name": "pgcrypto",
+ "schema": "extensions",
+ "default_version": "1.3",
+ "installed_version": "1.3",
+ "comment": "cryptographic functions"
+ },
+ {
+ "name": "pgjwt",
+ "schema": "extensions",
+ "default_version": "0.1.0",
+ "installed_version": "0.1.0",
+ "comment": "JSON Web Token API for Postgresql"
+ },
+ {
+ "name": "pgrowlocks",
+ "schema": null,
+ "default_version": "1.2",
+ "installed_version": null,
+ "comment": "show row-level locking information"
+ },
+ {
+ "name": "pgstattuple",
+ "schema": null,
+ "default_version": "1.5",
+ "installed_version": null,
+ "comment": "show tuple-level statistics"
+ },
+ {
+ "name": "pgtap",
+ "schema": null,
+ "default_version": "1.1.0",
+ "installed_version": null,
+ "comment": "Unit testing for PostgreSQL"
+ },
+ {
+ "name": "plcoffee",
+ "schema": null,
+ "default_version": "3.0alpha",
+ "installed_version": null,
+ "comment": "PL/CoffeeScript (v8) trusted procedural language"
+ },
+ {
+ "name": "pljava",
+ "schema": null,
+ "default_version": "1.6.0",
+ "installed_version": null,
+ "comment": "PL/Java procedural language (https://tada.github.io/pljava/)"
+ },
+ {
+ "name": "plls",
+ "schema": null,
+ "default_version": "3.0alpha",
+ "installed_version": null,
+ "comment": "PL/LiveScript (v8) trusted procedural language"
+ },
+ {
+ "name": "plpgsql",
+ "schema": "pg_catalog",
+ "default_version": "1.0",
+ "installed_version": "1.0",
+ "comment": "PL/pgSQL procedural language"
+ },
+ {
+ "name": "plpgsql_check",
+ "schema": null,
+ "default_version": "1.11",
+ "installed_version": null,
+ "comment": "extended check for plpgsql functions"
+ },
+ {
+ "name": "plpython3u",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "PL/Python3U untrusted procedural language"
+ },
+ {
+ "name": "plv8",
+ "schema": null,
+ "default_version": "3.0alpha",
+ "installed_version": null,
+ "comment": "PL/JavaScript (v8) trusted procedural language"
+ },
+ {
+ "name": "postgis",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "PostGIS geometry and geography spatial types and functions"
+ },
+ {
+ "name": "postgis-3",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "PostGIS geometry and geography spatial types and functions"
+ },
+ {
+ "name": "postgis_raster",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "PostGIS raster types and functions"
+ },
+ {
+ "name": "postgis_raster-3",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "PostGIS raster types and functions"
+ },
+ {
+ "name": "postgis_sfcgal",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "PostGIS SFCGAL functions"
+ },
+ {
+ "name": "postgis_sfcgal-3",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "PostGIS SFCGAL functions"
+ },
+ {
+ "name": "postgis_tiger_geocoder",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "PostGIS tiger geocoder and reverse geocoder"
+ },
+ {
+ "name": "postgis_tiger_geocoder-3",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "PostGIS tiger geocoder and reverse geocoder"
+ },
+ {
+ "name": "postgis_topology",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "PostGIS topology spatial types and functions"
+ },
+ {
+ "name": "postgis_topology-3",
+ "schema": null,
+ "default_version": "3.1.1",
+ "installed_version": null,
+ "comment": "PostGIS topology spatial types and functions"
+ },
+ {
+ "name": "postgres_fdw",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "foreign-data wrapper for remote PostgreSQL servers"
+ },
+ {
+ "name": "refint",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "functions for implementing referential integrity (obsolete)"
+ },
+ {
+ "name": "seg",
+ "schema": null,
+ "default_version": "1.3",
+ "installed_version": null,
+ "comment": "data type for representing line segments or floating-point intervals"
+ },
+ {
+ "name": "sslinfo",
+ "schema": null,
+ "default_version": "1.2",
+ "installed_version": null,
+ "comment": "information about SSL certificates"
+ },
+ {
+ "name": "tablefunc",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "functions that manipulate whole tables, including crosstab"
+ },
+ {
+ "name": "tcn",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "Triggered change notifications"
+ },
+ {
+ "name": "tsm_system_rows",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "TABLESAMPLE method which accepts number of rows as a limit"
+ },
+ {
+ "name": "tsm_system_time",
+ "schema": null,
+ "default_version": "1.0",
+ "installed_version": null,
+ "comment": "TABLESAMPLE method which accepts time in milliseconds as a limit"
+ },
+ {
+ "name": "unaccent",
+ "schema": null,
+ "default_version": "1.1",
+ "installed_version": null,
+ "comment": "text search dictionary that removes accents"
+ },
+ {
+ "name": "uuid-ossp",
+ "schema": "extensions",
+ "default_version": "1.1",
+ "installed_version": "1.1",
+ "comment": "generate universally unique identifiers (UUIDs)"
+ },
+ {
+ "name": "xml2",
+ "schema": null,
+ "default_version": "1.1",
+ "installed_version": null,
+ "comment": "XPath querying and XSLT"
+ }
+]
\ No newline at end of file
diff --git a/web/static/_redirects b/web/static/_redirects
deleted file mode 100644
index d7e6987fd17..00000000000
--- a/web/static/_redirects
+++ /dev/null
@@ -1,41 +0,0 @@
-/docs/common/_CommonResponses /docs
-/docs/common/_DummyData /docs
-/docs/common/_FromFunction /docs
-/docs/common/filters/_adj /docs/client/ajv
-/docs/common/filters/_cd /docs/client/cd
-/docs/common/filters/_cs /docs/client/cs
-/docs/common/filters/_eq /docs/client/eq
-/docs/common/filters/_filter /docs/client/filter
-/docs/common/filters/_gt /docs/client/gt
-/docs/common/filters/_gte /docs/client/gte
-/docs/common/filters/_ilike /docs/client/ilike
-/docs/common/filters/_in /docs/client/in
-/docs/common/filters/_is /docs/client/is
-/docs/common/filters/_like /docs/client/like
-/docs/common/filters/_lt /docs/client/lt
-/docs/common/filters/_lte /docs/client/lte
-/docs/common/filters/_match /docs/client/match
-/docs/common/filters/_neq /docs/client/neq
-/docs/common/filters/_not /docs/client/not
-/docs/common/filters/_nxl /docs/client/nxl
-/docs/common/filters/_nxr /docs/client/nxr
-/docs/common/filters/_or /docs/client/or
-/docs/common/filters/_ova /docs/client/ov
-/docs/common/filters/_ovr /docs/client/ov
-/docs/common/filters/_sl /docs/client/sl
-/docs/common/filters/_sr /docs/client/sr
-/docs/library/authentication /docs/guides/auth
-/docs/library/delete /docs/client/delete
-/docs/library/get /docs/client/select
-/docs/library/getting-started /docs/client/supabase-client
-/docs/library/patch /docs/client/update
-/docs/library/post /docs/client/insert
-/docs/library/stored-procedures /docs/client/rpc
-/docs/library/subscribe /docs/client/subscribe
-/docs/library/user-management /docs/guides/auth
-/docs/postgres/postgres-intro /docs/postgres/server/about
-/docs/realtime/about /docs/realtime/server/about
-/docs/realtime/aws /docs/postgres/server/aws
-/docs/realtime/digitalocean /docs/postgres/server/digitalocean
-/docs/realtime/docker /docs/postgres/server/docker
-/docs/realtime/source /docs/postgres/server/about
\ No newline at end of file
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/web/static/img/auth-deep-dive-2-2.png b/web/static/img/auth-deep-dive-2-2.png
new file mode 100644
index 00000000000..0a42cd56c4f
Binary files /dev/null and b/web/static/img/auth-deep-dive-2-2.png differ
diff --git a/web/static/img/auth-deep-dive-2.png b/web/static/img/auth-deep-dive-2.png
new file mode 100644
index 00000000000..a874d05491e
Binary files /dev/null and b/web/static/img/auth-deep-dive-2.png differ
diff --git a/www/_blog/2020-10-30-improved-dx.mdx b/www/_blog/2020-10-30-improved-dx.mdx
index c58786cf7ca..bd2585cf2ae 100644
--- a/www/_blog/2020-10-30-improved-dx.mdx
+++ b/www/_blog/2020-10-30-improved-dx.mdx
@@ -18,9 +18,9 @@ Today we're releasing [supabase-js](https://github.com/supabase/supabase-js) ver
### New Docs
-Before digging into the improvements, we're excited to point out our new [developer docs](/docs/client/supabase-client). While they're still a work in progress, here are some things we think you'll like:
+Before digging into the improvements, we're excited to point out our new [developer docs](/docs/reference/javascript/supabase-client). While they're still a work in progress, here are some things we think you'll like:
-- The [Reference Docs](/docs/client/supabase-client) are auto-generated from our TypeScript definitions and then enriched with examples. This forces us to document our code and makes it easier to keep everything in sync.
+- The [Reference Docs](/docs/reference/javascript/supabase-client) are auto-generated from our TypeScript definitions and then enriched with examples. This forces us to document our code and makes it easier to keep everything in sync.
- We added placeholders for the other languages that the community is developing. They have already started with Python, C#, Dart, Rust, and Swift. Expect to see the docs filling up soon!
- We've added sections for all of the open source tools we use, including [Postgres](/docs/postgres/server/about), [PostgREST](/docs/postgrest/server/about), [GoTrue](/docs/gotrue/server/about), and [Realtime](/docs/realtime/server/about). We'll be filling these with lots of valuable information including self-hosting, benchmarks, and simple guides.
@@ -109,7 +109,7 @@ To summarise the steps:
1. Install the new version: `npm install @supabase/supabase-js@latest`
2. Update all your `body` constants to `data`
-3. Update all your `supabase.auth` functions with the new [Auth interface](/docs/client/auth-signup)
+3. Update all your `supabase.auth` functions with the new [Auth interface](/docs/reference/javascript/auth-signup)
### Get started
diff --git a/www/_blog/2020-11-02-supabase-alpha-october-2020.mdx b/www/_blog/2020-11-02-supabase-alpha-october-2020.mdx
index b47e57a0713..2b5fec6d553 100644
--- a/www/_blog/2020-11-02-supabase-alpha-october-2020.mdx
+++ b/www/_blog/2020-11-02-supabase-alpha-october-2020.mdx
@@ -56,7 +56,7 @@ One of the most requested Auth features was the ability to send magic links that
### Kaizen
-- We have new and improved [docs](https://supabase.io/docs/client/supabase-client).
+- We have new and improved [docs](https://supabase.io/docs/reference/javascript/supabase-client).
- We converted [realtime-js](https://github.com/supabase/realtime-js/) to TypeScript.
- Dashboard Performance: we heavily optimised our dashboard routes.
- With the help of the community, we [closed a lot of issues](https://github.com/orgs/supabase/projects/5) during Hacktoberfest.
diff --git a/www/_blog/2020-12-13-supabase-dashboard-performance.mdx b/www/_blog/2020-12-13-supabase-dashboard-performance.mdx
index 2cd55b2b6fc..d60e4830ec4 100644
--- a/www/_blog/2020-12-13-supabase-dashboard-performance.mdx
+++ b/www/_blog/2020-12-13-supabase-dashboard-performance.mdx
@@ -4,7 +4,7 @@ description: Improving the performance of the Supabase dashboard
author: Inian Parameshwaran
author_title: Supabase
author_url: https://github.com/inian
-author_image_url: https://avatars3.githubusercontent.com/u/2155545
+author_image_url: https://github.com/inian.png
authorURL: https://github.com/inian
tags:
- supabase
diff --git a/www/_blog/2021-01-02-supabase-beta-december-2020.mdx b/www/_blog/2021-01-02-supabase-beta-december-2020.mdx
index 0b26c546623..cd803b6b4b1 100644
--- a/www/_blog/2021-01-02-supabase-beta-december-2020.mdx
+++ b/www/_blog/2021-01-02-supabase-beta-december-2020.mdx
@@ -10,7 +10,7 @@ image: supabase-december-2020.png
thumb: supabase-december-2020.png
tags:
- supabase
-date: '01-02-2020'
+date: '01-02-2021'
---
After 10 hectic months of building, Supabase is now in Beta.
diff --git a/www/_blog/2021-02-27-cracking-postgres-interview.mdx b/www/_blog/2021-02-27-cracking-postgres-interview.mdx
index 11ec4a09692..5211f924494 100644
--- a/www/_blog/2021-02-27-cracking-postgres-interview.mdx
+++ b/www/_blog/2021-02-27-cracking-postgres-interview.mdx
@@ -109,7 +109,7 @@ CREATE POLICY "Individuals can only write their own messages." ON messages FOR
### Know how to do business logic on SQL/[PLPGSQL](https://www.postgresql.org/docs/current/plpgsql-overview.html#PLPGSQL-ADVANTAGES)
-PL/pgSQL is a procedural programming language that can be used to write functions inside of your database. It can be useful for making [remote procedure calls](https://supabase.io/docs/client/rpc) from an API. You can go as deep as you want here, since it's an entire programming language, but understanding the basics will really go a long way, and give you super powers when working with your data.
+PL/pgSQL is a procedural programming language that can be used to write functions inside of your database. It can be useful for making [remote procedure calls](https://supabase.io/docs/reference/javascript/rpc) from an API. You can go as deep as you want here, since it's an entire programming language, but understanding the basics will really go a long way, and give you super powers when working with your data.
You can use FUNCTIONs in combination with TRIGGERs to do cool stuff like have auto-updating `updated_at` columns on your data:
diff --git a/www/_blog/2021-03-02-supabase-beta-february-2021.mdx b/www/_blog/2021-03-02-supabase-beta-february-2021.mdx
index 8c7185f0126..a68f748f674 100644
--- a/www/_blog/2021-03-02-supabase-beta-february-2021.mdx
+++ b/www/_blog/2021-03-02-supabase-beta-february-2021.mdx
@@ -46,7 +46,7 @@ Writing SQL just got 10x easier. We added autocomplete to the SQL editor, includ
### Auth Redirects
-Redirect your users to specific route within your site on [`signIn()`](https://supabase.io/docs/client/auth-signin#sign-in-with-redirect) and [`signUp()`](https://supabase.io/docs/client/auth-signup#sign-up-with-redirect).
+Redirect your users to specific route within your site on [`signIn()`](https://supabase.io/docs/reference/javascript/auth-signin#sign-in-with-redirect) and [`signUp()`](https://supabase.io/docs/reference/javascript/auth-signup#sign-up-with-redirect).

diff --git a/www/_blog/2021-03-05-postgres-as-a-cron-server.mdx b/www/_blog/2021-03-05-postgres-as-a-cron-server.mdx
index c9c90fe0cfe..1994fa2161f 100644
--- a/www/_blog/2021-03-05-postgres-as-a-cron-server.mdx
+++ b/www/_blog/2021-03-05-postgres-as-a-cron-server.mdx
@@ -1,7 +1,7 @@
---
title: Postgres as a CRON Server
description: Running repetitive tasks with your Postgres database.
-author: Paul Copplestone
+author: paul_copplestone
author_title: Supabase
author_url: https://github.com/kiwicopple
author_image_url: https://github.com/kiwicopple.png
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/_blog/2021-03-11-using-supabase-replit.mdx b/www/_blog/2021-03-11-using-supabase-replit.mdx
index 98dcc0280ab..27af222a15d 100644
--- a/www/_blog/2021-03-11-using-supabase-replit.mdx
+++ b/www/_blog/2021-03-11-using-supabase-replit.mdx
@@ -91,7 +91,7 @@ const main = async() => {
main()
```
-Once this is working, if you want to learn more about the [query interface](https://supabase.io/docs/client/filter) you might want to try some of these challenges:
+Once this is working, if you want to learn more about the [query interface](https://supabase.io/docs/reference/javascript/filter) you might want to try some of these challenges:
```jsx
// 1. List all the countries in Antarctica
@@ -125,7 +125,7 @@ const { data, error } = await supabase
.select('name, country_id')
.neq('name', 'The shire')
-// full docs here: https://supabase.io/docs/client/filter
+// full docs here: https://supabase.io/docs/reference/javascript/filter
```
We look forward to showing off some more Supabase + Replit examples.
diff --git a/www/_blog/2021-03-22-In-The-Loop.mdx b/www/_blog/2021-03-22-In-The-Loop.mdx
new file mode 100644
index 00000000000..92c2f17bede
--- /dev/null
+++ b/www/_blog/2021-03-22-In-The-Loop.mdx
@@ -0,0 +1,41 @@
+---
+title: Developers stay up to date with intheloop.dev
+description: Learn why Kevin is building intheloop.dev with Supabase
+author: rory_wilding
+image: intheloop-supabase.jpg
+thumb: intheloop-supabase.jpg
+tags:
+ - Supabase
+ - Postgres
+ - Open-source
+date: '03-22-2021'
+---
+
+Kevin Grüneberg is a freelance engineer who has been programming since he was 12 years old. His latest project, intheloop.dev, provides a single gateway for developers to stay up to date.
+
+## At the leading edge of Developer updates
+As a developer, Kevin loves to stay up to date with the latest technology. Within his network, he also finds himself the go-to person to help his colleagues stay up to speed by searching through Twitter, staying active in forums, and searching out different tech communities. He knows this insight will help others stay up to date at scale, so created intheloop.dev.
+
+Intheloop.dev is a single point of entry for developers to stay up to date on the topics they care about by aggregating feeds from various sources. It serves as an on-ramp to finding the communities you care about, monitor releases and change logs, critical tweets, and blogs of interest.
+
+Kevin is launching with coverage on three packages - React, Kotlin and Vite. He is also part of the [#buildinpublic](https://twitter.com/search?q=%23buildinpublic&src=typed_query) movement, In The Loop is open-source - you can [check it out on Github](https://github.com/kevcodez/intheloop). Kevin also developed open-source [Gotrue](https://github.com/supabase/gotrue-kt) and [PostgREST](https://github.com/supabase/postgrest-kt) Kotlin clients for Supabase.
+
+
+
+## Sometimes Firebase just isn't enough
+
+With over seven years of experience working with relational databases, Kevin knows how powerful Postgres is. Kevin is a Firebase user and knows first hand that he can build fast with Firebase. However, straightforward tasks in Postgres like count functionality, foreign key relations and database normalisation are either insanely difficult or impossible to achieve using Firebase. With Supabase, he gets the benefits of Postgres with the development pace of Firebase. Because he uses Supabase as the backend, it will be easy to add more features in future, like user accounts, when he is ready.
+
+## Supabase gives Developers Postgres Supapowers
+
+Kevin loves building with Supabase because of SQL and other Postgres features like constraints, views, and materialised views. Using all these features quickly and efficiently is amazing for Kevin when he knows Supabase is just as easy to integrate as Firebase.
+
+
+ Supabase building on top of Postgres is a true superpower for developers. Postgres is already insanely powerful, and having much more functionality out of the box means I can build quickly and continue to scale
+
+
+## Launch fast and have confidence in adding more functionality with Supabase
+
+With Supabase, Kevin can focus on his idea's core rather than worrying about his tech stack. Intheloop is just getting started with additional features coming like notifications, following topics, and developers to build a personal digest which is where the real time-saver begins. With Postgres under the hood, Kevin can add functionality to delight his users without worrying about his data model. You can sign up to stay in the loop [here](https://intheloop.dev/).
+
+
diff --git a/www/components/AuthWidget/AuthComponentExample.tsx b/www/components/AuthWidget/AuthComponentExample.tsx
new file mode 100644
index 00000000000..8e176a60892
--- /dev/null
+++ b/www/components/AuthWidget/AuthComponentExample.tsx
@@ -0,0 +1,140 @@
+import { useState } from 'react'
+import { createClient } from '@supabase/supabase-js'
+import { Button, Card, Auth, Space, Tabs, Typography, IconCode, IconSearch } from '@supabase/ui'
+import CodeBlock from '../CodeBlock/CodeBlock'
+// Import Swiper React components
+import { Swiper, SwiperSlide } from 'swiper/react'
+
+const supabase = createClient(
+ 'https://rsnibhkhsbfnncjmwnkj.supabase.co',
+ 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYxNTIxNDE1MywiZXhwIjoxOTMwNzkwMTUzfQ.OQEbAaTfgDdLCCht251P2JRD3QDnui6nsU8N-tZA_Mc'
+)
+
+function AuthComponentExample() {
+ // store API swiper instance
+ const [imageSwiper, setImageSwiper] = useState(undefined)
+ const [imageSwiperActiveIndex, setImageSwiperActiveIndex] = useState(0)
+
+ function handleNavChange(e: number) {
+ console.log(e)
+ setImageSwiperActiveIndex(e)
+ // @ts-ignore
+ imageSwiper.slideTo(e)
+ }
+
+ const AuthContainer = (props: any) => {
+ const { user } = Auth.useUser()
+ if (user) {
+ return (
+ <>
+ Signed in: {user.email}
+
+ >
+ )
+ }
+ return props.children
+ }
+
+ return (
+