
Studio UI Patterns
OfficialFreeGuidelines for building Supabase Studio interfaces.
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 source1. Install with the skills CLI
npx skills add supabase/supabase/studio-ui-patterns --agent claude-code2. 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 supabaseStudio 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 type | size |
|---|---|
| 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/PageSectionAsidefor those actions) - If no filters, actions can go in
PageHeaderAsideorPageSectionAside
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
FormItemLayoutinstead of manually composingFormItem/FormLabel/FormMessage/FormDescription - Wrap inputs with
FormControl; import primitives fromui
Layout selection:
| Context | Layout | Container |
|---|---|---|
| Page (settings/config) | FormItemLayout layout="flex-row-reverse" | Card (CardContent per field; CardFooter for actions) |
| Side panel — wide | FormItemLayout layout="horizontal" | SheetSection |
Side panel — narrow (size="sm" or below) | FormItemLayout layout="vertical" | SheetSection |
Dirty state / submit:
- Destructure
isDirtyfromform.formStateto show Cancel and disable Save - Show loading on submit button via
loadingprop - If submit button is outside
<form>, set a stableformIdand useformprop on the button
Demos: form-patterns-pagelayout.tsx, form-patterns-sidepanel.tsx
Tables
Docs: apps/design-system/content/docs/ui-patterns/tables.mdx
| Pattern | Use when |
|---|---|
Table | Simple, static, semantic display |
| Data Table | TanStack-powered; sorting, filtering, pagination; composed per use-case |
| Data Grid | Virtualization, 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
useChartcontext 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
| Scenario | Pattern |
|---|---|
| Initial / onboarding | Presentational empty state with value prop + clear next action |
| Data-heavy lists | Informational empty state matching the list/table layout |
| Zero results from search | Keep layout consistent with data state to avoid jarring transitions |
| Missing route | Centered 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
NavMenufor 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
CardContentfor sections,CardFooterfor actions- Only use
CardHeader/CardTitlewhen context isn't already provided by surrounding content - Use headers/titles when multiple cards represent distinct groups (e.g. multiple settings sections)
Alerts
- Use
Admonitionto 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:
SheetContentwithsize="lg"for forms needing horizontal layout- Use
SheetHeader,SheetTitle,SheetSection,SheetFooter - Submit/cancel actions go in
SheetFooter
Forms in sheets:
layout="horizontal"for wider sheetslayout="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 forisDirtydestructuring.
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
Design System
Streamline design token management and presentation generation.
Visual Style
Create and apply portable visual design systems effortlessly.
Paperclip Design Guide
Build consistent, reusable UI components with ease.
Design Brief
Transform vague design requests into structured specs.
Token Map
Automate Figma and code token mapping to design systems.
Kami Landing
Create professional single-page documents effortlessly.
