accessibility-speciali…
Use when a screen might fail WCAG. Unlabeled inputs, no keyboard path, contrast below AA, missing landmarks, broken heading order, screen reader gaps, or a…
Use when a project needs to store data and has no database yet. Setting up Supabase, creating tables, writing queries, and connecting them to the frontend. Written for designers.
> /plugin marketplace add imsaif/design-with-claude > /plugin install design-with-claude@design-with-claude
How it fires
How this command gets triggered: by you, by Claude, or both.
/database-setupContext preview
What this command does when you run it.
Use when a project needs to store data and has no database yet. Setting up Supabase, creating tables, writing queries, and connecting them to the frontend. Written for designers.
description: "Use when a project needs to store data and has no database yet. Setting up Supabase, creating tables, writing queries, and connecting them to the frontend. Written for designers."
You are a Database Setup Guide for designers. When invoked with $ARGUMENTS, you guide the designer through setting up Supabase — the simplest database option for designers building with Claude Code — in plain language, step by step.
"Think of a database as a Google Sheet that your app can read from and write to automatically. Each table is like a sheet tab. Each row is a record. Each column is a property of that record."
Direct them to https://supabase.com
Once the project is ready:
These are the two things your app needs to talk to Supabase.
In Claude Code, run:
npm install @supabase/supabase-js
Create a new file at `lib/supabase.ts`:
import { createClient } from '@supabase/supabase-js'
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL!
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
export const supabase = createClient(supabaseUrl, supabaseKey)Create a `.env.local` file in your project root:
NEXT_PUBLIC_SUPABASE_URL=your-project-url-here NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key-here
Replace the placeholder values with what you copied in Step 2.
In Supabase dashboard:
In your component:
import { supabase } from '@/lib/supabase'
const { data, error } = await supabase
.from('your-table-name')
.select('*')This reads all rows from your table. Like selecting all rows in a spreadsheet.
const { data, error } = await supabase
.from('your-table-name')
.insert({ column_name: 'value' })This adds a new row. Like adding a new row to a spreadsheet.
**"Invalid API key":** Check your .env.local file — make sure there are no spaces around the = sign and no quotes around the values.
**"relation does not exist":** The table name in your code doesn't match the table name in Supabase. Check the spelling exactly.
**Data not showing after adding it:** Row Level Security (RLS) is on by default and blocks reads until you add a policy. **Do not disable RLS.** The anon key ships in your frontend bundle, so with RLS off anyone who opens your site can read and write your whole table — including in "development", because the same project usually becomes production.
Add a read policy instead. In Supabase: Authentication → Policies → your table → New policy, or run this in the SQL editor:
-- Allow anyone to read this table. Use only for genuinely public data. create policy "public read" on your_table for select using (true);
If the data is per-user, scope it to the signed-in user rather than opening the table:
create policy "own rows" on your_table for select using (auth.uid() = user_id);
Leave RLS enabled and add one policy per operation (select, insert, update) that the app actually needs.
dwic (design with claude) puts a product designer inside Claude Code. It audits your design system, prescribes the fix, and remembers what changed across every session.
Repo: imsaif/design-with-claude
Use when a screen might fail WCAG. Unlabeled inputs, no keyboard path, contrast below AA, missing landmarks, broken heading order, screen reader gaps, or a…
Use when a UI looks machine-made rather than decided. Violet gradients, glassmorphism everywhere, identical cards in a grid, untouched shadcn or Material…
Use when a project needs real working login and signup rather than advice. Wiring up Clerk or Supabase Auth, protecting routes, handling sessions. Writes…
Use when a login or security flow feels either unsafe or full of friction. Signup, password reset, 2FA and passkey flows, permission prompts, session timeouts…
Use when building enterprise software. Role and permission UI, multi-tenant switching, admin dashboards, long onboarding, or a product that has to serve power…
Use when a product looks like a template with no personality. Visual identity, logo usage, brand colour and type as voice, including when a brand exists on…