Catálogo minimalista e luxuoso com checkout via WhatsApp, autenticação completa e painel administrativo.
- Frontend: Nuxt 3 + Tailwind CSS
- Backend: Supabase (PostgreSQL + Auth + Storage + Realtime)
- Containerização: Docker + Docker Compose
catalogo.aldeia-viva.com.br/
├── pages/ # Páginas da aplicação
│ ├── index.vue # Catálogo público
│ ├── login.vue # Autenticação
│ └── admin/
│ └── products.vue # Gestão de produtos
├── composables/ # Lógica compartilhada
│ └── useCart.ts # Carrinho de compras
├── middleware/ # Middlewares
│ └── auth.ts # Proteção de rotas
├── supabase/ # Configuração do Supabase
│ ├── migrations/ # Migrações do banco
│ ├── seed.sql # Dados iniciais
│ ├── config.toml # Configuração local
│ └── kong.yml # API Gateway
├── docker-compose.yml # Orquestração de containers
└── Dockerfile # Build da aplicação
- Visualização de produtos com imagens e preços
- Carrinho de compras com totalizador
- Checkout via WhatsApp com pedido formatado
- Interface minimalista e responsiva
- Autenticação segura com Supabase Auth
- CRUD completo de produtos
- Controle de estoque
- Publicação/ocultação de produtos
- Proteção de rotas com middleware
- Supabase completo rodando localmente via Docker
- PostgreSQL com Row Level Security (RLS)
- Autenticação JWT com refresh tokens
- API REST via PostgREST
- Realtime subscriptions
- Storage para imagens
- Supabase Studio para administração do banco
Opção recomendada (Supabase CLI):
- Node.js 20+
- pnpm 9.0.0+
- Supabase CLI (instruções de instalação)
Opção alternativa (Docker):
- Docker e Docker Compose
- Node.js 20+ (opcional)
- pnpm 9.0.0+
git clone <repo-url>
cd catalogo.aldeia-viva.com.brpnpm installpnpm supabase:start
# ou: supabase startO Supabase CLI irá:
- Baixar e iniciar os containers Docker necessários
- Criar o banco de dados local
- Aplicar as migrações automaticamente
- Mostrar as credenciais de acesso
Anote as URLs e chaves exibidas, especialmente:
- API URL:
http://127.0.0.1:54321 - anon key:
eyJh...
O arquivo .env já está configurado com os valores padrão do Supabase CLI. Ajuste apenas:
PUBLIC_WHATSAPP_NUMBER=5511999999999 # Seu número de WhatsApppnpm dev- Aplicação: http://localhost:3000
- Supabase Studio: http://127.0.0.1:54323
- Inbucket (emails de teste): http://127.0.0.1:54324
# Ver status dos serviços
pnpm supabase:status
# Parar o Supabase
pnpm supabase:stop
# Resetar banco de dados (limpa e reaplica migrations + seeds)
pnpm db:reset
# Aplicar apenas seeds
pnpm db:seeddocker compose --profile full up -dServiços disponíveis:
- Aplicação: http://localhost:3000
- Supabase Studio: http://localhost:3001
- Supabase API: http://localhost:8000
- Inbucket (emails): http://localhost:9000
- PostgreSQL: localhost:5432
docker compose --profile infra up -dDepois rode a aplicação localmente:
pnpm install
pnpm devAtualize o .env com suas credenciais do Supabase Cloud:
SUPABASE_URL=https://seu-projeto.supabase.co
SUPABASE_ANON_KEY=sua-chave-anondocker compose --profile app up -d- Catálogo público: http://localhost:3000
- Login: http://localhost:3000/login
- Admin: http://localhost:3000/admin/products (requer autenticação)
- Supabase Studio: http://localhost:3001 (se rodando com profile
infraoufull)
# Iniciar com perfil completo
docker compose --profile full up -d
# Iniciar apenas infraestrutura
docker compose --profile infra up -d
# Iniciar apenas aplicação
docker compose --profile app up -d
# Ver logs
docker compose logs -f app
docker compose logs -f db
# Parar tudo
docker compose down
# Parar e remover volumes (limpa banco de dados)
docker compose down -v
# Rebuild da aplicação
docker compose build app
docker compose up -d app# Instalar dependências
pnpm install
# Rodar em modo de desenvolvimento
pnpm dev
# Build de produção
pnpm build
# Rodar build de produção
pnpm startO banco possui duas tabelas principais:
products
id- ID único do produtoname- Nome do produtodescription- Descrição detalhadaprice_cents- Preço em centavos (ex: 4990 = R$ 49,90)image_url- URL da imagemstock- Quantidade em estoquepublished- Se está publicado no catálogocreated_at- Data de criação
orders
id- ID único do pedidoitems- JSON com itens do pedidototal_cents- Total em centavoscreated_at- Data do pedido
- products: Leitura pública, escrita apenas para usuários autenticados
- orders: Leitura/escrita apenas para usuários autenticados
O banco vem com 5 produtos de exemplo. Para resetar os dados:
# Se usando Supabase local via Docker
docker compose exec db psql -U postgres -d postgres -f /docker-entrypoint-initdb.d/seed.sql- Acesse http://localhost:3000/login
- Clique em "Criar conta"
- Insira email e senha (mínimo 6 caracteres)
- Com
ENABLE_EMAIL_AUTOCONFIRM=true, a conta é ativada automaticamente
Acesse o Inbucket em http://localhost:9000 para ver emails de confirmação, recuperação de senha, etc.
O Supabase Studio está disponível em http://localhost:3001 quando rodando com --profile infra ou --profile full.
Use para:
- Visualizar e editar dados nas tabelas
- Executar queries SQL
- Gerenciar usuários
- Configurar políticas de segurança (RLS)
- Ver logs e métricas
-
Variáveis de Ambiente:
- Use um projeto Supabase Cloud ou configure Supabase em seu servidor
- Gere um
JWT_SECRETforte e único - Configure
SUPABASE_URLeSUPABASE_ANON_KEYcom valores de produção - Configure
PUBLIC_WHATSAPP_NUMBERcorreto - Configure SMTP real (SendGrid, Mailgun, etc)
-
Build de Produção:
docker build -t catalogo-aldeia-viva . docker run -p 3000:3000 --env-file .env catalogo-aldeia-viva -
Banco de Dados:
- Execute as migrações em
supabase/migrations/ - Configure backups automáticos
- Revise as políticas de RLS
- Execute as migrações em
-
Segurança:
- Use HTTPS
- Configure CORS adequadamente
- Revise as políticas de autenticação
- Configure rate limiting
Verifique se:
- Os serviços do Supabase estão rodando:
docker compose ps - O Kong está saudável:
docker compose logs kong - As variáveis
SUPABASE_URLeSUPABASE_ANON_KEYestão corretas no.env
- Verifique se o
JWT_SECRETé o mesmo em todos os serviços - Confirme que o Auth service está rodando:
docker compose logs auth - Limpe cookies e localStorage do navegador
- Verifique os logs:
docker compose logs db - Se necessário, remova volumes e recrie:
docker compose down -v && docker compose --profile full up -d
Se alguma porta já estiver em uso, edite o docker-compose.yml e altere o mapeamento:
ports:
- '3001:3000' # Muda a porta externa de 3000 para 3001- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
Este projeto está sob a licença MIT.
Para dúvidas e suporte, abra uma issue no repositório.