From 4bda3bfe72e21ed96fda421bb34f3be2a0f1616c Mon Sep 17 00:00:00 2001 From: Danny White <3104761+dnywh@users.noreply.github.com> Date: Tue, 28 Jul 2026 01:12:13 -0400 Subject: [PATCH 1/4] refactor(docs): unify homepage icon link tiles (#48317) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Docs UI refactor. ## What is the current behavior? Framework quickstarts and several other homepage grids used `IconPanel` / `IconPanelWithIconPicker`, which brought redundant tooltips (duplicating the visible title), inconsistent hover treatment, and circular icon tiles that didn't match the intended squarish look. | Before | | --- | | CleanShot 2026-07-24 at 14 29
44@2x | ## What is the new behavior? Introduces a shared `IconLink` used across the docs homepage (and reference index) so icon+label tiles share the same composition and hover: icon tile fill matches the surrounding surface (`surface-100`), with a stronger border on hover, and the row uses `hover:bg-accent`. Framework quickstarts keep the larger tile size; other sections keep the smaller size. Also aligns Explore more GlassPanels with Build your backend by using the same bordered background treatment. | After | | --- | | CleanShot 2026-07-24 at 15 09
48@2x | ## Additional context Removes the unused `IconPanelWithIconPicker` wrapper now that homepage/reference consumers go through `IconLink`. ## Summary by CodeRabbit * **New Features** * Added reusable `IconLink` UI for consistent docs tiles, including `IconLinkList`, menu icon, and light/dark icon rendering. * Introduced `FrameworkQuickstarts` to generate quickstart links based on feature-flag-enabled SDKs. * **UI / Improvements** * Updated the docs home and API reference pages to use the new list-based icon-link layout. * Refreshed migration guides and “Explore more”/self-hosting sections (including accessibility and updated CTA text). * **Bug Fixes** * Migration guide items now omit entries missing required details. * **Chores / Cleanup** * Removed the older icon panel picker-based UI component and its usage. --- apps/docs/app/page.tsx | 130 +++++++++--------- apps/docs/app/reference/page.tsx | 72 +++++----- apps/docs/components/FrameworkQuickstarts.tsx | 92 +++++++++++++ apps/docs/components/HomePageCover.tsx | 121 +--------------- apps/docs/features/ui/IconLink.tsx | 111 +++++++++++++++ .../features/ui/IconPanelWithIconPicker.tsx | 14 -- 6 files changed, 301 insertions(+), 239 deletions(-) create mode 100644 apps/docs/components/FrameworkQuickstarts.tsx create mode 100644 apps/docs/features/ui/IconLink.tsx delete mode 100644 apps/docs/features/ui/IconPanelWithIconPicker.tsx diff --git a/apps/docs/app/page.tsx b/apps/docs/app/page.tsx index 031a06a61a47b..76a6fb6b16aae 100644 --- a/apps/docs/app/page.tsx +++ b/apps/docs/app/page.tsx @@ -2,13 +2,12 @@ import { isFeatureEnabled } from 'common' import { type Metadata, type ResolvingMetadata } from 'next' import Link from 'next/link' import { cn } from 'ui' -import { IconPanel } from 'ui-patterns/IconPanel' import { TextLink } from 'ui-patterns/TextLink' -import { FrameworkQuickstarts } from '@/components/HomePageCover' +import { FrameworkQuickstarts } from '@/components/FrameworkQuickstarts' import { MIGRATION_PAGES } from '@/components/Navigation/NavigationMenu/NavigationMenu.constants' import { GlassPanelWithIconPicker } from '@/features/ui/GlassPanelWithIconPicker' -import { IconPanelWithIconPicker } from '@/features/ui/IconPanelWithIconPicker' +import { IconLinkImage, IconLinkList, IconLinkMenuIcon } from '@/features/ui/IconLink' import HomeLayout from '@/layouts/HomeLayout' import { BASE_PATH } from '@/lib/constants' @@ -88,31 +87,26 @@ const postgresIntegrations = [ title: 'AI & Vectors', icon: 'ai', href: '/guides/ai', - description: 'AI toolkit to manage embeddings', }, { title: 'Cron', icon: 'cron', href: '/guides/cron', - description: 'Schedule and monitor recurring Jobs', }, { title: 'Queues', icon: 'queues', href: '/guides/queues', - description: 'Durable Message Queues with guaranteed delivery', }, { title: 'Data REST API', icon: 'rest', href: '/guides/api', - description: 'Access your database through a RESTful API.', }, { title: 'GraphQL API', icon: 'graphql', href: '/guides/graphql', - description: 'Access your database through a GraphQL API.', }, ] @@ -224,6 +218,20 @@ const additionalResources = [ }, ] +const migrationGuides = [...MIGRATION_PAGES] + .sort((a, b) => (a.name || '').localeCompare(b.name || '')) + .flatMap((guide) => { + if (!guide.name || !guide.url || typeof guide.icon !== 'string') return [] + + return [ + { + title: guide.name, + href: guide.url, + icon: , + }, + ] + }) + const HomePage = () => (
@@ -234,12 +242,12 @@ const HomePage = () => ( Connect a framework

- Start with a framework quickstart and connect your project in minutes. + Start with a quickstart guide to connect your project in minutes.

- +
)} @@ -253,7 +261,10 @@ const HomePage = () => (

-