MVP Starter Kit explicado de forma simples (com diagramas e código real)

MVP Starter Kit : o essencial em um artigo — código real, diagramas e etapas concretas, extraídos de um curso de 43 lições.

MVP Starter Kit explicado de forma simples (com diagramas e código real)

Um guia direto ao ponto: MVP Starter Kit dissecado com diagramas, exemplos concretos e comandos testados. Tudo vem de um curso estruturado de 11 capítulos — aqui está o melhor.

tl;dr
  • Introdução e Mindset MVP
  • Ideação e Validação
  • Arquitetura do Starter Kit
  • Autenticação e Usuários
  • Construir o Core do MVP
~$ cat ./parcours.md # MVP Starter Kit — 10 capítulos
01
Introdução e Mindset MVP
→ Apresentação do curso e filosofia MVP→ Lean Startup, o loop Build-Measure-Learn+ 1 mais lições
02
Ideação e Validação
→ Encontrar uma ideia que resolva um problema real→ Metodologia de entrevistas com usuários+ 2 mais lições
03
Arquitetura do Starter Kit
→ Tour completo do starter kit→ Clonar e configurar localmente+ 2 mais lições
04
Autenticação e Usuários
→ Supabase Auth, email/password e OAuth→ Sessões, middleware e rotas protegidas+ 2 mais lições
05
Construir o Core do MVP
→ Esquema Postgres e migrations Supabase→ CRUD com Server Actions Next.js+ 2 mais lições
06
Monetização com Stripe
→ Preço — freemium vs paid-only→ Integrar Stripe Checkout em 30 minutos+ 2 mais lições
07
Landing Page de Alta Conversão
→ Estrutura de uma landing page que converte→ Copywriting — títulos, subtítulos, CTAs+ 1 mais lições
08
Lançamento e Aquisição
→ Preparar seu lançamento (checklist J-7)→ Lançar no Product Hunt com sucesso+ 1 mais lições
🏁
Projeto final (+ 2 capítulos no caminho)
→ Você sai com um projeto concreto e demonstrável

CRUD com Server Actions Next.js

NOTEObjetivo — Implementar as quatro operações CRUD (Create, Read, Update, Delete) com as Server Actions do Next.js 14, sem construir uma API REST separada, usando o cliente Supabase no lado do servidor.

Objetivos pedagógicos

TIPAo final deste módulo
  • Compreender o que é uma Server Action e por que ela substitui uma API REST para um MVP
  • Escrever uma ação de criação, leitura, atualização e exclusão
  • Atualizar a interface com revalidatePath após uma mutação
  • Validar as entradas no lado do servidor antes da escrita no banco
  • Compreender como a RLS protege automaticamente cada requisição

A intuição: chamar uma função servidor a partir de um formulário

Tradicionalmente, para modificar dados, o cliente envia uma requisição HTTP (fetch('/api/tasks', ...)) para uma rota de API, que conversa com o banco, e depois retorna uma resposta. As Server Actions do Next.js eliminam essa complexidade: você escreve uma função marcada com "use server" e a chama diretamente de um formulário ou componente. O Next.js cria a requisição HTTP para você, nos bastidores.

Para um MVP, isso representa uma grande economia de tempo: menos arquivos, menos código de serialização, sem gerenciamento manual de estados de carregamento para cada chamada. Você escreve a lógica de negócio, o Next.js cuida do transporte.

O cliente Supabase no lado do servidor

Toda Server Action precisa de um cliente Supabase que conheça o usuário conectado (via cookies de sessão). Centralizamos isso em um helper:

Esquema Postgres e migrações Supabase

NOTEObjetivo — Projetar um esquema de dados mínimo mas sólido para seu MVP, versioná-lo com migrações Supabase e proteger cada tabela com Row Level Security desde o início.

Objetivos pedagógicos

TIPAo final deste módulo
  • Modelar as entidades centrais do seu MVP em tabelas Postgres
  • Escrever uma migração SQL versionada com a CLI Supabase
  • Compreender e ativar Row Level Security (RLS) em cada tabela
  • Vincular os dados ao usuário conectado via auth.uid()
  • Manter o esquema simples: modelar apenas o que o MVP exige

A intuição: o esquema conta o que seu produto faz

Antes de escrever qualquer linha de código da aplicação, faça uma pergunta simples: quais são as 2 ou 3 entidades que seu produto manipula? Um aplicativo de gerenciamento de tarefas manipula projetos e tarefas. Um SaaS de anotações manipula anotações. Uma ferramenta de faturamento manipula clientes e faturas. O esquema do banco de dados é a tradução direta dessa resposta.

A tentação do iniciante é prever tudo: tags, categorias, histórico, anexos, compartilhamento. Para um MVP, cortamos. Mantemos a tabela principal, sua relação com o usuário, e só. Adicionaremos o resto quando um cliente real pedir.

WARNINGAtenção: cada tabela que você adiciona hoje é uma tabela que você terá que migrar, proteger e manter amanhã. Um esquema de 3 tabelas que funciona supera um esquema de 12 tabelas meio concebido.

Modelar as entidades do MVP

Vamos a um exemplo concreto: um MVP de gerenciamento de tarefas compartilhadas. Duas entidades bastam para a primeira versão: projects e tasks. Cada projeto pertence a um usuário, cada tarefa pertence a um projeto.

TabelaColunas-chaveRelação
projectsid, user_id, name, created_atpertence a um user (auth.users)
tasksid, project_id, title, done, created_atpertence a um project

Note a convenção: um identificador uuid gerado automaticamente, uma chave estrangeira para o pai, um created_at por padrão. Essa estrutura se repete em 90% das tabelas de um MVP.

Escrever a migração SQL

O Supabase versiona o esquema por meio de arquivos de migração SQL em supabase/migrations/. Criamos um novo arquivo com a CLI:

with check

Controla quais linhas podem ser inseridas ou modificadas. Impede que um usuário crie um projeto em nome de outro.

WARNINGAtenção: sem RLS ativado, qualquer visitante com sua chave anon (pública por natureza) pode ler todo o seu banco. Esse é o vazamento de dados número um dos MVPs Supabase. Ative RLS em CADA tabela, sem exceção.

Aplicar a migração

Localmente com o container Supabase, depois para o banco remoto:

TIPDica: NUNCA modifique uma migração já aplicada em produção. Crie sempre uma nova migração para evoluir o esquema. É o mesmo princípio aditivo usado em um esquema GraphQL.

Webhooks Stripe e sincronização Supabase

NOTEObjetivo — Receber os eventos de pagamento do Stripe via webhook seguro, verificar sua assinatura e sincronizar o estado da assinatura no Supabase para conceder ou revogar o acesso de forma confiável.

Objetivos pedagógicos

TIPAo final deste módulo
  • Compreender por que o webhook é a única fonte de verdade do pagamento
  • Criar uma rota de webhook no Next.js
  • Verificar a assinatura do Stripe para rejeitar requisições falsas
  • Atualizar a tabela de assinatura no Supabase
  • Testar o webhook localmente com a CLI Stripe

A intuição: o Stripe avisa quando algo acontece

Após um pagamento, o Stripe envia uma requisição HTTP para uma URL que você declara: é um webhook. Essa requisição carrega um evento (checkout.session.completed, customer.subscription.deleted, etc.). Essa é a única informação confiável: a página de retorno do navegador pode ser atualizada, fechada ou falsa, mas o webhook vem dos servidores do Stripe.

O princípio é simples: só concedemos o acesso pago quando o webhook nos informa. Isso é mais robusto e impossível de contornar por um usuário mal-intencionado.

A tabela de assinatura no Supabase

va-plus-loin

Este artigo cobre os trechos mais úteis — o curso completo MVP Starter Kit (11 capítulos, 43 lições, exercícios corrigidos e projeto final) leva você até o fim.

./acceder-au-cours-complet curso gratuito : Vibe Coding

FAQ

Quanto tempo para aprender MVP Starter Kit?
Com uma progressão estruturada (11 capítulos, 43 lições curtas e práticas), você atinge um nível operacional em algumas semanas, dedicando 30 a 60 minutos por dia. O importante é praticar cada conceito imediatamente.
É preciso ter pré-requisitos?
Básicos de informática são suficientes. Se você sabe usar um terminal e ler código simples, está pronto.
Por onde começar na prática?
Reproduza os comandos deste artigo e depois siga o curso completo MVP Starter Kit: ele encadeia as 43 lições em ordem, com exercícios e projeto final.

📬 Quer receber este tipo de guia toda semana? Inscreva-se gratuitamente — código real, zero enrolação.