New to Claude Skills? Learn how to install them →

supabase on GitHub

Studio UI Patterns

OfficialFree

Guidelines for building Supabase Studio interfaces.

by supabase107.8k stars on supabase/supabase
1 views
Updated Aug 10, 2026
Get this skill

Free · Opens the source repo

What Studio UI Patterns does

The Studio UI Patterns skill provides a comprehensive set of design system instructions specifically tailored for building and updating user interfaces within Supabase Studio. This skill serves as a reference for developers and designers looking to create consistent and functional UI elements, including pages, forms, tables, charts, empty states, navigation, cards, alerts, and side panels. By following the guidelines outlined in this skill, users can ensure that their designs align with Supabase's established standards, promoting a cohesive user experience.

The skill is structured around several key components, each with its own set of rules and layout recommendations. For instance, when constructing forms, it emphasizes the use of react-hook-form and zod for validation, as well as the importance of using FormItemLayout for better organization of form elements. Similarly, for tables and charts, the skill provides clear distinctions between different types of components, such as static tables versus dynamic data grids, and outlines best practices for layout and interaction.

Additionally, the skill includes specific instructions for handling empty states, ensuring that users can effectively communicate the status of their data to end-users. Navigation patterns are also covered, with an emphasis on maintaining a consistent user flow through URL changes rather than local state changes. Overall, this skill is designed for developers and designers who are actively working on Supabase projects and need a reliable guide to ensure their UI components are well-structured and user-friendly.

By leveraging the Studio UI Patterns skill, users can streamline their development process, reduce design inconsistencies, and enhance the overall quality of their applications. Whether you're building new features or updating existing ones, this skill provides the necessary guidance to create effective and visually appealing user interfaces.

When to use it

Use this skill when developing or updating user interfaces in Supabase Studio to adhere to design standards.

When not to use it

This skill may not be suitable for projects outside of Supabase Studio or for those requiring custom design solutions.

What you can build with it

Creating a New Page

When building a new page in Supabase Studio, refer to the layout guidelines to choose the appropriate components and structure.

Designing Forms

Use the skill to follow best practices for form design, ensuring proper validation and layout for user input.

Implementing Navigation

When setting up navigation within your application, utilize the guidelines to ensure a consistent user experience with URL changes.

How to install Studio UI Patterns

View source

1. Install with the skills CLI

npx skills add supabase/supabase/studio-ui-patterns --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by supabase

Studio UI Patterns

The Design System docs and demos are the source of truth. Always check the relevant demo file before composing new UI.

Layout

Docs: apps/design-system/content/docs/ui-patterns/layout.mdx

Build pages with PageContainer, PageHeader, and PageSection.

Content typesize
Settings / config"default"
Lists / tables"large"
Full-screen views"full"
  • If filters/search exist on a list page, align table actions with the filters (don't use PageHeaderAside/PageSectionAside for those actions)
  • If no filters, actions can go in PageHeaderAside or PageSectionAside

Demos: page-layout-settings.tsx, page-layout-list.tsx, page-layout-list-simple.tsx, page-layout-detail.tsx (all in apps/design-system/registry/default/example/)

Forms

Docs: apps/design-system/content/docs/ui-patterns/forms.mdx

  • Use react-hook-form + zod
  • Use FormItemLayout instead of manually composing FormItem/FormLabel/FormMessage/FormDescription
  • Wrap inputs with FormControl; import primitives from ui

Layout selection:

ContextLayoutContainer
Page (settings/config)FormItemLayout layout="flex-row-reverse"Card (CardContent per field; CardFooter for actions)
Side panel — wideFormItemLayout layout="horizontal"SheetSection
Side panel — narrow (size="sm" or below)FormItemLayout layout="vertical"SheetSection

Dirty state / submit:

  • Destructure isDirty from form.formState to show Cancel and disable Save
  • Show loading on submit button via loading prop
  • If submit button is outside <form>, set a stable formId and use form prop on the button

Demos: form-patterns-pagelayout.tsx, form-patterns-sidepanel.tsx

Tables

Docs: apps/design-system/content/docs/ui-patterns/tables.mdx

PatternUse when
TableSimple, static, semantic display
Data TableTanStack-powered; sorting, filtering, pagination; composed per use-case
Data GridVirtualization, column resizing, or complex cell editing
  • Actions: above the table, aligned right
  • Search/filters: above the table, aligned left
  • If table is primary content with no filters, actions can live in the page's primary/secondary actions area

Demos: table-demo.tsx, data-table-demo.tsx, data-grid-demo.tsx

Charts

Docs: apps/design-system/content/docs/ui-patterns/charts.mdx

  • Use provided chart building blocks; avoid passing raw Recharts components to ChartContent
  • Use useChart context flags for loading/disabled states
  • Keep composition straightforward — avoid over-abstraction

Demos (in apps/design-system/__registry__/default/block/): chart-composed-demo.tsx, chart-composed-basic.tsx, chart-composed-states.tsx, chart-composed-metrics.tsx, chart-composed-actions.tsx, chart-composed-table.tsx

Empty States

Docs: apps/design-system/content/docs/ui-patterns/empty-states.mdx

ScenarioPattern
Initial / onboardingPresentational empty state with value prop + clear next action
Data-heavy listsInformational empty state matching the list/table layout
Zero results from searchKeep layout consistent with data state to avoid jarring transitions
Missing routeCentered Admonition

Demos: empty-state-presentational-icon.tsx, empty-state-initial-state-informational.tsx, empty-state-zero-items-table.tsx, data-grid-empty-state.tsx, empty-state-missing-route.tsx

Navigation

Docs: apps/design-system/content/docs/ui-patterns/navigation.mdx

  • Use NavMenu for a horizontal list of related views within a consistent page layout
  • Activating an item must trigger a URL change — no local-only tab state

Cards

  • Group related information in cards
  • CardContent for sections, CardFooter for actions
  • Only use CardHeader/CardTitle when context isn't already provided by surrounding content
  • Use headers/titles when multiple cards represent distinct groups (e.g. multiple settings sections)

Alerts

  • Use Admonition to call out important actions, restrictions, or critical context
  • Place at the top of a page's content (below page title) or top of the relevant section (below section title)
  • Use sparingly

Sheets (Side Panels)

Use a Sheet when switching pages would be disruptive and the user needs to maintain context (e.g. selecting a row from a list to edit).

Structure:

  • SheetContent with size="lg" for forms needing horizontal layout
  • Use SheetHeader, SheetTitle, SheetSection, SheetFooter
  • Submit/cancel actions go in SheetFooter

Forms in sheets:

  • layout="horizontal" for wider sheets
  • layout="vertical" for narrow sheets (size="sm" or below)
  • When the sheet contains a form, wire dirty dismissal with useConfirmOnClose + DiscardChangesConfirmationDialog (Cancel, Escape, and backdrop). Source of truth: apps/design-system/content/docs/ui-patterns/modality.mdx (Dirty form dismissal). Also see the react-hook-form skill for isDirty destructuring.

Copy

Source of truth: apps/design-system/content/docs/copywriting.mdx — sentence case, title case, proper nouns, voice and tone.

When changing visible copy, grep e2e/studio/ for the old string.

Frequently asked questions about Studio UI Patterns

Similar skills