TutorialboltTier 4 · DesenvolvidoFeature· Avançado· PT40M

Bolt.new + Supabase: Banco de Dados e Autenticação Completa

Tutorial completo sobre integração Bolt.new com Supabase: tabelas, RLS, autenticação e subscriptions em tempo real.

22 de maio de 2026· Atualizado em 24 de maio de 2026por SWEN.AI
Bolt.new + Supabase: Banco de Dados e Autenticação Completa

Bolt.new + Supabase: Banco de Dados e Autenticação Completa

O Bolt.new é excelente para criar o frontend e a lógica de servidor, mas para persistência de dados você precisa de um banco. O Supabase é a combinação perfeita — rápido de configurar, poderoso e com client npm que o Bolt instala facilmente.

Configuração inicial

Integre o Supabase ao projeto:
- Instale @supabase/supabase-js
- Configure as variáveis de ambiente:
  VITE_SUPABASE_URL=sua_url
  VITE_SUPABASE_ANON_KEY=sua_chave_anon
  SUPABASE_SERVICE_KEY=chave_de_servico (apenas no backend)
- Crie src/lib/supabase.ts com o cliente:
  import { createClient } from "@supabase/supabase-js"
  export const supabase = createClient(import.meta.env.VITE_SUPABASE_URL, import.meta.env.VITE_SUPABASE_ANON_KEY)

Autenticação com Supabase Auth

Implemente autenticação completa:
- Página de login com e-mail e senha
- Página de cadastro com confirmação de e-mail
- Página de reset de senha
- Hook useAuth() que retorna o usuário atual e funções signIn, signOut, signUp
- Redirecionamento automático para /login quando não autenticado
- Redirecionamento para /dashboard após login bem-sucedido

Criando tabelas e relacionamentos

Crie as seguintes tabelas no Supabase (via migrations SQL):

TABELA profiles:
- id UUID REFERENCES auth.users PRIMARY KEY
- full_name TEXT
- avatar_url TEXT
- plan TEXT DEFAULT free
- created_at TIMESTAMPTZ DEFAULT NOW()

TABELA projects:
- id UUID DEFAULT gen_random_uuid() PRIMARY KEY
- user_id UUID REFERENCES profiles(id) ON DELETE CASCADE
- name TEXT NOT NULL
- description TEXT
- status TEXT DEFAULT active
- created_at TIMESTAMPTZ DEFAULT NOW()

Configure RLS:
- profiles: usuário só acessa seu próprio perfil
- projects: usuário só acessa seus próprios projetos

CRUD com React Query

Implemente CRUD para projects usando React Query:
- useProjects(): lista projetos do usuário logado
- useCreateProject(): mutation para criar projeto
- useUpdateProject(): mutation para atualizar
- useDeleteProject(): mutation para deletar
Adicione invalidateQueries após mutations para atualizar a lista

Realtime: atualizações ao vivo

Uma das features mais poderosas do Supabase é o Realtime — subscriptions que atualizam o frontend automaticamente quando o banco muda:

Adicioneve subscription Realtime à tabela projects:
- Quando um projeto é criado, atualizado ou deletado, refaça o fetch automaticamente
- Use supabase.channel() com on("postgres_changes") para se inscrever
- Cancele a subscription no cleanup do useEffect
Isso permite que múltiplas abas ou usuários vejam mudanças em tempo real.

Storage para upload de arquivos

Integre o Supabase Storage para upload de avatar:
- Crie um bucket público chamado "avatars"
- Na página de perfil, adicione campo de upload de imagem
- Ao selecionar imagem, faça upload para Supabase Storage
- Salve a URL pública no campo avatar_url do perfil
- Exiba o avatar no header do app

TypeScript types do Supabase

Para TypeScript safety nas queries:

Instale supabase CLI e rode: supabase gen types typescript > src/types/supabase.ts
Use os tipos gerados no cliente Supabase:
const supabase = createClient<Database>(url, key)

Com essa integração completa, seu app Bolt tem toda a infraestrutura de backend necessária para um produto de produção.

Salve seu progresso de aprendizado

Crie sua conta gratuita no SWEN.AI para acompanhar as aulas concluídas

Salvar meu progresso

Tutoriais relacionados