diff --git a/apps/docs/next.config.mjs b/apps/docs/next.config.mjs index 682af108190..93b3cd0df9b 100644 --- a/apps/docs/next.config.mjs +++ b/apps/docs/next.config.mjs @@ -57,6 +57,7 @@ const nextConfig = { 'weweb-changelog.ghost.io', 'img.youtube.com', 'archbee-image-uploads.s3.amazonaws.com', + 'obuldanrptloktxcffvn.supabase.co', ], }, experimental: { diff --git a/apps/docs/pages/index.mdx b/apps/docs/pages/index.mdx index 68b70f43e4b..77529472c4e 100644 --- a/apps/docs/pages/index.mdx +++ b/apps/docs/pages/index.mdx @@ -9,6 +9,8 @@ import { IconPlay, TextLink, } from 'ui' +import { LWAnnouncement } from 'ui' + import HomeMenuIconPicker from '~/components/Navigation/NavigationMenu/HomeMenuIconPicker' export const meta = { @@ -20,6 +22,9 @@ export const meta = {
+
+ +
## Products diff --git a/apps/docs/public/archive/supabase-dark.svg b/apps/docs/public/archive/supabase-dark.svg new file mode 100644 index 00000000000..9e96fab4ddc --- /dev/null +++ b/apps/docs/public/archive/supabase-dark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/archive/supabase-light.svg b/apps/docs/public/archive/supabase-light.svg new file mode 100644 index 00000000000..60cbc71dc7c --- /dev/null +++ b/apps/docs/public/archive/supabase-light.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/docs/public/favicon.ico b/apps/docs/public/favicon.ico deleted file mode 100644 index 5c4d1dcc5cf..00000000000 Binary files a/apps/docs/public/favicon.ico and /dev/null differ diff --git a/apps/docs/public/favicon.png b/apps/docs/public/favicon.png deleted file mode 100644 index e217fec5c6b..00000000000 Binary files a/apps/docs/public/favicon.png and /dev/null differ diff --git a/apps/docs/public/favicon/android-chrome-192x192.png b/apps/docs/public/favicon/android-chrome-192x192.png deleted file mode 100644 index c0ac2bb1cdb..00000000000 Binary files a/apps/docs/public/favicon/android-chrome-192x192.png and /dev/null differ diff --git a/apps/docs/public/favicon/android-chrome-512x512.png b/apps/docs/public/favicon/android-chrome-512x512.png deleted file mode 100644 index 1bdeaa23bb8..00000000000 Binary files a/apps/docs/public/favicon/android-chrome-512x512.png and /dev/null differ diff --git a/apps/docs/public/favicon/android-icon-144x144.png b/apps/docs/public/favicon/android-icon-144x144.png index 4aa46d4d25d..e34cdc489bf 100644 Binary files a/apps/docs/public/favicon/android-icon-144x144.png and b/apps/docs/public/favicon/android-icon-144x144.png differ diff --git a/apps/docs/public/favicon/android-icon-192x192.png b/apps/docs/public/favicon/android-icon-192x192.png index 7583d2035e3..3779f7008a4 100644 Binary files a/apps/docs/public/favicon/android-icon-192x192.png and b/apps/docs/public/favicon/android-icon-192x192.png differ diff --git a/apps/docs/public/favicon/android-icon-36x36.png b/apps/docs/public/favicon/android-icon-36x36.png index 5e4eabec411..620f828d767 100644 Binary files a/apps/docs/public/favicon/android-icon-36x36.png and b/apps/docs/public/favicon/android-icon-36x36.png differ diff --git a/apps/docs/public/favicon/android-icon-48x48.png b/apps/docs/public/favicon/android-icon-48x48.png index f8d8a7d9c05..0918c9d5a5f 100644 Binary files a/apps/docs/public/favicon/android-icon-48x48.png and b/apps/docs/public/favicon/android-icon-48x48.png differ diff --git a/apps/docs/public/favicon/android-icon-72x72.png b/apps/docs/public/favicon/android-icon-72x72.png index e4418058cef..83dfc47bd21 100644 Binary files a/apps/docs/public/favicon/android-icon-72x72.png and b/apps/docs/public/favicon/android-icon-72x72.png differ diff --git a/apps/docs/public/favicon/android-icon-96x96.png b/apps/docs/public/favicon/android-icon-96x96.png index 0f1351f3670..5f1fda34086 100644 Binary files a/apps/docs/public/favicon/android-icon-96x96.png and b/apps/docs/public/favicon/android-icon-96x96.png differ diff --git a/apps/docs/public/favicon/apple-icon-114x114.png b/apps/docs/public/favicon/apple-icon-114x114.png index 4aa46d4d25d..f32fa5c91e5 100644 Binary files a/apps/docs/public/favicon/apple-icon-114x114.png and b/apps/docs/public/favicon/apple-icon-114x114.png differ diff --git a/apps/docs/public/favicon/apple-icon-120x120.png b/apps/docs/public/favicon/apple-icon-120x120.png index d2b0e50ef41..f740816a889 100644 Binary files a/apps/docs/public/favicon/apple-icon-120x120.png and b/apps/docs/public/favicon/apple-icon-120x120.png differ diff --git a/apps/docs/public/favicon/apple-icon-144x144.png b/apps/docs/public/favicon/apple-icon-144x144.png index 00a5d8b5180..e34cdc489bf 100644 Binary files a/apps/docs/public/favicon/apple-icon-144x144.png and b/apps/docs/public/favicon/apple-icon-144x144.png differ diff --git a/apps/docs/public/favicon/apple-icon-152x152.png b/apps/docs/public/favicon/apple-icon-152x152.png index 310532c4648..07dbf228a9a 100644 Binary files a/apps/docs/public/favicon/apple-icon-152x152.png and b/apps/docs/public/favicon/apple-icon-152x152.png differ diff --git a/apps/docs/public/favicon/apple-icon-180x180.png b/apps/docs/public/favicon/apple-icon-180x180.png index 2a80dbc2f68..bf1bfbf7f00 100644 Binary files a/apps/docs/public/favicon/apple-icon-180x180.png and b/apps/docs/public/favicon/apple-icon-180x180.png differ diff --git a/apps/docs/public/favicon/apple-icon-57x57.png b/apps/docs/public/favicon/apple-icon-57x57.png index e7b08eb605f..e24842ebed2 100644 Binary files a/apps/docs/public/favicon/apple-icon-57x57.png and b/apps/docs/public/favicon/apple-icon-57x57.png differ diff --git a/apps/docs/public/favicon/apple-icon-60x60.png b/apps/docs/public/favicon/apple-icon-60x60.png index 0615675e809..7075a8eb8c5 100644 Binary files a/apps/docs/public/favicon/apple-icon-60x60.png and b/apps/docs/public/favicon/apple-icon-60x60.png differ diff --git a/apps/docs/public/favicon/apple-icon-72x72.png b/apps/docs/public/favicon/apple-icon-72x72.png index e4418058cef..83dfc47bd21 100644 Binary files a/apps/docs/public/favicon/apple-icon-72x72.png and b/apps/docs/public/favicon/apple-icon-72x72.png differ diff --git a/apps/docs/public/favicon/apple-icon-76x76.png b/apps/docs/public/favicon/apple-icon-76x76.png index 9a76327f94b..283e804eee7 100644 Binary files a/apps/docs/public/favicon/apple-icon-76x76.png and b/apps/docs/public/favicon/apple-icon-76x76.png differ diff --git a/apps/docs/public/favicon/apple-icon-precomposed.png b/apps/docs/public/favicon/apple-icon-precomposed.png index 7583d2035e3..7d55e102305 100644 Binary files a/apps/docs/public/favicon/apple-icon-precomposed.png and b/apps/docs/public/favicon/apple-icon-precomposed.png differ diff --git a/apps/docs/public/favicon/apple-icon.png b/apps/docs/public/favicon/apple-icon.png index 7583d2035e3..7d55e102305 100644 Binary files a/apps/docs/public/favicon/apple-icon.png and b/apps/docs/public/favicon/apple-icon.png differ diff --git a/apps/docs/public/favicon/apple-touch-icon-114x114.png b/apps/docs/public/favicon/apple-touch-icon-114x114.png deleted file mode 100644 index 4aa46d4d25d..00000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-114x114.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-120x120.png b/apps/docs/public/favicon/apple-touch-icon-120x120.png deleted file mode 100644 index d2b0e50ef41..00000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-120x120.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-144x144.png b/apps/docs/public/favicon/apple-touch-icon-144x144.png deleted file mode 100644 index 00a5d8b5180..00000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-144x144.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-152x152.png b/apps/docs/public/favicon/apple-touch-icon-152x152.png deleted file mode 100644 index 310532c4648..00000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-152x152.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-57x57.png b/apps/docs/public/favicon/apple-touch-icon-57x57.png deleted file mode 100644 index 1314e02c744..00000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-57x57.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-60x60.png b/apps/docs/public/favicon/apple-touch-icon-60x60.png deleted file mode 100644 index 0615675e809..00000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-60x60.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-72x72.png b/apps/docs/public/favicon/apple-touch-icon-72x72.png deleted file mode 100644 index e4418058cef..00000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-72x72.png and /dev/null differ diff --git a/apps/docs/public/favicon/apple-touch-icon-76x76.png b/apps/docs/public/favicon/apple-touch-icon-76x76.png deleted file mode 100644 index 9a76327f94b..00000000000 Binary files a/apps/docs/public/favicon/apple-touch-icon-76x76.png and /dev/null differ diff --git a/apps/docs/public/favicon/favicon-128.png b/apps/docs/public/favicon/favicon-128.png deleted file mode 100644 index d5dca345802..00000000000 Binary files a/apps/docs/public/favicon/favicon-128.png and /dev/null differ diff --git a/apps/docs/public/favicon/favicon-16x16.png b/apps/docs/public/favicon/favicon-16x16.png index fa07282ee8d..9dc90100bf3 100644 Binary files a/apps/docs/public/favicon/favicon-16x16.png and b/apps/docs/public/favicon/favicon-16x16.png differ diff --git a/apps/docs/public/favicon/favicon-196x196.png b/apps/docs/public/favicon/favicon-196x196.png deleted file mode 100644 index adb05b43453..00000000000 Binary files a/apps/docs/public/favicon/favicon-196x196.png and /dev/null differ diff --git a/apps/docs/public/favicon/favicon-32x32.png b/apps/docs/public/favicon/favicon-32x32.png index 7fa29c547a6..b8fd7965f93 100644 Binary files a/apps/docs/public/favicon/favicon-32x32.png and b/apps/docs/public/favicon/favicon-32x32.png differ diff --git a/apps/docs/public/favicon/favicon-96x96.png b/apps/docs/public/favicon/favicon-96x96.png index 0f1351f3670..408eebc96d7 100644 Binary files a/apps/docs/public/favicon/favicon-96x96.png and b/apps/docs/public/favicon/favicon-96x96.png differ diff --git a/apps/docs/public/favicon/favicon.ico b/apps/docs/public/favicon/favicon.ico index 5c4d1dcc5cf..97615df1d2d 100644 Binary files a/apps/docs/public/favicon/favicon.ico and b/apps/docs/public/favicon/favicon.ico differ diff --git a/apps/docs/public/favicon/manifest.json b/apps/docs/public/favicon/manifest.json new file mode 100644 index 00000000000..3b557aab8c6 --- /dev/null +++ b/apps/docs/public/favicon/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "/android-icon-36x36.png", + "sizes": "36x36", + "type": "image/png", + "density": "0.75" + }, + { + "src": "/android-icon-48x48.png", + "sizes": "48x48", + "type": "image/png", + "density": "1.0" + }, + { + "src": "/android-icon-72x72.png", + "sizes": "72x72", + "type": "image/png", + "density": "1.5" + }, + { + "src": "/android-icon-96x96.png", + "sizes": "96x96", + "type": "image/png", + "density": "2.0" + }, + { + "src": "/android-icon-144x144.png", + "sizes": "144x144", + "type": "image/png", + "density": "3.0" + }, + { + "src": "/android-icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "density": "4.0" + } + ] +} diff --git a/apps/docs/public/favicon/ms-icon-144x144.png b/apps/docs/public/favicon/ms-icon-144x144.png index 00a5d8b5180..bcbff0884b1 100644 Binary files a/apps/docs/public/favicon/ms-icon-144x144.png and b/apps/docs/public/favicon/ms-icon-144x144.png differ diff --git a/apps/docs/public/favicon/ms-icon-150x150.png b/apps/docs/public/favicon/ms-icon-150x150.png index 4de1d9b1cc1..c61ccd6bc02 100644 Binary files a/apps/docs/public/favicon/ms-icon-150x150.png and b/apps/docs/public/favicon/ms-icon-150x150.png differ diff --git a/apps/docs/public/favicon/ms-icon-310x310.png b/apps/docs/public/favicon/ms-icon-310x310.png index 7ea95ae09c0..474d2d508f4 100644 Binary files a/apps/docs/public/favicon/ms-icon-310x310.png and b/apps/docs/public/favicon/ms-icon-310x310.png differ diff --git a/apps/docs/public/favicon/ms-icon-70x70.png b/apps/docs/public/favicon/ms-icon-70x70.png index 48f6391fcdc..c0f3a66542c 100644 Binary files a/apps/docs/public/favicon/ms-icon-70x70.png and b/apps/docs/public/favicon/ms-icon-70x70.png differ diff --git a/apps/docs/public/favicon/mstile-144x144.png b/apps/docs/public/favicon/mstile-144x144.png deleted file mode 100644 index 00a5d8b5180..00000000000 Binary files a/apps/docs/public/favicon/mstile-144x144.png and /dev/null differ diff --git a/apps/docs/public/favicon/mstile-150x150.png b/apps/docs/public/favicon/mstile-150x150.png deleted file mode 100644 index 4de1d9b1cc1..00000000000 Binary files a/apps/docs/public/favicon/mstile-150x150.png and /dev/null differ diff --git a/apps/docs/public/favicon/mstile-310x150.png b/apps/docs/public/favicon/mstile-310x150.png deleted file mode 100644 index b1121df62aa..00000000000 Binary files a/apps/docs/public/favicon/mstile-310x150.png and /dev/null differ diff --git a/apps/docs/public/favicon/mstile-310x310.png b/apps/docs/public/favicon/mstile-310x310.png deleted file mode 100644 index 7ea95ae09c0..00000000000 Binary files a/apps/docs/public/favicon/mstile-310x310.png and /dev/null differ diff --git a/apps/docs/public/favicon/mstile-70x70.png b/apps/docs/public/favicon/mstile-70x70.png deleted file mode 100644 index d5dca345802..00000000000 Binary files a/apps/docs/public/favicon/mstile-70x70.png and /dev/null differ diff --git a/apps/docs/public/img/supabase-logo-wordmark--dark.png b/apps/docs/public/img/supabase-logo-wordmark--dark.png index 821c42ce283..6b3fe698337 100644 Binary files a/apps/docs/public/img/supabase-logo-wordmark--dark.png and b/apps/docs/public/img/supabase-logo-wordmark--dark.png differ diff --git a/apps/docs/public/img/supabase-logo-wordmark--dark.svg b/apps/docs/public/img/supabase-logo-wordmark--dark.svg index 9e96fab4ddc..020bdceabf4 100644 --- a/apps/docs/public/img/supabase-logo-wordmark--dark.svg +++ b/apps/docs/public/img/supabase-logo-wordmark--dark.svg @@ -1,23 +1,27 @@ - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - + + + + + + diff --git a/apps/docs/public/img/supabase-logo-wordmark--light.png b/apps/docs/public/img/supabase-logo-wordmark--light.png index 0277fee2bbe..a01f8c96dd8 100644 Binary files a/apps/docs/public/img/supabase-logo-wordmark--light.png and b/apps/docs/public/img/supabase-logo-wordmark--light.png differ diff --git a/apps/docs/public/img/supabase-logo-wordmark--light.svg b/apps/docs/public/img/supabase-logo-wordmark--light.svg index 60cbc71dc7c..7640c30020c 100644 --- a/apps/docs/public/img/supabase-logo-wordmark--light.svg +++ b/apps/docs/public/img/supabase-logo-wordmark--light.svg @@ -1,23 +1,27 @@ - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - + + + + + + diff --git a/apps/docs/public/supabase-dark.svg b/apps/docs/public/supabase-dark.svg index 9e96fab4ddc..020bdceabf4 100644 --- a/apps/docs/public/supabase-dark.svg +++ b/apps/docs/public/supabase-dark.svg @@ -1,23 +1,27 @@ - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - + + + + + + diff --git a/apps/docs/public/supabase-light.svg b/apps/docs/public/supabase-light.svg index 60cbc71dc7c..7640c30020c 100644 --- a/apps/docs/public/supabase-light.svg +++ b/apps/docs/public/supabase-light.svg @@ -1,23 +1,27 @@ - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - + + + + + + diff --git a/apps/www/_blog/2023-08-07-hugging-face-supabase.mdx b/apps/www/_blog/2023-08-07-hugging-face-supabase.mdx new file mode 100644 index 00000000000..eb801f55fa1 --- /dev/null +++ b/apps/www/_blog/2023-08-07-hugging-face-supabase.mdx @@ -0,0 +1,228 @@ +--- +title: 'Hugging Face is now supported in Supabase' +description: "We've added support Hugging Face support in our Python Vector Client and Edge Functions." +launchweek: 8 +tags: + - launch-week + - announcements +date: '2023-08-07' +toc_depth: 3 +author: gregnr,oli_rice +image: launch-week-8/day-1/hugging-face-supabase-og.jpg +thumb: launch-week-8/day-1/hugging-face-supabase-thumb.jpg +--- + +Since launching our [Vector Toolkit](https://supabase.com/vector) a few months ago, the number of AI applications on Supabase has grown - a lot. Hundreds of new databases every week are using [pgvector](https://github.com/pgvector/pgvector). + +98% of those applications use OpenAI to store embeddings using the `text-embedding-ada-002` model. While OpenAI is easy, it’s not open source, which means it can’t be self-hosted. + +Our goal at Supabase is to [promote open source collaboration](https://supabase.com/docs/guides/getting-started/architecture#support-existing-tools), and [Hugging Face](https://huggingface.co/) is one of the open source communities we admire most. Today, we’re adding first-class support for Hugging Face, starting with embeddings. Why embeddings? Because this is one area where open source models are [measurably ahead](https://supabase.com/blog/fewer-dimensions-are-better-pgvector) for pgvector performance. + +We’ve added support in our [Python Vector Client](https://supabase.com/docs/guides/ai/python/api) and [Edge Functions](https://supabase.com/docs/guides/functions) (Deno/Javascript). Let’s start with Python. + +
+ +
+ +## Hugging Face with Python + +[supabase/vecs](https://github.com/supabase/vecs) is our Python client for vector projects. Today, we're releasing a new feature for vecs called "adapters". + +Adapters transform your input into a new format when upserting and querying. For example, you can split large text into smaller chunks, or transform it into embeddings. And, of course, Adapters have first-class support for HuggingFace models. + +As an example, let’s look at how we might adapt text input. If we're inserting large text documents, it might be a good idea to chunk the text into paragraphs using the ParagraphChunker before creating an embedding for each paragraph with the TextEmbedding adapter step. + +```python +import vecs +from vecs.adapter import Adapter, ParagraphChunker, TextEmbedding + +vx = vecs.create_client("postgresql://:@:/") + +# create a new collection with an associated adapter +docs = vx.get_or_create_collection( + name="docs", + # here comes the new part + adapter=Adapter( + [ + ParagraphChunker(skip_during_query=True), + TextEmbedding(model='Supabase/gte-small'), + ] + ) +) +``` + +In the example, we're using the `gte-small` model, but any model compatible with [sentence transformers](https://www.sbert.net/docs/pretrained_models.html) can be used in its place. + +Once the adapter is registered with the collection we can upsert data using plain text and records are automatically converted to vectors: + +```python +# Upsert +docs.upsert( + records=[ + ( + "vec0", + "the diameter of a 747 ...", # <- inserting text! + {"publish_year": 2019} + ) + ] +) +``` + +Similarly, queries are transparently converted into vectors: + +```python +# Search by text +docs.query(data="how many ping pong balls fit in a Boeing ...") + +# Results: [...] +``` + +## Hugging Face with Edge Functions + +AI/ML is primarily the domain of the Python community, but thanks to some amazing work by [Joshua](https://twitter.com/xenovacom) at Hugging Face, you can now run inference workloads in Deno/JavaScript. This is an exciting development. It opens up the world of AI/ML to millions of new developers. We’re hoping to accelerate this with better Hugging Face tooling within Supabase Edge Functions. + +Let’s step through a small demo where we accept some text, convert it into an embedding, and then store it in our Postgres database. You can create a new function with supabase functions new embed and fill it with the following code snippet: + +```ts +import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' +import { env, pipeline } from 'https://cdn.jsdelivr.net/npm/@xenova/transformers@2.5.0' +import { createClient } from 'https://esm.sh/@supabase/supabase-js@2' + +// Preparation for Deno runtime +env.useBrowserCache = false +env.allowLocalModels = false + +const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key') + +// Construct pipeline outside of serve for faster warm starts +const pipe = await pipeline('feature-extraction', 'Supabase/gte-small') + +// Deno Handler +serve(async (req) => { + const { input } = await req.json() + + // Generate the embedding from the user input + const output = await pipe(input, { + pooling: 'mean', + normalize: true, + }) + + // Get the embedding output + const embedding = Array.from(output.data) + + // Store the embedding + const { data, error } = await supabase.from('collections').insert({ embedding }) + + // Return the embedding + return new Response({ new_row: data }, { headers: { 'Content-Type': 'application/json' } }) +}) +``` + +Now run `supabase functions serve` and you’re ready to call your function locally: + +```bash +curl --request POST 'http://localhost:54321/functions/v1/embed' \ + --header 'Authorization: Bearer ANON_KEY' \ + --header 'Content-Type: application/json' \ + --data '{ "input": "hello world" }' +``` + +With just 40 lines of code, we’ve created an API route that can accept some user content, convert it to an embedding, store it in your database, and then return the database row as JSON. This is especially useful for sensitive data since you can run this entirely on your own infrastructure. + +Supabase also provides [Database Webhooks](https://supabase.com/docs/guides/database/webhooks) which can trigger an Edge Function any time a row is inserted. This means you can upload plain text to your database and use a background job to convert the text to an embedding. + +## Hugging Face from the browser + +One of the coolest ideas we’ve seen so far is the ability to support Hugging Face models directly in the browser. With sufficiently small models, you can embed them directly into your application and cut out an entire network hop. + +![Hugging Face from the browser example](/images/blog/launch-week-8/day-1/hugging-face-from-the-browser-middleware.png) + +This is great for search, where you might want to “debounce” the user query as they type. Of course, this is only helpful if you have a database that allows access from the browser. Fortunately, Supabase provides that functionality using Postgres Row Level Security and PostgREST: + +![Hugging Face from the browser with postgREST](/images/blog/launch-week-8/day-1/hugging-face-from-the-browser-postgrest.png) + +For example, if we were storing image embeddings inside our database, we could provide search functionality using a simple Postgres function, powered by pgvector: + +```sql +create function match_images ( + query_embedding vector(512), + match_threshold float, + match_count int +) +returns setof images +language sql stable +as $$ + select *, 1 - (image_embedding <=> query_embedding) as similarity + from images + where 1 - (image_embedding <=> query_embedding) > match_threshold + order by similarity desc + limit match_count; +$$; +``` + +Now, we can call that function directly from the browser using [supabase-js](https://supabase.com/docs/reference/javascript/installing): + +```js +let { data: images, error } = await supabase.rpc('match_images', { + query_embedding, + match_threshold, + match_count, +}) +``` + +Of course, even the [smallest](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2) quantized models in the [MTEB leaderboard](https://huggingface.co/spaces/mteb/leaderboard) are around 20 MB - so you won’t be seeing this on an e-commerce store any time soon. But for some web-based applications or browser extensions it’s an exciting prospect. + +Check out [this demo](https://huggingface.co/spaces/Xenova/semantic-image-search) for inspiration, which uses the Unsplash data set and provides image search functionality using natural language: + +![Hugging Face from the browser - demo](/images/blog/launch-week-8/day-1/hugging-face-from-the-browser-demo.png) + +## Choosing a Hugging Face model + +Supabase is mainly used to store embeddings, so that’s where we’re starting. Over time we’ll add more Hugging Face support - even beyond embeddings. To help you identify which Hugging Face model to use, we ran a detailed analysis and found that embeddings with [fewer dimensions are better](https://supabase.com/blog/fewer-dimensions-are-better-pgvector) within pgvector. Fewer dimensions have several advantages: + +1. They require less space in your database (saving you money!) +2. Retrieval is faster + +To simplify your choice we’ve shortlisted a few recommendations in the official [Supabase org on Hugging Face](https://huggingface.co/Supabase). The [gte-small](https://huggingface.co/Supabase/gte-small) model is the best (it even [outperforms OpenAI’s embedding model](https://huggingface.co/spaces/mteb/leaderboard) in some tasks), but it’s only trained on English text, so you’ll need to find another model if you have non-English text. + +Remember also, you can continue to use OpenAI for generative use cases. This means you get the best of both worlds - fast embeddings with Hugging Face and advanced AI with OpenAI’s GPT-3.5/4. + +## Plans for the future + +We’re in the early stages of development, and we have some exciting ideas to overcome the limitations of this initial release. + +### Reducing cold starts + +Cold-starts are the time it takes for the “initial load” of an Edge Function. Because the model needs to be downloaded to the Edge Function, could starts can take anywhere from ~2-6s (based on the model). Loading the initial model and building the pipeline usually contributes to it. We are experimenting with the idea of attaching a “read-only disk” of models to our [Edge Runtime](https://github.com/supabase/edge-runtime) which mitigate any download penalties. We’ll share more details about these optimizations in a future blog post. + +### Handling heavier workloads + +The current quotas provided by Edge Functions are sufficient for running common embedding models. Larger AI models and tasks may require extra memory, CPU, and wall-clock limits to run successfully. We will offer customizable compute resources for Edge Functions in the next few months. If you have a workload that may require extra resources [reach out](https://supabase.com/support) for early access. + +### Audio and image models + +Working with audio and image data in Edge Functions is a work in progress. AI models expect audio and image content to be decoded into their raw formats before performing inference, and this isn’t yet turn-key in a Deno environment. + +For example, the Whisper audio transcription model requires audio to be passed in as 32-bit floating point pulse-code modulation (PCM) data sampled at exactly 16000Hz. Assuming your audio is stored in an encoded format like MP3, you first need to both decode and possibly resample the data before Whisper can understand it. In the browser, the Web Audio API is available which Transformers.js uses for decoding, but this API isn’t currently available in a Deno environment. + +Images have the same challenge. Models like CLIP, which can generate embeddings from images, require images to be decoded into their raw RGBA values and sometimes resized. Transformers.js uses the Canvas API in the browser and `sharp` in Node.js to perform these operations, but Deno doesn’t yet have a turn-key solution (`sharp` uses Node.js C++ bindings). + +## Getting started + +If you’re a Python Dev, check out our [Hello World notebook](https://supabase.com/docs/guides/ai/quickstarts/hello-world). If you’re a JavaScript developer, check out our our [Text Embeddings docs](https://supabase.com/docs/guides/ai/quickstarts/generate-text-embeddings). + +And no matter your language preference, remember to jump into the [Hugging Face community](https://github.com/huggingface) and show your support. + +## More Launch Week 8 + +- [Launch Week 8](https://supabase.com/launch-week) +- [Coding the stars - an interactive constellation with Three.js and React Three Fiber](https://supabase.com/blog/interactive-constellation-threejs-react-three-fiber) +- [Why we'll stay remote](https://supabase.com/blog/why-supabase-remote) +- [Postgres Language Server](https://github.com/supabase/postgres_lsp) diff --git a/apps/www/components/Hero/Hero.tsx b/apps/www/components/Hero/Hero.tsx index 9ce53bff3a8..b415a09467c 100644 --- a/apps/www/components/Hero/Hero.tsx +++ b/apps/www/components/Hero/Hero.tsx @@ -3,28 +3,20 @@ import { useRouter } from 'next/router' import Telemetry, { TelemetryEvent } from '~/lib/telemetry' import { useTelemetryProps } from 'common/hooks/useTelemetryProps' import gaEvents from '~/lib/gaEvents' -import { Button, IconArrowRight, IconBookOpen } from 'ui' +import { Button, IconBookOpen } from 'ui' import SectionContainer from '~/components/Layouts/SectionContainer' import HeroFrameworks from './HeroFrameworks' import styles from './hero.module.css' import Image from 'next/image' -import { useEffect, useState } from 'react' +import LWAnnouncement from '../LaunchWeek/8/Releases/LWAnnouncement' const Hero = () => { const router = useRouter() - const [showAnnouncement, setShowAnnouncement] = useState(false) const telemetryProps = useTelemetryProps() const sendTelemetryEvent = async (event: TelemetryEvent) => { await Telemetry.sendEvent(event, telemetryProps, router) } - useEffect(() => { - if (typeof window !== undefined) { - const lw8AnnouncementKey = window.localStorage.getItem('announcement_SupabaseLaunchWeek8') - setShowAnnouncement(!!lw8AnnouncementKey) - } - }, [showAnnouncement]) - return (
@@ -33,25 +25,14 @@ const Hero = () => {
- {showAnnouncement && ( - - -
- Get your ticket -
- Launch Week 8 - August 7-11 - -
- - )} +
+ +

Build in a weekend @@ -116,7 +97,7 @@ const Hero = () => {

-
+
{
- + {
Join us daily at Twitter Spaces - Next up: Monday – Opening Day + Monday – Day 1
diff --git a/apps/www/components/LaunchWeek/8/LaunchWeekLogoHeader.tsx b/apps/www/components/LaunchWeek/8/LaunchWeekLogoHeader.tsx index cf61bb72778..cc154dbe2c5 100644 --- a/apps/www/components/LaunchWeek/8/LaunchWeekLogoHeader.tsx +++ b/apps/www/components/LaunchWeek/8/LaunchWeekLogoHeader.tsx @@ -1,20 +1,15 @@ import Link from 'next/link' -import CountdownComponent from './Countdown' -import { LW8_LAUNCH_DATE } from '../../../lib/constants' export function LaunchWeekLogoHeader() { return (
-
- -

Launch week 8

August 7th–11th, 2023 9:00 AM PT

-
+
Join us in a week of announcing new features.
Connect with GitHub to generate your unique ticket and contribute to the constellation. diff --git a/apps/www/components/LaunchWeek/8/Releases/LWAnnouncement.tsx b/apps/www/components/LaunchWeek/8/Releases/LWAnnouncement.tsx new file mode 100644 index 00000000000..69f03967e51 --- /dev/null +++ b/apps/www/components/LaunchWeek/8/Releases/LWAnnouncement.tsx @@ -0,0 +1,69 @@ +import React from 'react' +import { SmallCard } from './components' +import Link from 'next/link' +import Image from 'next/image' +import days from './lw8_data' + +const LWAnnouncement = ({ title }: { title?: string }) => { + const [_pre, d1, _d2, _d3, _d4, _d5] = days + + return ( +
+ ) +} + +export default LWAnnouncement diff --git a/apps/www/components/LaunchWeek/8/Releases/components/index.tsx b/apps/www/components/LaunchWeek/8/Releases/components/index.tsx index 53307c2cf42..4fb7a645636 100644 --- a/apps/www/components/LaunchWeek/8/Releases/components/index.tsx +++ b/apps/www/components/LaunchWeek/8/Releases/components/index.tsx @@ -1,7 +1,8 @@ -import { Badge } from 'ui' +import { Badge, ExpandableVideo } from 'ui' import Link from 'next/link' import CountdownComponent from '../../Countdown' +import Image from 'next/image' export const PencilSvg = () => ( @@ -81,10 +82,33 @@ export const HackernewsSvg = () => ( ) -export const SmallCard = ({ className, children }: { className?: string; children: any }) => ( +export const TwitterSpacesSvg = () => ( + + + + +) + +export const SmallCard = ({ + className, + innerClassName, + children, +}: { + className?: string + innerClassName?: string + children: any +}) => (
@@ -92,6 +116,7 @@ export const SmallCard = ({ className, children }: { className?: string; childre className={[ 'rounded-2xl text-sm text-[#9296AA] p-2 flex flex-row justify-between items-center backdrop-blur-md h-full', 'bg-[#030A0C]', + innerClassName, ].join(' ')} > {children} @@ -128,6 +153,8 @@ export const AccordionHeader = ({ shipped, publishedAt, shippable = true, + youtube_id, + videoThumbnail, }: { date: string day: number @@ -136,61 +163,99 @@ export const AccordionHeader = ({ shipped?: boolean publishedAt: string shippable?: boolean + youtube_id?: string + videoThumbnail?: string }) => (
-
- - {weekDay} - {date && ( - - ・ {date} - - )} - -
- {shippable && shipped && ( - - - Shipped +
+
+ + {weekDay} + {date && ( + + ・ {date} + + )} - - )} - {shipped && {title}} - {shippable && !shipped && ( - - + {shippable && shipped && ( + + + Shipped + + + )} + {shippable && !shipped && ( + + + + + + - {day === 1 && } - + {day === 2 && } + + )} +
+ {shippable && shipped && youtube_id && ( +
+ + } + /> +
)}
) +export const VideoPreviewTrigger = ({ title, thumbnail }: { title: string; thumbnail: string }) => ( +
+ {title} +
+
+ + + +
+ Video thumbnail +
+
+) + export const MultistepSectionHeader = ({ title, blog }: any) => { return (
@@ -253,6 +318,7 @@ export const SectionButtons = ({ github, url, hackernews, + twitter_spaces, mobileGrid, }: { blog?: string @@ -261,6 +327,7 @@ export const SectionButtons = ({ github?: string url?: string hackernews?: string + twitter_spaces?: string mobileGrid?: boolean }) => { return ( @@ -296,7 +363,7 @@ export const SectionButtons = ({ )} {!!github && ( - Github + GitHub
@@ -312,12 +379,20 @@ export const SectionButtons = ({ )} {hackernews && ( - Hackernews + Hacker News
)} + {twitter_spaces && ( + + Twitter Spaces +
+ +
+
+ )}
) } diff --git a/apps/www/components/LaunchWeek/8/Releases/index.tsx b/apps/www/components/LaunchWeek/8/Releases/index.tsx index e8392f56d30..24dc13fbe57 100644 --- a/apps/www/components/LaunchWeek/8/Releases/index.tsx +++ b/apps/www/components/LaunchWeek/8/Releases/index.tsx @@ -5,7 +5,7 @@ import { useBreakpoint } from 'common/hooks/useBreakpoint' import days, { WeekDayProps } from './lw8_data' import SectionContainer from '~/components/Layouts/SectionContainer' -import { AccordionHeader, CartTitle, SectionButtons, StyledArticleBadge } from './components' +import { AccordionHeader, CartTitle, SectionButtons } from './components' export const defaultEase = [0.25, 0.25, 0, 1] export const defaultDuratonIn = 0.25 @@ -98,11 +98,11 @@ export default function LW8Releases() { const publishedSections = days .filter( - (day: WeekDayProps) => day.d === 0 || Date.parse(day.publishedAt) <= Date.now() || showAll + (day: WeekDayProps) => Date.parse(day.publishedAt) <= Date.now() || day.shipped || showAll ) .map((day: WeekDayProps) => day.d.toString()) ?? [] - const day1Shipped = Date.parse(day1.publishedAt) <= Date.now() + const day1Shipped = true const day2Shipped = Date.parse(day2.publishedAt) <= Date.now() const day3Shipped = Date.parse(day3.publishedAt) <= Date.now() const day4Shipped = Date.parse(day4.publishedAt) <= Date.now() @@ -120,7 +120,7 @@ export default function LW8Releases() { chevronAlign="right" defaultValue={publishedSections} > -
+
{preRelease.steps.length > 0 && ( -
+
-
- {preRelease.steps[0]?.title} +
+ {preRelease.steps[0].title}

{preRelease.steps[0]?.description}

{preRelease.steps[0]?.bg_layers && preRelease.steps[0]?.bg_layers?.map( + (layer, i) => + !!layer.img && ( + + + + ) + )} + + +
+
+ {preRelease.steps[1].title} +

{preRelease.steps[1]?.description}

+
+ + {preRelease.steps[1]?.bg_layers && + preRelease.steps[1]?.bg_layers?.map( + (layer, i) => + !!layer.img && ( + + + + ) + )} + + +
+
+ {preRelease.steps[2].title} +

{preRelease.steps[2]?.description}

+
+ + {preRelease.steps[2]?.bg_layers && + preRelease.steps[2]?.bg_layers?.map( (layer, i) => !!layer.img && ( @@ -191,7 +286,7 @@ export default function LW8Releases() { )}
-
+
} - disabled={!day1Shipped} - className="h-[79px]" + disabled={true} + className="h-[79px] hover:cursor-default" id={day1.d.toString()} - > + > + {day1.steps.length > 0 && ( +
+ +
+
+ {day1.steps[0].title} +

{day1.steps[0]?.description}

+
+ + {day1.steps[0]?.bg_layers && + day1.steps[0]?.bg_layers?.map( + (layer, i) => + !!layer.img && ( + + + + ) + )} + +
+ )} +
{ return ( <> - +
diff --git a/apps/www/pages/launch-week/index.tsx b/apps/www/pages/launch-week/index.tsx index d7405a095ad..85c107ef529 100644 --- a/apps/www/pages/launch-week/index.tsx +++ b/apps/www/pages/launch-week/index.tsx @@ -14,6 +14,7 @@ import SectionContainer from '~/components/Layouts/SectionContainer' import { LaunchWeekLogoHeader } from '~/components/LaunchWeek/8/LaunchWeekLogoHeader' import { Meetup } from '~/components/LaunchWeek/8/LW8Meetups' import LW8CalloutsSection from '~/components/LaunchWeek/8/LW8CalloutsSection' +import LWAnnouncement from '~/components/LaunchWeek/8/Releases/LWAnnouncement' import { useTheme } from 'common/Providers' @@ -138,11 +139,14 @@ export default function TicketHome({ users, meetups }: Props) {
- +
-
+
+
+ +
https://supabase.com Latest news from Supabase en - Mon, 05 Jun 2023 16:00:00 GMT + Mon, 05 Jun 2023 22:00:00 GMT https://supabase.com/customers/berriai Berri AI Boosts Productivity by Migrating from AWS RDS to Supabase with pgvector https://supabase.com/customers/berriai Learn how Berri AI overcame challenges with self-hosting their vector database on AWS RDS and successfully migrated to Supabase. - Mon, 05 Jun 2023 16:00:00 GMT + Mon, 05 Jun 2023 22:00:00 GMT https://supabase.com/customers/markprompt Markprompt and Supabase - GDPR-Compliant AI Chatbots for Docs and Websites. https://supabase.com/customers/markprompt AI-powered chatbot platform, Markprompt, empowers developers to deliver efficient and GDPR-compliant prompt experiences on top of their content, by leveraging Supabase's secure and privacy-focused database and authentication solutions. - Tue, 16 May 2023 16:00:00 GMT + Tue, 16 May 2023 22:00:00 GMT https://supabase.com/customers/mendableai Mendable switches from Pinecone to Supabase for PostgreSQL vector embeddings. https://supabase.com/customers/mendableai How Mendable boosts efficiency and accuracy of chat powered search for documentation using Supabase with pgvector. - Thu, 04 May 2023 16:00:00 GMT + Thu, 04 May 2023 22:00:00 GMT https://supabase.com/customers/happyteams HappyTeams unlocks better performance and reduces cost with Supabase. https://supabase.com/customers/happyteams How a bootstrapped startup migrated from Heroku to Supabase in 30 minutes and never looked back. - Wed, 15 Feb 2023 16:00:00 GMT + Wed, 15 Feb 2023 23:00:00 GMT https://supabase.com/customers/xendit Xendit use Supabase and create a full solution shipped to production in less than one week. https://supabase.com/customers/xendit As a payment processor, Xendit are responsible for verifying that all transactions are legal. - Mon, 13 Feb 2023 16:00:00 GMT + Mon, 13 Feb 2023 23:00:00 GMT https://supabase.com/customers/replenysh Replenysh uses Supabase to implement OTP in less than 24 hours. https://supabase.com/customers/replenysh With Supabase, Replenysh gets a slick auth experience, reduces DevOps overhead, and continues to scale with Postgres. - Mon, 13 Feb 2023 16:00:00 GMT + Mon, 13 Feb 2023 23:00:00 GMT https://supabase.com/customers/mobbin How Mobbin migrated 200,000 users from Firebase for a better authentication experience. https://supabase.com/customers/mobbin Mobbin helps over 200,000 creators globally search and view the latest design patterns from well-known apps. - Mon, 13 Feb 2023 16:00:00 GMT + Mon, 13 Feb 2023 23:00:00 GMT https://supabase.com/customers/epsilon3 Epsilon3 digitize paper-based procedures in the space industry using telemetry data, simplifying testing and operations. https://supabase.com/customers/epsilon3 Epsilon3 uses Supabase to help teams execute secure and reliable operations in an industry where project spend runs into the billions. - Mon, 13 Feb 2023 16:00:00 GMT + Mon, 13 Feb 2023 23:00:00 GMT diff --git a/apps/www/public/favicon/android-chrome-192x192.png b/apps/www/public/favicon/android-chrome-192x192.png deleted file mode 100644 index c0ac2bb1cdb..00000000000 Binary files a/apps/www/public/favicon/android-chrome-192x192.png and /dev/null differ diff --git a/apps/www/public/favicon/android-chrome-512x512.png b/apps/www/public/favicon/android-chrome-512x512.png deleted file mode 100644 index 1bdeaa23bb8..00000000000 Binary files a/apps/www/public/favicon/android-chrome-512x512.png and /dev/null differ diff --git a/apps/www/public/favicon/android-icon-144x144.png b/apps/www/public/favicon/android-icon-144x144.png index 4aa46d4d25d..e34cdc489bf 100644 Binary files a/apps/www/public/favicon/android-icon-144x144.png and b/apps/www/public/favicon/android-icon-144x144.png differ diff --git a/apps/www/public/favicon/android-icon-192x192.png b/apps/www/public/favicon/android-icon-192x192.png index 7583d2035e3..3779f7008a4 100644 Binary files a/apps/www/public/favicon/android-icon-192x192.png and b/apps/www/public/favicon/android-icon-192x192.png differ diff --git a/apps/www/public/favicon/android-icon-36x36.png b/apps/www/public/favicon/android-icon-36x36.png index 5e4eabec411..620f828d767 100644 Binary files a/apps/www/public/favicon/android-icon-36x36.png and b/apps/www/public/favicon/android-icon-36x36.png differ diff --git a/apps/www/public/favicon/android-icon-48x48.png b/apps/www/public/favicon/android-icon-48x48.png index f8d8a7d9c05..0918c9d5a5f 100644 Binary files a/apps/www/public/favicon/android-icon-48x48.png and b/apps/www/public/favicon/android-icon-48x48.png differ diff --git a/apps/www/public/favicon/android-icon-72x72.png b/apps/www/public/favicon/android-icon-72x72.png index e4418058cef..83dfc47bd21 100644 Binary files a/apps/www/public/favicon/android-icon-72x72.png and b/apps/www/public/favicon/android-icon-72x72.png differ diff --git a/apps/www/public/favicon/android-icon-96x96.png b/apps/www/public/favicon/android-icon-96x96.png index 0f1351f3670..5f1fda34086 100644 Binary files a/apps/www/public/favicon/android-icon-96x96.png and b/apps/www/public/favicon/android-icon-96x96.png differ diff --git a/apps/www/public/favicon/apple-icon-114x114.png b/apps/www/public/favicon/apple-icon-114x114.png index 4aa46d4d25d..f32fa5c91e5 100644 Binary files a/apps/www/public/favicon/apple-icon-114x114.png and b/apps/www/public/favicon/apple-icon-114x114.png differ diff --git a/apps/www/public/favicon/apple-icon-120x120.png b/apps/www/public/favicon/apple-icon-120x120.png index d2b0e50ef41..f740816a889 100644 Binary files a/apps/www/public/favicon/apple-icon-120x120.png and b/apps/www/public/favicon/apple-icon-120x120.png differ diff --git a/apps/www/public/favicon/apple-icon-144x144.png b/apps/www/public/favicon/apple-icon-144x144.png index 00a5d8b5180..e34cdc489bf 100644 Binary files a/apps/www/public/favicon/apple-icon-144x144.png and b/apps/www/public/favicon/apple-icon-144x144.png differ diff --git a/apps/www/public/favicon/apple-icon-152x152.png b/apps/www/public/favicon/apple-icon-152x152.png index 310532c4648..07dbf228a9a 100644 Binary files a/apps/www/public/favicon/apple-icon-152x152.png and b/apps/www/public/favicon/apple-icon-152x152.png differ diff --git a/apps/www/public/favicon/apple-icon-180x180.png b/apps/www/public/favicon/apple-icon-180x180.png index 2a80dbc2f68..bf1bfbf7f00 100644 Binary files a/apps/www/public/favicon/apple-icon-180x180.png and b/apps/www/public/favicon/apple-icon-180x180.png differ diff --git a/apps/www/public/favicon/apple-icon-57x57.png b/apps/www/public/favicon/apple-icon-57x57.png index e7b08eb605f..e24842ebed2 100644 Binary files a/apps/www/public/favicon/apple-icon-57x57.png and b/apps/www/public/favicon/apple-icon-57x57.png differ diff --git a/apps/www/public/favicon/apple-icon-60x60.png b/apps/www/public/favicon/apple-icon-60x60.png index 0615675e809..7075a8eb8c5 100644 Binary files a/apps/www/public/favicon/apple-icon-60x60.png and b/apps/www/public/favicon/apple-icon-60x60.png differ diff --git a/apps/www/public/favicon/apple-icon-72x72.png b/apps/www/public/favicon/apple-icon-72x72.png index e4418058cef..83dfc47bd21 100644 Binary files a/apps/www/public/favicon/apple-icon-72x72.png and b/apps/www/public/favicon/apple-icon-72x72.png differ diff --git a/apps/www/public/favicon/apple-icon-76x76.png b/apps/www/public/favicon/apple-icon-76x76.png index 9a76327f94b..283e804eee7 100644 Binary files a/apps/www/public/favicon/apple-icon-76x76.png and b/apps/www/public/favicon/apple-icon-76x76.png differ diff --git a/apps/www/public/favicon/apple-icon-precomposed.png b/apps/www/public/favicon/apple-icon-precomposed.png index 7583d2035e3..7d55e102305 100644 Binary files a/apps/www/public/favicon/apple-icon-precomposed.png and b/apps/www/public/favicon/apple-icon-precomposed.png differ diff --git a/apps/www/public/favicon/apple-icon.png b/apps/www/public/favicon/apple-icon.png index 7583d2035e3..7d55e102305 100644 Binary files a/apps/www/public/favicon/apple-icon.png and b/apps/www/public/favicon/apple-icon.png differ diff --git a/apps/www/public/favicon/apple-touch-icon-114x114.png b/apps/www/public/favicon/apple-touch-icon-114x114.png deleted file mode 100644 index 4aa46d4d25d..00000000000 Binary files a/apps/www/public/favicon/apple-touch-icon-114x114.png and /dev/null differ diff --git a/apps/www/public/favicon/apple-touch-icon-120x120.png b/apps/www/public/favicon/apple-touch-icon-120x120.png deleted file mode 100644 index d2b0e50ef41..00000000000 Binary files a/apps/www/public/favicon/apple-touch-icon-120x120.png and /dev/null differ diff --git a/apps/www/public/favicon/apple-touch-icon-144x144.png b/apps/www/public/favicon/apple-touch-icon-144x144.png deleted file mode 100644 index 00a5d8b5180..00000000000 Binary files a/apps/www/public/favicon/apple-touch-icon-144x144.png and /dev/null differ diff --git a/apps/www/public/favicon/apple-touch-icon-152x152.png b/apps/www/public/favicon/apple-touch-icon-152x152.png deleted file mode 100644 index 310532c4648..00000000000 Binary files a/apps/www/public/favicon/apple-touch-icon-152x152.png and /dev/null differ diff --git a/apps/www/public/favicon/apple-touch-icon-57x57.png b/apps/www/public/favicon/apple-touch-icon-57x57.png deleted file mode 100644 index 1314e02c744..00000000000 Binary files a/apps/www/public/favicon/apple-touch-icon-57x57.png and /dev/null differ diff --git a/apps/www/public/favicon/apple-touch-icon-60x60.png b/apps/www/public/favicon/apple-touch-icon-60x60.png deleted file mode 100644 index 0615675e809..00000000000 Binary files a/apps/www/public/favicon/apple-touch-icon-60x60.png and /dev/null differ diff --git a/apps/www/public/favicon/apple-touch-icon-72x72.png b/apps/www/public/favicon/apple-touch-icon-72x72.png deleted file mode 100644 index e4418058cef..00000000000 Binary files a/apps/www/public/favicon/apple-touch-icon-72x72.png and /dev/null differ diff --git a/apps/www/public/favicon/apple-touch-icon-76x76.png b/apps/www/public/favicon/apple-touch-icon-76x76.png deleted file mode 100644 index 9a76327f94b..00000000000 Binary files a/apps/www/public/favicon/apple-touch-icon-76x76.png and /dev/null differ diff --git a/apps/www/public/favicon/defaults/android-chrome-192x192.png b/apps/www/public/favicon/defaults/android-chrome-192x192.png deleted file mode 100644 index 2f07282a59c..00000000000 Binary files a/apps/www/public/favicon/defaults/android-chrome-192x192.png and /dev/null differ diff --git a/apps/www/public/favicon/defaults/android-chrome-512x512.png b/apps/www/public/favicon/defaults/android-chrome-512x512.png deleted file mode 100644 index dbb0faea840..00000000000 Binary files a/apps/www/public/favicon/defaults/android-chrome-512x512.png and /dev/null differ diff --git a/apps/www/public/favicon/defaults/apple-touch-icon.png b/apps/www/public/favicon/defaults/apple-touch-icon.png deleted file mode 100644 index 8f4033b2a8b..00000000000 Binary files a/apps/www/public/favicon/defaults/apple-touch-icon.png and /dev/null differ diff --git a/apps/www/public/favicon/defaults/favicon-16x16.png b/apps/www/public/favicon/defaults/favicon-16x16.png deleted file mode 100644 index 29deaf6716e..00000000000 Binary files a/apps/www/public/favicon/defaults/favicon-16x16.png and /dev/null differ diff --git a/apps/www/public/favicon/defaults/favicon-32x32.png b/apps/www/public/favicon/defaults/favicon-32x32.png deleted file mode 100644 index e3b4277bf09..00000000000 Binary files a/apps/www/public/favicon/defaults/favicon-32x32.png and /dev/null differ diff --git a/apps/www/public/favicon/defaults/favicon.ico b/apps/www/public/favicon/defaults/favicon.ico deleted file mode 100644 index ea2f437d9db..00000000000 Binary files a/apps/www/public/favicon/defaults/favicon.ico and /dev/null differ diff --git a/apps/www/public/favicon/defaults/mstile-150x150.png b/apps/www/public/favicon/defaults/mstile-150x150.png deleted file mode 100644 index f2dfd904bf1..00000000000 Binary files a/apps/www/public/favicon/defaults/mstile-150x150.png and /dev/null differ diff --git a/apps/www/public/favicon/defaults/safari-pinned-tab.svg b/apps/www/public/favicon/defaults/safari-pinned-tab.svg deleted file mode 100644 index 72ab6e050cb..00000000000 --- a/apps/www/public/favicon/defaults/safari-pinned-tab.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - - - - - - diff --git a/apps/www/public/favicon/favicon-128.png b/apps/www/public/favicon/favicon-128.png deleted file mode 100644 index d5dca345802..00000000000 Binary files a/apps/www/public/favicon/favicon-128.png and /dev/null differ diff --git a/apps/www/public/favicon/favicon-16x16.png b/apps/www/public/favicon/favicon-16x16.png index fa07282ee8d..9dc90100bf3 100644 Binary files a/apps/www/public/favicon/favicon-16x16.png and b/apps/www/public/favicon/favicon-16x16.png differ diff --git a/apps/www/public/favicon/favicon-196x196.png b/apps/www/public/favicon/favicon-196x196.png deleted file mode 100644 index adb05b43453..00000000000 Binary files a/apps/www/public/favicon/favicon-196x196.png and /dev/null differ diff --git a/apps/www/public/favicon/favicon-32x32.png b/apps/www/public/favicon/favicon-32x32.png index 7fa29c547a6..b8fd7965f93 100644 Binary files a/apps/www/public/favicon/favicon-32x32.png and b/apps/www/public/favicon/favicon-32x32.png differ diff --git a/apps/www/public/favicon/favicon-96x96.png b/apps/www/public/favicon/favicon-96x96.png index 0f1351f3670..408eebc96d7 100644 Binary files a/apps/www/public/favicon/favicon-96x96.png and b/apps/www/public/favicon/favicon-96x96.png differ diff --git a/apps/www/public/favicon/favicon.ico b/apps/www/public/favicon/favicon.ico index 5c4d1dcc5cf..97615df1d2d 100644 Binary files a/apps/www/public/favicon/favicon.ico and b/apps/www/public/favicon/favicon.ico differ diff --git a/apps/www/public/favicon/manifest.json b/apps/www/public/favicon/manifest.json new file mode 100644 index 00000000000..3b557aab8c6 --- /dev/null +++ b/apps/www/public/favicon/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "/android-icon-36x36.png", + "sizes": "36x36", + "type": "image/png", + "density": "0.75" + }, + { + "src": "/android-icon-48x48.png", + "sizes": "48x48", + "type": "image/png", + "density": "1.0" + }, + { + "src": "/android-icon-72x72.png", + "sizes": "72x72", + "type": "image/png", + "density": "1.5" + }, + { + "src": "/android-icon-96x96.png", + "sizes": "96x96", + "type": "image/png", + "density": "2.0" + }, + { + "src": "/android-icon-144x144.png", + "sizes": "144x144", + "type": "image/png", + "density": "3.0" + }, + { + "src": "/android-icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "density": "4.0" + } + ] +} diff --git a/apps/www/public/favicon/ms-icon-144x144.png b/apps/www/public/favicon/ms-icon-144x144.png index 00a5d8b5180..bcbff0884b1 100644 Binary files a/apps/www/public/favicon/ms-icon-144x144.png and b/apps/www/public/favicon/ms-icon-144x144.png differ diff --git a/apps/www/public/favicon/ms-icon-150x150.png b/apps/www/public/favicon/ms-icon-150x150.png index 4de1d9b1cc1..c61ccd6bc02 100644 Binary files a/apps/www/public/favicon/ms-icon-150x150.png and b/apps/www/public/favicon/ms-icon-150x150.png differ diff --git a/apps/www/public/favicon/ms-icon-310x310.png b/apps/www/public/favicon/ms-icon-310x310.png index 7ea95ae09c0..474d2d508f4 100644 Binary files a/apps/www/public/favicon/ms-icon-310x310.png and b/apps/www/public/favicon/ms-icon-310x310.png differ diff --git a/apps/www/public/favicon/ms-icon-70x70.png b/apps/www/public/favicon/ms-icon-70x70.png index 48f6391fcdc..c0f3a66542c 100644 Binary files a/apps/www/public/favicon/ms-icon-70x70.png and b/apps/www/public/favicon/ms-icon-70x70.png differ diff --git a/apps/www/public/favicon/mstile-144x144.png b/apps/www/public/favicon/mstile-144x144.png deleted file mode 100644 index 00a5d8b5180..00000000000 Binary files a/apps/www/public/favicon/mstile-144x144.png and /dev/null differ diff --git a/apps/www/public/favicon/mstile-150x150.png b/apps/www/public/favicon/mstile-150x150.png deleted file mode 100644 index 4de1d9b1cc1..00000000000 Binary files a/apps/www/public/favicon/mstile-150x150.png and /dev/null differ diff --git a/apps/www/public/favicon/mstile-310x150.png b/apps/www/public/favicon/mstile-310x150.png deleted file mode 100644 index b1121df62aa..00000000000 Binary files a/apps/www/public/favicon/mstile-310x150.png and /dev/null differ diff --git a/apps/www/public/favicon/mstile-310x310.png b/apps/www/public/favicon/mstile-310x310.png deleted file mode 100644 index 7ea95ae09c0..00000000000 Binary files a/apps/www/public/favicon/mstile-310x310.png and /dev/null differ diff --git a/apps/www/public/favicon/mstile-70x70.png b/apps/www/public/favicon/mstile-70x70.png deleted file mode 100644 index d5dca345802..00000000000 Binary files a/apps/www/public/favicon/mstile-70x70.png and /dev/null differ diff --git a/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-from-the-browser-demo.png b/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-from-the-browser-demo.png new file mode 100644 index 00000000000..4393eca1f4c Binary files /dev/null and b/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-from-the-browser-demo.png differ diff --git a/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-from-the-browser-middleware.png b/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-from-the-browser-middleware.png new file mode 100644 index 00000000000..834947ed8d4 Binary files /dev/null and b/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-from-the-browser-middleware.png differ diff --git a/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-from-the-browser-postgrest.png b/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-from-the-browser-postgrest.png new file mode 100644 index 00000000000..2c525a9cc80 Binary files /dev/null and b/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-from-the-browser-postgrest.png differ diff --git a/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-supabase-og.jpg b/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-supabase-og.jpg new file mode 100644 index 00000000000..86601171091 Binary files /dev/null and b/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-supabase-og.jpg differ diff --git a/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-supabase-thumb.jpg b/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-supabase-thumb.jpg new file mode 100644 index 00000000000..cfee4bee182 Binary files /dev/null and b/apps/www/public/images/blog/launch-week-8/day-1/hugging-face-supabase-thumb.jpg differ diff --git a/apps/www/public/images/launchweek/8/day0/pg-server.png b/apps/www/public/images/launchweek/8/day0/pg-server.png new file mode 100644 index 00000000000..f588c01998a Binary files /dev/null and b/apps/www/public/images/launchweek/8/day0/pg-server.png differ diff --git a/apps/www/public/images/launchweek/8/day0/remote.png b/apps/www/public/images/launchweek/8/day0/remote.png new file mode 100644 index 00000000000..f3fef4f8882 Binary files /dev/null and b/apps/www/public/images/launchweek/8/day0/remote.png differ diff --git a/apps/www/public/images/launchweek/8/day0/why-we-stay-remote.svg b/apps/www/public/images/launchweek/8/day0/why-we-stay-remote.svg new file mode 100644 index 00000000000..3835ba111b4 --- /dev/null +++ b/apps/www/public/images/launchweek/8/day0/why-we-stay-remote.svg @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/www/public/images/launchweek/8/day1/day-01-thumb.jpg b/apps/www/public/images/launchweek/8/day1/day-01-thumb.jpg new file mode 100644 index 00000000000..c238ca71eab Binary files /dev/null and b/apps/www/public/images/launchweek/8/day1/day-01-thumb.jpg differ diff --git a/apps/www/public/images/launchweek/8/day1/hugging.svg b/apps/www/public/images/launchweek/8/day1/hugging.svg new file mode 100644 index 00000000000..95923496632 --- /dev/null +++ b/apps/www/public/images/launchweek/8/day1/hugging.svg @@ -0,0 +1,602 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/www/public/images/launchweek/8/day1/lw8-d1-yt-thumb.jpg b/apps/www/public/images/launchweek/8/day1/lw8-d1-yt-thumb.jpg new file mode 100644 index 00000000000..51e42f05979 Binary files /dev/null and b/apps/www/public/images/launchweek/8/day1/lw8-d1-yt-thumb.jpg differ diff --git a/apps/www/public/images/launchweek/8/lw8-yt-thumb.jpg b/apps/www/public/images/launchweek/8/lw8-yt-thumb.jpg new file mode 100644 index 00000000000..26c0286be49 Binary files /dev/null and b/apps/www/public/images/launchweek/8/lw8-yt-thumb.jpg differ diff --git a/apps/www/public/rss.xml b/apps/www/public/rss.xml index ff069b452e2..1e69b396f71 100644 --- a/apps/www/public/rss.xml +++ b/apps/www/public/rss.xml @@ -5,9 +5,23 @@ https://supabase.com Latest news from Supabase en - Thu, 03 Aug 2023 22:00:00 GMT + Sun, 06 Aug 2023 22:00:00 GMT + https://supabase.com/blog/hugging-face-supabase + Hugging Face is now supported in Supabase + https://supabase.com/blog/hugging-face-supabase + We've added support Hugging Face support in our Python Vector Client and Edge Functions. + Sun, 06 Aug 2023 22:00:00 GMT + + + https://supabase.com/blog/why-supabase-remote + Why we'll stay remote + https://supabase.com/blog/why-supabase-remote + Offices are making a comeback, just not at Supabase. + Fri, 04 Aug 2023 22:00:00 GMT + + https://supabase.com/blog/interactive-constellation-threejs-react-three-fiber Coding the stars - an interactive constellation with Three.js and React Three Fiber https://supabase.com/blog/interactive-constellation-threejs-react-three-fiber diff --git a/apps/www/styles/index.css b/apps/www/styles/index.css index 3cd425862d9..8e622721c87 100644 --- a/apps/www/styles/index.css +++ b/apps/www/styles/index.css @@ -392,6 +392,10 @@ launch week padding-bottom: 56.25%; } +.video-container.no-border { + @apply !border-none; +} + .video-container iframe { position: absolute; top: 0; diff --git a/packages/common/assets/images/supabase-logo-wordmark--dark.png b/packages/common/assets/images/supabase-logo-wordmark--dark.png index 821c42ce283..6b3fe698337 100644 Binary files a/packages/common/assets/images/supabase-logo-wordmark--dark.png and b/packages/common/assets/images/supabase-logo-wordmark--dark.png differ diff --git a/packages/common/assets/images/supabase-logo-wordmark--dark.svg b/packages/common/assets/images/supabase-logo-wordmark--dark.svg index 9e96fab4ddc..020bdceabf4 100644 --- a/packages/common/assets/images/supabase-logo-wordmark--dark.svg +++ b/packages/common/assets/images/supabase-logo-wordmark--dark.svg @@ -1,23 +1,27 @@ - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - + + + + + + diff --git a/packages/common/assets/images/supabase-logo-wordmark--light.png b/packages/common/assets/images/supabase-logo-wordmark--light.png index 0277fee2bbe..a01f8c96dd8 100644 Binary files a/packages/common/assets/images/supabase-logo-wordmark--light.png and b/packages/common/assets/images/supabase-logo-wordmark--light.png differ diff --git a/packages/common/assets/images/supabase-logo-wordmark--light.svg b/packages/common/assets/images/supabase-logo-wordmark--light.svg index 60cbc71dc7c..7640c30020c 100644 --- a/packages/common/assets/images/supabase-logo-wordmark--light.svg +++ b/packages/common/assets/images/supabase-logo-wordmark--light.svg @@ -1,23 +1,27 @@ - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - + + + + + + diff --git a/packages/ui/src/components/ExpandableVideo/ExpandableVideo.tsx b/packages/ui/src/components/ExpandableVideo/ExpandableVideo.tsx index 350ca3f6a78..5966ec25db1 100644 --- a/packages/ui/src/components/ExpandableVideo/ExpandableVideo.tsx +++ b/packages/ui/src/components/ExpandableVideo/ExpandableVideo.tsx @@ -1,13 +1,14 @@ import { useBreakpoint } from 'common' import Image from 'next/image' -import React from 'react' +import React, { ReactNode } from 'react' import { IconPlay, Modal } from 'ui' interface ExpandableVideoProps { - imgUrl: string videoId: string + imgUrl?: string imgOverlayText?: string imgAltText?: string + trigger?: ReactNode } export function ExpandableVideo({ @@ -15,6 +16,7 @@ export function ExpandableVideo({ videoId, imgOverlayText, imgAltText, + trigger, }: ExpandableVideoProps) { const [expandVideo, setExpandVideo] = React.useState(false) const isMobile = useBreakpoint(768) @@ -39,6 +41,26 @@ export function ExpandableVideo({ if (isMobile) setExpandVideo(false) }, [isMobile]) + const CliccablePreview = () => ( +
+
+ +

{imgOverlayText ?? 'Watch video guide'}

+
+ {imgAltText +
+ ) + return ( <> { // Only hide menu when clicking outside, not focusing outside @@ -59,7 +81,7 @@ export function ExpandableVideo({ }} size="xxlarge" > -
+
-
+