Supabase — это PostgreSQL-база данных с готовым дашбордом, Auth, Storage и Edge Functions. Для вайбкодера главное: не нужно разворачивать сервер, писать SQL с нуля или настраивать авторизацию вручную. Подключил проект, скинул промпт в Cursor — и бэке…
2026/04/16
Supabase — это PostgreSQL-база данных с готовым дашбордом, Auth, Storage и Edge Functions. Для вайбкодера главное: не нужно разворачивать сервер, писать SQL с нуля или настраивать авторизацию вручную. Подключил проект, скинул промпт в Cursor — и бэкенд готов.
В этой статье разберём: как создать таблицы, настроить RLS (Row Level Security), подключить авторизацию и использовать Edge Functions. Всё на конкретных примерах с промтами.
Supabase позиционирует себя как open source альтернатива Firebase. Главное отличие: под капотом — PostgreSQL (SQL), а не NoSQL. Это важно, потому что AI-инструменты отлично генерируют SQL, а функции Supabase SDK напрямую отражают SQL-терминологию.
Ключевые преимущества для вайбкодеров:

Максим: «Когда мы строили первую версию NanaBanana, нужен был быстрый бэкенд. Supabase позволил за вечер поднять базу, авторизацию и реалтайм без найма бэкенд-разработчика. Сейчас на нём держится 200 000+ пользователей — и ни разу не подвёл.»

| Параметр | Supabase | Firebase |
|---|---|---|
| База данных | PostgreSQL (SQL) | Firestore (NoSQL) |
| Open Source | Да | Нет |
| Vendor lock-in | Нет | Да |
| SQL-редактор | Встроен | Нет |
| Бесплатный тариф | 2 проекта, 500 МБ | Spark plan |
| RLS (Row Level Security) | Встроен в Postgres | Firestore Rules |
| MCP для AI-инструментов | Есть | Нет |

Supabase не требует установки для старта. Зарегистрировался на supabase.com, создал проект — и уже можно работать.
Создание проекта:

Как только проект готов, открывается дашборд. Здесь два инструмента для работы с базой: Table Editor(визуальный) и SQL Editor (для тех, кто любит запросы). Для вайбкодинга чаще используется первый.
Промпт для Cursor, чтобы создать таблицу:
Создай SQL-миграцию для Supabase. Нужна таблица posts:
- id (uuid, primary key, default gen_random_uuid())
- user_id (uuid, foreign key к auth.users)
- title (text, not null)
- content (text)
- is_published (boolean, default false)
- created_at (timestamptz, default now())
Добавь политики RLS: автор видит все свои посты,
все остальные видят только опубликованные.Cursor сгенерирует готовый SQL, который можно вставить в SQL Editor Supabase и выполнить. Если работаешь с локальным Supabase через CLI — используй supabase db push.
Для новичков: вставь промпт выше в Cursor или Claude Code, передай ему структуру своего проекта — и получи готовую миграцию. Никакого SQL с нуля.
Для опытных: используй MCP-сервер Supabase в Cursor — тогда AI видит актуальную схему базы и генерирует политики точно под твои таблицы, без ошибок во внешних ключах.
Row Level Security — самая важная тема при работе с Supabase. Без RLS любой пользователь через браузер может прочитать все данные из базы, зная anon key (а он всегда публичный во фронтенд-коде).
Как работает RLS:
Обычная архитектура: Клиент -> API -> База данных. API фильтрует запросы, проверяет права. В Supabase: Клиент -> База данных. Права проверяет сам Postgres через политики. Нет API — нет уязвимости на уровне забытой проверки.

Когда включаешь RLS на таблице, все операции блокируются по умолчанию. Ни один SELECT не пройдёт, пока не создашь политику явно.
Базовый сценарий: пользователь видит только свои данные
-- Включаем RLS
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
-- Политика: пользователь видит свои посты + опубликованные чужие
CREATE POLICY "select_policy" ON posts
FOR SELECT USING (
auth.uid() = user_id OR is_published = true
);
-- Политика: пользователь может вставлять только свои посты
CREATE POLICY "insert_policy" ON posts
FOR INSERT WITH CHECK (auth.uid() = user_id);Функция auth.uid() — это специальный вызов Supabase, который возвращает ID текущего авторизованного пользователя из JWT-токена. Пользователь не может подделать это значение.
Сложный сценарий: комментарии к постам
Из транскрибаций видео, которые мы анализировали: один из распространённых кейсов — комментарии, где нужно настроить три уровня доступа:
-- Для удаления: автор поста может модерировать комментарии
CREATE POLICY "owner_can_delete_comments" ON comments
FOR DELETE USING (
auth.uid() IN (
SELECT user_id FROM posts WHERE id = comment_post_id
)
);Промпт для настройки RLS через Cursor:
У меня в Supabase есть таблицы users, posts, comments.
Помоги написать политики RLS для следующей логики:
- Посты: автор видит все свои, остальные — только published
- Комментарии: все видят комментарии к видимым постам,
писать может только авторизованный пользователь от своего имени,
удалять — автор комментария или автор поста
Приложи SQL-скрипт с включением RLS и созданием всех политик.Важно: при разработке можно временно отключить RLS, чтобы не тормозить тесты. Но перед деплоем — обязательно включай обратно. Это одна из самых частых причин утечек данных в вайбкодинг-проектах.
| Операция | Политика | Ключевая проверка |
|---|---|---|
| SELECT | USING | Данные существуют и доступны |
| INSERT | WITH CHECK | Новые данные соответствуют правилам |
| UPDATE | USING + WITH CHECK | Доступ к строке + правило для новых данных |
| DELETE | USING | Данные существуют и доступны |
Supabase Auth хранит все данные о пользователях прямо в PostgreSQL (в схеме auth). Не нужен отдельный сервис для авторизации — всё в одной базе.
Что доступно из коробки:

Базовый флоу подключения:
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
)
// Регистрация
const { data, error } = await supabase.auth.signUp({
email: 'user@example.com',
password: 'password123'
})
// Вход
const { data, error } = await supabase.auth.signInWithPassword({
email: 'user@example.com',
password: 'password123'
})
// Выход
await supabase.auth.signOut()Отслеживание состояния сессии:
supabase.auth.onAuthStateChange((event, session) => {
if (session) {
setUser(session.user)
} else {
setUser(null)
}
})
// Не забудь отписаться при размонтировании компонента!
return () => subscription.unsubscribe()Лайфхак из практики: при тестировании отключай подтверждение email в Supabase. Иначе при каждой итерации будешь получать письма подтверждения и засорять почту. Идёшь в Authentication -> Providers -> Email -> убираешь "Confirm email". Но в продакшене — обязательно включи обратно.
Связка user_id с данными:
Когда создаёшь таблицу с данными пользователей, добавь колонку user_id типа uuid со значением по умолчанию auth.uid():
ALTER TABLE posts
ADD COLUMN user_id uuid DEFAULT auth.uid()
REFERENCES auth.users(id);Теперь при INSERT Supabase автоматически подставляет ID текущего пользователя. Пользователь не может указать чужой ID — auth.uid() берётся из JWT, который подписан сервером Supabase.
Настройка redirect URL (обязательно):
После подтверждения email Supabase должен перенаправить пользователя обратно в приложение. Добавь URL в дашборде: Authentication -> URL Configuration -> Site URL.
Для локальной разработки: http://localhost:3000
Для продакшена: https://yourdomain.com
Самая продуктивная связка для вайбкодеров в 2026 году — Cursor Agent + Supabase через MCP (Model Context Protocol). AI-агент подключается напрямую к базе данных и видит актуальную схему таблиц, связи, политики.
Без MCP при работе с базой Cursor часто «забывает» структуру таблиц и генерирует код с неправильными именами колонок или несуществующими внешними ключами.
Как подключить MCP-сервер Supabase к Cursor:
Строка подключения выглядит примерно так:
postgresql://postgres.xxxx:[YOUR-PASSWORD]@aws-0-eu-central-1.pooler.supabase.com:5432/postgresЧто даёт MCP:
Промпт для работы с Cursor + Supabase через MCP:
Я работаю с Supabase (MCP подключен).
Создай таблицу для хранения проектов пользователей:
- Каждый пользователь видит только свои проекты
- Проект может быть "приватным" или "публичным"
- Публичные проекты видят все
Сгенерируй миграцию и политики RLS.Из реального опыта: использование Cursor с MCP-сервером Supabase сокращает время настройки базы для нового проекта с нескольких часов до 20-30 минут.

Lovable — вайбкодинг-инструмент, который строит UI и подключает Supabase в несколько кликов. Интеграция с Supabase в Lovable пока в бета-версии, но уже рабочая.

Как работает связка:
Промпт для Lovable при первом запуске:
Создай лендинг для приложения [название].
Только лендинг, без функциональности — хочу сначала
убедиться в дизайне, потом добавим фичи.Лайфхак из практики: начинай всегда с лендинга, не сразу с полного приложения. Так проще контролировать результат и не ломать то, что уже работает.
Для дизайна — прикрепляй скриншоты сайтов, которые нравятся, с указанием "примени этот стиль, но не меняй контент". Lovable хорошо понимает визуальные референсы.
Типичный порядок разработки через Lovable + Supabase:
Один из авторов видео из нашей базы собрал рабочий AI-питч-ментор за несколько часов через ~30 промптов в Lovable с Supabase.
Edge Functions в Supabase — это Deno-функции, которые выполняются рядом с пользователем (на edge-серверах). Используются для логики, которую нельзя делать на клиенте: вызовы платёжных API, отправка email, интеграция с внешними сервисами.
Когда нужны Edge Functions:

Базовый пример:
// supabase/functions/send-email/index.ts
import { serve } from 'https://deno.land/std@0.168.0/http/server.ts'
serve(async (req) => {
const { to, subject, body } = await req.json()
// Вызов Resend API
const response = await fetch('https://api.resend.com/emails', {
method: 'POST',
headers: {
'Authorization': `Bearer ${Deno.env.get('RESEND_API_KEY')}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ from: 'hello@yourdomain.com', to, subject, html: body })
})
return new Response(JSON.stringify({ success: true }), {
headers: { 'Content-Type': 'application/json' },
})
})Промпт для создания Edge Function:
Создай Supabase Edge Function для отправки welcome-email
через Resend API. Функция принимает: email пользователя и его имя.
Добавь обработку ошибок. Используй TypeScript и Deno.Если работаешь с Supabase в конкретных IDE:
Что такое Supabase простыми словами? Supabase — готовый бэкенд для веб-приложений. Даёт базу данных PostgreSQL, авторизацию, файловое хранилище и серверные функции. Не нужно настраивать сервер с нуля — подключаешься через SDK и начинаешь работать.
Нужно ли знать SQL, чтобы работать с Supabase? Не обязательно. Таблицы создаются через визуальный редактор, базовые операции — через SDK. Но если хочешь настраивать RLS и сложные политики доступа, понимание SQL очень помогает. Для вайбкодинга — скидывай задачу в Cursor или Claude Code, они сгенерируют нужный SQL.
Чем Supabase лучше Firebase для вайбкодеров? Два принципиальных отличия. Первое: Supabase open source, нет vendor lock-in. Второе: AI-инструменты лучше работают с SQL (PostgreSQL), чем с Firestore. Cursor, Claude Code и Lovable отлично генерируют SQL-миграции и политики RLS.
Что такое RLS в Supabase и почему это важно? Row Level Security — система правил доступа на уровне строк в базе данных. Без RLS любой пользователь, зная публичный anon key (а он всегда виден во фронтенд-коде), может прочитать все данные. С RLS — каждый пользователь видит только то, что ему разрешено правилами.
Как подключить Supabase к Cursor для AI-разработки? Через MCP (Model Context Protocol). Получи строку подключения в Project Settings -> Database Settings -> Connect -> Session Pooler. Добавь MCP-сервер в настройки Cursor. После этого AI-агент видит актуальную структуру базы и генерирует корректный код без ошибок в именах колонок.
Бесплатен ли Supabase? Бесплатный тариф включает 2 активных проекта, 500 МБ базы данных, 1 ГБ хранилища, 50 000 активных пользователей в месяц. Для MVP и тестирования хватает. Платные тарифы от $25/мес за проект.
Можно ли использовать Supabase с Lovable без бэкенд-знаний? Да. Lovable автоматически генерирует таблицы и политики RLS при подключении Supabase. Интеграция пока в бета, но уже стабильна. Нужно только следить за включением RLS перед деплоем.
Supabase — open source платформа для бэкенда на базе PostgreSQL. Включает базу данных, Auth, Storage и Edge Functions.
PostgreSQL — реляционная база данных с поддержкой SQL. Используется под капотом Supabase.
RLS (Row Level Security) — механизм PostgreSQL, который контролирует доступ к отдельным строкам таблицы на основе политик. Основной способ защиты данных в Supabase.
auth.uid() — функция Supabase, возвращает UUID текущего авторизованного пользователя из JWT-токена. Используется в политиках RLS.
JWT (JSON Web Token) — токен авторизации, который Supabase выдаёт пользователю при входе. Содержит ID и роль пользователя.
Edge Functions — серверные функции на Deno, которые выполняются на edge-серверах рядом с пользователем. Для логики, которую нельзя делать на клиенте.
MCP (Model Context Protocol) — протокол, позволяющий AI-инструментам (Cursor, Claude Code) подключаться к внешним сервисам напрямую. MCP-сервер Supabase даёт AI доступ к схеме базы.
Anon Key — публичный ключ Supabase для клиентского SDK. Всегда виден в коде фронтенда, поэтому RLS — обязательная защита.
Migration — SQL-файл с изменениями схемы базы данных. Используется с Supabase CLI для версионирования структуры базы.
Статья подготовлена командой VibeCoderz — крупнейшей базы знаний по AI IDE и вайбкодингу в СНГ. Последнее обновление: апрель 2026.