Pular para o conteúdo principal

Visão Geral

Um boilerplate pronto para produção para assinaturas usando Next.js 15, React 19, Supabase, Drizzle ORM e Dodo Payments. Ele vem com Google OAuth, checkout de assinatura, manipulação de webhook, esquema de banco de dados e um painel básico.
Se você precisar apenas de manipuladores de rota para um aplicativo existente, veja os adaptadores dedicados: Adaptador Next.js e Adaptador Express.

Pré-requisitos

  • Node.js 18+ (ou Bun 1.0+)
  • Projeto Supabase (URL, chave Anon, chave de função de serviço, URL do banco de dados)
  • Conta Dodo Payments (chave API, segredo do webhook)
  • Cliente OAuth do Google Cloud (ID do cliente e segredo)

Início Rápido

1

Clone e instale

git clone https://github.com/dodopayments/dodo-supabase-subscription-starter.git
cd dodo-supabase-subscription-starter
# choose one
bun install
# or
npm install
# or
pnpm install
2

Crie um projeto Supabase

Crie um projeto Supabase e copie:
  • NEXT_PUBLIC_SUPABASE_URL
  • NEXT_PUBLIC_SUPABASE_ANON_KEY
  • SUPABASE_SERVICE_ROLE_KEY
  • DATABASE_URL (String de conexão)
3

Configure o Google OAuth

Defina a URI de redirecionamento para: https://[your-project-ref].supabase.co/auth/v1/callback no Google Cloud, depois ative o provedor Google na autenticação Supabase usando seu ID do cliente e segredo.
4

Configure o Dodo Payments

Gere uma chave API e um segredo de webhook no painel Dodo. Defina o ambiente para test_mode durante o desenvolvimento.
5

Crie .env.local

# Supabase
NEXT_PUBLIC_SUPABASE_URL=https://your-project-ref.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role

# Database
DATABASE_URL=postgresql://postgres:[password]@db.[project-ref].supabase.co:5432/postgres

# Dodo Payments
DODO_PAYMENTS_API_KEY=your-dodo-api-key
DODO_WEBHOOK_SECRET=your-webhook-secret
DODO_PAYMENTS_ENVIRONMENT=test_mode
Nunca comite segredos. Use variáveis de ambiente em ambientes de implantação.
6

Provisione o esquema do banco de dados

bun run db:push
# or
npm run db:push
# or
pnpm run db:push
Tabelas criadas: users, subscriptions, payments.
7

Implante a função do webhook

# login (one-time)
bunx supabase login
# or
npx supabase login

# deploy the edge function
bun run deploy:webhook --project-ref [your-project-ref]
# or
npm run deploy:webhook -- --project-ref [your-project-ref]
# or
pnpm run deploy:webhook --project-ref [your-project-ref]
cURL
curl -X POST \
  'https://[your-project-ref].supabase.co/functions/v1/dodo-webhook' \
  -H 'Content-Type: application/json' \
  -H 'Dodo-Signature: <signature>' \
  -d '{"type":"payment.succeeded","data":{}}'
8

Adicione o webhook no Dodo Payments

Defina a URL do endpoint para:
https://[your-project-ref].supabase.co/functions/v1/dodo-webhook
Selecione eventos de pagamento e assinatura.
9

Crie produtos e recursos

No painel Dodo → Produtos → Criar Produto. Opcionalmente, adicione metadados:
{
  "features": ["Feature 1", "Feature 2", "Feature 3"]
}
A interface de preços lê este features array e o renderiza dinamicamente.
10

Execute o servidor de desenvolvimento

bun run dev
# or
npm run dev
# or
pnpm run dev
Abra http://localhost:3000.

O que está incluído

  • Autenticação via Supabase (Google OAuth configurado)
  • Checkout de assinatura via Dodo Payments
  • Função Edge do Supabase para webhooks (dodo-webhook)
  • Esquema e migrações do Drizzle ORM
  • Painel com faturas, status de assinatura e recursos do plano
Mantenha DODO_PAYMENTS_ENVIRONMENT como test_mode até que você complete os testes de ponta a ponta.

Arquivos e caminhos principais

supabase/functions/dodo-webhook/
  index.ts            # webhook handler verifying signatures
  deno.json           # permissions

Variáveis de ambiente

NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
DATABASE_URL=
DODO_PAYMENTS_API_KEY=
DODO_WEBHOOK_SECRET=
DODO_PAYMENTS_ENVIRONMENT=test_mode|live_mode
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=

Verificação e solução de problemas

  • Certifique-se de que DODO_WEBHOOK_SECRET corresponda ao valor do painel Dodo
  • Confirme que você implantou a função mais recente dodo-webhook
  • Verifique se o nome do cabeçalho está correto em sua função (Dodo-Signature)
  • Verifique a sintaxe de DATABASE_URL e a saída de rede do Supabase
  • Aguarde ~2–3 minutos após a criação do projeto antes do primeiro envio
  • A URI de redirecionamento deve ser https://[ref].supabase.co/auth/v1/callback
  • Certifique-se de que seja o mesmo no Google Cloud e no provedor de autenticação Supabase
Agora você tem um SaaS de assinatura funcionando scaffolded com Supabase e Dodo Payments.
Repositório original e etapas detalhadas: dodo-supabase-subscription-starter.