# Supabase Backend

> Supabase

- Skill: `comeonoliver/supabase-backend` (Agent Skill)
- Install (CLI): `npx skillmds@latest add comeonoliver/supabase-backend`
- Raw SKILL.md: https://api.skillmd.com/api/skills/comeonoliver/supabase-backend/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ComeOnOliver (https://skillmd.com/u/comeonoliver)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/comeonoliver/supabase-backend

---

# Supabase

## Client Setup
```typescript
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY);
```

## Database (Postgres)
```typescript
const { data } = await supabase.from('posts').select('*, author:users(name)').order('created_at', { ascending: false }).limit(10);
await supabase.from('posts').insert({ title, body, user_id: user.id });
await supabase.from('posts').update({ title }).eq('id', postId);
```

## Auth
```typescript
await supabase.auth.signUp({ email, password });
await supabase.auth.signInWithPassword({ email, password });
await supabase.auth.signInWithOAuth({ provider: 'github' });
const { data: { user } } = await supabase.auth.getUser();
```

## Real-time
```typescript
supabase.channel('posts').on('postgres_changes',
    { event: '*', schema: 'public', table: 'posts' },
    (payload) => console.log(payload)
).subscribe();
```

## Storage
```typescript
await supabase.storage.from('avatars').upload(path, file);
const { data: { publicUrl } } = supabase.storage.from('avatars').getPublicUrl(path);
```

## RLS (Row Level Security) for fine-grained access control in Postgres policies

