From 42fda2cef28a0f77cf526574d6294d484e1d660e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20Gr=C3=BCneberg?= Date: Wed, 19 Jul 2023 12:56:06 +0200 Subject: [PATCH 01/73] chore: remove Supabase auth emails from pricing page --- packages/shared-data/pricing.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/packages/shared-data/pricing.ts b/packages/shared-data/pricing.ts index e339ea72275..5e0d5c1b83a 100644 --- a/packages/shared-data/pricing.ts +++ b/packages/shared-data/pricing.ts @@ -204,17 +204,6 @@ export const pricing: Pricing = { }, usage_based: false, }, - { - title: 'Supabase Auth emails', - tooltips: { main: 'Rate limits do not apply to Custom SMTP' }, - plans: { - free: '30 / hour', - pro: '100 / hour', - team: '100 / hour', - enterprise: 'Contact Us', - }, - usage_based: false, - }, { title: 'Single Sign-On (SAML 2.0)', plans: { From 739f3d4a49921c811c154f55736d0955fa119362 Mon Sep 17 00:00:00 2001 From: Bo Lu Date: Tue, 25 Jul 2023 17:34:54 +1000 Subject: [PATCH 02/73] feat(docs): pull docs from external wrappers repo --- .../guides/database/extensions/wrappers.mdx | 13 +- .../database/extensions/wrappers/[slug].tsx | 178 ++++++++++++++++++ 2 files changed, 185 insertions(+), 6 deletions(-) create mode 100644 apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx diff --git a/apps/docs/pages/guides/database/extensions/wrappers.mdx b/apps/docs/pages/guides/database/extensions/wrappers.mdx index 5d99f88ea08..e19b099c1e3 100644 --- a/apps/docs/pages/guides/database/extensions/wrappers.mdx +++ b/apps/docs/pages/guides/database/extensions/wrappers.mdx @@ -60,12 +60,13 @@ A web interface for connecting to external data is coming to Supabase Studio in ## Integrations -- [Firebase](https://supabase.github.io/wrappers/firebase/) -- [Stripe](https://supabase.github.io/wrappers/stripe/) -- [BigQuery](https://supabase.github.io/wrappers/bigquery/) -- [AWS S3](https://supabase.github.io/wrappers/s3/) -- Airtable - Coming Soon -- Clickhouse - Coming Soon +- [Airtable](/docs/guides/database/extensions/wrappers/airtable) +- [AWS S3](/docs/guides/database/extensions/wrappers/s3) +- [BigQuery](/docs/guides/database/extensions/wrappers/bigquery) +- [ClickHouse](/docs/guides/database/extensions/wrappers/clickhouse) +- [Firebase](/docs/guides/database/extensions/wrappers/firebase) +- [Logflare](/docs/guides/database/extensions/wrappers/logflare) +- [Stripe](/docs/guides/database/extensions/wrappers/stripe) ## Resources diff --git a/apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx b/apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx new file mode 100644 index 00000000000..25249cecba4 --- /dev/null +++ b/apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx @@ -0,0 +1,178 @@ +import { CodeHikeConfig, remarkCodeHike } from '@code-hike/mdx' +import { GetStaticPaths, GetStaticProps } from 'next' +import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote' +import { serialize } from 'next-mdx-remote/serialize' +import { relative } from 'path' +import rehypeSlug from 'rehype-slug' +import remarkGfm from 'remark-gfm' +import codeHikeTheme from 'config/code-hike.theme.json' assert { type: 'json' } +import components from '~/components' +import Layout from '~/layouts/DefaultGuideLayout' +import { UrlTransformFunction, linkTransform } from '~/lib/mdx/plugins/rehypeLinkTransform' +import remarkMkDocsAdmonition from '~/lib/mdx/plugins/remarkAdmonition' +import { removeTitle } from '~/lib/mdx/plugins/remarkRemoveTitle' + +// We fetch these docs at build time from an external repo +const org = 'supabase' +const repo = 'wrappers' +const branch = 'main' +const docsDir = 'docs' +const externalSite = 'https://supabase.github.io/wrappers' + +// Each external docs page is mapped to a local page +const pageMap = [ + { + slug: 'airtable', + meta: { + title: 'Airtable', + }, + remoteFile: 'airtable.md', + }, + { + slug: 's3', + meta: { + title: 'AWS S3', + }, + remoteFile: 's3.md', + }, + { + slug: 'bigquery', + meta: { + title: 'BigQuery', + }, + remoteFile: 'bigquery.md', + }, + { + slug: 'clickhouse', + meta: { + title: 'ClickHouse', + }, + remoteFile: 'clickhouse.md', + }, + { + slug: 'firebase', + meta: { + title: 'Firebase', + }, + remoteFile: 'firebase.md', + }, + { + slug: 'logflare', + meta: { + title: 'Logflare', + }, + remoteFile: 'logflare.md', + }, + { + slug: 'stripe', + meta: { + title: 'Stripe', + }, + remoteFile: 'stripe.md', + }, +] + +interface WrappersDocsProps { + source: MDXRemoteSerializeResult + meta: { + title: string + description?: string + } +} + +export default function WrappersDocs({ source, meta }: WrappersDocsProps) { + return ( + + + + ) +} + +/** + * Fetch markdown from external repo and transform links + */ +export const getStaticProps: GetStaticProps = async ({ params }) => { + const page = pageMap.find(({ slug }) => slug === params.slug) + + if (!page) { + throw new Error(`No page mapping found for slug '${params.slug}'`) + } + + const { remoteFile, meta } = page + + const response = await fetch( + `https://raw.githubusercontent.com/${org}/${repo}/${branch}/${docsDir}/${remoteFile}` + ) + + const source = await response.text() + + const urlTransform: UrlTransformFunction = (url) => { + try { + const externalSiteUrl = new URL(externalSite) + + const placeholderHostname = 'placeholder' + const { hostname, pathname, hash } = new URL(url, `http://${placeholderHostname}`) + + // Don't modify a url with a FQDN or a url that's only a hash + if (hostname !== placeholderHostname || pathname === '/') { + return url + } + + const relativePage = ( + pathname.endsWith('.md') + ? pathname.replace(/\.md$/, '') + : relative(externalSiteUrl.pathname, pathname) + ).replace(/^\//, '') + + const page = pageMap.find(({ remoteFile }) => `${relativePage}.md` === remoteFile) + + // If we have a mapping for this page, use the mapped path + if (page) { + return page.slug + hash + } + + // If we don't have this page in our docs, link to original docs + return `${externalSite}/${relativePage}${hash}` + } catch (err) { + console.error('Error transforming markdown URL', err) + return url + } + } + + const codeHikeOptions: CodeHikeConfig = { + theme: codeHikeTheme, + lineNumbers: true, + showCopyButton: true, + skipLanguages: [], + autoImport: false, + } + + const mdxSource = await serialize(source, { + scope: { + chCodeConfig: codeHikeOptions, + }, + mdxOptions: { + remarkPlugins: [ + remarkGfm, + remarkMkDocsAdmonition, + [removeTitle, meta.title], + [remarkCodeHike, codeHikeOptions], + ], + rehypePlugins: [[linkTransform, urlTransform], rehypeSlug], + }, + }) + + return { props: { source: mdxSource, meta } } +} + +export const getStaticPaths: GetStaticPaths = async () => { + return { + paths: pageMap.map(({ slug }) => ({ + params: { + slug, + }, + })), + fallback: false, + } +} + From 5be9633d21eac411c70954e836564965547d2201 Mon Sep 17 00:00:00 2001 From: Bo Lu Date: Tue, 25 Jul 2023 19:41:26 +1000 Subject: [PATCH 03/73] fix: prettier code --- apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx b/apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx index 25249cecba4..9438e14ffce 100644 --- a/apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx +++ b/apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx @@ -175,4 +175,3 @@ export const getStaticPaths: GetStaticPaths = async () => { fallback: false, } } - From f651c359241cba7b86dcd1b6126d4ef3e8373724 Mon Sep 17 00:00:00 2001 From: Bo Lu Date: Thu, 27 Jul 2023 10:57:31 +1000 Subject: [PATCH 04/73] feat(docs): add emoji support --- apps/docs/package.json | 1 + .../database/extensions/wrappers/[slug].tsx | 2 ++ package-lock.json | 31 +++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/apps/docs/package.json b/apps/docs/package.json index 5d79d59dddd..e3710ea9ba6 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -97,6 +97,7 @@ "remark-admonitions": "^1.2.1", "remark-gfm": "^3.0.1", "remark-slug": "^7.0.1", + "remark-emoji": "^3.1.2", "shiki": "^0.11.1", "sse.js": "^0.6.1", "ui": "*", diff --git a/apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx b/apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx index 9438e14ffce..81beffacd4b 100644 --- a/apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx +++ b/apps/docs/pages/guides/database/extensions/wrappers/[slug].tsx @@ -5,6 +5,7 @@ import { serialize } from 'next-mdx-remote/serialize' import { relative } from 'path' import rehypeSlug from 'rehype-slug' import remarkGfm from 'remark-gfm' +import emoji from 'remark-emoji' import codeHikeTheme from 'config/code-hike.theme.json' assert { type: 'json' } import components from '~/components' import Layout from '~/layouts/DefaultGuideLayout' @@ -155,6 +156,7 @@ export const getStaticProps: GetStaticProps = async ({ params remarkPlugins: [ remarkGfm, remarkMkDocsAdmonition, + emoji, [removeTitle, meta.title], [remarkCodeHike, codeHikeOptions], ], diff --git a/package-lock.json b/package-lock.json index 084b2d064df..b2312485765 100644 --- a/package-lock.json +++ b/package-lock.json @@ -87,6 +87,7 @@ "rehype-slug": "^5.1.0", "remark": "^14.0.2", "remark-admonitions": "^1.2.1", + "remark-emoji": "^3.1.2", "remark-gfm": "^3.0.1", "remark-slug": "^7.0.1", "shiki": "^0.11.1", @@ -19846,6 +19847,15 @@ "node": ">= 4" } }, + "node_modules/emoticon": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.0.1.tgz", + "integrity": "sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/encodeurl": { "version": "1.0.2", "dev": true, @@ -29421,6 +29431,14 @@ "node": ">=10.5.0" } }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, "node_modules/node-fetch": { "version": "2.6.11", "license": "MIT", @@ -34211,6 +34229,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark-emoji": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-3.1.2.tgz", + "integrity": "sha512-QwhAzNk27Ol64uV4z/3n55MKrNz9bhr8wg+mO5aGqIYDS+jUarS1d8Y0ZIeEBVhfGkXj6gGYM+727sOgAPvV/A==", + "dependencies": { + "emoticon": "^4.0.1", + "mdast-util-find-and-replace": "^2.2.2", + "node-emoji": "^1.11.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/remark-external-links": { "version": "8.0.0", "dev": true, From b77c020033b1b8e26e8cfc66ac9ccda5207ad3d0 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sun, 30 Jul 2023 16:58:24 +0800 Subject: [PATCH 05/73] remove `brand` from original color setup --- packages/config/ui.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/config/ui.config.js b/packages/config/ui.config.js index be34a9cf667..b9f24c04676 100644 --- a/packages/config/ui.config.js +++ b/packages/config/ui.config.js @@ -26,7 +26,7 @@ const excludedRadixColors = [ // generates fixed scales // based on the root/light mode version -const fixedOptions = ['scale', 'scaleA', 'brand'] +const fixedOptions = ['scale', 'scaleA'] function radixColorKeys() { let keys = Object.keys(radixUiColors) @@ -51,7 +51,7 @@ function radixColorKeys() { } function generateColorClasses() { - const brandColors = ['brand', 'scale', 'scaleA'] + const brandColors = ['scale', 'scaleA'] const colors = [...radixColorKeys(), ...brandColors] let mappedColors = {} From ab46d23d588c08f6a1a72c91da4afd5197905c2e Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sun, 30 Jul 2023 16:58:54 +0800 Subject: [PATCH 06/73] chore: update `brand-900` to `brand` --- .../CustomHTMLElements.utils.ts | 6 +- .../docs/components/GuidesTableOfContents.tsx | 2 +- apps/docs/components/HomePageCover.tsx | 2 +- apps/docs/components/LinkCard.tsx | 2 +- apps/docs/components/Navigation/Footer.tsx | 6 +- .../NavigationMenu/NavigationMenuCliList.tsx | 4 +- .../NavigationMenuGuideListItems.tsx | 14 +- .../NavigationMenuRefListItems.tsx | 2 +- .../NavigationMenu/TopNavBarRef.tsx | 2 +- apps/docs/components/Navigation/SideBar.tsx | 10 +- apps/docs/components/Pagination.tsx | 2 +- apps/docs/components/TableOfContents.tsx | 2 +- .../reference/CLICommandSection.tsx | 2 +- .../reference/RefFunctionSection.tsx | 2 +- apps/docs/layouts/SiteLayout.tsx | 2 +- apps/docs/layouts/guides/index.tsx | 2 +- .../docs/layouts/tutorials/TutorialLayout.tsx | 4 +- apps/docs/pages/index.mdx | 10 +- apps/docs/pages/reference/cli/config.tsx | 2 +- .../AuthWidget/AuthWidgetSection.tsx | 4 +- apps/www/components/CodeBlock/CodeBlock.tsx | 2 +- apps/www/components/Hero/Hero.tsx | 2 +- .../LaunchWeek/6/HackathonSection.tsx | 2 +- .../7/LaunchSection/ArticleButtonListItem.tsx | 2 +- .../7/LaunchSection/ProductButtonListItem.tsx | 2 +- .../LaunchWeek/7/LaunchSection/index.tsx | 6 +- .../8/Ticket/TicketCustomizationForm.tsx | 12 +- apps/www/components/MagnifiedProducts.tsx | 2 +- apps/www/components/Nav/Company.tsx | 2 +- apps/www/components/Nav/index.tsx | 14 +- .../components/Partners/PartnerLinkBox.tsx | 2 +- .../Pricing/ComputePricingModal.tsx | 2 +- apps/www/components/ProductIcon.tsx | 2 +- apps/www/components/Quote.tsx | 2 +- apps/www/components/SOC2RequestForm.tsx | 2 +- apps/www/components/ScrollProgress.tsx | 2 +- .../components/Sections/CommunitySlider.tsx | 2 +- .../Sections/CustomerQuotesSection.tsx | 2 +- .../Sections/ProductHeaderCentered.tsx | 2 +- .../components/Sections/TimedTabsSection.tsx | 2 +- apps/www/data/products/vector/pageData.tsx | 4 +- apps/www/layouts/comparison.tsx | 2 +- apps/www/pages/beta.tsx | 63 +++++---- apps/www/pages/blog/[slug].tsx | 2 +- apps/www/pages/careers/index.tsx | 12 +- apps/www/pages/customers/[slug].tsx | 4 +- .../pages/edge-functions/edge-functions.tsx | 2 +- apps/www/pages/launch-week/6/index.tsx | 22 ++-- apps/www/pages/legal/dpa.tsx | 2 +- apps/www/pages/partners/experts/[slug].tsx | 6 +- .../pages/partners/integrations/[slug].tsx | 6 +- .../www/pages/partners/integrations/index.tsx | 4 +- apps/www/pages/pricing/index.tsx | 16 +-- apps/www/pages/support.tsx | 16 +-- apps/www/styles/index.css | 4 +- .../src/components/Button/Button.module.css | 4 +- .../src/components/Command/Command.icons.tsx | 4 +- .../ui/src/components/Command/CommandMenu.tsx | 2 +- .../Command/GenerateSQL/SQLOutputActions.tsx | 4 +- .../ui/src/components/Form/Form.stories.tsx | 122 ++++-------------- .../src/components/Form/examples/AuthForm.tsx | 12 +- .../src/components/GlassPanel/GlassPanel.tsx | 2 +- .../ui/src/components/IconPanel/IconPanel.tsx | 10 +- .../ui/src/lib/theme/customThemeExample.ts | 2 +- packages/ui/src/lib/theme/defaultTheme.ts | 20 +-- studio/.storybook/preview.css | 4 +- .../grid/components/header/Header.tsx | 6 +- .../grid/components/header/RefreshButton.tsx | 2 +- .../Auth/AuthProvidersForm/ProviderForm.tsx | 4 +- .../Auth/Policies/PolicySelection.tsx | 2 +- .../interfaces/BillingV2/SpendCapModal.tsx | 2 +- .../Subscription/Tier/EnterpriseCard.tsx | 6 +- .../Subscription/Tier/SubscriptionTier.tsx | 2 +- .../Subscription/Tier/TierUpdateSidePanel.tsx | 6 +- .../BillingV2/Usage/Usage.constants.tsx | 2 +- .../Database/Backups/BackupsError.tsx | 2 +- .../Database/Backups/PITR/PITRNotice.tsx | 2 +- .../interfaces/Database/Roles/RoleRow.tsx | 4 +- .../Database/Schemas/SchemaGraph.tsx | 6 +- .../interfaces/Functions/CommandRender.tsx | 2 +- .../EdgeFunctionDetails.tsx | 4 +- .../Functions/EdgeFunctionsListItem.tsx | 2 +- .../Home/NewProjectPanel/APIKeys.tsx | 2 +- .../Home/NewProjectPanel/NewProjectPanel.tsx | 2 +- .../Organization/AuditLogs/AuditLogs.tsx | 2 +- .../Subscription/EnterpriseCard.tsx | 6 +- .../Subscription/PlanUpdateSidePanel.tsx | 6 +- .../Subscription/Subscription.tsx | 4 +- .../GeneralSettings/GeneralSettings.tsx | 2 +- .../OAuthApps/AuthorizedAppRow.tsx | 4 +- .../Organization/OAuthApps/OAuthAppRow.tsx | 6 +- .../Settings/Addons/CustomDomainSidePanel.tsx | 2 +- .../CustomDomainConfig/CustomDomainDelete.tsx | 2 +- .../CustomDomainConfig/CustomDomainVerify.tsx | 4 +- .../ProjectUpgradeAlert.tsx | 4 +- .../TransferProjectButton.tsx | 4 +- .../Settings/Vault/Secrets/SecretRow.tsx | 4 +- .../interfaces/Storage/CreateBucketModal.tsx | 2 +- .../interfaces/Storage/EditBucketModal.tsx | 2 +- .../components/interfaces/Support/Success.tsx | 4 +- .../ColumnEditor/ColumnEditor.tsx | 2 +- .../ColumnEditor/ColumnForeignKey.tsx | 6 +- .../ForeignKeySelector/ForeignKeySelector.tsx | 2 +- .../ForeignRowSelector/SelectorGrid.tsx | 2 +- .../SpreadSheetFileUpload.tsx | 2 +- studio/components/layouts/FunctionsLayout.tsx | 2 +- .../layouts/ProjectLayout/BuildingState.tsx | 2 +- .../FeedbackDropdown/FeedbackWidget.tsx | 4 +- .../ProjectLayout/ProjectPausedState.tsx | 2 +- .../layouts/ProjectLayout/RestoringState.tsx | 2 +- .../UpgradingState/UpgradingState.tsx | 2 +- .../ui/DisabledWarningDueToIncident.tsx | 2 +- .../components/ui/Logs/LogsExplorerHeader.tsx | 6 +- studio/components/ui/PasswordStrengthBar.tsx | 2 +- studio/hooks/misc/useStore.tsx | 2 +- studio/pages/join/index.tsx | 2 +- studio/pages/new/[slug].tsx | 2 +- .../[ref]/database/backups/scheduled.tsx | 2 +- .../project/[ref]/logs/explorer/templates.tsx | 2 +- .../pages/project/[ref]/reports/database.tsx | 8 +- .../[ref]/reports/query-performance.tsx | 2 +- .../pages/project/[ref]/settings/addons.tsx | 2 +- .../[ref]/settings/billing/invoices.tsx | 2 +- .../[ref]/settings/billing/subscription.tsx | 2 +- .../project/[ref]/settings/infrastructure.tsx | 2 +- studio/pages/support/new.tsx | 2 +- studio/pages/vercel/integrate.tsx | 2 +- studio/styles/code.scss | 6 +- studio/styles/date-picker.scss | 6 +- studio/styles/grid.scss | 10 +- studio/styles/react-data-grid-logs.scss | 4 +- studio/styles/ui.scss | 6 +- 132 files changed, 305 insertions(+), 412 deletions(-) diff --git a/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.ts b/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.ts index 844724a5466..337f48b2bbf 100644 --- a/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.ts +++ b/apps/docs/components/CustomHTMLElements/CustomHTMLElements.utils.ts @@ -89,13 +89,13 @@ export const highlightSelectedNavItem = (id: string) => { const navMenuItems = document.querySelectorAll('.function-link-item a') // find any currently active items and remove them - const currentActiveItems = document.querySelectorAll('.function-link-list .text-brand-900') - currentActiveItems.forEach((item) => item.classList.remove('text-brand-900')) + const currentActiveItems = document.querySelectorAll('.function-link-list .text-brand') + currentActiveItems.forEach((item) => item.classList.remove('text-brand')) // Add active class to the current item navMenuItems.forEach((item) => { if (item.href.split('/').at(-1) === id) { - item.classList.add('text-brand-900') + item.classList.add('text-brand') } }) } diff --git a/apps/docs/components/GuidesTableOfContents.tsx b/apps/docs/components/GuidesTableOfContents.tsx index 9d25121f661..553f3165452 100644 --- a/apps/docs/components/GuidesTableOfContents.tsx +++ b/apps/docs/components/GuidesTableOfContents.tsx @@ -46,7 +46,7 @@ const GuidesTableOfContents: FC = ({ list }) => {
  • diff --git a/apps/docs/components/HomePageCover.tsx b/apps/docs/components/HomePageCover.tsx index e760c411dc3..c45156c09cd 100644 --- a/apps/docs/components/HomePageCover.tsx +++ b/apps/docs/components/HomePageCover.tsx @@ -69,7 +69,7 @@ const HomePageCover = (props) => {
    - +

    Getting Started

    diff --git a/apps/docs/components/LinkCard.tsx b/apps/docs/components/LinkCard.tsx index e74ac68384a..6e22200bbda 100644 --- a/apps/docs/components/LinkCard.tsx +++ b/apps/docs/components/LinkCard.tsx @@ -14,7 +14,7 @@ export default function LinkCard({ }) { return ( -
    + {description ? ( <>

    {title}

    diff --git a/apps/docs/components/Navigation/Footer.tsx b/apps/docs/components/Navigation/Footer.tsx index 32f1b4f73db..6550b0f24ce 100644 --- a/apps/docs/components/Navigation/Footer.tsx +++ b/apps/docs/components/Navigation/Footer.tsx @@ -29,11 +29,7 @@ const Footer = () => ( {Icon && }

    {text}

    -
    + {ctaLabel} diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuCliList.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuCliList.tsx index deb8caf1f17..5821f1de362 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuCliList.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuCliList.tsx @@ -23,7 +23,7 @@ const NavigationMenuCliList = ({ currentLevel, setLevel, id }) => { return (
  • - + {icon && } {title} @@ -100,7 +100,7 @@ const NavigationMenuCliList = ({ currentLevel, setLevel, id }) => {
    diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideListItems.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideListItems.tsx index f264a4112b7..995bc5f6c1c 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideListItems.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideListItems.tsx @@ -19,7 +19,7 @@ const HeaderLink = React.memo(function HeaderLink(props: { className={[ ' ', !props.title && 'capitalize', - props.url === router.pathname ? 'text-brand-900' : 'hover:text-brand-900 text-scale-1200', + props.url === router.pathname ? 'text-brand' : 'hover:text-brand text-scale-1200', ].join(' ')} > {props.title ?? props.id} @@ -68,7 +68,7 @@ const ContentAccordionLink = React.memo(function ContentAccordionLink(props: any 'flex items-center gap-2', 'cursor-pointer transition text-sm', activeItem - ? 'text-brand-900 font-medium' + ? 'text-brand font-medium' : 'hover:text-scale-1200 dark:hover:text-scale-1100 text-scale-1000', ].join(' ')} parent={props.subItem.parent} @@ -97,8 +97,8 @@ const ContentAccordionLink = React.memo(function ContentAccordionLink(props: any className={[ 'cursor-pointer transition text-sm', subSubItem.url === router.pathname - ? 'text-brand-900' - : 'hover:text-brand-900 text-scale-1000', + ? 'text-brand' + : 'hover:text-brand text-scale-1000', ].join(' ')} > {subSubItem.name} @@ -124,7 +124,7 @@ const ContentLink = React.memo(function ContentLink(props: any) { className={[ 'cursor-pointer transition text-sm', props.url === router.pathname - ? 'text-brand-900' + ? 'text-brand' : 'hover:text-scale-1200 dark:hover:text-scale-1100 text-scale-1000', ].join(' ')} > @@ -152,7 +152,7 @@ const Content = (props) => {
    @@ -166,7 +166,7 @@ const Content = (props) => { -
    +
    diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx index a280bf07da6..07e9d7f3363 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx @@ -64,7 +64,7 @@ const FunctionLink = React.memo(function FunctionLink({ className={cn( 'cursor-pointer transition text-sm hover:text-scale-1200 gap-3 relative', isParent ? 'flex justify-between' : 'leading-3', - active ? 'text-brand-900' : 'text-scale-1000' + active ? 'text-brand' : 'text-scale-1000' )} > {icon && {icon}} diff --git a/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx b/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx index bd080d8e7c9..f8358d3d75d 100644 --- a/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/TopNavBarRef.tsx @@ -68,7 +68,7 @@ const TopNavBarRef: FC = () => { height={24} alt="Supabase Logo" /> - DOCS + DOCS
    {/* {router.asPath.includes('/reference/') && } */} diff --git a/apps/docs/components/Navigation/SideBar.tsx b/apps/docs/components/Navigation/SideBar.tsx index d679b7c7414..e76fa4954bf 100644 --- a/apps/docs/components/Navigation/SideBar.tsx +++ b/apps/docs/components/Navigation/SideBar.tsx @@ -83,7 +83,7 @@ const SideBar = ({ menuItems = [] }: { menuItems: any }) => { 'py-1.5 px-5 rounded text-sm transition', `${ item.url === asPath - ? 'bg-scale-200 text-brand-900' + ? 'bg-scale-200 text-brand' : 'text-scale-1100 hover:text-scale-1200' }`, ].join(' ')} @@ -109,7 +109,7 @@ const SideBar = ({ menuItems = [] }: { menuItems: any }) => { size={14} strokeWidth={2} /> - + {group.label} @@ -124,7 +124,7 @@ const SideBar = ({ menuItems = [] }: { menuItems: any }) => { 'py-1.5 px-5 rounded text-sm transition', `${ section.url === asPath - ? 'bg-scale-200 text-brand-900' + ? 'bg-scale-200 text-brand' : 'text-scale-1100 hover:text-scale-1200' }`, ].join(' ')} @@ -150,7 +150,7 @@ const SideBar = ({ menuItems = [] }: { menuItems: any }) => { size={14} strokeWidth={2} /> - + {section.name} @@ -164,7 +164,7 @@ const SideBar = ({ menuItems = [] }: { menuItems: any }) => { 'py-1.5 ml-4 px-5 rounded text-sm transition', `${ item.url === asPath - ? 'bg-scale-200 text-brand-900' + ? 'bg-scale-200 text-brand' : 'text-scale-1100 hover:text-scale-1200' }`, ].join(' ')} diff --git a/apps/docs/components/Pagination.tsx b/apps/docs/components/Pagination.tsx index 97221d63963..ed6b6e510e5 100644 --- a/apps/docs/components/Pagination.tsx +++ b/apps/docs/components/Pagination.tsx @@ -27,7 +27,7 @@ const Pagination = ({ currentPage, totalCount }: { currentPage: number; totalCou {page} diff --git a/apps/docs/components/TableOfContents.tsx b/apps/docs/components/TableOfContents.tsx index 8be2a831646..297ade47499 100644 --- a/apps/docs/components/TableOfContents.tsx +++ b/apps/docs/components/TableOfContents.tsx @@ -69,7 +69,7 @@ const TableOfContents: FC = ({ toc, video }) => {
  • diff --git a/apps/docs/components/reference/CLICommandSection.tsx b/apps/docs/components/reference/CLICommandSection.tsx index 400b3fa7287..792297211de 100644 --- a/apps/docs/components/reference/CLICommandSection.tsx +++ b/apps/docs/components/reference/CLICommandSection.tsx @@ -96,7 +96,7 @@ const CliCommandSection = (props) => {
    $ {subcommand.replace(/-/g, ' ')} diff --git a/apps/docs/components/reference/RefFunctionSection.tsx b/apps/docs/components/reference/RefFunctionSection.tsx index 2be99d3e0d7..88c06beda04 100644 --- a/apps/docs/components/reference/RefFunctionSection.tsx +++ b/apps/docs/components/reference/RefFunctionSection.tsx @@ -174,7 +174,7 @@ const RefFunctionSection: React.FC = (props) => {
    -
    +
    diff --git a/apps/docs/layouts/SiteLayout.tsx b/apps/docs/layouts/SiteLayout.tsx index 59bead2a64d..94cd0ae0631 100644 --- a/apps/docs/layouts/SiteLayout.tsx +++ b/apps/docs/layouts/SiteLayout.tsx @@ -228,7 +228,7 @@ const HeaderLogo = memo(function HeaderLogo() { height={24} alt="Supabase Logo" /> - DOCS + DOCS ) diff --git a/apps/docs/layouts/guides/index.tsx b/apps/docs/layouts/guides/index.tsx index 1363448853c..130e76e2510 100644 --- a/apps/docs/layouts/guides/index.tsx +++ b/apps/docs/layouts/guides/index.tsx @@ -115,7 +115,7 @@ const Layout: FC = (props) => { ].join(' ')} > {props.meta.breadcrumb && ( -

    {props.meta.breadcrumb}

    +

    {props.meta.breadcrumb}

    )}
    = (props: Props) => { ].join(' ')} >
    -

    Tutorials

    +

    Tutorials

    {props.meta.title}

    -
    +
    diff --git a/apps/docs/pages/index.mdx b/apps/docs/pages/index.mdx index 8024c9629a4..f76ceb55913 100644 --- a/apps/docs/pages/index.mdx +++ b/apps/docs/pages/index.mdx @@ -25,7 +25,7 @@ export const meta = { ## Products
    -
    +
    {products.map((product) => { return ( @@ -44,7 +44,7 @@ export const meta = {
    -
    +
    {/* */} @@ -89,7 +89,7 @@ export const meta = {
    @@ -148,7 +148,7 @@ export const meta = {
    -
    +
    @@ -160,7 +160,7 @@ export const meta = {
    diff --git a/apps/docs/pages/reference/cli/config.tsx b/apps/docs/pages/reference/cli/config.tsx index 096aa30b6aa..1d7e448b234 100644 --- a/apps/docs/pages/reference/cli/config.tsx +++ b/apps/docs/pages/reference/cli/config.tsx @@ -29,7 +29,7 @@ export default function Config() {

    CLI configuration

    -
    +
    {specFile.info.description}
    {TAGS.map((tag) => diff --git a/apps/www/components/AuthWidget/AuthWidgetSection.tsx b/apps/www/components/AuthWidget/AuthWidgetSection.tsx index f9ee1bbf25a..fe3099cf041 100644 --- a/apps/www/components/AuthWidget/AuthWidgetSection.tsx +++ b/apps/www/components/AuthWidget/AuthWidgetSection.tsx @@ -146,9 +146,9 @@ function AuthWidgetSection() { }) } className={[ - 'bg-brand-300 border-brand-900 h-10 w-10 rounded-full border-2 transition hover:scale-105', + 'bg-brand-300 border-brand h-10 w-10 rounded-full border-2 transition hover:scale-105', brandColor.brand === 'var(--colors-brand9)' - ? ' !bg-brand-900 ring-scale-400 border-scale-800 ring-2 drop-shadow-lg dark:ring-white' + ? ' !bg-brand ring-scale-400 border-scale-800 ring-2 drop-shadow-lg dark:ring-white' : '', ].join(' ')} > diff --git a/apps/www/components/CodeBlock/CodeBlock.tsx b/apps/www/components/CodeBlock/CodeBlock.tsx index 99f0cb02169..1269b1f11ff 100644 --- a/apps/www/components/CodeBlock/CodeBlock.tsx +++ b/apps/www/components/CodeBlock/CodeBlock.tsx @@ -119,7 +119,7 @@ function CodeBlock(props: CodeBlockProps) { type="text" icon={ copied ? ( - + ) : ( diff --git a/apps/www/components/Hero/Hero.tsx b/apps/www/components/Hero/Hero.tsx index 6aba7c1539c..9ce53bff3a8 100644 --- a/apps/www/components/Hero/Hero.tsx +++ b/apps/www/components/Hero/Hero.tsx @@ -41,7 +41,7 @@ const Hero = () => { {showAnnouncement && ( -
    +
    Get your ticket
    Launch Week 8 - August 7-11 diff --git a/apps/www/components/LaunchWeek/6/HackathonSection.tsx b/apps/www/components/LaunchWeek/6/HackathonSection.tsx index ad73a8a52a5..c2be728bb50 100644 --- a/apps/www/components/LaunchWeek/6/HackathonSection.tsx +++ b/apps/www/components/LaunchWeek/6/HackathonSection.tsx @@ -44,7 +44,7 @@ export default function LaunchHero() {

    Submission

    Submit your project through{' '} - + madewithsupabase.com . diff --git a/apps/www/components/LaunchWeek/7/LaunchSection/ArticleButtonListItem.tsx b/apps/www/components/LaunchWeek/7/LaunchSection/ArticleButtonListItem.tsx index e374bd023fc..8aee78e4070 100644 --- a/apps/www/components/LaunchWeek/7/LaunchSection/ArticleButtonListItem.tsx +++ b/apps/www/components/LaunchWeek/7/LaunchSection/ArticleButtonListItem.tsx @@ -9,7 +9,7 @@ const ArticleButtonListItem = (props: Article) => {

    - + {props.title}

    {props.description}

    diff --git a/apps/www/components/LaunchWeek/7/LaunchSection/ProductButtonListItem.tsx b/apps/www/components/LaunchWeek/7/LaunchSection/ProductButtonListItem.tsx index 07ed656ae0c..f14095db860 100644 --- a/apps/www/components/LaunchWeek/7/LaunchSection/ProductButtonListItem.tsx +++ b/apps/www/components/LaunchWeek/7/LaunchSection/ProductButtonListItem.tsx @@ -18,7 +18,7 @@ export const ProductButtonListItem = (props: Article) => {
    - {props.title} + {props.title}

    {props.description}

    diff --git a/apps/www/components/LaunchWeek/7/LaunchSection/index.tsx b/apps/www/components/LaunchWeek/7/LaunchSection/index.tsx index 3faf36f20d0..db093a84ca8 100644 --- a/apps/www/components/LaunchWeek/7/LaunchSection/index.tsx +++ b/apps/www/components/LaunchWeek/7/LaunchSection/index.tsx @@ -25,7 +25,7 @@ export const LaunchSection = (props: WeekDayProps) => {
    {/* END timeline dot */} @@ -63,7 +63,7 @@ export const LaunchSection = (props: WeekDayProps) => { nextDayNotShipped ? 'launch-week-timeline-border--approaching' : props.shipped - ? 'border-brand-900' + ? 'border-brand' : 'border-purple-700', className, ].join(' ')} @@ -152,7 +152,7 @@ export const LaunchSection = (props: WeekDayProps) => { md:pl-8 lg:pl-8 `, - props.shipped ? 'border-brand-900' : 'border-purple-700', + props.shipped ? 'border-brand' : 'border-purple-700', props.shippingHasStarted && 'lg:col-span-6', !lastIndex && 'pb-8 lg:pb-16', ].join(' ')} diff --git a/apps/www/components/LaunchWeek/8/Ticket/TicketCustomizationForm.tsx b/apps/www/components/LaunchWeek/8/Ticket/TicketCustomizationForm.tsx index dd9aa9e243c..6d6f848b536 100644 --- a/apps/www/components/LaunchWeek/8/Ticket/TicketCustomizationForm.tsx +++ b/apps/www/components/LaunchWeek/8/Ticket/TicketCustomizationForm.tsx @@ -54,9 +54,7 @@ const TicketCustomizationForm = ({ supabase, user }: Props) => { Connected account )} - {IS_SAVED && ( - Saved - )} + {IS_SAVED && Saved} {HAS_ERROR && ( Something went wrong @@ -72,7 +70,7 @@ const TicketCustomizationForm = ({ supabase, user }: Props) => { disabled placeholder="name" value={user.name} - icon={} + icon={} /> { className={[ 'w-3', IS_SAVING && 'text-scale-300', - !!formData.role ? 'text-brand-900' : 'text-scale-300', + !!formData.role ? 'text-brand' : 'text-scale-300', ].join(' ')} /> } @@ -113,7 +111,7 @@ const TicketCustomizationForm = ({ supabase, user }: Props) => { className={[ 'w-3', IS_SAVING && 'text-scale-300', - !!formData.company ? 'text-brand-900' : 'text-scale-300', + !!formData.company ? 'text-brand' : 'text-scale-300', ].join(' ')} /> } @@ -135,7 +133,7 @@ const TicketCustomizationForm = ({ supabase, user }: Props) => { className={[ 'w-3 flex spin', IS_SAVING && 'text-scale-300', - !!formData.location ? 'text-brand-900' : 'text-scale-300', + !!formData.location ? 'text-brand' : 'text-scale-300', ].join(' ')} /> } diff --git a/apps/www/components/MagnifiedProducts.tsx b/apps/www/components/MagnifiedProducts.tsx index 17880f85e71..ac9bea22e66 100644 --- a/apps/www/components/MagnifiedProducts.tsx +++ b/apps/www/components/MagnifiedProducts.tsx @@ -93,7 +93,7 @@ function Product({ lazyBoundary="100px" /> -
    +
    {product.name}
    diff --git a/apps/www/components/Nav/Company.tsx b/apps/www/components/Nav/Company.tsx index 7b263e0bc9b..d7c21238697 100644 --- a/apps/www/components/Nav/Company.tsx +++ b/apps/www/components/Nav/Company.tsx @@ -82,7 +82,7 @@ const Company = () => {
    View all posts diff --git a/apps/www/components/Nav/index.tsx b/apps/www/components/Nav/index.tsx index 2439d76df00..e8ad79db017 100644 --- a/apps/www/components/Nav/index.tsx +++ b/apps/www/components/Nav/index.tsx @@ -85,7 +85,7 @@ const Nav = () => {

    {description}

    {url && ( -

    +

    )} @@ -120,7 +120,7 @@ const Nav = () => { >
    )} -
    +
    ) diff --git a/apps/www/components/SOC2RequestForm.tsx b/apps/www/components/SOC2RequestForm.tsx index fb45809b19f..841e7e0e5b9 100644 --- a/apps/www/components/SOC2RequestForm.tsx +++ b/apps/www/components/SOC2RequestForm.tsx @@ -68,7 +68,7 @@ const SOC2RequestForm = () => { return (
    {formSubmitted ? ( -

    +

    Thank you for your submission! A member from the Supabase team will reach out to you shortly!

    diff --git a/apps/www/components/ScrollProgress.tsx b/apps/www/components/ScrollProgress.tsx index ddbea562561..cd366d1c21f 100644 --- a/apps/www/components/ScrollProgress.tsx +++ b/apps/www/components/ScrollProgress.tsx @@ -30,7 +30,7 @@ const ScrollProgress = () => { return (
    {

    {card.abstract}

    {card.url && ( -
    Read Customer Story
    +
    Read Customer Story
    )}
    ) diff --git a/apps/www/components/Sections/CustomerQuotesSection.tsx b/apps/www/components/Sections/CustomerQuotesSection.tsx index bfcd363fc8a..4715d7f390a 100644 --- a/apps/www/components/Sections/CustomerQuotesSection.tsx +++ b/apps/www/components/Sections/CustomerQuotesSection.tsx @@ -74,7 +74,7 @@ const CustomerQuotesSection = (props: Props) => { {customer.author}, {customer.role}

    {customer.url && ( -
    +
    Read Customer Story
    diff --git a/apps/www/components/Sections/ProductHeaderCentered.tsx b/apps/www/components/Sections/ProductHeaderCentered.tsx index 4aedc75221b..194d000f1b5 100644 --- a/apps/www/components/Sections/ProductHeaderCentered.tsx +++ b/apps/www/components/Sections/ProductHeaderCentered.tsx @@ -47,7 +47,7 @@ const ProductHeaderCentered = (props: Types) => ( {props.icon && } {props.title && ( {props.title} diff --git a/apps/www/components/Sections/TimedTabsSection.tsx b/apps/www/components/Sections/TimedTabsSection.tsx index 532a70fb177..1de3cc0ddd7 100644 --- a/apps/www/components/Sections/TimedTabsSection.tsx +++ b/apps/www/components/Sections/TimedTabsSection.tsx @@ -29,7 +29,7 @@ const Tab = ({ isActive, label, paragraph, onClick, progress, intervalDuration } {isActive && ( 99.7 ? 'opacity-0' : 'opacity-100', ].join(' ')} style={{ x: `${progress! - 100}%` }} diff --git a/apps/www/data/products/vector/pageData.tsx b/apps/www/data/products/vector/pageData.tsx index 2da32838233..2ae6b53155f 100644 --- a/apps/www/data/products/vector/pageData.tsx +++ b/apps/www/data/products/vector/pageData.tsx @@ -162,7 +162,7 @@ export default { <> Simple yet
    - powerful APIs + powerful APIs ), paragraph: 'Easy-to-use client libraries for managing and querying vector stores in Postgres.', @@ -242,7 +242,7 @@ docs.query( <> Powerful Features
    - Scale to millions + Scale to millions ), paragraph: diff --git a/apps/www/layouts/comparison.tsx b/apps/www/layouts/comparison.tsx index 020d31e2559..c832c800eda 100644 --- a/apps/www/layouts/comparison.tsx +++ b/apps/www/layouts/comparison.tsx @@ -90,7 +90,7 @@ const LayoutComparison = ({ components, props }: Props) => { {/* Title and description */}
    -

    Alternative

    +

    Alternative

    {props.blog.title}

    {props.blog.date}

    diff --git a/apps/www/pages/beta.tsx b/apps/www/pages/beta.tsx index 8ac450a2b35..bec142fdab7 100644 --- a/apps/www/pages/beta.tsx +++ b/apps/www/pages/beta.tsx @@ -118,7 +118,7 @@ const Hero = (props: Props) => {

    Supabase is an open source Firebase alternative.

    - Today, we're moving to Beta + Today, we're moving to Beta

    Xendit @@ -162,7 +162,7 @@ const Introduction = () => { Monitoro @@ -170,7 +170,7 @@ const Introduction = () => { TAYFA {' '} @@ -223,8 +223,7 @@ const TableOfContents = (props: any) => {

    - Supabase Beta is starting - now. + Supabase Beta is starting now.

    @@ -314,7 +313,7 @@ const Performance = () => { { Elixir {' '} @@ -361,7 +360,7 @@ const Performance = () => { Realtime engine @@ -369,7 +368,7 @@ const Performance = () => { PostgREST {' '} @@ -381,7 +380,7 @@ const Performance = () => { benchmarks {' '} @@ -451,11 +450,7 @@ const Security = () => {
  • Adopted the{' '} - + Snyk {' '} dependency monitor as part of our SSDLC on several key component of our system, to @@ -467,7 +462,7 @@ const Security = () => { now uses {' '} @@ -513,7 +508,7 @@ const Reliability = () => { https://status.supabase.com {' '} @@ -557,7 +552,7 @@ const NewFeaturesAndIntegrations = () => { JavaScript {' '} @@ -565,7 +560,7 @@ const NewFeaturesAndIntegrations = () => { HTTP @@ -587,7 +582,7 @@ const NewFeaturesAndIntegrations = () => { subscribe to changes in your database {' '} @@ -606,7 +601,7 @@ const NewFeaturesAndIntegrations = () => { querying from multiple tables {' '} @@ -614,7 +609,7 @@ const NewFeaturesAndIntegrations = () => { invoke complex functions @@ -703,7 +698,7 @@ const BetaPricing = () => ( rory@supabase.io @@ -716,7 +711,7 @@ const BetaPricing = () => (

    The Supabase Base plan is now called the Supabase Pro plan as per the{' '} - + pricing page . @@ -747,7 +742,7 @@ const OpenSource = () => ( sponsorship {' '} @@ -759,7 +754,7 @@ const OpenSource = () => ( partnering with Strive School {' '} @@ -772,7 +767,7 @@ const OpenSource = () => ( rory@supabase.io {' '} @@ -783,7 +778,7 @@ const OpenSource = () => ( our GitHub. {' '} @@ -819,7 +814,7 @@ const FundingPartners = () => ( Twitter {' '} @@ -856,7 +851,7 @@ const ScalingOurTeam = () => ( work@supabase.io @@ -917,7 +912,7 @@ const WhatsNext = () => ( support@supabase.io {' '} @@ -925,7 +920,7 @@ const WhatsNext = () => ( discussion {' '} diff --git a/apps/www/pages/blog/[slug].tsx b/apps/www/pages/blog/[slug].tsx index 1b1fcbd5b8b..356c3d5c107 100644 --- a/apps/www/pages/blog/[slug].tsx +++ b/apps/www/pages/blog/[slug].tsx @@ -202,7 +202,7 @@ function BlogPostPage(props: any) { {/* Title and description */}

    -

    Blog post

    +

    Blog post

    {props.blog.title}

    {props.blog.date}

    diff --git a/apps/www/pages/careers/index.tsx b/apps/www/pages/careers/index.tsx index a303e9f2e9a..d6acf681121 100644 --- a/apps/www/pages/careers/index.tsx +++ b/apps/www/pages/careers/index.tsx @@ -101,7 +101,7 @@ const CareerPage: NextPage = ({ jobs, contributors }: any) => {
    -

    +

    Supabase Careers

    @@ -121,9 +121,9 @@ const CareerPage: NextPage = ({ jobs, contributors }: any) => { return (
    -
    +

    {company.number}

    @@ -153,7 +153,7 @@ const CareerPage: NextPage = ({ jobs, contributors }: any) => { Discord to stay connected to our team, and our community.

    -
    +

    We deeply believe in the efficacy of collaborative open source

    @@ -445,7 +445,7 @@ const CareerPage: NextPage = ({ jobs, contributors }: any) => { className="flex lg:block items-start space-x-6 lg:space-x-0 lg:w-full" >
    -

    +

    {i + 1}

    @@ -461,7 +461,7 @@ const CareerPage: NextPage = ({ jobs, contributors }: any) => {
    ) })} -

    +

    diff --git a/apps/www/pages/customers/[slug].tsx b/apps/www/pages/customers/[slug].tsx index 7be097ca5b9..ea186151c78 100644 --- a/apps/www/pages/customers/[slug].tsx +++ b/apps/www/pages/customers/[slug].tsx @@ -122,9 +122,7 @@ function CaseStudyPage(props: any) {
    - - Customer Stories - + Customer Stories

    {props.blog.title} diff --git a/apps/www/pages/edge-functions/edge-functions.tsx b/apps/www/pages/edge-functions/edge-functions.tsx index 20900033d31..981685a0268 100644 --- a/apps/www/pages/edge-functions/edge-functions.tsx +++ b/apps/www/pages/edge-functions/edge-functions.tsx @@ -145,7 +145,7 @@ function Database() { className="bg-scale-100 dark:bg-scale-300 group flex flex-col gap-4 rounded border px-8 py-6" key={i} > -
    +
    {item.icon ? item.icon : }
    diff --git a/apps/www/pages/launch-week/6/index.tsx b/apps/www/pages/launch-week/6/index.tsx index 7f8f8426cc1..dbef8ec6eeb 100644 --- a/apps/www/pages/launch-week/6/index.tsx +++ b/apps/www/pages/launch-week/6/index.tsx @@ -1018,7 +1018,7 @@ export default function launchweek() { href="https://supabase.com/blog/launch-week-6-hackathon" target="_blank" rel="nooper noreferrer" - className="text-brand-900" + className="text-brand" > blog post @@ -1052,7 +1052,7 @@ export default function launchweek() { Join our Discord @@ -1064,7 +1064,7 @@ export default function launchweek() {

    Submit your project through{' '} @@ -1091,7 +1091,7 @@ export default function launchweek() {

    Supabase Cache Helpers

    Previous Best Overall Project Winner

    @@ -1105,7 +1105,7 @@ export default function launchweek() {

    Super UI

    Previous Best Overall Project Runner Up

    @@ -1120,7 +1120,7 @@ export default function launchweek() {

    Quid Faciam Hodie?

    Winner Best Flutter Project

    @@ -1130,7 +1130,7 @@ export default function launchweek() {

    That Hot Dog Game

    Previous Winner: Most Fun/Interesting

    @@ -1145,7 +1145,7 @@ export default function launchweek() {

    RepoWatch

    Previous Winner Best Realtime Project

    @@ -1180,7 +1180,7 @@ export default function launchweek() {
    @@ -1204,7 +1204,7 @@ export default function launchweek() { We worked with more than 30 content creators from around the world to drop a mountain of content simultaneously! -
    +
    See all the content
    @@ -1220,7 +1220,7 @@ export default function launchweek() { {activeCreator !== null && (

    {creators[activeCreator].description}

    )} -

    +

    {creators[activeCreator].link_title} diff --git a/apps/www/pages/legal/dpa.tsx b/apps/www/pages/legal/dpa.tsx index 7814c69a208..3e8bd8429fd 100644 --- a/apps/www/pages/legal/dpa.tsx +++ b/apps/www/pages/legal/dpa.tsx @@ -52,7 +52,7 @@ const DPA = () => {

    You can download our latest DPA document by submitting your email here.

    {formSubmitted ? ( -

    +

    Thank you for your submission! A new tab should have opened with the DPA document

    diff --git a/apps/www/pages/partners/experts/[slug].tsx b/apps/www/pages/partners/experts/[slug].tsx index ffb5f8fe409..8603d2a86ac 100644 --- a/apps/www/pages/partners/experts/[slug].tsx +++ b/apps/www/pages/partners/experts/[slug].tsx @@ -160,7 +160,7 @@ function Partner({
    Category - + {partner.category} @@ -172,7 +172,7 @@ function Partner({ href={partner.website} target="_blank" rel="noreferrer" - className="text-brand-900 hover:text-brand-800 transition-colors" + className="text-brand hover:text-brand-800 transition-colors" > {new URL(partner.website).host} @@ -185,7 +185,7 @@ function Partner({ href={partner.docs} target="_blank" rel="noreferrer" - className="text-brand-900 hover:text-brand-800 transition-colors" + className="text-brand hover:text-brand-800 transition-colors" > Learn diff --git a/apps/www/pages/partners/integrations/[slug].tsx b/apps/www/pages/partners/integrations/[slug].tsx index 95a87f58eba..cf1bb175550 100644 --- a/apps/www/pages/partners/integrations/[slug].tsx +++ b/apps/www/pages/partners/integrations/[slug].tsx @@ -201,7 +201,7 @@ function Partner({
    Category - + {partner.category} @@ -213,7 +213,7 @@ function Partner({ href={partner.website} target="_blank" rel="noreferrer" - className="text-brand-900 hover:text-brand-800 transition-colors" + className="text-brand hover:text-brand-800 transition-colors" > {new URL(partner.website).host} @@ -226,7 +226,7 @@ function Partner({ href={partner.docs} target="_blank" rel="noreferrer" - className="text-brand-900 hover:text-brand-800 transition-colors" + className="text-brand hover:text-brand-800 transition-colors" > Learn diff --git a/apps/www/pages/partners/integrations/index.tsx b/apps/www/pages/partners/integrations/index.tsx index 2e878b0a792..7665cace8fa 100644 --- a/apps/www/pages/partners/integrations/index.tsx +++ b/apps/www/pages/partners/integrations/index.tsx @@ -200,10 +200,10 @@ function IntegrationPartnersPage(props: Props) { INTEGRATIONS - EXPERTS + EXPERTS - + BECOME A PARTNER diff --git a/apps/www/pages/pricing/index.tsx b/apps/www/pages/pricing/index.tsx index 3940e1b06e6..618833e74a8 100644 --- a/apps/www/pages/pricing/index.tsx +++ b/apps/www/pages/pricing/index.tsx @@ -150,7 +150,7 @@ export default function IndexPage() {
    -

    Pricing

    +

    Pricing

    Predictable pricing, no surprises

    Start building for free, collaborate with a team, then scale to millions of users @@ -174,7 +174,7 @@ export default function IndexPage() { key={`row-${plan.name}`} className={[ plan.name === 'Pro' - ? 'bg-brand-1100 dark:bg-brand-900 border px-0.5 -mt-8 rounded-[6px]' + ? 'bg-brand-1100 dark:bg-brand border px-0.5 -mt-8 rounded-[6px]' : '', ].join(' ')} > @@ -273,7 +273,7 @@ export default function IndexPage() { {plan.features.map((feature) => (

  • -
  • ))} @@ -953,7 +949,7 @@ export default function IndexPage() { open a support ticket {' '} @@ -964,7 +960,7 @@ export default function IndexPage() { you can contact the team here diff --git a/apps/www/pages/support.tsx b/apps/www/pages/support.tsx index 0ee2f30c399..5dd7c36e5e1 100644 --- a/apps/www/pages/support.tsx +++ b/apps/www/pages/support.tsx @@ -38,9 +38,7 @@ const Index = ({}: Props) => {
    -

    - Support -

    +

    Support

    Get Support

    The Supabase Support Team is ready to help. @@ -64,8 +62,8 @@ const Index = ({}: Props) => { our GitHub issues. This can be feature requests too!

    - Use this for: Bugs and - other issues + Use this for: Bugs and other + issues

    @@ -112,8 +110,8 @@ const Index = ({}: Props) => { join us on Discord. Browse and ask questions.

    - Use this for:{' '} - General questions + Use this for: General + questions

    @@ -183,8 +181,8 @@ const Index = ({}: Props) => { or have an issue, please contact us here.

    - Use this for:{' '} - Issues or questions specific to you + Use this for: Issues + or questions specific to you

    diff --git a/apps/www/styles/index.css b/apps/www/styles/index.css index e0843c3b687..2e10d81a737 100644 --- a/apps/www/styles/index.css +++ b/apps/www/styles/index.css @@ -95,11 +95,11 @@ h6:not(.overwrite) { } .heading-gradient-brand { - @apply text-[#3ECF8E00] bg-clip-text bg-gradient-to-b from-brand-1000 to-brand-900 dark:to-brand-800; + @apply text-[#3ECF8E00] bg-clip-text bg-gradient-to-b from-brand-1000 to-brand dark:to-brand-800; } .toc-animate { - @apply !translate-x-1 !text-brand-900; + @apply !translate-x-1 !text-brand; } .prose-toc a { diff --git a/packages/ui/src/components/Button/Button.module.css b/packages/ui/src/components/Button/Button.module.css index 8c4d9b48a9a..d9cac9315ac 100644 --- a/packages/ui/src/components/Button/Button.module.css +++ b/packages/ui/src/components/Button/Button.module.css @@ -51,7 +51,7 @@ */ /* .sbui-btn-primary { @apply text-white bg-brand-800 hover:bg-brand-600; - @apply dark:hover:bg-brand-900; + @apply dark:hover:bg-brand; } */ .dark .sbui-btn-primary { text-shadow: 0px 0px 4px rgba(38 111 78 / 50%); @@ -87,7 +87,7 @@ @apply dark:text-white dark:border-dark-400 dark:hover:text-white dark:hover:border-white; } */ /* .sbui-btn-link { - @apply bg-transparent text-brand-800 border-none hover:bg-brand-900 hover:bg-opacity-25; + @apply bg-transparent text-brand-800 border-none hover:bg-brand hover:bg-opacity-25; box-shadow: none; } */ /* .sbui-btn-text { diff --git a/packages/ui/src/components/Command/Command.icons.tsx b/packages/ui/src/components/Command/Command.icons.tsx index 9d0914765b0..bc3fdcee576 100644 --- a/packages/ui/src/components/Command/Command.icons.tsx +++ b/packages/ui/src/components/Command/Command.icons.tsx @@ -4,7 +4,7 @@ interface AiIconProps { className?: string } -export const AiIcon = ({ className = 'text-brand-900' }: AiIconProps) => ( +export const AiIcon = ({ className = 'text-brand' }: AiIconProps) => ( ( export const AiIconChat = () => (
    + Ask Supabase AI {search ? ( <> diff --git a/packages/ui/src/components/Command/GenerateSQL/SQLOutputActions.tsx b/packages/ui/src/components/Command/GenerateSQL/SQLOutputActions.tsx index fe59affa469..270c78f66de 100644 --- a/packages/ui/src/components/Command/GenerateSQL/SQLOutputActions.tsx +++ b/packages/ui/src/components/Command/GenerateSQL/SQLOutputActions.tsx @@ -81,7 +81,7 @@ const SQLOutputActions = ({ answer, messages }: SQLOutputActionsProps) => { type="default" icon={ showCopied ? ( - + ) : ( ) @@ -98,7 +98,7 @@ const SQLOutputActions = ({ answer, messages }: SQLOutputActionsProps) => { disabled={isSaving} icon={ isSaved ? ( - + ) : ( ) diff --git a/packages/ui/src/components/Form/Form.stories.tsx b/packages/ui/src/components/Form/Form.stories.tsx index 277ae09180e..45f022d2f7c 100644 --- a/packages/ui/src/components/Form/Form.stories.tsx +++ b/packages/ui/src/components/Form/Form.stories.tsx @@ -1,14 +1,5 @@ import { Form } from '.' -import { - Input, - Button, - InputNumber, - Toggle, - Checkbox, - Radio, - Select, - Listbox, -} from '../../index' +import { Input, Button, InputNumber, Toggle, Checkbox, Radio, Select, Listbox } from '../../index' import * as Yup from 'yup' import { User } from '../Icon/IconImportHandler' @@ -103,14 +94,8 @@ export const InputLevelValidation = () => { export const InputLevelValidationYip = () => { // validation schema const SignupSchema = Yup.object().shape({ - firstname: Yup.string() - .min(2, 'Too Short!') - .max(50, 'Too Long!') - .required('Required'), - lastname: Yup.string() - .min(2, 'Too Short!') - .max(50, 'Too Long!') - .required('Required'), + firstname: Yup.string().min(2, 'Too Short!').max(50, 'Too Long!').required('Required'), + lastname: Yup.string().min(2, 'Too Short!').max(50, 'Too Long!').required('Required'), email: Yup.string().email('Invalid email').required('Required'), }) @@ -131,24 +116,9 @@ export const InputLevelValidationYip = () => { > {({ isSubmitting }: any) => (
    - - - + + + @@ -239,9 +209,7 @@ export const LargerExample = () => { if (!values.email) { errors.email = 'Required' - } else if ( - !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(values.email) - ) { + } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(values.email)) { errors.email = 'Invalid email address' } @@ -286,21 +254,9 @@ export const LargerExample = () => { <>

    {isSubmitting ? 'submitting' : 'not submitting'}

    - - - + + @@ -551,7 +473,7 @@ export const CardForm = () => { descriptionText={ This can be found in{' '} - + the developer settings diff --git a/packages/ui/src/components/Form/examples/AuthForm.tsx b/packages/ui/src/components/Form/examples/AuthForm.tsx index 5053216d6bb..b64e5d18614 100644 --- a/packages/ui/src/components/Form/examples/AuthForm.tsx +++ b/packages/ui/src/components/Form/examples/AuthForm.tsx @@ -40,7 +40,7 @@ const DocsButton = () => { transition " > -
    +
    {/* {

    Learn how to use Supabase Auth with Auth Policies to pick and choose what users see what.

    -

    +

    See Documenation @@ -338,8 +338,8 @@ const AuthForm = () => {

    {active ? ( -
    - +
    + Enabled @@ -1114,7 +1114,7 @@ export function WholeForm() { transition " > -
    +
    {/* -

    +

    See Documenation diff --git a/packages/ui/src/components/GlassPanel/GlassPanel.tsx b/packages/ui/src/components/GlassPanel/GlassPanel.tsx index 4f84bb995da..1d9425b936d 100644 --- a/packages/ui/src/components/GlassPanel/GlassPanel.tsx +++ b/packages/ui/src/components/GlassPanel/GlassPanel.tsx @@ -114,7 +114,7 @@ const GlassPanel = ({

    {children && {children}} - {showLink && Learn more} + {showLink && Learn more}
    ) diff --git a/packages/ui/src/components/IconPanel/IconPanel.tsx b/packages/ui/src/components/IconPanel/IconPanel.tsx index 00fc05a700f..90eb83e55e4 100644 --- a/packages/ui/src/components/IconPanel/IconPanel.tsx +++ b/packages/ui/src/components/IconPanel/IconPanel.tsx @@ -70,7 +70,13 @@ const IconPanel = ({ {title ) : ( @@ -92,7 +98,7 @@ const IconPanel = ({ )}
    {children && {children}} - {showLink && Learn more} + {showLink && Learn more}
    diff --git a/packages/ui/src/lib/theme/customThemeExample.ts b/packages/ui/src/lib/theme/customThemeExample.ts index 284a945e2d8..91eb4ad1bcd 100644 --- a/packages/ui/src/lib/theme/customThemeExample.ts +++ b/packages/ui/src/lib/theme/customThemeExample.ts @@ -35,7 +35,7 @@ const default__padding_and_text = { export default { button: { type: { - primary: `${defaults.brandBackground} text-white hover:bg-brand-600 dark:hover:bg-brand-900`, + primary: `${defaults.brandBackground} text-white hover:bg-brand-600 dark:hover:bg-brand`, }, }, } diff --git a/packages/ui/src/lib/theme/defaultTheme.ts b/packages/ui/src/lib/theme/defaultTheme.ts index dc20809681e..25782badb7e 100644 --- a/packages/ui/src/lib/theme/defaultTheme.ts +++ b/packages/ui/src/lib/theme/defaultTheme.ts @@ -270,7 +270,7 @@ export default { }, success: { base: `bg-brand-300 dark:bg-brand-100 border-brand-700`, - icon: `text-brand-900`, + icon: `text-brand`, header: `text-brand-1200`, description: `text-brand-1100`, }, @@ -568,7 +568,7 @@ export default { bg-transparent ${defaults.focus} focus:ring-scale-400 - text-brand-900 + text-brand border-scale-700 shadow-sm rounded @@ -629,7 +629,7 @@ export default { focus:ring-brand-400 border-scale-700 - text-brand-900 + text-brand shadow-sm cursor-pointer peer @@ -934,8 +934,8 @@ export default { hover:bg-scale-700 `, active: ` - !bg-brand-900 - !hover:bg-brand-900 + !bg-brand + !hover:bg-brand `, handle_container: { tiny: 'h-4 w-7', @@ -1268,8 +1268,8 @@ export default { z-10 border-l - border-brand-900 - group-hover:border-brand-900 + border-brand + group-hover:border-brand `, rounded: `rounded-md`, }, @@ -1455,8 +1455,8 @@ export default { option_active: `text-scale-1200 bg-scale-600`, option_disabled: `cursor-not-allowed opacity-50`, option_inner: `flex items-center space-x-3`, - option_check: `absolute inset-y-0 right-0 flex items-center pr-3 text-brand-900`, - option_check_active: `text-brand-900`, + option_check: `absolute inset-y-0 right-0 flex items-center pr-3 text-brand`, + option_check_active: `text-brand`, option_check_icon: `h-5 w-5`, }, @@ -1500,7 +1500,7 @@ export default { }, spinner: ` absolute - text-brand-900 animate-spin + text-brand animate-spin inset-0 m-auto `, diff --git a/studio/.storybook/preview.css b/studio/.storybook/preview.css index c12137dbd9d..2ba4312331c 100644 --- a/studio/.storybook/preview.css +++ b/studio/.storybook/preview.css @@ -105,9 +105,9 @@ } .react-datepicker__day--range-start { - @apply bg-brand-900 text-white hover:text-scale-700 hover:bg-white; + @apply bg-brand text-white hover:text-scale-700 hover:bg-white; } .react-datepicker__day--range-end { - @apply bg-brand-900 text-white hover:text-scale-700 hover:bg-white; + @apply bg-brand text-white hover:text-scale-700 hover:bg-white; } diff --git a/studio/components/grid/components/header/Header.tsx b/studio/components/grid/components/header/Header.tsx index 1a27e3a5fff..80f32781146 100644 --- a/studio/components/grid/components/header/Header.tsx +++ b/studio/components/grid/components/header/Header.tsx @@ -142,7 +142,7 @@ const DefaultHeader = ({
    @@ -168,7 +168,7 @@ const DefaultHeader = ({
    @@ -193,7 +193,7 @@ const DefaultHeader = ({ { !status ? ( ) : status === 'saved' ? ( - + ) : ( <> ) diff --git a/studio/components/interfaces/Auth/AuthProvidersForm/ProviderForm.tsx b/studio/components/interfaces/Auth/AuthProvidersForm/ProviderForm.tsx index 0851c3e397f..2107aac22b7 100644 --- a/studio/components/interfaces/Auth/AuthProvidersForm/ProviderForm.tsx +++ b/studio/components/interfaces/Auth/AuthProvidersForm/ProviderForm.tsx @@ -104,8 +104,8 @@ const ProviderForm = ({ provider }: ProviderFormProps) => {
    {isActive ? ( -
    - +
    + Enabled diff --git a/studio/components/interfaces/Auth/Policies/PolicySelection.tsx b/studio/components/interfaces/Auth/Policies/PolicySelection.tsx index af4727eeb8f..adb9d3aa77e 100644 --- a/studio/components/interfaces/Auth/Policies/PolicySelection.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicySelection.tsx @@ -62,7 +62,7 @@ const PolicySelection: FC = ({ here diff --git a/studio/components/interfaces/BillingV2/SpendCapModal.tsx b/studio/components/interfaces/BillingV2/SpendCapModal.tsx index 81e06529ddd..e3bb6b7f7ee 100644 --- a/studio/components/interfaces/BillingV2/SpendCapModal.tsx +++ b/studio/components/interfaces/BillingV2/SpendCapModal.tsx @@ -165,7 +165,7 @@ const SpendCapModal: FC = ({ visible, onHide }) => {

    See{' '} - + pricing page {' '} diff --git a/studio/components/interfaces/BillingV2/Subscription/Tier/EnterpriseCard.tsx b/studio/components/interfaces/BillingV2/Subscription/Tier/EnterpriseCard.tsx index af9608f0dd0..cbf139f924b 100644 --- a/studio/components/interfaces/BillingV2/Subscription/Tier/EnterpriseCard.tsx +++ b/studio/components/interfaces/BillingV2/Subscription/Tier/EnterpriseCard.tsx @@ -18,13 +18,13 @@ const EnterpriseCard = ({ plan, isCurrentPlan }: EnterpriseCardProps) => { >

    -

    {plan.name}

    +

    {plan.name}

    {isCurrentPlan ? (
    Current plan
    ) : plan.nameBadge ? ( -
    +
    {plan.nameBadge}
    ) : null} @@ -43,7 +43,7 @@ const EnterpriseCard = ({ plan, isCurrentPlan }: EnterpriseCardProps) => {
      {plan.features.map((feature) => (
    • -
    • ))} diff --git a/studio/components/interfaces/BillingV2/Subscription/Tier/SubscriptionTier.tsx b/studio/components/interfaces/BillingV2/Subscription/Tier/SubscriptionTier.tsx index 443c4b9b08a..0bfde8d1793 100644 --- a/studio/components/interfaces/BillingV2/Subscription/Tier/SubscriptionTier.tsx +++ b/studio/components/interfaces/BillingV2/Subscription/Tier/SubscriptionTier.tsx @@ -75,7 +75,7 @@ const SubscriptionTier = ({}: SubscriptionTierProps) => {

      This project is currently on the plan:

      -

      {tierName}

      +

      {tierName}

      diff --git a/studio/components/interfaces/BillingV2/Subscription/Tier/TierUpdateSidePanel.tsx b/studio/components/interfaces/BillingV2/Subscription/Tier/TierUpdateSidePanel.tsx index 2472ed8332c..2fdd7e919c9 100644 --- a/studio/components/interfaces/BillingV2/Subscription/Tier/TierUpdateSidePanel.tsx +++ b/studio/components/interfaces/BillingV2/Subscription/Tier/TierUpdateSidePanel.tsx @@ -155,13 +155,13 @@ const TierUpdateSidePanel = () => { >
      -

      {plan.name}

      +

      {plan.name}

      {isCurrentPlan ? (
      Current plan
      ) : plan.nameBadge ? ( -
      +
      {plan.nameBadge}
      ) : ( @@ -258,7 +258,7 @@ const TierUpdateSidePanel = () => {
    • diff --git a/studio/components/interfaces/Database/Roles/RoleRow.tsx b/studio/components/interfaces/Database/Roles/RoleRow.tsx index cd2de5f63be..f069754cb84 100644 --- a/studio/components/interfaces/Database/Roles/RoleRow.tsx +++ b/studio/components/interfaces/Database/Roles/RoleRow.tsx @@ -114,8 +114,8 @@ const RoleRow: FC = ({ role, disabled = false, onSelectDelete }) => { {role.active_connections > 0 && (
      - - + +
      )} diff --git a/studio/components/interfaces/Database/Schemas/SchemaGraph.tsx b/studio/components/interfaces/Database/Schemas/SchemaGraph.tsx index 4a9dfc3ac67..cd5467b1fde 100644 --- a/studio/components/interfaces/Database/Schemas/SchemaGraph.tsx +++ b/studio/components/interfaces/Database/Schemas/SchemaGraph.tsx @@ -205,7 +205,7 @@ function TableNode({ data, targetPosition, sourcePosition }: NodeProps {data.isForeign ? (
      -
      +
      {data.name} {targetPosition && ( ) : (
      -
      +
      {data.name}
      @@ -230,7 +230,7 @@ function TableNode({ data, targetPosition, sourcePosition }: NodeProps diff --git a/studio/components/interfaces/Functions/CommandRender.tsx b/studio/components/interfaces/Functions/CommandRender.tsx index 6a3b83b2a86..c56be3351b5 100644 --- a/studio/components/interfaces/Functions/CommandRender.tsx +++ b/studio/components/interfaces/Functions/CommandRender.tsx @@ -38,7 +38,7 @@ const Command = ({ item }: any) => { }} > {isCopied ? ( -
      +
      ) : ( diff --git a/studio/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.tsx b/studio/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.tsx index a601e794816..3d984779e4e 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.tsx @@ -181,9 +181,7 @@ const EdgeFunctionDetails = () => {

      Import maps are{' '} - + {hasImportMap ? 'used' : 'not used'} {' '} for this function diff --git a/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx b/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx index 4237781074c..e968c6e115e 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx @@ -55,7 +55,7 @@ const EdgeFunctionsListItem: FC = ({ function: item }) => { }} > {isCopied ? ( -

      +
      ) : ( diff --git a/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx b/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx index 815ac8cec05..b493941459f 100644 --- a/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx +++ b/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx @@ -139,7 +139,7 @@ const APIKeys = () => { for your tables and configured policies. You may also use the service key which can be found{' '} - here + here {' '} to bypass RLS.

      diff --git a/studio/components/interfaces/Home/NewProjectPanel/NewProjectPanel.tsx b/studio/components/interfaces/Home/NewProjectPanel/NewProjectPanel.tsx index 090b720fb29..d8a76c8ef54 100644 --- a/studio/components/interfaces/Home/NewProjectPanel/NewProjectPanel.tsx +++ b/studio/components/interfaces/Home/NewProjectPanel/NewProjectPanel.tsx @@ -242,7 +242,7 @@ const NewProjectPanel: FC = ({}) => {

      Interact with your database through the{' '} - Supabase client libraries + Supabase client libraries {' '} with your API keys.

      diff --git a/studio/components/interfaces/Organization/AuditLogs/AuditLogs.tsx b/studio/components/interfaces/Organization/AuditLogs/AuditLogs.tsx index c463ce98397..7a864aef626 100644 --- a/studio/components/interfaces/Organization/AuditLogs/AuditLogs.tsx +++ b/studio/components/interfaces/Organization/AuditLogs/AuditLogs.tsx @@ -132,7 +132,7 @@ const AuditLogs = () => { return ( Your organization has a log retention period of{' '} - + {retentionPeriod} day {retentionPeriod > 1 ? 's' : ''} diff --git a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/EnterpriseCard.tsx b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/EnterpriseCard.tsx index af9608f0dd0..cbf139f924b 100644 --- a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/EnterpriseCard.tsx +++ b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/EnterpriseCard.tsx @@ -18,13 +18,13 @@ const EnterpriseCard = ({ plan, isCurrentPlan }: EnterpriseCardProps) => { >
      -

      {plan.name}

      +

      {plan.name}

      {isCurrentPlan ? (
      Current plan
      ) : plan.nameBadge ? ( -
      +
      {plan.nameBadge}
      ) : null} @@ -43,7 +43,7 @@ const EnterpriseCard = ({ plan, isCurrentPlan }: EnterpriseCardProps) => {
        {plan.features.map((feature) => (
      • -
      • ))} diff --git a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx index fd50323a60e..dabc1f474f3 100644 --- a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx +++ b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx @@ -157,13 +157,13 @@ const PlanUpdateSidePanel = () => { >
        -

        {plan.name}

        +

        {plan.name}

        {isCurrentPlan ? (
        Current plan
        ) : plan.nameBadge ? ( -
        +
        {plan.nameBadge}
        ) : ( @@ -250,7 +250,7 @@ const PlanUpdateSidePanel = () => {

    {plan.nameBadge && ( - + {plan.nameBadge} )} @@ -249,7 +249,7 @@ export default function IndexPage() { {plan.warning && (

    - + {plan.warning}

    @@ -436,7 +436,7 @@ export default function IndexPage() { className="grid lg:grid-cols-2 gap-8 items-center mt-12 lg:mt-8 max-w-6xl mx-auto" >
    - + Available for Pro plan

    Cost control with spend caps

    @@ -792,7 +792,7 @@ export default function IndexPage() { {plan.warning && (

    - + {plan.warning}

    diff --git a/packages/ui/src/components/Button/Button.tsx b/packages/ui/src/components/Button/Button.tsx index fbb217b0a97..202bad9b7bf 100644 --- a/packages/ui/src/components/Button/Button.tsx +++ b/packages/ui/src/components/Button/Button.tsx @@ -51,7 +51,7 @@ const buttonVariants = cva( focus-visible:outline-brand-600 shadow-sm`, alternative: ` - text-brand-1100 + text-brand-600 bg-brand-200 hover:bg-brand-400 border-brand-600 hover:border-brand-300 dark:border-brand-400 hover:dark:border-brand-300 @@ -73,7 +73,7 @@ const buttonVariants = cva( focus-visible:outline-scale-700 shadow-sm`, link: ` - text-brand-1100 + text-brand-600 border border-transparent hover:bg-brand-400 diff --git a/packages/ui/src/components/Command/CommandMenu.tsx b/packages/ui/src/components/Command/CommandMenu.tsx index 04d856720f7..918fdaf001d 100644 --- a/packages/ui/src/components/Command/CommandMenu.tsx +++ b/packages/ui/src/components/Command/CommandMenu.tsx @@ -122,7 +122,7 @@ const CommandMenu = ({ projectRef }: CommandMenuProps) => { forceMount > - + Ask Supabase AI {search ? ( <> diff --git a/packages/ui/src/components/shadcn/ui/badge.tsx b/packages/ui/src/components/shadcn/ui/badge.tsx index cccbca72050..2b4eaf92bf3 100644 --- a/packages/ui/src/components/shadcn/ui/badge.tsx +++ b/packages/ui/src/components/shadcn/ui/badge.tsx @@ -56,7 +56,7 @@ const badgeVariants = cva( // }, // dot: '-ml-0.5 mr-1.5 h-2 w-2 rounded-full', // color: { -// brand: 'bg-brand-200 text-brand-1100 border border-brand-400', +// brand: 'bg-brand-200 text-brand-600 border border-brand-400', // scale: 'bg-scale-200 text-scale-1100 border border-scale-700', // tomato: `bg-tomato-200 text-tomato-1100 border border-tomato-700`, // red: `bg-red-200 text-red-1100 border border-red-700`, diff --git a/packages/ui/src/lib/theme/defaultTheme.ts b/packages/ui/src/lib/theme/defaultTheme.ts index 2779aa37be4..11626d99435 100644 --- a/packages/ui/src/lib/theme/defaultTheme.ts +++ b/packages/ui/src/lib/theme/defaultTheme.ts @@ -216,7 +216,7 @@ export default { }, dot: '-ml-0.5 mr-1.5 h-2 w-2 rounded-full', color: { - brand: 'bg-brand-200 text-brand-1100 border border-brand-400', + brand: 'bg-brand-200 text-brand-600 border border-brand-400', scale: 'bg-scale-200 text-scale-1100 border border-scale-700', tomato: `bg-tomato-200 text-tomato-1100 border border-tomato-700`, red: `bg-red-200 text-red-1100 border border-red-700`, @@ -271,8 +271,8 @@ export default { success: { base: `bg-brand-300 dark:bg-brand-100 border-brand-400`, icon: `text-brand`, - header: `text-brand-1200`, - description: `text-brand-1100`, + header: `text-brand-600`, + description: `text-brand-600`, }, neutral: { base: `bg-scale-300 dark:bg-scale-300 border-scale-500`, diff --git a/studio/components/interfaces/Auth/Policies/PolicySelection.tsx b/studio/components/interfaces/Auth/Policies/PolicySelection.tsx index adb9d3aa77e..5598c600550 100644 --- a/studio/components/interfaces/Auth/Policies/PolicySelection.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicySelection.tsx @@ -62,7 +62,7 @@ const PolicySelection: FC = ({
    here diff --git a/studio/components/interfaces/BillingV2/Subscription/Tier/TierUpdateSidePanel.tsx b/studio/components/interfaces/BillingV2/Subscription/Tier/TierUpdateSidePanel.tsx index 2fdd7e919c9..b2c2c5c914a 100644 --- a/studio/components/interfaces/BillingV2/Subscription/Tier/TierUpdateSidePanel.tsx +++ b/studio/components/interfaces/BillingV2/Subscription/Tier/TierUpdateSidePanel.tsx @@ -180,7 +180,7 @@ const TierUpdateSidePanel = () => {

    {tierMeta?.costUnit}

    -
    +
    {tierMeta?.warning}
    diff --git a/studio/components/interfaces/Database/Migrations/MigrationsEmptyState.tsx b/studio/components/interfaces/Database/Migrations/MigrationsEmptyState.tsx index b4f2153339c..ab1d31a5941 100644 --- a/studio/components/interfaces/Database/Migrations/MigrationsEmptyState.tsx +++ b/studio/components/interfaces/Database/Migrations/MigrationsEmptyState.tsx @@ -16,7 +16,7 @@ const MigrationsEmptyState = () => { jsx: () => { return ( <> - supabase link --project-ref {ref} + supabase link --project-ref {ref} ) }, @@ -27,7 +27,7 @@ const MigrationsEmptyState = () => { jsx: () => { return ( <> - supabase migration new new-migration + supabase migration new new-migration ) }, @@ -38,7 +38,7 @@ const MigrationsEmptyState = () => { jsx: () => { return ( <> - supabase db push + supabase db push ) }, diff --git a/studio/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.utils.tsx b/studio/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.utils.tsx index bc2ae902432..e8ec2079990 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.utils.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.utils.tsx @@ -10,7 +10,7 @@ export const generateCLICommands = ( jsx: () => { return ( <> - supabase functions deploy{' '} + supabase functions deploy{' '} {selectedFunction?.slug} ) @@ -23,7 +23,7 @@ export const generateCLICommands = ( jsx: () => { return ( <> - supabase functions delete{' '} + supabase functions delete{' '} {selectedFunction?.slug} ) @@ -39,7 +39,7 @@ export const generateCLICommands = ( jsx: () => { return ( <> - supabase secrets list + supabase secrets list ) }, @@ -51,7 +51,7 @@ export const generateCLICommands = ( jsx: () => { return ( <> - supabase secrets set NAME1=VALUE1 NAME2=VALUE2 + supabase secrets set NAME1=VALUE1 NAME2=VALUE2 ) }, @@ -63,7 +63,7 @@ export const generateCLICommands = ( jsx: () => { return ( <> - supabase secrets unset NAME1 NAME2 + supabase secrets unset NAME1 NAME2 ) }, @@ -80,7 +80,7 @@ export const generateCLICommands = ( jsx: () => { return ( <> - curl -L -X POST '{functionUrl}' -H + curl -L -X POST '{functionUrl}' -H 'Authorization: Bearer [YOUR ANON KEY]' {`--data '{"name":"Functions"}'`} ) diff --git a/studio/components/interfaces/Functions/TerminalInstructions.tsx b/studio/components/interfaces/Functions/TerminalInstructions.tsx index 3862be68f51..71cd7cb22e1 100644 --- a/studio/components/interfaces/Functions/TerminalInstructions.tsx +++ b/studio/components/interfaces/Functions/TerminalInstructions.tsx @@ -39,7 +39,7 @@ const TerminalInstructions: FC = ({ closable = false, removeBorder = fals jsx: () => { return ( <> - supabase functions new hello-world + supabase functions new hello-world ) }, @@ -51,7 +51,7 @@ const TerminalInstructions: FC = ({ closable = false, removeBorder = fals jsx: () => { return ( <> - supabase functions deploy hello-world + supabase functions deploy hello-world --project-ref {projectRef} ) @@ -66,7 +66,7 @@ const TerminalInstructions: FC = ({ closable = false, removeBorder = fals jsx: () => { return ( <> - curl -L -X POST 'https://{functionsEndpoint} + curl -L -X POST 'https://{functionsEndpoint} /hello-world' -H 'Authorization: Bearer [YOUR ANON KEY]'{' '} {`--data '{"name":"Functions"}'`} diff --git a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx index dabc1f474f3..d91951a27a5 100644 --- a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx +++ b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx @@ -182,7 +182,7 @@ const PlanUpdateSidePanel = () => {

    {tierMeta?.costUnitOrg}

    -
    +
    {tierMeta?.warning}
    diff --git a/studio/components/interfaces/Settings/Logs/LogsFormatters.tsx b/studio/components/interfaces/Settings/Logs/LogsFormatters.tsx index 6ea93cd06f8..9a31cbe0b2d 100644 --- a/studio/components/interfaces/Settings/Logs/LogsFormatters.tsx +++ b/studio/components/interfaces/Settings/Logs/LogsFormatters.tsx @@ -276,7 +276,7 @@ export function jsonSyntaxHighlight(input: Object) { if (/:$/.test(match)) { cls = 'key text-scale-1200' } else { - cls = 'string text-brand-1100' + cls = 'string text-brand-600' } } else if (/true|false/.test(match)) { cls = 'boolean text-blue-900' diff --git a/studio/components/layouts/ProjectLayout/BuildingState.tsx b/studio/components/layouts/ProjectLayout/BuildingState.tsx index b4010ba078d..53188486c5d 100644 --- a/studio/components/layouts/ProjectLayout/BuildingState.tsx +++ b/studio/components/layouts/ProjectLayout/BuildingState.tsx @@ -82,7 +82,7 @@ const BuildingState = ({ project }: BuildingStateProps) => { Browse the Supabase{' '}
    diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackWidget.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackWidget.tsx index b5ef7aee1e5..cb18ee373cc 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackWidget.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/FeedbackDropdown/FeedbackWidget.tsx @@ -222,14 +222,14 @@ const FeedbackWidget: FC = ({ Have a technical issue? Contact{' '} - + Supabase support {' '} or{' '} - + browse our docs diff --git a/studio/pages/project/[ref]/database/backups/scheduled.tsx b/studio/pages/project/[ref]/database/backups/scheduled.tsx index 0bcba0f4ab9..2a6fe5fbd3b 100644 --- a/studio/pages/project/[ref]/database/backups/scheduled.tsx +++ b/studio/pages/project/[ref]/database/backups/scheduled.tsx @@ -64,7 +64,7 @@ const DatabaseScheduledBackups: NextPageWithLayout = () => { needed, as PITR supports a superset of functionality, in terms of the granular recovery that can be performed.{' '} Learn more diff --git a/studio/pages/project/[ref]/logs/explorer/templates.tsx b/studio/pages/project/[ref]/logs/explorer/templates.tsx index c199577067b..7eb8d932f42 100644 --- a/studio/pages/project/[ref]/logs/explorer/templates.tsx +++ b/studio/pages/project/[ref]/logs/explorer/templates.tsx @@ -42,7 +42,7 @@ const Template = ({ projectRef, template }: { projectRef?: string; template: Log text-scale-100 transition-colors group-hover:bg-brand - group-hover:text-brand-1200 + group-hover:text-brand-600 " >
    From 568e76dcdf2314911c47c1f6e76a56e491a3a864 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sun, 30 Jul 2023 17:50:33 +0800 Subject: [PATCH 14/73] update var(--*) values --- apps/docs/styles/main.scss | 2 +- .../AuthWidget/AuthWidgetSection.tsx | 14 ++++++------- apps/www/components/Charts/PGCharts.tsx | 2 +- .../InteractiveShimmerCard/index.tsx | 4 ++-- .../LaunchWeek/7/Ticket/form.module.css | 6 +++--- .../LaunchWeek/8/Ticket/form.module.css | 8 +++---- apps/www/styles/index.css | 21 ++++++++++++------- packages/config/code-hike.scss | 12 +++++------ packages/config/default-colors.js | 4 ++-- packages/config/tailwind.config.js | 4 ++-- .../src/components/GlassPanel/GlassPanel.tsx | 4 +++- .../ui/src/components/Icon/IconBackground.tsx | 2 +- packages/ui/src/lib/theme/defaultTheme.ts | 4 ++-- .../components/ui/Charts/Charts.constants.ts | 8 +++---- studio/styles/react-data-grid-logs.scss | 4 ++-- 15 files changed, 54 insertions(+), 45 deletions(-) diff --git a/apps/docs/styles/main.scss b/apps/docs/styles/main.scss index ec6e38a814e..ece45d88688 100644 --- a/apps/docs/styles/main.scss +++ b/apps/docs/styles/main.scss @@ -169,7 +169,7 @@ pre[class*='language-'] { // ToC styles .toc__menu-item--active { - color: var(--colors-brand9) !important; + color: hsl(var(--brand-default)) !important; } .video-container { diff --git a/apps/www/components/AuthWidget/AuthWidgetSection.tsx b/apps/www/components/AuthWidget/AuthWidgetSection.tsx index fe3099cf041..6d840b80c68 100644 --- a/apps/www/components/AuthWidget/AuthWidgetSection.tsx +++ b/apps/www/components/AuthWidget/AuthWidgetSection.tsx @@ -19,9 +19,9 @@ function AuthWidgetSection() { const { basePath } = useRouter() const [radius, setRadius] = useState('4px') const [brandColor, setBrandColor] = useState({ - brand: 'var(--colors-brand9)', - brandAccent: 'var(--colors-brand11)', - brandAccent2: 'var(--colors-brand3)', + brand: 'hsl(var(--brand-default))', + brandAccent: 'hsl(var(--brand-500))', + brandAccent2: 'hsl(var(--brand-200))', }) const [layout, setLayout] = useState('horizontal') @@ -140,14 +140,14 @@ function AuthWidgetSection() { - - + + + ) } @@ -451,72 +636,21 @@ export default async function Login() { -```tsx app/login.ts -import { createServerActionClient } from '@supabase/auth-helpers-nextjs' -import { revalidatePath } from 'next/cache' -import { cookies } from 'next/headers' - -import type { Database } from '@/lib/database.types' - -export const dynamic = 'force-dynamic' - -export default async function Login() { - const handleSignUp = async (formData: FormData) => { - 'use server' - const email = String(formData.get('email')) - const password = String(formData.get('password')) - - const supabase = createServerActionClient({ cookies }) - await supabase.auth.signUp({ - email, - password, - options: { - emailRedirectTo: 'http://localhost:3000/auth/callback', - }, - }) - - revalidatePath('/') - } - - const handleSignIn = async (formData: FormData) => { - 'use server' - const email = String(formData.get('email')) - const password = String(formData.get('password')) - - const supabase = createServerActionClient({ cookies }) - await supabase.auth.signInWithPassword({ - email, - password, - }) - - revalidatePath('/') - } - - const handleSignOut = async () => { - 'use server' - const supabase = createServerActionClient({ cookies }) - await supabase.auth.signOut() - revalidatePath('/') - } - +```tsx app/login.tsx +export default function Login() { return ( -
    + + + - - - + +
    ) } ``` - - -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createServerActionClient` to add type support to the Supabase client. - - -
    @@ -817,7 +951,7 @@ TypeScript types can be [generated with the Supabase CLI](/docs/reference/javasc > -```jsx app/api/todos/route.jsx +```jsx app/api/todos/route.js import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' import { NextResponse } from 'next/server' import { cookies } from 'next/headers' @@ -836,7 +970,7 @@ export async function POST(request) { -```tsx app/api/todos/route.tsx +```tsx app/api/todos/route.ts import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' import { NextResponse } from 'next/server' import { cookies } from 'next/headers' @@ -914,10 +1048,10 @@ import type { Database } from '@/lib/database.types' export const runtime = 'edge' export const dynamic = 'force-dynamic' -export default async function ServerComponent() { +export default async function Page() { const cookieStore = cookies() - const supabase = createServerComponentClient({ + const supabase = createServerComponentClient({ cookies: () => cookieStore, }) @@ -945,7 +1079,7 @@ TypeScript types can be [generated with the Supabase CLI](/docs/reference/javasc > -```jsx app/api/todos/route.jsx +```jsx app/api/todos/route.js import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' import { NextResponse } from 'next/server' import { cookies } from 'next/headers' @@ -970,7 +1104,7 @@ export async function POST(request) { -```tsx app/api/todos/route.tsx +```tsx app/api/todos/route.ts import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs' import { NextResponse } from 'next/server' import { cookies } from 'next/headers' @@ -1052,7 +1186,7 @@ export default async function Page() { -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createServerComponentClient` to add type support to the Supabase client. +TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createClient` to add type support to the Supabase client. @@ -1069,7 +1203,7 @@ TypeScript types can be [generated with the Supabase CLI](/docs/reference/javasc > -```jsx app/api/todos/route.jsx +```jsx app/api/todos/route.js import { createClient } from '@supabase/supabase-js' import { NextResponse } from 'next/server' @@ -1090,7 +1224,7 @@ export async function POST(request) { -```tsx app/api/todos/route.tsx +```tsx app/api/todos/route.ts import { createClient } from '@supabase/supabase-js' import { NextResponse } from 'next/server' @@ -1111,7 +1245,7 @@ export async function POST(request: Request) { -TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createRouteHandlerClient` to add type support to the Supabase client. +TypeScript types can be [generated with the Supabase CLI](/docs/reference/javascript/typescript-support) and passed to `createClient` to add type support to the Supabase client. From 42ed5e6e468793b8364e109f157a36327effac34 Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Tue, 1 Aug 2023 09:58:05 +0200 Subject: [PATCH 29/73] Update apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts --- .../NavigationMenu/NavigationMenu.constants.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 7ebd4ae9659..e37c4002be0 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -664,13 +664,13 @@ export const database: NavMenuConstant = { url: undefined, items: [ { name: 'Overview', url: '/guides/database/extensions/wrappers/overview' }, - { name: 'Airtable', url: '/guides/database/extensions/wrappers/airtable' }, - { name: 'AWS S3', url: '/guides/database/extensions/wrappers/s3' }, - { name: 'BigQuery', url: '/guides/database/extensions/wrappers/bigquery' }, - { name: 'ClickHouse', url: '/guides/database/extensions/wrappers/clickhouse' }, - { name: 'Firebase', url: '/guides/database/extensions/wrappers/firebase' }, - { name: 'Logflare', url: '/guides/database/extensions/wrappers/logflare' }, - { name: 'Stripe', url: '/guides/database/extensions/wrappers/stripe' }, + { name: 'Connecting to Airtable', url: '/guides/database/extensions/wrappers/airtable' }, + { name: 'Connecting to AWS S3', url: '/guides/database/extensions/wrappers/s3' }, + { name: 'Connecting to BigQuery', url: '/guides/database/extensions/wrappers/bigquery' }, + { name: 'Connecting to ClickHouse', url: '/guides/database/extensions/wrappers/clickhouse' }, + { name: 'Connecting to Firebase', url: '/guides/database/extensions/wrappers/firebase' }, + { name: 'Connecting to Logflare', url: '/guides/database/extensions/wrappers/logflare' }, + { name: 'Connecting to Stripe', url: '/guides/database/extensions/wrappers/stripe' }, ], }, { From d02d7e75f8bb7fa49b7d7d059ee2a7bb4106168b Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Tue, 1 Aug 2023 11:19:37 +0200 Subject: [PATCH 30/73] Update apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts --- .../Navigation/NavigationMenu/NavigationMenu.constants.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index e37c4002be0..75820a279ab 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -667,7 +667,10 @@ export const database: NavMenuConstant = { { name: 'Connecting to Airtable', url: '/guides/database/extensions/wrappers/airtable' }, { name: 'Connecting to AWS S3', url: '/guides/database/extensions/wrappers/s3' }, { name: 'Connecting to BigQuery', url: '/guides/database/extensions/wrappers/bigquery' }, - { name: 'Connecting to ClickHouse', url: '/guides/database/extensions/wrappers/clickhouse' }, + { + name: 'Connecting to ClickHouse', + url: '/guides/database/extensions/wrappers/clickhouse' + }, { name: 'Connecting to Firebase', url: '/guides/database/extensions/wrappers/firebase' }, { name: 'Connecting to Logflare', url: '/guides/database/extensions/wrappers/logflare' }, { name: 'Connecting to Stripe', url: '/guides/database/extensions/wrappers/stripe' }, From b411e72aded1b797c7bbe4cb126b85d1db28e42e Mon Sep 17 00:00:00 2001 From: Jan Tennert Date: Tue, 1 Aug 2023 12:06:48 +0200 Subject: [PATCH 31/73] Clarify passwort reset docs --- spec/supabase_kt_v0.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/spec/supabase_kt_v0.yml b/spec/supabase_kt_v0.yml index 7e1f6665408..bcac0e3b304 100644 --- a/spec/supabase_kt_v0.yml +++ b/spec/supabase_kt_v0.yml @@ -2571,9 +2571,7 @@ functions: - The password reset flow consist of 2 broad steps: (i) Allow the user to login via the password reset link; (ii) Update the user's password. - The `sendRecoveryEmail()` only sends a password reset link to the user's email. To update the user's password, see [`modifyUser()`](/docs/reference/kotlin/auth-updateuser). - - When the user clicks the reset link in the email they are redirected back to your application. - You can configure the URL that the user is redirected to with the `redirectUrl` parameter. - See [redirect URLs and wildcards](/docs/guides/auth#redirect-urls-and-wildcards) to add additional redirect URLs to your project. + - The user gets redirected back to your app, assuming you setup [OTP handling](/docs/reference/kotlin/initializing) - After the user has been redirected successfully, prompt them for a new password and call `modifyUser()`: ```kotlin client.gotrue.modifyUser(Email) { From 7026ad186152633088bec0f97d225cfd0052bda3 Mon Sep 17 00:00:00 2001 From: Jan Tennert Date: Tue, 1 Aug 2023 12:11:24 +0200 Subject: [PATCH 32/73] Fix wrong method --- spec/supabase_kt_v0.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/supabase_kt_v0.yml b/spec/supabase_kt_v0.yml index bcac0e3b304..07e5d59e6ce 100644 --- a/spec/supabase_kt_v0.yml +++ b/spec/supabase_kt_v0.yml @@ -2574,7 +2574,7 @@ functions: - The user gets redirected back to your app, assuming you setup [OTP handling](/docs/reference/kotlin/initializing) - After the user has been redirected successfully, prompt them for a new password and call `modifyUser()`: ```kotlin - client.gotrue.modifyUser(Email) { + client.gotrue.modifyUser { password = "1234567" } ``` From ef8c25032a037688019dd959b0ae7661c5be23c4 Mon Sep 17 00:00:00 2001 From: Jan Tennert Date: Tue, 1 Aug 2023 16:33:17 +0000 Subject: [PATCH 33/73] Fix typo --- spec/supabase_kt_v0.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/supabase_kt_v0.yml b/spec/supabase_kt_v0.yml index 07e5d59e6ce..265d6a037c9 100644 --- a/spec/supabase_kt_v0.yml +++ b/spec/supabase_kt_v0.yml @@ -2563,7 +2563,7 @@ functions: - `NotAuthenticated`, - `LoadingFromStorage`, - `NetworkError`, - - `Authenticated(sesssion)` + - `Authenticated(session)` - id: reset-password-for-email title: 'Send a password reset request' notes: | From 7239300cc32c37eb2cb38262f573b3629740ebe1 Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Tue, 1 Aug 2023 19:42:53 +0200 Subject: [PATCH 34/73] fix linting errors --- .../Navigation/NavigationMenu/NavigationMenu.constants.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 75820a279ab..f9501929869 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -667,9 +667,9 @@ export const database: NavMenuConstant = { { name: 'Connecting to Airtable', url: '/guides/database/extensions/wrappers/airtable' }, { name: 'Connecting to AWS S3', url: '/guides/database/extensions/wrappers/s3' }, { name: 'Connecting to BigQuery', url: '/guides/database/extensions/wrappers/bigquery' }, - { - name: 'Connecting to ClickHouse', - url: '/guides/database/extensions/wrappers/clickhouse' + { + name: 'Connecting to ClickHouse', + url: '/guides/database/extensions/wrappers/clickhouse', }, { name: 'Connecting to Firebase', url: '/guides/database/extensions/wrappers/firebase' }, { name: 'Connecting to Logflare', url: '/guides/database/extensions/wrappers/logflare' }, From eb5ae6e96f46f780cb39d8edebccfbfb0ec3bf41 Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Tue, 1 Aug 2023 19:43:49 +0200 Subject: [PATCH 35/73] Update apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts --- .../Navigation/NavigationMenu/NavigationMenu.constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index f9501929869..bd3528f0602 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -660,7 +660,7 @@ export const database: NavMenuConstant = { ], }, { - name: 'Wrappers', + name: 'Foreign Data Wrappers', url: undefined, items: [ { name: 'Overview', url: '/guides/database/extensions/wrappers/overview' }, From 66b1d82e3d363d7b74daeb0ffa480e75faeea87e Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 2 Aug 2023 04:18:25 +0800 Subject: [PATCH 36/73] Update studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx --- studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx b/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx index 1783a8f28e8..c0847e3788d 100644 --- a/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx +++ b/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx @@ -139,7 +139,7 @@ const APIKeys = () => { for your tables and configured policies. You may also use the service key which can be found{' '} -
    here + here {' '} to bypass RLS.

    From cdca055270b397e2752e64c8a7cbcb1da822feff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20Gr=C3=BCneberg?= Date: Wed, 2 Aug 2023 00:38:36 +0200 Subject: [PATCH 37/73] fix: only show db size warning on capped plans --- .../interfaces/Organization/Usage/Usage.constants.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/studio/components/interfaces/Organization/Usage/Usage.constants.tsx b/studio/components/interfaces/Organization/Usage/Usage.constants.tsx index 0743b1ac3d8..d38ad187a07 100644 --- a/studio/components/interfaces/Organization/Usage/Usage.constants.tsx +++ b/studio/components/interfaces/Organization/Usage/Usage.constants.tsx @@ -103,10 +103,11 @@ export const USAGE_CATEGORIES: CategoryMeta[] = [ const isApproachingLimit = hasLimit && usageRatio >= USAGE_APPROACHING_THRESHOLD const isExceededLimit = hasLimit && usageRatio >= 1 + const isCapped = usageMeta?.capped return (
    - {(isApproachingLimit || isExceededLimit) && ( + {(isApproachingLimit || isExceededLimit) && isCapped && ( Date: Tue, 1 Aug 2023 23:23:29 -0230 Subject: [PATCH 38/73] temp fix --- packages/config/code-hike.scss | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/config/code-hike.scss b/packages/config/code-hike.scss index e022649d777..0a8d5970c18 100644 --- a/packages/config/code-hike.scss +++ b/packages/config/code-hike.scss @@ -15,7 +15,8 @@ --ch-13: #5a1e02; --ch-14: #161b22; --ch-15: #8b949e; - --ch-16: hsl(var(--foreground-lighter)); + // --ch-16: hsl(var(--foreground-lighter)); + --ch-16: #2a2929; --ch-17: #264f78; --ch-18: #3794ff; --ch-19: #ffffff0b; @@ -44,7 +45,8 @@ --ch-13: #ffd8b5; --ch-14: #eaeef2; --ch-15: #57606a; - --ch-16: hsl(var(--foreground-lighter)); + // --ch-16: hsl(var(--foreground-lighter)); + --ch-16: #eeeeee; --ch-17: #add6ff; --ch-18: #1a85ff; --ch-19: #fdff0033; From 83f0193bcb8419f5d9051397a6bcb510d7f6dbd0 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 2 Aug 2023 12:38:23 +0800 Subject: [PATCH 39/73] feat: resync vercel env vars --- .../IntegrationSettings/Integration.tsx | 48 +++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx b/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx index ffd8d671337..6c547d68cf6 100644 --- a/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx +++ b/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx @@ -12,6 +12,7 @@ import { ScaffoldSectionDetail, } from 'components/layouts/Scaffold' import ConfirmationModal from 'components/ui/ConfirmationModal' +import { useIntegrationsVercelConnectionSyncEnvsMutation } from 'data/integrations/integrations-vercel-connection-sync-envs-mutation' import { IntegrationName, IntegrationProjectConnection, @@ -21,7 +22,7 @@ import { BASE_PATH } from 'lib/constants' import { pluralize } from 'lib/helpers' import { EMPTY_ARR } from 'lib/void' import { useCallback, useState } from 'react' -import { Button, Dropdown, IconChevronDown, IconTrash, Modal } from 'ui' +import { Button, Dropdown, IconChevronDown, IconLoader, IconRefreshCw, IconTrash, Modal } from 'ui' export interface IntegrationProps { title: string @@ -123,6 +124,7 @@ const IntegrationConnectionItem = ({ onDeleteConnection, }: IntegrationConnectionItemProps) => { const [isOpen, setIsOpen] = useState(false) + const [dropdownVisible, setDropdownVisible] = useState(false) const onConfirm = useCallback(async () => { try { @@ -136,6 +138,17 @@ const IntegrationConnectionItem = ({ setIsOpen(false) }, []) + const { mutateAsync: syncEnvs, isLoading: isSyncEnvLoading } = + useIntegrationsVercelConnectionSyncEnvsMutation() + + const onReSyncEnvVars = useCallback(async () => { + try { + await syncEnvs({ connectionId: connection.id }) + } finally { + setDropdownVisible(false) + } + }, [connection, syncEnvs]) + return ( <> setDropdownVisible(!dropdownVisible)} + modal={false} side="bottom" align="end" - size="large" + size="medium" overlay={ <> + {type === 'Vercel' && ( + <> + + ) : ( + + ) + } + onClick={(event) => { + // event.stopPropagation() + // event.preventDefault() + }} + onSelect={(event) => { + event.stopPropagation() + event.preventDefault() + onReSyncEnvVars() + }} + disabled={isSyncEnvLoading} + > + Re-sync environment variables + + + + )} } onSelect={() => setIsOpen(true)}> - Delete + Delete connection } From 52a3bef322d3d7f5061eea8fd89a3e98c1a77fa9 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 2 Aug 2023 12:40:50 +0800 Subject: [PATCH 40/73] Update Integration.tsx --- .../Organization/IntegrationSettings/Integration.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx b/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx index 6c547d68cf6..65af19e69c2 100644 --- a/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx +++ b/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx @@ -174,10 +174,6 @@ const IntegrationConnectionItem = ({ ) } - onClick={(event) => { - // event.stopPropagation() - // event.preventDefault() - }} onSelect={(event) => { event.stopPropagation() event.preventDefault() @@ -185,7 +181,7 @@ const IntegrationConnectionItem = ({ }} disabled={isSyncEnvLoading} > - Re-sync environment variables + Resync environment variables From 91210b68e876817ff33148c7b76bfa1d901d172b Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Wed, 2 Aug 2023 14:50:25 +1000 Subject: [PATCH 41/73] add default error handler for vercel env sync --- ...ns-vercel-connection-sync-envs-mutation.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/studio/data/integrations/integrations-vercel-connection-sync-envs-mutation.ts b/studio/data/integrations/integrations-vercel-connection-sync-envs-mutation.ts index 357bc3b6438..78240f76f43 100644 --- a/studio/data/integrations/integrations-vercel-connection-sync-envs-mutation.ts +++ b/studio/data/integrations/integrations-vercel-connection-sync-envs-mutation.ts @@ -1,5 +1,8 @@ -import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query' +import { useMutation, UseMutationOptions } from '@tanstack/react-query' +import { toast } from 'react-hot-toast' + import { post } from 'data/fetchers' +import { ResponseError } from 'types' export type IntegrationsVercelConnectionSyncEnvsVariables = { connectionId: string @@ -29,25 +32,31 @@ type IntegrationsVercelConnectionSyncEnvsData = Awaited< export const useIntegrationsVercelConnectionSyncEnvsMutation = ({ onSuccess, + onError, ...options }: Omit< UseMutationOptions< IntegrationsVercelConnectionSyncEnvsData, - unknown, + ResponseError, IntegrationsVercelConnectionSyncEnvsVariables >, 'mutationFn' > = {}) => { - const queryClient = useQueryClient() - return useMutation< IntegrationsVercelConnectionSyncEnvsData, - unknown, + ResponseError, IntegrationsVercelConnectionSyncEnvsVariables >((vars) => syncEnvsIntegrationsVercelConnection(vars), { async onSuccess(data, variables, context) { await onSuccess?.(data, variables, context) }, + async onError(data, variables, context) { + if (onError === undefined) { + toast.error(`Failed to sync environment variables: ${data.message}`) + } else { + onError(data, variables, context) + } + }, ...options, }) } From 17be4841cb5c9b26fef76732a1e11215e4de62d2 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 2 Aug 2023 13:02:47 +0800 Subject: [PATCH 42/73] Update Integration.tsx --- .../interfaces/Organization/IntegrationSettings/Integration.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx b/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx index 65af19e69c2..08ee496acad 100644 --- a/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx +++ b/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx @@ -175,7 +175,6 @@ const IntegrationConnectionItem = ({ ) } onSelect={(event) => { - event.stopPropagation() event.preventDefault() onReSyncEnvVars() }} From cd0a7edadc31889a2ff421c76d616062e367835f Mon Sep 17 00:00:00 2001 From: Francesco Sansalvadore Date: Wed, 2 Aug 2023 08:47:02 +0200 Subject: [PATCH 43/73] lw8: add meetups section --- .../components/LaunchWeek/8/LW8Meetups.tsx | 111 ++++++++++++++++++ apps/www/pages/launch-week/index.tsx | 14 ++- .../pages/launch-week/tickets/[username].tsx | 2 +- apps/www/pages/launch-week/tickets/index.tsx | 2 +- 4 files changed, 125 insertions(+), 4 deletions(-) create mode 100644 apps/www/components/LaunchWeek/8/LW8Meetups.tsx diff --git a/apps/www/components/LaunchWeek/8/LW8Meetups.tsx b/apps/www/components/LaunchWeek/8/LW8Meetups.tsx new file mode 100644 index 00000000000..dbcce1ec01c --- /dev/null +++ b/apps/www/components/LaunchWeek/8/LW8Meetups.tsx @@ -0,0 +1,111 @@ +import Link from 'next/link' +import React, { useEffect, useState } from 'react' +import { Badge } from 'ui' +import useConfData from '../hooks/use-conf-data' + +export interface Meetup { + id?: any + title: string + isLive: boolean + link: string + display_info: string + start_at: string +} + +const LW8Meetups = ({ meetups }: { meetups?: Meetup[] }) => { + const { supabase } = useConfData() + const [meets, setMeets] = useState(meetups ?? []) + const [realtimeChannel, setRealtimeChannel] = useState | null>(null) + + useEffect(() => { + // Listen to realtime changes + if (supabase && !realtimeChannel) { + const channel = supabase + .channel('changes') + .on( + 'postgres_changes', + { + event: 'UPDATE', + schema: 'public', + table: 'lw8_meetups', + }, + async () => { + const { data: newMeets, error } = await supabase.from('lw8_meetups').select('*') + console.log('newMeets error', error) + console.log('newMeets', newMeets) + setMeets(newMeets) + } + ) + .subscribe() + setRealtimeChannel(channel) + } + + return () => { + // Cleanup realtime subscription on unmount + realtimeChannel?.unsubscribe() + } + }, []) + + useEffect(() => { + console.log('meetups', meets) + }, [meets]) + + return ( +
    +
    +

    Join us live

    +

    + Celebrate LW8 with us at our first-ever live meetups across various locations. Join the + fun, grab some swag, and be a part of the Supabase community. +

    +
    +
    + {meets && + meets + ?.sort((a, b) => (new Date(a.start_at) > new Date(b.start_at) ? 1 : -1)) + .map(({ display_info, link, isLive, title }: Meetup) => ( + + +
    + {title} + {isLive && Live now} + + + + + +
    + {display_info && ( + {display_info} + )} +
    + + ))} +
    +
    + ) +} + +export default LW8Meetups diff --git a/apps/www/pages/launch-week/index.tsx b/apps/www/pages/launch-week/index.tsx index a44ac87bf85..4b41360d683 100644 --- a/apps/www/pages/launch-week/index.tsx +++ b/apps/www/pages/launch-week/index.tsx @@ -11,6 +11,7 @@ import { PageState, ConfDataContext, UserData } from '~/components/LaunchWeek/ho import DefaultLayout from '~/components/Layouts/Default' import SectionContainer from '~/components/Layouts/SectionContainer' import { LaunchWeekLogoHeader } from '~/components/LaunchWeek/8/LaunchWeekLogoHeader' +import { Meetup } from '~/components/LaunchWeek/8/LW8Meetups' import { useTheme } from 'common/Providers' @@ -21,6 +22,7 @@ const AnimatedParticles = dynamic( () => import('~/components/LaunchWeek/8/AnimatedParticles/ParticlesCanvas') ) const TicketContainer = dynamic(() => import('~/components/LaunchWeek/8/Ticket/TicketContainer')) +const LW8Meetups = dynamic(() => import('~/components/LaunchWeek/8/LW8Meetups')) const LaunchWeekPrizeSection = dynamic( () => import('~/components/LaunchWeek/8/LaunchWeekPrizeSection') ) @@ -29,6 +31,7 @@ const CTABanner = dynamic(() => import('~/components/CTABanner')) interface Props { users?: UserData[] + meetups?: Meetup[] } const supabaseAdmin = createClient( @@ -39,7 +42,7 @@ const supabaseAdmin = createClient( 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im9idWxkYW5ycHRsb2t0eGNmZnZuIiwicm9sZSI6ImFub24iLCJpYXQiOjE2Njk3MjcwMTIsImV4cCI6MTk4NTMwMzAxMn0.SZLqryz_-stF8dgzeVXmzZWPOqdOrBwqJROlFES8v3I' ) -export default function TicketHome({ users }: Props) { +export default function TicketHome({ users, meetups }: Props) { const { query } = useRouter() const TITLE = 'Supabase LaunchWeek 8' @@ -149,7 +152,7 @@ export default function TicketHome({ users }: Props) { />
    -
    +
    + + + +
    {supabase && (
    @@ -191,9 +198,12 @@ export const getServerSideProps: GetServerSideProps = async ({ req, res }) => { .from('lw8_tickets_golden') .select('username, golden', { count: 'exact' }) + const { data: meetups } = await supabaseAdmin!.from('lw8_meetups').select('*') + return { props: { users, + meetups, }, } } diff --git a/apps/www/pages/launch-week/tickets/[username].tsx b/apps/www/pages/launch-week/tickets/[username].tsx index 37808e679e4..0aa62979f24 100644 --- a/apps/www/pages/launch-week/tickets/[username].tsx +++ b/apps/www/pages/launch-week/tickets/[username].tsx @@ -114,7 +114,7 @@ export default function UsernamePage({ user, users, ogImageUrl }: Props) { )}
    -
    +
    -
    +
    Date: Wed, 2 Aug 2023 08:55:35 +0200 Subject: [PATCH 44/73] lw8: limit stars in constellation and cleanup console logs --- apps/www/components/LaunchWeek/8/LW8Meetups.tsx | 8 +------- apps/www/pages/launch-week/index.tsx | 5 +++-- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/apps/www/components/LaunchWeek/8/LW8Meetups.tsx b/apps/www/components/LaunchWeek/8/LW8Meetups.tsx index dbcce1ec01c..be2913f2540 100644 --- a/apps/www/components/LaunchWeek/8/LW8Meetups.tsx +++ b/apps/www/components/LaunchWeek/8/LW8Meetups.tsx @@ -32,9 +32,7 @@ const LW8Meetups = ({ meetups }: { meetups?: Meetup[] }) => { table: 'lw8_meetups', }, async () => { - const { data: newMeets, error } = await supabase.from('lw8_meetups').select('*') - console.log('newMeets error', error) - console.log('newMeets', newMeets) + const { data: newMeets } = await supabase.from('lw8_meetups').select('*') setMeets(newMeets) } ) @@ -48,10 +46,6 @@ const LW8Meetups = ({ meetups }: { meetups?: Meetup[] }) => { } }, []) - useEffect(() => { - console.log('meetups', meets) - }, [meets]) - return (
    diff --git a/apps/www/pages/launch-week/index.tsx b/apps/www/pages/launch-week/index.tsx index 4b41360d683..ba868c312e2 100644 --- a/apps/www/pages/launch-week/index.tsx +++ b/apps/www/pages/launch-week/index.tsx @@ -192,11 +192,12 @@ export default function TicketHome({ users, meetups }: Props) { ) } -export const getServerSideProps: GetServerSideProps = async ({ req, res }) => { +export const getServerSideProps: GetServerSideProps = async () => { // fetch users for the TicketBrickWall const { data: users } = await supabaseAdmin! .from('lw8_tickets_golden') - .select('username, golden', { count: 'exact' }) + .select('username, golden') + .limit(1000) const { data: meetups } = await supabaseAdmin!.from('lw8_meetups').select('*') From e9b7882f410b3416b029983ff645fce08c040a64 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 2 Aug 2023 16:19:18 +0800 Subject: [PATCH 45/73] Remove usage of env var in getReturnToPath, default fallback to /projects --- studio/lib/gotrue.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/studio/lib/gotrue.ts b/studio/lib/gotrue.ts index d83f9e902c9..9a285edf300 100644 --- a/studio/lib/gotrue.ts +++ b/studio/lib/gotrue.ts @@ -1,6 +1,5 @@ import { User } from '@supabase/gotrue-js' import { gotrueClient } from 'common' -import { DEFAULT_HOME, IS_PLATFORM } from './constants' export { STORAGE_KEY } from 'common' export const auth = gotrueClient @@ -37,7 +36,7 @@ export const getIdentity = (gotrueUser: User) => { // NOTE: do not use any imports in this function as it is used standalone in the documents head // [Joshen] Potentially can remove after full move over to /dashboard -export const getReturnToPath = (fallback = DEFAULT_HOME) => { +export const getReturnToPath = (fallback = '/projects') => { const searchParams = new URLSearchParams(location.search) // [Joshen] Remove base path value ("/dashboard") from returnTo From 761cbee5408b2ac30046d0fcccce28a3b98b16b6 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 2 Aug 2023 16:41:02 +0800 Subject: [PATCH 46/73] convert retrieving database size to RQ on reports/database --- studio/data/database/database-size-query.ts | 36 ++++++++++++++++++ .../pages/project/[ref]/reports/database.tsx | 37 ++++++------------- 2 files changed, 47 insertions(+), 26 deletions(-) create mode 100644 studio/data/database/database-size-query.ts diff --git a/studio/data/database/database-size-query.ts b/studio/data/database/database-size-query.ts new file mode 100644 index 00000000000..3676d47365d --- /dev/null +++ b/studio/data/database/database-size-query.ts @@ -0,0 +1,36 @@ +import { UseQueryOptions } from '@tanstack/react-query' +import { ExecuteSqlData, useExecuteSqlQuery } from '../sql/execute-sql-query' + +export const getDatabaseSizeQuery = () => { + const sql = /* SQL */ ` +select sum(pg_database_size(pg_database.datname))::bigint as db_size from pg_database; +`.trim() + + return sql +} + +export type DatabaseSizeVariables = { + projectRef?: string + connectionString?: string +} + +export type DatabaseSizeData = { result: { db_size: number }[] } +export type DatabaseSizeError = unknown + +export const useDatabaseSizeQuery = ( + { projectRef, connectionString }: DatabaseSizeVariables, + options: UseQueryOptions = {} +) => { + return useExecuteSqlQuery( + { + projectRef, + connectionString, + sql: getDatabaseSizeQuery(), + queryKey: ['database-size'], + }, + { + ...options, + staleTime: 1000 * 60, // default good for a minute + } + ) +} diff --git a/studio/pages/project/[ref]/reports/database.tsx b/studio/pages/project/[ref]/reports/database.tsx index 03e276c2b09..49367c6f4e5 100644 --- a/studio/pages/project/[ref]/reports/database.tsx +++ b/studio/pages/project/[ref]/reports/database.tsx @@ -1,9 +1,8 @@ import dayjs from 'dayjs' import { observer } from 'mobx-react-lite' -import { useEffect, useState } from 'react' +import { useState } from 'react' import { useParams } from 'common/hooks' -import { useStore } from 'hooks' import { TIME_PERIODS_INFRA, USAGE_APPROACHING_THRESHOLD } from 'lib/constants' import { formatBytes } from 'lib/helpers' import { NextPageWithLayout } from 'types' @@ -15,8 +14,9 @@ import ChartHandler from 'components/to-be-cleaned/Charts/ChartHandler' import DateRangePicker from 'components/to-be-cleaned/DateRangePicker' import Panel from 'components/ui/Panel' import SparkBar from 'components/ui/SparkBar' -import { useProjectUsageQuery } from 'data/usage/project-usage-query' +import { useDatabaseSizeQuery } from 'data/database/database-size-query' import { useProjectSubscriptionV2Query } from 'data/subscriptions/project-subscription-v2-query' +import { useProjectUsageQuery } from 'data/usage/project-usage-query' const DatabaseReport: NextPageWithLayout = () => { return ( @@ -35,36 +35,21 @@ DatabaseReport.getLayout = (page) => {page} { - const { meta, ui } = useStore() - const { project } = useProjectContext() - const [databaseSize, setDatabaseSize] = useState(0) - const [dateRange, setDateRange] = useState(undefined) - const { ref: projectRef } = useParams() + const { project } = useProjectContext() const { data: usage } = useProjectUsageQuery({ projectRef }) const { data: subscription } = useProjectSubscriptionV2Query({ projectRef }) + const [dateRange, setDateRange] = useState(undefined) + const databaseSizeLimit = usage?.db_size?.limit ?? 0 const databaseEgressLimit = usage?.db_egress?.limit ?? 0 - useEffect(() => { - let cancel = false - const getDatabaseSize = async () => { - const res = await meta.query( - 'select sum(pg_database_size(pg_database.datname))::bigint as db_size from pg_database;' - ) - if (!res.error && !cancel) { - setDatabaseSize(res[0].db_size) - } else { - ui.setNotification({ category: 'error', message: 'Failed to retrieve database size' }) - } - } - getDatabaseSize() - - return () => { - cancel = true - } - }, []) + const { data } = useDatabaseSizeQuery({ + projectRef: project?.ref, + connectionString: project?.connectionString, + }) + const databaseSize = data?.result[0].db_size ?? 0 const databaseSizeUsageRatio = databaseSize / databaseSizeLimit const sizeIsApproaching = databaseSizeUsageRatio >= USAGE_APPROACHING_THRESHOLD From bac2a4b8af858c194e0eb68abd4a192b4ee27fe6 Mon Sep 17 00:00:00 2001 From: Joel Lee Date: Wed, 2 Aug 2023 10:42:54 +0200 Subject: [PATCH 47/73] chore: clarify use of whatsapp otp with twilio verify --- apps/docs/pages/guides/auth/phone-login/twilio.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/auth/phone-login/twilio.mdx b/apps/docs/pages/guides/auth/phone-login/twilio.mdx index 60277debe66..0041b693113 100644 --- a/apps/docs/pages/guides/auth/phone-login/twilio.mdx +++ b/apps/docs/pages/guides/auth/phone-login/twilio.mdx @@ -329,7 +329,7 @@ In some cases, you may wish to use WhatsApp as a delivery channel instead. Here - You wish for a secure channel - Your users mostly use WhatsApp as a messaging platform -To make use of WhatsApp OTP, please complete the following steps: +Whatsapp OTPs can be used with Twilio Verify without additional configuration. To make use of WhatsApp OTP with Twilio Programmable Messaging, please complete the following steps: - Go through the [Twilio self sign up guide for WhatsApp](https://www.twilio.com/docs/whatsapp/self-sign-up) - Submit a template via the [Twilio Guide For Submitting WhatsApp templates](https://www.twilio.com/docs/whatsapp/tutorial/send-whatsapp-notification-messages-templates#creating-message-templates-and-submitting-them-for-approval) From efb36a3d39cc4d2fd9b8674f1046f4a685f5e82c Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 2 Aug 2023 16:43:58 +0800 Subject: [PATCH 48/73] Fix invalid href error for org settings new nav --- .../layouts/SettingsLayout/OrganizationSettingsMenu.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx b/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx index ee1ff6fe3d7..bf8a585a2e6 100644 --- a/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx +++ b/studio/components/layouts/SettingsLayout/OrganizationSettingsMenu.tsx @@ -28,7 +28,9 @@ const OrganizationSettingsMenu = () => { ))} From 3e2d22ea36edcb9f6b080345839108bfda769a45 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 2 Aug 2023 16:51:47 +0800 Subject: [PATCH 49/73] Fix test --- studio/tests/unit/get-return-to-path.test.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/studio/tests/unit/get-return-to-path.test.ts b/studio/tests/unit/get-return-to-path.test.ts index 5b11a40ae13..f7951444c17 100644 --- a/studio/tests/unit/get-return-to-path.test.ts +++ b/studio/tests/unit/get-return-to-path.test.ts @@ -1,9 +1,8 @@ import { getReturnToPath } from 'lib/gotrue' -import { DEFAULT_HOME } from 'lib/constants' describe(`getReturnToPath`, () => { it(`returns to /projects when no fallback is provided`, () => { - expect(getReturnToPath()).toBe(DEFAULT_HOME) + expect(getReturnToPath()).toBe('/projects') }) it(`returns to /custom when fallback is provided`, () => { @@ -34,7 +33,7 @@ describe(`getReturnToPath`, () => { // @ts-ignore window.location = { search: `?returnTo=https://google.com` } - expect(getReturnToPath()).toBe(DEFAULT_HOME) + expect(getReturnToPath()).toBe('/projects') }) it(`does not allow XSS`, () => { @@ -43,7 +42,7 @@ describe(`getReturnToPath`, () => { // @ts-ignore window.location = { search: `?returnTo=javascript:alert(1)` } - expect(getReturnToPath()).toBe(DEFAULT_HOME) + expect(getReturnToPath()).toBe('/projects') }) it(`does not allow XSS with encoded characters`, () => { @@ -52,6 +51,6 @@ describe(`getReturnToPath`, () => { // @ts-ignore window.location = { search: `?returnTo=javascript%3Aalert%281%29` } - expect(getReturnToPath()).toBe(DEFAULT_HOME) + expect(getReturnToPath()).toBe('/projects') }) }) From 11227c3a967a9a02f4351bdbfe72c48236e17715 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 2 Aug 2023 16:58:20 +0800 Subject: [PATCH 50/73] small style fix --- studio/components/ui/PasswordStrengthBar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/ui/PasswordStrengthBar.tsx b/studio/components/ui/PasswordStrengthBar.tsx index 8a82411b562..38ba5a101fd 100644 --- a/studio/components/ui/PasswordStrengthBar.tsx +++ b/studio/components/ui/PasswordStrengthBar.tsx @@ -39,7 +39,7 @@ const PasswordStrengthBar = ({ ? passwordStrengthMessage : 'This is the password to your postgres database, so it must be strong and hard to guess.'}{' '} Generate a password From 983d50e7460eccd5c67e31741e51f0afe5aed413 Mon Sep 17 00:00:00 2001 From: Joel Lee Date: Wed, 2 Aug 2023 11:43:53 +0200 Subject: [PATCH 51/73] Update apps/docs/pages/guides/auth/phone-login/twilio.mdx Co-authored-by: Stojan Dimitrovski --- apps/docs/pages/guides/auth/phone-login/twilio.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/auth/phone-login/twilio.mdx b/apps/docs/pages/guides/auth/phone-login/twilio.mdx index 0041b693113..01b16e358f9 100644 --- a/apps/docs/pages/guides/auth/phone-login/twilio.mdx +++ b/apps/docs/pages/guides/auth/phone-login/twilio.mdx @@ -329,7 +329,7 @@ In some cases, you may wish to use WhatsApp as a delivery channel instead. Here - You wish for a secure channel - Your users mostly use WhatsApp as a messaging platform -Whatsapp OTPs can be used with Twilio Verify without additional configuration. To make use of WhatsApp OTP with Twilio Programmable Messaging, please complete the following steps: +WhatsApp OTPs can be used with Twilio Verify without additional configuration. To make use of WhatsApp OTP with Twilio Programmable Messaging, please complete the following steps: - Go through the [Twilio self sign up guide for WhatsApp](https://www.twilio.com/docs/whatsapp/self-sign-up) - Submit a template via the [Twilio Guide For Submitting WhatsApp templates](https://www.twilio.com/docs/whatsapp/tutorial/send-whatsapp-notification-messages-templates#creating-message-templates-and-submitting-them-for-approval) From d49236d756bdcbe5559f18db288bc78a2c1f3ce3 Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Wed, 2 Aug 2023 03:29:10 -0700 Subject: [PATCH 52/73] chore: update image versions for docker/docker-compose.yml --- docker/docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 432c5409ee5..153418c7ab4 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -61,7 +61,7 @@ services: auth: container_name: supabase-auth - image: supabase/gotrue:v2.62.1 + image: supabase/gotrue:v2.82.4 depends_on: db: # Disable this if you are using an external Postgres database @@ -247,7 +247,7 @@ services: functions: container_name: supabase-edge-functions - image: supabase/edge-runtime:v1.6.6 + image: supabase/edge-runtime:v1.8.1 restart: unless-stopped environment: JWT_SECRET: ${JWT_SECRET} @@ -267,7 +267,7 @@ services: # Comment out everything below this point if you are using an external Postgres database db: container_name: supabase-db - image: supabase/postgres:15.1.0.90 + image: supabase/postgres:15.1.0.103 healthcheck: test: pg_isready -U postgres -h localhost interval: 5s From 47d99f4f119c000c4ac36fed3f21fdccea6dc8da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ramiro=20Nu=C3=B1ez=20Dosio?= Date: Wed, 2 Aug 2023 12:07:33 +0100 Subject: [PATCH 53/73] New blog: Supabase Beta July 2023 Added new Beta Update blog post. --- .../_blog/2023-08-01-beta-update-july-2023.md | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 apps/www/_blog/2023-08-01-beta-update-july-2023.md diff --git a/apps/www/_blog/2023-08-01-beta-update-july-2023.md b/apps/www/_blog/2023-08-01-beta-update-july-2023.md new file mode 100644 index 00000000000..3910f889d9b --- /dev/null +++ b/apps/www/_blog/2023-08-01-beta-update-july-2023.md @@ -0,0 +1,102 @@ +x--- +title: Supabase Beta July 2023 +description: WIP +author: ant_wilson +image: /storage/v1/object/public/images/marketing-emails/beta-update-july.png +thumb: /storage/v1/object/public/images/marketing-emails/beta-update-july.png +tags: + - release-notes +date: '2023-08-02' +toc_depth: 3 +--- + +Next Monday is Launch Week 🎱, where we’ll be announcing a tonne of surprises. In the meantime, here’s a summary of everything we shipped in July. Read on! + +## Supabase Launch Week 8 + +!(Supabase Launch Week 8)[https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/launch-week.png] + +Launch Week 8 starts next week. We’ll be announcing one new major feature every day for an entire week (with a few bonus surprises along the way). Get your ticket and tune in on Monday the 7th. + +[Get your ticket](https://supabase.com/launch-week) + +## New Android Kotlin Library + +!(New Android Kotlin Library)[https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/android-kotlin.png?t=2023-08-02T11%3A05%3A46.805Z] + +Are you a mobile dev? We now have client libraries for Android. This is thanks to one of our community members - [@TheRealJanGER](https://twitter.com/TheRealJanGER). Try it out, and if you want to help us maintain the library let us know. + +[Quickstart](https://supabase.com/docs/guides/getting-started/quickstarts/kotlin) + +[Tutorial](https://supabase.com/docs/guides/getting-started/tutorials/with-kotlin) + +## pgvector 0.4.0 performance + +!(pgvector 0.4.0 performance)[https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/pgvector.png] + +There's been a lot of talk about pgvector performance, so we pushed it to the limits to figure out its strengths and limitations. The good news is that work has already [started](https://github.com/pgvector/pgvector/tree/hnsw) on HNSW, and isn’t far away. + +[Read the benchmark](https://supabase.com/blog/pgvector-performance) + +## Quick product announcements + +- [**Postgres Tooling**] pgsodium 3.1.8 released +- [**Postgres Tooling**] PostgREST 11.1 is now live. [Blog post](https://supabase.com/blog/postgrest-11-1-release) +- [**Auth**] You can now use Resend as a custom SMTP provider. [Doc](https://www.notion.so/Clicking-on-https-supabase-com-docs-reference-dart-functions-invoke-redirects-to-https-supabase--fb705ffc7cbb41fd98b31ab9c8772019?pvs=21) + +## Egghead course: Twitter Clone with the Next.js App Router + +![Egghead course: Twitter Clone with the Next.js App Router](https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/egghead-course.png?t=2023-08-02T10%3A55%3A17.908Z) + +Should we rebrand to X Clone? Next.js App router is ushering in the next era of web development. What a best way to learn to navigate it than by building a full-stack app? + +[Course](https://egghead.io/courses/build-a-twitter-clone-with-the-next-js-app-router-and-supabase-19bebadb) + +## Twitter Space: Launch Week 8 - Kickoff 🏈 + +![Twitter Space](https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/twitter-space.png?t=2023-08-02T11%3A05%3A03.838Z) + +After Monday's announcement, we are kicking off LW8 with a very cool Twitter Space, featuring the DevRel team and guests. Bring your questions! + +10:00 AM PT | 1:00 PM ET | 06:00 PM UK + +[Set reminder](https://twitter.com/i/spaces/1DXGyvjkeEeJM) + +## Made with Supabase + +![Made with Supabase: Snowchat](https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/snowchat.png) + +[snowChat](https://snowchat.streamlit.app/) | An intuitive and user-friendly application that allows you to interact with your Snowflake data using natural language queries. Built by [Kaarthik Andavar](https://twitter.com/kaarthikcodes) using Python, Streamlit, Open AI, and Supabase Vector. + +## Extended Community Highlights + +![Community Highlights](https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/community-highlights.png) + +- Build a Simple Dropbox clone using Deno, DenoKV, Fresh and Supabase. [Video Tutorial](https://www.youtube.com/watch?v=_WerF8YMqks) +- Safeguarding Data Integrity with pg_safeupdate in PostgreSQL and Supabase. [Blog post](https://www.notion.so/809925346af243b3a4ede8774e71472c?pvs=21) +- Supabase for C#: Streamlining Backend Development with Database Magic. [Blog post](https://themurph.hashnode.dev/supabase-csharp) +- Building an MVP app using Supabase. [Blog post](https://www.antstack.com/blog/building-an-mvp-app-using-supabase/) +- Fortify Your Application With Supabase: Exploring Fine-Grained Control with Row-Level Security and OAuth Sign-in. [Article](https://techconative.com/blog/supabase-rls-security-oauth-authentication/) +- Using Supabase authentication in NestJs. [Tutorial](https://blog.iamstarcode.com/using-supabase-authentication-in-nestjs) + +## Supabase in Times Square + +![Supabase in Times Square](https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/times-sq.png?t=2023-08-02T11%3A04%3A14.458Z) + +The Redpoint team put together InfraRed 100, a report that recognizes 100 transformative companies in cloud infrastructure. We are honoured to be included with so many amazing companies we admire 🙇🏻‍♂️. They even featured us on a billboard in Times Square to celebrate. + +[Read the full report](https://www.redpoint.com/infrared/100/) + +## We’re Hiring + +- [Support Engineer (APAC)](https://boards.greenhouse.io/supabase/jobs/4934378004) +- [FullStack Engineer Billing](https://www.notion.so/Beta-Update-July-Monday-31st-10386eba40934ea597ee5e5b1b81574e?pvs=21) + +## ⚠️ Baking hot meme zone ⚠️ + +If you made it this far in the email you deserve a devilish treat. + +NPCs represent… + +![July's favorite meme](https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/supabase-meme.png) + From c0981e232dab1e88ddfb14019b81a653317f55ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ramiro=20Nu=C3=B1ez=20Dosio?= Date: Wed, 2 Aug 2023 12:09:01 +0100 Subject: [PATCH 54/73] Fix and added description. --- apps/www/_blog/2023-08-01-beta-update-july-2023.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/www/_blog/2023-08-01-beta-update-july-2023.md b/apps/www/_blog/2023-08-01-beta-update-july-2023.md index 3910f889d9b..f105098da83 100644 --- a/apps/www/_blog/2023-08-01-beta-update-july-2023.md +++ b/apps/www/_blog/2023-08-01-beta-update-july-2023.md @@ -1,6 +1,6 @@ -x--- +--- title: Supabase Beta July 2023 -description: WIP +description: Launch Week 8 is coming, but we still shipped some goodies during July! author: ant_wilson image: /storage/v1/object/public/images/marketing-emails/beta-update-july.png thumb: /storage/v1/object/public/images/marketing-emails/beta-update-july.png From 1f1ff8444715a5cb5604bdc850f2f8fd0f320456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ramiro=20Nu=C3=B1ez=20Dosio?= Date: Wed, 2 Aug 2023 12:37:28 +0100 Subject: [PATCH 55/73] Added more content. --- apps/www/_blog/2023-08-01-beta-update-july-2023.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/www/_blog/2023-08-01-beta-update-july-2023.md b/apps/www/_blog/2023-08-01-beta-update-july-2023.md index f105098da83..e242e7c5df1 100644 --- a/apps/www/_blog/2023-08-01-beta-update-july-2023.md +++ b/apps/www/_blog/2023-08-01-beta-update-july-2023.md @@ -78,6 +78,9 @@ After Monday's announcement, we are kicking off LW8 with a very cool Twitter Spa - Building an MVP app using Supabase. [Blog post](https://www.antstack.com/blog/building-an-mvp-app-using-supabase/) - Fortify Your Application With Supabase: Exploring Fine-Grained Control with Row-Level Security and OAuth Sign-in. [Article](https://techconative.com/blog/supabase-rls-security-oauth-authentication/) - Using Supabase authentication in NestJs. [Tutorial](https://blog.iamstarcode.com/using-supabase-authentication-in-nestjs) +- React Native file upload with Supabase Storage. [Tutorial](https://supabase.com/blog/react-native-storage) | [Video](https://www.youtube.com/watch?v=am6w5zEDk_g) +- Safeguarding Data Integrity with pg_safeupdate in PostgreSQL and Supabase. [Blog Post](https://blog.mansueli.com/safeguarding-data-integrity-with-pg-safeupdate-in-postgresql-and-supabase) +- Supabase almost SHUT ME DOWN. [Video](https://www.youtube.com/watch?v=2WHTZa4ENfc) ## Supabase in Times Square From 5398451f5b151116d01a18462babf52a80f98a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ramiro=20Nu=C3=B1ez=20Dosio?= Date: Wed, 2 Aug 2023 12:44:41 +0100 Subject: [PATCH 56/73] Added og image. --- ...3.md => 2023-08-02-beta-update-july-2023.md} | 4 ++-- .../july-2023-beta-update.png | Bin 0 -> 43498 bytes 2 files changed, 2 insertions(+), 2 deletions(-) rename apps/www/_blog/{2023-08-01-beta-update-july-2023.md => 2023-08-02-beta-update-july-2023.md} (97%) create mode 100644 apps/www/public/images/blog/2023-08-02-july-2023-beta-update/july-2023-beta-update.png diff --git a/apps/www/_blog/2023-08-01-beta-update-july-2023.md b/apps/www/_blog/2023-08-02-beta-update-july-2023.md similarity index 97% rename from apps/www/_blog/2023-08-01-beta-update-july-2023.md rename to apps/www/_blog/2023-08-02-beta-update-july-2023.md index e242e7c5df1..b815e9f1fac 100644 --- a/apps/www/_blog/2023-08-01-beta-update-july-2023.md +++ b/apps/www/_blog/2023-08-02-beta-update-july-2023.md @@ -2,8 +2,8 @@ title: Supabase Beta July 2023 description: Launch Week 8 is coming, but we still shipped some goodies during July! author: ant_wilson -image: /storage/v1/object/public/images/marketing-emails/beta-update-july.png -thumb: /storage/v1/object/public/images/marketing-emails/beta-update-july.png +image: 2023-08-02-july-2023-beta-update/july-2023-beta-update.png +thumb: 2023-08-02-july-2023-beta-update/july-2023-beta-update.png tags: - release-notes date: '2023-08-02' diff --git a/apps/www/public/images/blog/2023-08-02-july-2023-beta-update/july-2023-beta-update.png b/apps/www/public/images/blog/2023-08-02-july-2023-beta-update/july-2023-beta-update.png new file mode 100644 index 0000000000000000000000000000000000000000..1b75bf3f00392019136b0a0606599efa17512221 GIT binary patch literal 43498 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 Date: Wed, 2 Aug 2023 13:15:01 +0100 Subject: [PATCH 57/73] Fix. --- apps/www/_blog/2023-08-02-beta-update-july-2023.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/www/_blog/2023-08-02-beta-update-july-2023.md b/apps/www/_blog/2023-08-02-beta-update-july-2023.md index b815e9f1fac..7d07c73eeb2 100644 --- a/apps/www/_blog/2023-08-02-beta-update-july-2023.md +++ b/apps/www/_blog/2023-08-02-beta-update-july-2023.md @@ -1,6 +1,6 @@ --- title: Supabase Beta July 2023 -description: Launch Week 8 is coming, but we still shipped some goodies during July! +description: Launch Week 8 is coming - but we still shipped some goodies during July author: ant_wilson image: 2023-08-02-july-2023-beta-update/july-2023-beta-update.png thumb: 2023-08-02-july-2023-beta-update/july-2023-beta-update.png From 941dcd8260e1b36aea1305aaf82e93c087c16c22 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 2 Aug 2023 20:37:03 +0800 Subject: [PATCH 58/73] wrong file extension --- ...a-update-july-2023.md => 2023-08-02-beta-update-july-2023.mdx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename apps/www/_blog/{2023-08-02-beta-update-july-2023.md => 2023-08-02-beta-update-july-2023.mdx} (100%) diff --git a/apps/www/_blog/2023-08-02-beta-update-july-2023.md b/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx similarity index 100% rename from apps/www/_blog/2023-08-02-beta-update-july-2023.md rename to apps/www/_blog/2023-08-02-beta-update-july-2023.mdx From 21a12d4ef6ae8a09774de62f3a7bc967427e2fdd Mon Sep 17 00:00:00 2001 From: Francesco Sansalvadore Date: Wed, 2 Aug 2023 14:43:06 +0200 Subject: [PATCH 59/73] Add lw8 intro callouts --- .../LaunchWeek/8/LW8CalloutsSection.tsx | 54 +++ .../8/Releases/components/index.tsx | 337 ++++++++++++++++++ apps/www/pages/launch-week/index.tsx | 5 + 3 files changed, 396 insertions(+) create mode 100644 apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx create mode 100644 apps/www/components/LaunchWeek/8/Releases/components/index.tsx diff --git a/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx b/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx new file mode 100644 index 00000000000..737d2a14a89 --- /dev/null +++ b/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx @@ -0,0 +1,54 @@ +import React from 'react' +import SectionContainer from '../../Layouts/SectionContainer' +import { SmallCard } from '../8/Releases/components' +import Link from 'next/link' +import Image from 'next/image' + +const LW8CalloutsSection = () => { + return ( + + + + ) +} + +export default LW8CalloutsSection diff --git a/apps/www/components/LaunchWeek/8/Releases/components/index.tsx b/apps/www/components/LaunchWeek/8/Releases/components/index.tsx new file mode 100644 index 00000000000..58a6ab51863 --- /dev/null +++ b/apps/www/components/LaunchWeek/8/Releases/components/index.tsx @@ -0,0 +1,337 @@ +import { Badge } from 'ui' + +import Link from 'next/link' +import CountdownComponent from '../../Countdown' + +export const PencilSvg = () => ( + + + +) +export const DocsSvg = () => ( + + + +) +export const PlaySvg = () => ( + + + +) +export const GithubSvg = () => ( + + + +) +export const LinkSvg = () => ( + + + +) +export const ArrowTopRightSvg = () => ( + + + + +) +export const HackernewsSvg = () => ( + + + +) + +export const SmallCard = ({ className, children }: { className?: string; children: any }) => ( +
    +
    + {children} +
    +
    +) + +export const StyledArticleBadge = ({ + className, + children, +}: { + className?: string + children: any +}) => ( +
    +
    + + {children} + +
    +
    +
    +) + +export const AccordionHeader = ({ + date, + day, + title, + shipped, + publishedAt, + shippable = true, +}: { + date: string + day: string + title: string + shipped?: boolean + publishedAt: string + shippable?: boolean +}) => { + return ( +
    +
    + + {day} + {date && ( + + ・ {date} + + )} + +
    + {shippable && shipped && ( + + + Shipped + + + )} + {shipped && {title}} + {shippable && !shipped && ( + + + + + + + + + + )} +
    + ) +} +export const MultistepSectionHeader = ({ title, blog }: any) => { + return ( +
    +
    + {title && {title}} + {!!blog && ( + + Blog post +
    + +
    +
    + )} +
    +
    + ) +} + +export const ChipLink = ({ + href, + uiOnly, + className, + target, + children, +}: { + href?: string + className?: string + uiOnly?: boolean + target?: '_blank' | '_self' | '_parent' | '_top' | 'framename' + children: any +}) => + uiOnly ? ( + + {children} + + ) : !!href ? ( + + + {children} + + + ) : null + +export const SectionButtons = ({ + blog, + docs, + video, + github, + url, + hackernews, + mobileGrid, +}: { + blog?: string + docs?: string + video?: string + github?: string + url?: string + hackernews?: string + mobileGrid?: boolean +}) => { + return ( +
    + {!!blog && ( + + Blog post +
    + +
    +
    + )} + {!!docs && ( + + Docs +
    + +
    +
    + )} + {!!video && ( + + Video +
    + +
    +
    + )} + {!!github && ( + + Github +
    + +
    +
    + )} + {!!url && ( + + Read +
    + +
    +
    + )} + {hackernews && ( + + Hackernews +
    + +
    +
    + )} +
    + ) +} + +export const CartTitle = ({ children }: { children: any }) => ( + + {children} +
    + +) + +export default { + AccordionHeader, + DocsSvg, + PencilSvg, + PlaySvg, + CartTitle, + ChipLink, + SectionButtons, + SmallCard, + StyledArticleBadge, +} diff --git a/apps/www/pages/launch-week/index.tsx b/apps/www/pages/launch-week/index.tsx index ba868c312e2..e9b4930eb22 100644 --- a/apps/www/pages/launch-week/index.tsx +++ b/apps/www/pages/launch-week/index.tsx @@ -17,6 +17,7 @@ import { useTheme } from 'common/Providers' import 'swiper/swiper.min.css' import Head from 'next/head' +import LW8CalloutsSection from '../../components/LaunchWeek/8/LW8CalloutsSection' const AnimatedParticles = dynamic( () => import('~/components/LaunchWeek/8/AnimatedParticles/ParticlesCanvas') @@ -165,6 +166,10 @@ export default function TicketHome({ users, meetups }: Props) {
    + + + + From f73be89f6bbcc7594d155787ab876e7f74571a7b Mon Sep 17 00:00:00 2001 From: Francesco Sansalvadore Date: Wed, 2 Aug 2023 14:44:06 +0200 Subject: [PATCH 60/73] renmove extra space --- apps/www/_blog/2023-08-02-beta-update-july-2023.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx b/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx index 7d07c73eeb2..b93b6b1cf2f 100644 --- a/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx +++ b/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx @@ -102,4 +102,3 @@ If you made it this far in the email you deserve a devilish treat. NPCs represent… ![July's favorite meme](https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/supabase-meme.png) - From d06614effb46b7fd15de4da41014c57584f2fbe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ramiro=20Nu=C3=B1ez=20Dosio?= Date: Wed, 2 Aug 2023 13:57:50 +0100 Subject: [PATCH 61/73] Fix images. --- apps/www/_blog/2023-08-02-beta-update-july-2023.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx b/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx index b93b6b1cf2f..4f36f6ddf43 100644 --- a/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx +++ b/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx @@ -14,7 +14,7 @@ Next Monday is Launch Week 🎱, where we’ll be announcing a tonne of surprise ## Supabase Launch Week 8 -!(Supabase Launch Week 8)[https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/launch-week.png] +![Supabase Launch Week 8](https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/launch-week.png) Launch Week 8 starts next week. We’ll be announcing one new major feature every day for an entire week (with a few bonus surprises along the way). Get your ticket and tune in on Monday the 7th. @@ -22,7 +22,7 @@ Launch Week 8 starts next week. We’ll be announcing one new major feature ever ## New Android Kotlin Library -!(New Android Kotlin Library)[https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/android-kotlin.png?t=2023-08-02T11%3A05%3A46.805Z] +![New Android Kotlin Library](https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/android-kotlin.png?t=2023-08-02T11%3A05%3A46.805Z) Are you a mobile dev? We now have client libraries for Android. This is thanks to one of our community members - [@TheRealJanGER](https://twitter.com/TheRealJanGER). Try it out, and if you want to help us maintain the library let us know. @@ -32,7 +32,7 @@ Are you a mobile dev? We now have client libraries for Android. This is thanks t ## pgvector 0.4.0 performance -!(pgvector 0.4.0 performance)[https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/pgvector.png] +![pgvector 0.4.0 performance](https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/marketing-emails/pgvector.png) There's been a lot of talk about pgvector performance, so we pushed it to the limits to figure out its strengths and limitations. The good news is that work has already [started](https://github.com/pgvector/pgvector/tree/hnsw) on HNSW, and isn’t far away. From 034c40cc57238d4965bac7d24f717e1e793d4ea8 Mon Sep 17 00:00:00 2001 From: Francesco Sansalvadore Date: Wed, 2 Aug 2023 15:08:05 +0200 Subject: [PATCH 62/73] update images --- .../LaunchWeek/8/LW8CalloutsSection.tsx | 16 ++--- .../components/LaunchWeek/8/LW8Meetups.tsx | 4 +- .../launchweek/8/lw8-hackathon-thumb.svg | 66 +++++++++++++++++++ .../launchweek/8/twitter-spaces-thumb.svg | 13 ++++ 4 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 apps/www/public/images/launchweek/8/lw8-hackathon-thumb.svg create mode 100644 apps/www/public/images/launchweek/8/twitter-spaces-thumb.svg diff --git a/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx b/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx index 737d2a14a89..c0dda61b44a 100644 --- a/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx +++ b/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx @@ -9,10 +9,10 @@ const LW8CalloutsSection = () => {
    - - -
    -
    + + +
    +
    Join us daily at Twitter Spaces Next up: Monday – Opening Day
    @@ -29,16 +29,16 @@ const LW8CalloutsSection = () => { -
    -
    -
    + +
    +
    LW8 Hackathon Aug 4 – Aug 13 Read more about rules and prizes on the blog
    diff --git a/apps/www/components/LaunchWeek/8/LW8Meetups.tsx b/apps/www/components/LaunchWeek/8/LW8Meetups.tsx index be2913f2540..a654c4f4b11 100644 --- a/apps/www/components/LaunchWeek/8/LW8Meetups.tsx +++ b/apps/www/components/LaunchWeek/8/LW8Meetups.tsx @@ -65,8 +65,8 @@ const LW8Meetups = ({ meetups }: { meetups?: Meetup[] }) => { target="_blank" className={[ 'w-full group py-0 flex items-center gap-2 md:gap-4 text-lg sm:text-2xl lg:text-4xl border-b border-[#111718]', - 'hover:text-brand', - isLive ? 'text-scale-1100' : 'text-scale-800', + 'hover:text-scale-1200', + isLive ? 'text-scale-1100' : 'text-[#56646B]', !link && 'pointer-events-none', ].join(' ')} > diff --git a/apps/www/public/images/launchweek/8/lw8-hackathon-thumb.svg b/apps/www/public/images/launchweek/8/lw8-hackathon-thumb.svg new file mode 100644 index 00000000000..7914a72a43a --- /dev/null +++ b/apps/www/public/images/launchweek/8/lw8-hackathon-thumb.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/www/public/images/launchweek/8/twitter-spaces-thumb.svg b/apps/www/public/images/launchweek/8/twitter-spaces-thumb.svg new file mode 100644 index 00000000000..040168b9ee6 --- /dev/null +++ b/apps/www/public/images/launchweek/8/twitter-spaces-thumb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + From 9bbde8b5010083ced0f3fbe4fbdddf04aca2c4cf Mon Sep 17 00:00:00 2001 From: Francesco Sansalvadore Date: Wed, 2 Aug 2023 15:15:11 +0200 Subject: [PATCH 63/73] update image --- apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx b/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx index c0dda61b44a..511b7a46c61 100644 --- a/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx +++ b/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx @@ -19,7 +19,7 @@ const LW8CalloutsSection = () => {
    From 4b82ef30ddf3edca3a9d3a48a41a6a72c7fd846f Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Wed, 2 Aug 2023 10:59:38 -0230 Subject: [PATCH 64/73] Adds vector and double precision argument types --- .../SidePanelEditor/SidePanelEditor.constants.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.constants.ts b/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.constants.ts index 585853061ee..ddee6d5ee0c 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.constants.ts +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.constants.ts @@ -2,7 +2,15 @@ import { sortBy, concat } from 'lodash' import { PostgresDataTypeOption } from './SidePanelEditor.types' export const DATE_FORMAT = 'YYYY-MM-DDTHH:mm:ssZ' -export const NUMERICAL_TYPES = ['int2', 'int4', 'int8', 'float4', 'float8', 'numeric'] +export const NUMERICAL_TYPES = [ + 'int2', + 'int4', + 'int8', + 'float4', + 'float8', + 'numeric', + 'double precision', +] export const JSON_TYPES = ['json', 'jsonb'] export const TEXT_TYPES = ['text', 'varchar'] @@ -11,7 +19,7 @@ export const DATE_TYPES = ['date'] export const TIME_TYPES = ['time', 'timetz'] export const DATETIME_TYPES = concat(TIMESTAMP_TYPES, DATE_TYPES, TIME_TYPES) -export const OTHER_DATA_TYPES = ['uuid', 'bool'] +export const OTHER_DATA_TYPES = ['uuid', 'bool', 'vector'] export const POSTGRES_DATA_TYPES = sortBy( concat(NUMERICAL_TYPES, JSON_TYPES, TEXT_TYPES, DATETIME_TYPES, OTHER_DATA_TYPES) ) From 59d91056b8ecb7c2d60c858ccb6750f3635b8e80 Mon Sep 17 00:00:00 2001 From: Francesco Sansalvadore Date: Wed, 2 Aug 2023 15:50:31 +0200 Subject: [PATCH 65/73] Update text --- .../www/components/LaunchWeek/8/LW8Meetups.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/www/components/LaunchWeek/8/LW8Meetups.tsx b/apps/www/components/LaunchWeek/8/LW8Meetups.tsx index a654c4f4b11..12fc28f4843 100644 --- a/apps/www/components/LaunchWeek/8/LW8Meetups.tsx +++ b/apps/www/components/LaunchWeek/8/LW8Meetups.tsx @@ -47,15 +47,15 @@ const LW8Meetups = ({ meetups }: { meetups?: Meetup[] }) => { }, []) return ( -
    -
    -

    Join us live

    -

    - Celebrate LW8 with us at our first-ever live meetups across various locations. Join the - fun, grab some swag, and be a part of the Supabase community. +

    +
    +

    Join the community

    +

    + Celebrate LW8 at our first-ever live community meetups across various locations. Join the + fun, grab some swag, and meet the Supabase community.

    -
    +
    {meets && meets ?.sort((a, b) => (new Date(a.start_at) > new Date(b.start_at) ? 1 : -1)) @@ -64,7 +64,7 @@ const LW8Meetups = ({ meetups }: { meetups?: Meetup[] }) => { {
    {title} {isLive && Live now} - + Date: Wed, 2 Aug 2023 16:02:43 +0200 Subject: [PATCH 66/73] Add nav anchors --- apps/www/components/Layouts/SectionContainer.tsx | 4 +++- apps/www/pages/launch-week/index.tsx | 10 ++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/www/components/Layouts/SectionContainer.tsx b/apps/www/components/Layouts/SectionContainer.tsx index db5ec705165..931294e211d 100644 --- a/apps/www/components/Layouts/SectionContainer.tsx +++ b/apps/www/components/Layouts/SectionContainer.tsx @@ -3,10 +3,12 @@ import classNames from 'classnames' interface Props { children: React.ReactNode className?: string + id?: string } -const SectionContainer = ({ children, className }: Props) => ( +const SectionContainer = ({ children, className, id }: Props) => (
    - - - +
    + + + +
    - + From f8299d50961373eb619c5d6290222aa244cfb1cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ramiro=20Nu=C3=B1ez=20Dosio?= Date: Wed, 2 Aug 2023 15:06:06 +0100 Subject: [PATCH 67/73] Update quick product announcements section. --- apps/www/_blog/2023-08-02-beta-update-july-2023.mdx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx b/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx index 4f36f6ddf43..2a6c49e301c 100644 --- a/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx +++ b/apps/www/_blog/2023-08-02-beta-update-july-2023.mdx @@ -40,9 +40,10 @@ There's been a lot of talk about pgvector performance, so we pushed it to the li ## Quick product announcements -- [**Postgres Tooling**] pgsodium 3.1.8 released -- [**Postgres Tooling**] PostgREST 11.1 is now live. [Blog post](https://supabase.com/blog/postgrest-11-1-release) -- [**Auth**] You can now use Resend as a custom SMTP provider. [Doc](https://www.notion.so/Clicking-on-https-supabase-com-docs-reference-dart-functions-invoke-redirects-to-https-supabase--fb705ffc7cbb41fd98b31ab9c8772019?pvs=21) +- [Auth] There is a new OAuth provider in time: Login with Figma. [Docs](https://supabase.com/docs/guides/auth/social-login/auth-figma) +- [Auth] You can now use Resend as a custom SMTP provider. [Docs](https://resend.com/docs/send-with-supabase-smtp) +- [Postgres Tooling] pgsodium 3.1.8 released. [PR](https://github.com/michelp/pgsodium/releases/tag/v3.1.8) +- [Postgres Tooling] PostgREST 11.1 is now live. [Blog post](https://supabase.com/blog/postgrest-11-1-release) ## Egghead course: Twitter Clone with the Next.js App Router From 691c3065eac52aabc0c6b815e3bf55ef7744b1ca Mon Sep 17 00:00:00 2001 From: Francesco Sansalvadore Date: Wed, 2 Aug 2023 16:18:29 +0200 Subject: [PATCH 68/73] fix mobile padding --- apps/www/components/LaunchWeek/8/LW8Meetups.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/www/components/LaunchWeek/8/LW8Meetups.tsx b/apps/www/components/LaunchWeek/8/LW8Meetups.tsx index 12fc28f4843..9ae4ceda564 100644 --- a/apps/www/components/LaunchWeek/8/LW8Meetups.tsx +++ b/apps/www/components/LaunchWeek/8/LW8Meetups.tsx @@ -70,7 +70,7 @@ const LW8Meetups = ({ meetups }: { meetups?: Meetup[] }) => { !link && 'pointer-events-none', ].join(' ')} > -
    +
    {title} {isLive && Live now} From 53cfe46a04273347311f8c00b0b892106f850c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20Gr=C3=BCneberg?= Date: Wed, 2 Aug 2023 19:51:14 +0200 Subject: [PATCH 69/73] chore: keep spend cap disabled on downgrade team -> pro --- .../Subscription/PlanUpdateSidePanel.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx index d91951a27a5..9ec255913b8 100644 --- a/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx +++ b/studio/components/interfaces/Organization/BillingSettingsV2/Subscription/PlanUpdateSidePanel.tsx @@ -7,7 +7,7 @@ import { useEffect, useState } from 'react' import ShimmeringLoader from 'components/ui/ShimmeringLoader' import { useOrgPlansQuery } from 'data/subscriptions/org-plans-query' import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' -import { useOrgSubscriptionUpdateMutation } from 'data/subscriptions/org-subscription-update-mutation' +import { SubscriptionTier, useOrgSubscriptionUpdateMutation } from 'data/subscriptions/org-subscription-update-mutation' import { useCheckPermissions, useSelectedOrganization, useStore } from 'hooks' import { PRICING_TIER_PRODUCT_IDS } from 'lib/constants' import Telemetry from 'lib/telemetry' @@ -110,9 +110,14 @@ const PlanUpdateSidePanel = () => { return ui.setNotification({ category: 'error', message: 'Please select a payment method' }) } - updateOrgSubscription({ slug, tier: selectedTier, paymentMethod: selectedPaymentMethod }) + // If the user is downgrading from team, should have spend cap disabled by default + const tier = subscription?.plan?.id === 'team' && selectedTier === PRICING_TIER_PRODUCT_IDS.PRO ? PRICING_TIER_PRODUCT_IDS.PAYG as SubscriptionTier : selectedTier + + updateOrgSubscription({ slug, tier, paymentMethod: selectedPaymentMethod }) } + const planMeta = selectedTier ? availablePlans.find((p) => p.id === selectedTier.split('tier_')[1]) : null + return ( <> { onCancel={() => setSelectedTier(undefined)} onConfirm={onUpdateSubscription} overlayClassName="pointer-events-none" - header={`Confirm to upgrade to ${subscriptionPlanMeta?.name}`} + header={`Confirm ${planMeta?.change_type === 'downgrade' ? 'downgrade' : 'upgrade'} to ${subscriptionPlanMeta?.name}`} >
    From 86190802ca872ea48f7a57d9156a4b3229096a2e Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Thu, 3 Aug 2023 14:17:52 +0800 Subject: [PATCH 70/73] Fix v2 home page white space --- studio/pages/org/[slug]/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/pages/org/[slug]/index.tsx b/studio/pages/org/[slug]/index.tsx index b1e1245555c..c1e599eca39 100644 --- a/studio/pages/org/[slug]/index.tsx +++ b/studio/pages/org/[slug]/index.tsx @@ -23,7 +23,7 @@ const ProjectsPage: NextPageWithLayout = () => { const projects = allProjects?.filter((project) => project.organization_id === organization?.id) return ( - +
    From d24eb1ea0b034b1091a2545875a7d8f4b66224b2 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Thu, 3 Aug 2023 14:22:29 +0800 Subject: [PATCH 71/73] Show building state if project status is unknown --- studio/components/layouts/ProjectLayout/BuildingState.tsx | 6 +++--- studio/components/layouts/ProjectLayout/ProjectLayout.tsx | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/studio/components/layouts/ProjectLayout/BuildingState.tsx b/studio/components/layouts/ProjectLayout/BuildingState.tsx index 53188486c5d..908c1578a2f 100644 --- a/studio/components/layouts/ProjectLayout/BuildingState.tsx +++ b/studio/components/layouts/ProjectLayout/BuildingState.tsx @@ -3,7 +3,7 @@ import ClientLibrary from 'components/interfaces/Home/ClientLibrary' import ExampleProject from 'components/interfaces/Home/ExampleProject' import { CLIENT_LIBRARIES, EXAMPLE_PROJECTS } from 'components/interfaces/Home/Home.constants' import Link from 'next/link' -import { FC, useEffect, useRef } from 'react' +import { useEffect, useRef } from 'react' import { Badge, Button, IconArrowRight, IconLoader } from 'ui' import { DisplayApiSettings, DisplayConfigSettings } from 'components/ui/ProjectSettings' @@ -55,8 +55,8 @@ const BuildingState = ({ project }: BuildingStateProps) => {
    - {project.status === PROJECT_STATUS.RESTORING - ? 'Restoring project' + {project.status === PROJECT_STATUS.UNKNOWN + ? 'Initiating project set up' : 'Setting up project'}
    diff --git a/studio/components/layouts/ProjectLayout/ProjectLayout.tsx b/studio/components/layouts/ProjectLayout/ProjectLayout.tsx index 0ce4030e476..90d627cc098 100644 --- a/studio/components/layouts/ProjectLayout/ProjectLayout.tsx +++ b/studio/components/layouts/ProjectLayout/ProjectLayout.tsx @@ -171,7 +171,9 @@ const ContentWrapper = ({ isLoading, children }: ContentWrapperProps) => { const isProjectUpgrading = selectedProject?.status === PROJECT_STATUS.UPGRADING const isProjectRestoring = selectedProject?.status === PROJECT_STATUS.RESTORING - const isProjectBuilding = selectedProject?.status === PROJECT_STATUS.COMING_UP + const isProjectBuilding = + selectedProject?.status === PROJECT_STATUS.COMING_UP || + selectedProject?.status === PROJECT_STATUS.UNKNOWN const isProjectPausing = selectedProject?.status === PROJECT_STATUS.GOING_DOWN || selectedProject?.status === PROJECT_STATUS.PAUSING From ffe0e552dea3b24dcfe9964a44eccca75c310798 Mon Sep 17 00:00:00 2001 From: Francesco Sansalvadore Date: Thu, 3 Aug 2023 10:11:41 +0200 Subject: [PATCH 72/73] add alt text to images --- apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx b/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx index 511b7a46c61..8f001d4cfc7 100644 --- a/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx +++ b/apps/www/components/LaunchWeek/8/LW8CalloutsSection.tsx @@ -20,6 +20,7 @@ const LW8CalloutsSection = () => {
    twitter spaces thumbnail @@ -39,6 +40,7 @@ const LW8CalloutsSection = () => {
    hackathon thumbnail From bf396bf30454c4d4de8d6c719416eab68e12f857 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Thu, 3 Aug 2023 17:13:08 +0800 Subject: [PATCH 73/73] Ignore isValidBranch check in RouteValidationWRapper for self hosted --- studio/components/interfaces/App/RouteValidationWrapper.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/studio/components/interfaces/App/RouteValidationWrapper.tsx b/studio/components/interfaces/App/RouteValidationWrapper.tsx index f2bb8a31b74..3b82a9b1679 100644 --- a/studio/components/interfaces/App/RouteValidationWrapper.tsx +++ b/studio/components/interfaces/App/RouteValidationWrapper.tsx @@ -7,7 +7,7 @@ import { useOrganizationsQuery } from 'data/organizations/organizations-query' import { useProjectsQuery } from 'data/projects/projects-query' import { useFlag, useStore } from 'hooks' import useLatest from 'hooks/misc/useLatest' -import { DEFAULT_HOME, LOCAL_STORAGE_KEYS } from 'lib/constants' +import { DEFAULT_HOME, IS_PLATFORM, LOCAL_STORAGE_KEYS } from 'lib/constants' // Ideally these could all be within a _middleware when we use Next 12 const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { @@ -68,7 +68,9 @@ const RouteValidationWrapper = ({ children }: PropsWithChildren<{}>) => { // Check validity of project that the user is trying to access const projects = projectsRef.current ?? [] const isValidProject = projects.some((project) => project.ref === ref) - const isValidBranch = projects.some((project) => project.preview_branch_refs.includes(ref)) + const isValidBranch = IS_PLATFORM + ? projects.some((project) => project.preview_branch_refs.includes(ref)) + : true if (!isValidProject && !isValidBranch) { ui.setNotification({ category: 'error', message: 'This project does not exist' })