WP Manifestindependent plugin directory
manifest / ecommerce / vemcomer-core

Pedevem Core

Plugin do marketplace VemComer (WordPress)

by Pedevem · github.com/staryannfree/vemcomer-core

0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/staryannfree/vemcomer-core/archive/refs/heads/main.zip

🚨 TRIGGER AUTOMÁTICO: AAA

IMPORTANTE: Se você digitar "AAA" em qualquer mensagem, o assistente será OBRIGADO a analisar todos os logs antes de responder.

AAA = "Analisa Automaticamente Agora"

Veja: AAA-PROTOCOLO-OBRIGATORIO.md para detalhes completos.


Core de marketplace para WordPress com:

  • CPTs: Produtos, Pedidos, Restaurantes, Itens do Cardápio.
  • Admin Menu, REST API, Status de Pedido, Webhooks e Seed via WP‑CLI.
  • Integrações: WooCommerce (sincroniza pedidos/status) e Automator (hooks customizados).

Instalação e Ativação

  1. Copie o plugin para wp-content/plugins/vemcomer-core/.
  2. Ative Pedevem Core no painel do WordPress.
  3. (Opcional) Configure Pedevem ▸ Configurações → Segredo do Webhook e integrações.

Páginas públicas (shortcodes)

Ao ativar o plugin o núcleo cria/atualiza automaticamente as páginas que contêm apenas os shortcodes principais (lista, cardápio e checkout) e elas passam a aparecer em Páginas ▸ Todas como qualquer outra página. Se quiser recriá-las depois — ou gerar versões parametrizadas para um restaurante específico — use VemComer ▸ Instalador, que reaproveita as mesmas rotinas sem duplicar conteúdos existentes.

Shortcodes principais disponíveis:

  • [vemcomer_restaurants] — grade pública de restaurantes cadastrados.
  • [vc_restaurants_map] — mapa público com pins e botão “Perto de mim”.
  • [vemcomer_menu] — lista os itens de um restaurante (usa ?restaurant_id= ou o atributo restaurant_id).
  • [vemcomer_checkout] — checkout simplificado para o carrinho do marketplace.
  • [vemcomer_restaurant_panel] — painel front-end para donos de restaurante (requer login). Inclui botão "Configuração Rápida" para onboarding de novos usuários.
  • [vemcomer_restaurant_signup] — formulário público para restaurantes enviarem seus dados (entradas ficam pendentes para aprovação do admin).
  • [vemcomer_customer_signup] — formulário de criação de conta para clientes finais.

Página de validação de acesso: /validar-acesso/?token={access_url} — página automática onde restaurantes aprovados podem criar sua conta de acesso usando o token recebido no webhook.

Sistema de Onboarding: O painel do restaurante inclui um sistema de onboarding guiado que ajuda novos donos a configurar seus restaurantes. Acessível via botão "⚡ Configuração Rápida" no painel. Veja mais detalhes em docs/ONBOARDING.md.

Todos os shortcodes acima renderizam HTML, CSS e JavaScript próprios do plugin — não há dependência de construtores como o Elementor para exibir as páginas públicas.

Sistema de Onboarding

O sistema de onboarding guia novos donos de restaurantes através dos primeiros passos de configuração:

Como funciona

  1. Acesso: Quando um dono de restaurante acessa o painel pela primeira vez, vê o botão "⚡ Configuração Rápida"
  2. Ativação: Ao clicar no botão, um modal interativo é aberto com 5 steps guiados
  3. Progresso: O progresso é salvo automaticamente e pode ser retomado a qualquer momento
  4. Verificação: Alguns steps são verificados automaticamente (perfil completo, itens no cardápio, etc.)
  5. Conclusão: Ao completar todos os steps, o botão desaparece e o onboarding não aparece mais

Steps do Onboarding

  1. Bem-vindo ao Pedevem! - Tela inicial de boas-vindas
  2. Complete seu perfil - Adicionar WhatsApp, endereço e horários
  3. Adicione itens ao cardápio - Criar pelo menos 3 itens
  4. Configure delivery - Definir se oferece delivery
  5. Veja sua página pública - Visualizar como os clientes veem o restaurante

Recursos

  • Progresso persistente - Salvo no banco de dados
  • Verificação automática - Detecta quando tarefas são completadas
  • Dismissível - Pode ser fechado e retomado depois
  • Responsivo - Funciona em desktop e mobile
  • Acessível - Segue boas práticas de acessibilidade

Para mais detalhes, consulte docs/ONBOARDING.md e docs/ONBOARDING_VISUAL.md.

Seed (dados de demonstração)

Cria 1 restaurante e 5 itens de cardápio:

wp vc seed

Integração Frontend PWA

O plugin está configurado para comunicação com frontends PWA (Progressive Web Apps) desenvolvidos em React, Vue ou outras frameworks modernas.

Repositório: https://github.com/Staryannfree/vemcomer-core

Configuração CORS

O plugin inclui um handler CORS configurável que permite requisições cross-origin do frontend. As origens permitidas podem ser configuradas via filtro WordPress:

add_filter( 'vemcomer_rest_allowed_origins', function( $origins ) {
    $origins[] = 'https://seu-frontend.com';
    return $origins;
} );

Por padrão, as seguintes origens são permitidas:

  • http://localhost:3000
  • http://localhost:5173
  • http://localhost:8080
  • http://127.0.0.1:3000
  • http://127.0.0.1:5173
  • http://pedevem-local.local (ambiente local)
  • https://hungry-hub-core.lovable.app (frontend Lovable produção)
  • https://47191717-b1f5-4559-bdab-f069bc62cec6.lovableproject.com (frontend Lovable desenvolvimento)
  • https://periodic-symbol.localsite.io (Live Link Local by Flywheel)

Documentação da API

A documentação completa da API REST está disponível em:

Links no GitHub:

  • API_ENDPOINTS.md
  • LOVABLE_INTEGRATION.md
    • Configuração de variáveis de ambiente
    • Cliente API (fetch wrapper) pronto para uso
    • Estrutura de dados TypeScript
    • Tratamento de erros
    • Exemplos de uso completos

Exemplo Rápido

// Configuração básica
// Para desenvolvimento local: http://pedevem-local.local/wp-json/vemcomer/v1
// Para produção: https://pedevem.com/wp-json/vemcomer/v1
const API_URL = 'http://pedevem-local.local/wp-json/vemcomer/v1';

// Listar restaurantes
const restaurants = await fetch(`${API_URL}/restaurants?per_page=20`)
  .then(res => res.json());

// Obter detalhes de um restaurante
const restaurant = await fetch(`${API_URL}/restaurants/123`)
  .then(res => res.json());

// Obter cardápio
const menuItems = await fetch(`${API_URL}/restaurants/123/menu-items`)
  .then(res => res.json());

Para mais detalhes e exemplos completos, consulte a documentação de integração.

Endpoints REST

Restaurantes

  • GET /wp-json/vemcomer/v1/restaurants - Lista restaurantes (suporta filtros: cuisine, delivery, is_open, search, orderby, order, per_page, page)
  • GET /wp-json/vemcomer/v1/restaurants/{id} - Detalhes de um restaurante
  • GET /wp-json/vemcomer/v1/restaurants/{id}/menu-items - Lista itens do cardápio de um restaurante
  • GET /wp-json/vemcomer/v1/restaurants/{id}/menu-categories - Lista categorias do cardápio
  • GET /wp-json/vemcomer/v1/restaurants/{id}/schedule - Horários estruturados do restaurante (inclui feriados)
  • GET /wp-json/vemcomer/v1/restaurants/{id}/is-open?timestamp={opcional} - Verifica se restaurante está aberto (retorna próximo horário de abertura se fechado)
  • GET /wp-json/vemcomer/v1/restaurants/{id}/reviews - Lista avaliações aprovadas de um restaurante
  • GET /wp-json/vemcomer/v1/restaurants/{id}/rating - Retorna rating agregado (média e total)

Modificadores de Produtos

  • GET /wp-json/vemcomer/v1/menu-items/{id}/modifiers - Lista modificadores de um item do cardápio (público)
  • POST /wp-json/vemcomer/v1/menu-items/{id}/modifiers - Criar modificador vinculado a um item (admin)
  • PATCH /wp-json/vemcomer/v1/modifiers/{id} - Atualizar modificador (admin)
  • DELETE /wp-json/vemcomer/v1/modifiers/{id} - Deletar modificador (admin)

Avaliações e Ratings

  • GET /wp-json/vemcomer/v1/restaurants/{id}/reviews?per_page={opcional}&page={opcional} - Lista avaliações aprovadas de um restaurante (público)
  • GET /wp-json/vemcomer/v1/restaurants/{id}/rating - Retorna rating agregado (média e total) de um restaurante (público)
  • POST /wp-json/vemcomer/v1/reviews - Criar avaliação (requer autenticação, body: restaurant_id, rating (1-5), comment (opcional), order_id (opcional))

Favoritos

  • GET /wp-json/vemcomer/v1/favorites/restaurants - Lista restaurantes favoritos do usuário autenticado
  • POST /wp-json/vemcomer/v1/favorites/restaurants/{id} - Adicionar restaurante aos favoritos (requer autenticação)
  • DELETE /wp-json/vemcomer/v1/favorites/restaurants/{id} - Remover restaurante dos favoritos (requer autenticação)
  • GET /wp-json/vemcomer/v1/favorites/menu-items - Lista itens do cardápio favoritos do usuário autenticado
  • POST /wp-json/vemcomer/v1/favorites/menu-items/{id} - Adicionar item do cardápio aos favoritos (requer autenticação)
  • DELETE /wp-json/vemcomer/v1/favorites/menu-items/{id} - Remover item do cardápio dos favoritos (requer autenticação)

Pedidos

  • GET /wp-json/vemcomer/v1/orders?status={opcional}&data_inicio={opcional}&data_fim={opcional}&restaurant_id={opcional}&per_page={opcional}&page={opcional} - Lista pedidos do usuário autenticado com filtros
  • GET /wp-json/vemcomer/v1/orders/{id} - Detalhes completos de um pedido (requer autenticação, apenas dono ou admin)

Analytics

  • GET /wp-json/vemcomer/v1/restaurants/{id}/analytics?period={today|week|month|custom}&date_from={opcional}&date_to={opcional} - Métricas de analytics do restaurante (requer autenticação, apenas dono ou admin)

WhatsApp

  • POST /wp-json/vemcomer/v1/orders/prepare-whatsapp - Gera mensagem formatada para WhatsApp (body: restaurant_id, items, customer, fulfillment)

Pedidos

  • POST /wp-json/vemcomer/v1/pedidos

  • Body: { "restaurant_id": 123, "itens": [ {"produto_id": 123, "qtd": 2} ], "subtotal": "49,90", "fulfillment": { "method": "flat_rate_delivery", "ship_total": "9,90" } }

Fulfillment e Checkout

  • O checkout público trabalha somente com um restaurante por vez e exige um método de fulfillment válido.
  • Cada método implementa VC\Checkout\FulfillmentMethod (inc/Checkout/FulfillmentMethod.php).
  • Registre seus métodos no action vemcomer_register_fulfillment_method — o registro padrão (inc/Checkout/Methods/FlatRateDelivery.php) aplica o frete fixo + pedido mínimo dos metadados do restaurante.
  • Use os helpers JS em assets/js/checkout.js para testar rapidamente as rotas de frete/pedido (window.VemComerCheckoutExamples.exampleQuote() e .exampleOrder()).

Cotação de Frete

  • GET /wp-json/vemcomer/v1/shipping/quote?restaurant_id={id}&subtotal={valor}&lat={lat}&lng={lng}&address={endereco}&neighborhood={bairro}
  • Parâmetros obrigatórios: restaurant_id, subtotal
  • Parâmetros opcionais: lat, lng, address, neighborhood (para cálculo por distância)
  • Retorna: array de métodos disponíveis, distância calculada, se está no raio, se restaurante está aberto

Banners

  • GET /wp-json/vemcomer/v1/banners - Lista banners ativos da home (público)
  • Parâmetros opcionais: restaurant_id - Filtrar banners de um restaurante específico

Exemplo de registro:

add_action( 'vemcomer_register_fulfillment_method', function () {
    \VC\Checkout\FulfillmentRegistry::register( new My_Custom_Method(), 'my-method' );
} );

Webhook de Pagamento (entrada)

  • POST /wp-json/vemcomer/v1/webhook/payment
  • Header: X-VemComer-Signature: sha256=<hmac_hex_do_corpo>
  • Body: { "order_id": 10, "status": "paid|refunded|failed", "amount": "99,90", "ts": 1690000000 }

Mercado Pago → VemComer

O plugin expõe um handler dedicado para notificações do Mercado Pago (/wp-json/vemcomer/v1/mercadopago/webhook).

  1. Execute composer require mercadopago/dx-php no diretório do plugin e garanta que vendor/autoload.php esteja presente.
  2. Em VemComer ▸ Configurações configure:
    • Gateway de pagamento: mercadopago.
    • Segredo do webhook (HMAC): gere pelo botão "Gerar novo segredo" e compartilhe com o serviço intermediário.
    • Token do Mercado Pago: cole o access_token do APP (APP_USR-...).
  3. No checkout do Mercado Pago informe external_reference = <ID do vc_pedido> (ou metadata.vemcomer_order_id).
  4. Cadastre a URL /wp-json/vemcomer/v1/mercadopago/webhook nas notificações do Mercado Pago.

O handler valida o id recebido junto ao SDK oficial, resolve o pedido e encaminha o payload assinado para /wp-json/vemcomer/v1/webhook/payment. Após o processamento você pode ouvir vemcomer_mercadopago_payment_processed para executar automações adicionais (envio de comprovantes, atualização de painel, etc.).

Status de Pedido

Os pedidos (vc_pedido) podem ter: vc-pending, vc-paid, vc-preparing, vc-delivering, vc-completed, vc-cancelled. Você pode mudar pelo metabox lateral do pedido ou via integrações.

Integrações

WooCommerce (opcional)

  • Sincroniza status: processing → vc-paid, completed → vc-completed, cancelled → vc-cancelled, on-hold → vc-pending.
  • Se um pedido WooCommerce não tiver vínculo, o plugin cria automaticamente um vc_pedido espelhando itens e total, e vincula via meta _vc_wc_order_id (WC) e _vc_linked_wc_order (VC).

Automator (Uncanny/AutomatorWP)

O plugin expõe actions que podem ser usadas como gatilhos de hook personalizado:

  • vemcomer/order_status_changed, args: (int $vc_order_id, string $new_status, string $old_status)
  • vemcomer/order_paid, args: (int $vc_order_id)
  • vemcomer/webhook_payment_processed, args: (int $vc_order_id, array $payload)
  • vemcomer/restaurant_created, args: (int $restaurant_id)

Use esses nomes nos "Custom Action Hook" dos automators para disparar receitas.

SMClick (Webhooks de Restaurantes)

O plugin integra com SMClick para notificações de eventos relacionados a restaurantes:

  • Webhook de Cadastro: restaurant_registered — dispara quando um restaurante envia o formulário (status pendente).
  • Webhook de Aprovação: restaurant_approved — dispara quando o restaurante é aprovado (status muda para publicado).

Sistema de Token de Acesso (access_url)

Quando um restaurante é aprovado:

  1. Token único gerado: Um token único (access_url) é gerado automaticamente e armazenado no meta vc_restaurant_access_url.
  2. Webhook enviado: O webhook restaurant_approved é enviado para a URL configurada (padrão: https://api.smclick.com.br/integration/wordpress/5f98815b-640d-44c9-88b4-f17d6b059b35/) contendo:
    • Todos os dados do restaurante
    • Campo access_url: token único para acesso
    • Campo access_url_validation: URL completa para validação (/validar-acesso/?token={access_url})
  3. Página de validação: O restaurante pode acessar /validar-acesso/?token={access_url} para:
    • Criar uma conta de acesso (email e senha)
    • Validar que as senhas coincidem (confirmação)
    • Fazer login automático após criação
    • Ser redirecionado para o painel do restaurante

Configuração: Em VemComer ▸ Configurações, configure as URLs dos webhooks SMClick para cada evento. O token access_url aparece automaticamente no metabox do restaurante após aprovação.

Changelog

v0.35 - Página de Teste de Reverse Geocoding no Admin

Nova implementação:

  • Página de Teste no Admin: Interface para testar o reverse geocoding (conversão de coordenadas em endereço)
  • Formulário de Coordenadas: Campos para inserir latitude e longitude
  • Exibição de Resultados: Mostra rua, número, bairro, cidade, estado, CEP, país e endereço completo
  • Integração com Nominatim: Usa a mesma API do OpenStreetMap usada no frontend
  • Dados Brutos: Exibe JSON completo retornado pela API em um detalhes colapsável

Arquivos criados:

  • inc/Admin/Geocoding_Test.php - Classe para renderizar a página de teste

Arquivos modificados:

  • vemcomer-core.php - Inicialização da classe Geocoding_Test
  • README.md - Documentação da funcionalidade

Funcionalidades implementadas:

  • Formulário com validação de coordenadas (lat: -90 a 90, lng: -180 a 180)
  • Botão "Testar Geocoding" que faz requisição à API Nominatim
  • Exibição de resultados formatados (rua, cidade, estado, etc.)
  • Tratamento de erros com mensagens amigáveis
  • Loading state durante processamento
  • Reutiliza a função VemComerReverseGeocode.reverseGeocode() se disponível, ou faz requisição direta

Como usar:

  1. Acesse o admin do WordPress
  2. Vá em Pedevem → Teste Geocoding
  3. Informe a latitude e longitude (ex: -16.6864, -49.2643 para Goiânia)
  4. Clique em "Testar Geocoding"
  5. Veja os resultados exibidos abaixo do formulário

Exemplo de coordenadas para teste:

  • Goiânia: Lat: -16.6864, Lng: -49.2643
  • São Paulo: Lat: -23.5505, Lng: -46.6333
  • Rio de Janeiro: Lat: -22.9068, Lng: -43.1729

v0.34 - Mobile UI Moderno (Design Estilo iFood)

Nova implementação:

  • Design Mobile Completo: Interface moderna estilo iFood para dispositivos móveis
  • Top Bar Aprimorado: Logo, seletor de localização (com bairro) e botão de notificações
  • Hero Banner Carousel: Carrossel de banners promocionais com navegação por dots e swipe
  • Stories Section: Seção de stories estilo Instagram (estrutura pronta, aguardando integração com API)
  • Quick Actions: Botões rápidos para Delivery, Reservas, Eventos e Promoções
  • Search Bar: Barra de busca com filtros integrada
  • Seções de Conteúdo:
    • Pratos do Dia (carrossel horizontal)
    • Restaurantes em Destaque (grid)
    • Todos os Restaurantes (grid com cards)
  • Cart Button Flutuante: Botão de carrinho fixo com badge de quantidade
  • Story Viewer Modal: Modal completo para visualização de stories com progress bars e navegação
  • Meta Tags Mobile: Viewport otimizado, apple-mobile-web-app-capable, viewport-fit=cover

Arquivos criados:

  • theme-vemcomer/assets/css/mobile-ui.css - Estilos completos do mobile UI (baseado no HTML fornecido)
  • theme-vemcomer/assets/js/mobile-ui.js - JavaScript para funcionalidades (carousel, stories, notificações, cart)
  • theme-vemcomer/template-parts/home/mobile-home.php - Template partial com HTML completo do design fornecido

Arquivos modificados:

  • theme-vemcomer/header.php - Adicionado botão de notificações no top bar mobile e meta tags mobile otimizadas
  • theme-vemcomer/functions.php - Enqueue de mobile-ui.css e mobile-ui.js
  • templates/page-home.php - Detecção de mobile (wp_is_mobile()) e renderização do template mobile

Como funciona:

  • Quando wp_is_mobile() retorna true na página home, o template mobile-home.php é carregado automaticamente
  • O template renderiza o HTML completo baseado no design fornecido
  • CSS e JavaScript são carregados automaticamente via WordPress enqueue
  • O template busca dados reais do WordPress (banners, restaurantes, pratos) e renderiza dinamicamente

Funcionalidades implementadas:

  • Banner carousel com auto-play e navegação por swipe
  • Estrutura de stories (aguardando integração com API)
  • Sistema de notificações (badge com contagem)
  • Botão de carrinho com atualização dinâmica
  • Cards de restaurantes com favoritos
  • Cards de pratos com preços e badges
  • JavaScript inline no template para stories viewer completo

Próximos passos (Backend):

  • Integrar stories com API REST
  • Implementar sistema de notificações
  • Conectar pratos do dia com menu items destacados
  • Integrar eventos gastronômicos
  • Conectar favoritos com API

v0.33.2 - Top Bar Mobile Exibe Bairro ao Invés de Cidade

Novas funcionalidades:

  • Top Bar Mobile - Exibição de Bairro:
    • Prioriza exibição do bairro sobre a cidade no top bar mobile
    • Salva bairro no localStorage (vc_user_neighborhood) e cookie (vc_user_neighborhood)
    • Atualização automática quando localização é obtida via reverse geocoding
    • Fallback: se não houver bairro, exibe cidade; se não houver cidade, exibe endereço completo
  • Integração com Reverse Geocoding:
    • Extrai bairro do Nominatim (suburb, neighbourhood, quarter)
    • Salva bairro em todas as funções de geolocalização
    • Sincroniza bairro entre localStorage e cookies

Arquivos modificados:

  • theme-vemcomer/header.php - Prioriza bairro na exibição do top bar
  • theme-vemcomer/assets/js/mobile-app.js - Busca bairro primeiro, depois cidade
  • theme-vemcomer/assets/js/home-improvements.js - Função saveNeighborhood() para salvar bairro
  • assets/js/reverse-geocoding.js - Salva bairro no localStorage
  • theme-vemcomer/functions.php - Todas as funções de geolocalização agora salvam bairro

Resultado: Top bar mobile agora exibe o nome do bairro (ex: "Centro", "Jardim América") ao invés da cidade, proporcionando informação mais específica e útil para o usuário.

v0.33.1 - Página de Categorias e Menu Mobile Atualizado

Novas funcionalidades:

  • Item "Categorias" no Menu Mobile:
    • Adicionado entre "Buscar" e "Pedidos" na bottom navigation
    • Link para /categorias/ com ícone de grid
    • Estado ativo destacado quando na página de categorias
  • Shortcode [vc_categories]:
    • Lista todas as categorias de restaurantes (taxonomia vc_cuisine)
    • Grid responsivo com cards de categoria
    • Exibe ícone ou imagem da categoria
    • Mostra contagem de restaurantes por categoria
    • Links para filtrar restaurantes por categoria
    • Suporte a imagens customizadas (meta _vc_category_image)
    • Ícones padrão para categorias comuns (pizza, brasileira, lanches, etc.)

Arquivos modificados:

  • theme-vemcomer/footer.php - Adicionado item "Categorias" na bottom nav
  • inc/Frontend/Shortcodes.php - Novo shortcode sc_categories() com grid de categorias

Próximos passos:

  • Criar página /categorias/ no WordPress com o shortcode [vc_categories]

v0.33 - Navegação Mobile App Nativo (Estilo iFood)

Novas funcionalidades:

  • Estrutura CSS Mobile-First (mobile-app.css):
    • Ocultação de header padrão (.site-header, #masthead), footer padrão (.site-footer) e sidebars em telas < 768px
    • Ajuste do body: padding-top: 60px e padding-bottom: 80px para não esconder conteúdo atrás das barras fixas
    • Top bar fixa: position: fixed; top: 0; z-index: 999 com fundo branco e sombra suave
    • Bottom nav fixa: position: fixed; bottom: 0; z-index: 1000 com suporte a safe-area-inset-bottom (iPhone X+)
  • Bottom Navigation Bar (4 itens - estilo iFood):
    • Renderizada apenas com wp_is_mobile() no PHP
    • 4 ícones SVG inline: Início (Casa), Buscar (Lupa), Pedidos (Lista/Documento), Perfil (Usuário)
    • Lógica de UX: Item da página atual recebe classe .active (cor #ea1d2c)
    • Links: / (Início), /busca (Buscar), /meus-pedidos (Pedidos), /minha-conta (Perfil)
  • Header Minimalista (Mobile Only):
    • Exibido apenas com wp_is_mobile() no PHP
    • Barra simples com Logo pequeno (à esquerda) e texto "Entregar em: [Endereço Atual] ▾"
    • Integrado com sistema de geolocalização (atualização automática)
  • Categorias Estilo Pílulas (Carrossel Horizontal):
    • CSS: display: flex; overflow-x: auto; white-space: nowrap; -webkit-overflow-scrolling: touch;
    • Estilo: Botões arredondados (border-radius: 20px), fundo cinza claro (#f2f2f2), texto preto
    • Item ativo: Fundo vermelho (#ea1d2c), texto branco
    • Scrollbar oculta: ::-webkit-scrollbar { display: none; }

Arquivos novos:

  • theme-vemcomer/assets/css/mobile-app.css - Estilos completos para navegação mobile app
  • theme-vemcomer/assets/js/mobile-app.js - JavaScript para integração e funcionalidades mobile

Arquivos modificados:

  • theme-vemcomer/footer.php - Bottom navigation bar com ícones SVG e estados ativos
  • theme-vemcomer/header.php - Top bar minimalista com seletor de endereço
  • theme-vemcomer/template-parts/home/section-categories.php - Categorias estilo pílulas para mobile
  • theme-vemcomer/functions.php - Enfileiramento de CSS e JS mobile app
  • theme-vemcomer/assets/js/home-improvements.js - Disparo de evento customizado para atualização de endereço

Resultado: Experiência mobile idêntica a um app nativo, com navegação controlada pelo polegar na parte inferior da tela, top bar minimalista e categorias em carrossel horizontal estilo pílulas.

v0.32 - PWA (Progressive Web App) - Infraestrutura Completa

Novas funcionalidades:

  • Manifest.json: Arquivo de manifesto PWA configurado
    • Nome: "VemComer"
    • Display: standalone (remove barra do navegador)
    • Theme Color: #ea1d2c (vermelho iFood)
    • Background: #ffffff
    • Ícones: 192x192 e 512x512 (placeholders configurados)
    • Shortcuts: Atalho para "Restaurantes"
  • Service Worker (sw.js): Estratégia de cache híbrida
    • Cache Name: vemcomer-pwa-v1
    • App Shell Pré-cacheado: Home, CSS críticos (style.css, main.css, product-modal.css)
    • Estratégias de Cache:
      • Network First para APIs REST (/wp-json/): Tenta rede primeiro, fallback para cache, retorna erro JSON se offline
      • Cache First para Assets (imagens, CSS, JS): Retorna cache imediatamente, atualiza em background (stale-while-revalidate)
      • Network First para Navegação HTML: Tenta rede primeiro, fallback para App Shell se offline
    • Ignora: Não intercepta /wp-admin/ ou /wp-login.php
    • Instalação e Ativação: Auto-install, skip waiting, clients claim
  • Integração WordPress:
    • Meta Tags PWA: Injetadas no wp_head (manifest, theme-color, apple-touch-icon, apple-mobile-web-app)
    • Registro do Service Worker: Script inline no footer para registrar SW automaticamente
    • Rota Virtual /sw.js: Rewrite rule para servir SW em escopo global
      • Query var vemcomer_sw para identificar requisição
      • Template redirect para servir arquivo com Content-Type: application/javascript
      • Flush automático de rewrite rules na ativação do tema

Arquivos novos:

  • theme-vemcomer/manifest.json - Manifesto PWA
  • theme-vemcomer/assets/js/sw.js - Service Worker com estratégia de cache
  • theme-vemcomer/PWA_SETUP.md - Documentação de configuração e setup

Arquivos modificados:

  • theme-vemcomer/functions.php - Integração PWA completa (meta tags, registro SW, rewrite rules)

Próximos passos:

  • Criar ícones PWA (192x192 e 512x512) e salvar em theme-vemcomer/assets/images/
  • Fazer flush de rewrite rules (Configurações → Links Permanentes → Salvar)
  • Testar instalação PWA no mobile e desktop

v0.31 - Modal de Upgrade e Pricing (10.3)

Novas funcionalidades:

  • Modal de Pricing (Tabela de Preços):
    • Interface moderna com 3 colunas (Vitrine, Delivery Pro, Growth).
    • Destaque visual para o plano "Delivery Pro" (Recomendado).
    • Lista de recursos comparativa (check/cross).
  • Fluxo de Assinatura:
    • Botões de "Assinar" redirecionam para o WhatsApp do suporte com mensagem pré-formatada contendo o nome do restaurante e o plano desejado.
  • Pontos de Entrada:
    • Links de upgrade espalhados pelo painel (widget lateral, alerta de limite, blur de analytics) abrem o modal automaticamente.

Arquivos novos:

  • assets/js/admin-panel.js - Lógica de interação do painel e modal

Arquivos modificados:

  • inc/Frontend/RestaurantPanel.php - Inclusão do HTML do modal e enfileiramento do JS
  • assets/css/admin-panel-basic.css - Estilos do modal e tabela de preços

v0.30 - Frontend e Dashboard para Plano Vitrine/Básico (10.1 + 10.2)

Novas funcionalidades:

  • Layout de Loja Pública Simplificado (Plano Vitrine):
    • CSS específico para plano básico (frontend-basic-plan.css).
    • Botão "Adicionar" direto (sem modal complexo).
    • Layout de cards de itens simplificado (lista).
    • Rodapé "Powered by VemComer" obrigatório.
  • Painel do Restaurante Limitado:
    • Widget "Seu Plano: VITRINE" com barra de progresso de itens usados.
    • Alerta visual quando o limite de itens está próximo (80%).
    • Card de Analytics com efeito "Blur Overlay" e botão de upgrade para bloquear acesso a dados avançados.
    • Bloqueio visual de itens de menu não permitidos no plano.

Arquivos novos:

  • assets/css/frontend-basic-plan.css - Estilos para a loja pública básica
  • assets/css/admin-panel-basic.css - Estilos para o painel admin limitado

Arquivos modificados:

  • inc/Frontend/RestaurantPanel.php - Integração de widgets de plano e restrições visuais
  • inc/Frontend/Shortcodes.php - Renderização condicional do layout simplificado

v0.29 - Sistema de Planos/Assinaturas SaaS - Enforcers e Seed (9.1 + 9.2 + 9.3)

Novas funcionalidades:

  • Gestão de Planos:
    • Planos criados automaticamente via seed: Vitrine (Grátis), Delivery Pro e Gestão & Growth.
    • Menu de gestão de planos exposto para o Admin ("VemComer > Planos de Assinatura").
    • Atribuição de plano ao restaurante via metabox lateral no editor do restaurante.
  • Limites e Restrições (Enforcers):
    • Limite de Itens: Bloqueia criação de novos itens no cardápio se o limite do plano for atingido (ex: 20 itens no Vitrine).
    • Permissão de Modificadores: Bloqueia criação de modificadores se o plano não permitir (ex: Vitrine não tem modificadores).
    • Mensagem WhatsApp Dinâmica:
      • Vitrine: Envia mensagem de texto simples.
      • Pro/Growth: Envia mensagem formatada rica (negrito, separadores, detalhes).
  • Integração Frontend:
    • O checkout detecta o plano e ajusta a mensagem enviada ao WhatsApp automaticamente.

Arquivos novos:

  • inc/Utils/Plan_Seeder.php - Criação automática dos planos padrão

Arquivos modificados:

  • inc/Admin/Menu_Restaurant.php - Adicionado submenu de Planos
  • inc/Model/CPT_Restaurant.php - Metabox de seleção de plano
  • inc/Model/CPT_MenuItem.php - Validação de limite de itens
  • inc/Model/CPT_ProductModifier.php - Validação de permissão de modificadores
  • inc/WhatsApp/Message_Formatter.php - Templates dinâmicos (simples vs rico)
  • inc/REST/Orders_Controller.php - Passagem de dados para formatação
  • vemcomer-core.php - Execução do seed automático

v0.28+ - Implementação Completa de Recursos Backend (Seções 8-25.1)

Todas as seções de 8 a 25.1 foram implementadas:

  • Seção 8: Sistema de Banners da Home (CPT, REST API completa)
  • Seção 9: Sistema de Planos/Assinaturas SaaS (CPT, limites, validação, REST API)
  • Seção 10: Sistema de Geração de Mensagem WhatsApp (Message_Formatter, REST API)
  • Seção 11: Sistema de Endereços de Entrega (Helper, REST API, Geocodificação)
  • Seção 12: Sistema de Disponibilidade em Tempo Real (Helper, REST API)
  • Seção 13: Sistema de Categorias de Cardápio Robusto (ordem, imagem, REST API)
  • Seção 14: Sistema de Busca Avançada (full-text, filtros, ordenação)
  • Seção 15: Sistema de Notificações (Manager, REST API)
  • Seção 16: Sistema de Tempo Estimado de Entrega Dinâmico (Calculator, REST API)
  • Seção 17: Sistema de Preços por Bairro (já implementado, melhorado)
  • Seção 18: Sistema de Múltiplos Métodos de Fulfillment (Pickup adicionado)
  • Seção 19: Sistema de Gestão de Imagens Otimizadas (Image_Optimizer)
  • Seção 20: Sistema de Validação de Pedido Antes do WhatsApp (Validator, REST API)
  • Seção 21: Sistema de Cache Inteligente (Cache_Manager, REST API de invalidação)
  • Seção 22: Sistema de Relatórios Avançados (Restaurant_Reports, REST API)
  • Seção 23: Sistema de Cupons/Descontos Completo (CPT, Validator, REST API)
  • Seção 24: Sistema de Gestão de Usuários Super Admin (Admin_Controller)
  • Seção 25.1: Sistema de Logs e Auditoria Avançado (Audit_Controller, export CSV)

Total de arquivos criados/modificados: 50+ arquivos Total de endpoints REST adicionados: 30+ endpoints Todas as funcionalidades críticas e importantes implementadas!

v0.44 - Frontend Completo - Integração Total com Backend

Implementação completa do frontend cobrindo todas as funcionalidades backend:

Fase 1: Core do Checkout

  • Modal de Produto com Modificadores (Fase 1.1)

    • Modal responsivo (bottom sheet no mobile, centralizado no desktop)
    • Carrega modificadores via REST API /menu-items/{id}/modifiers
    • Valida modificadores obrigatórios e min/max
    • Adiciona itens com modificadores ao carrinho
    • Cálculo correto de preços incluindo modificadores
  • Checkout Completo com WhatsApp (Fase 1.2)

    • Validação de pedido antes de finalizar (/orders/validate)
    • Geração de mensagem WhatsApp formatada (/orders/prepare-whatsapp)
    • Coleta dados do cliente (nome, telefone, endereço)
    • Abre WhatsApp automaticamente com mensagem pronta
    • Remove criação de pedido direto (usa validação + WhatsApp)
  • Múltiplos Métodos de Fulfillment (Fase 1.3)

    • UI de seleção entre Delivery e Pickup
    • Exibe preço e ETA de cada método
    • Atualiza cálculo de frete baseado na escolha

Fase 2: Social Proof

  • Ratings nos Cards (Fase 2.1)

    • Exibe estrelas e avaliação média nos cards de restaurante
    • Integrado com Rating_Helper
    • Formatação visual consistente
  • Seção de Reviews (Fase 2.2)

    • Shortcode [vc_reviews] integrado no template single
    • Carrega reviews via REST API
    • Formulário para criar nova avaliação
    • Paginação de resultados

Fase 3: Disponibilidade

  • Status Aberto/Fechado (Fase 3.1)

    • Badges visuais nos cards (Aberto/Fechado)
    • Mostra próximo horário de abertura se fechado
    • Bloqueia checkout se restaurante fechado
    • Verificação em tempo real via Schedule_Helper
  • Horários Estruturados (Fase 3.2)

    • Migração de campo texto para JSON estruturado
    • Suporta múltiplos períodos por dia
    • Formatação legível nos shortcodes
    • Fallback para campo legado

Fase 4: Engajamento

  • Sistema de Favoritos (Fase 4.1)

    • Botões de favorito nos cards de restaurante e itens
    • Shortcode [vc_favorites] para listar favoritos
    • Integração com REST API /favorites/*
    • Atualização visual em tempo real
  • Endereços de Entrega (Fase 4.2)

    • Interface para gerenciar endereços salvos
    • Seleção de endereço no checkout
    • Preenchimento automático de campos
    • Suporta criar, editar, deletar e definir principal

Fase 5: Descoberta

  • Busca Avançada (Fase 5.1)

    • Filtros: min_rating, is_open_now, has_delivery, price_range
    • Busca full-text em restaurantes e itens
    • UI organizada e responsiva
  • Filtros Combinados (Fase 5.2)

    • Suporta múltiplos filtros simultâneos
    • Filtros aplicados no shortcode [vc_restaurants]
    • Botão para limpar filtros

Fase 6: Funcionalidades Extras

  • Banners (Fase 6.1)

    • Shortcode [vc_banners] para exibir banners
    • Layout responsivo com grid
    • Suporta links e imagens
    • Filtro por restaurante
  • Notificações (Fase 6.2)

    • Shortcode [vc_notifications] para exibir notificações
    • Badge com contador de não lidas
    • Marcar como lida e marcar todas como lidas
    • Formatação de data relativa
  • Histórico de Pedidos (Fase 6.3)

    • Shortcode [vc_orders_history] para listar pedidos
    • Filtro por status
    • Paginação de resultados
    • Exibe detalhes completos (itens, total, frete, desconto)

Fase 7: Melhorias e Otimizações

  • Cálculo Correto de Preços
    • Inclui modificadores no cálculo do subtotal
    • Exibe preço total por item no carrinho
    • Cálculo correto no checkout

Arquivos criados:

  • assets/css/product-modal.css, assets/js/product-modal.js
  • assets/css/favorites.css, assets/js/favorites.js
  • assets/css/addresses.css, assets/js/addresses.js, assets/js/checkout-addresses.js
  • assets/css/banners.css
  • assets/css/notifications.css, assets/js/notifications.js
  • assets/css/orders-history.css, assets/js/orders-history.js
  • inc/shortcodes/favorites.php, inc/shortcodes/banners.php
  • inc/shortcodes/notifications.php, inc/shortcodes/orders-history.php

Total de funcionalidades frontend implementadas: 15 fases completas Cobertura do backend: 100% das funcionalidades críticas e importantes integradas

v0.27 - Sistema de Geração de Mensagem WhatsApp (10.1 + 10.2 + 10.3)

Novas funcionalidades:

  • Classe Message_Formatter: Formatador de mensagens WhatsApp
    • Template configurável via filtro vemcomer/whatsapp_message_template
    • Suporte a itens com modificadores
    • Formatação de valores monetários
    • Geração de URL do WhatsApp (wa.me)
  • Endpoint REST: POST /orders/prepare-whatsapp
    • Valida: restaurante existe, está aberto, tem WhatsApp configurado
    • Retorna: mensagem formatada e URL do WhatsApp
    • Suporta: delivery e pickup, modificadores, cálculo de totais

Arquivos novos:

  • inc/WhatsApp/Message_Formatter.php - Formatador de mensagens

Arquivos modificados:

  • inc/REST/Orders_Controller.php - Adicionado endpoint prepare-whatsapp

v0.26 - Sistema de Banners da Home (8.1 + 8.2)

Novas funcionalidades:

  • CPT vc_banner: Custom Post Type para banners da home
    • Campos: imagem (thumbnail), título, link, restaurante_id (opcional), ordem, ativo
    • Meta fields: _vc_banner_link, _vc_banner_restaurant_id, _vc_banner_order, _vc_banner_active
  • REST API completa:
    • GET /banners - Lista banners ativos (público, ordenados)
    • POST /banners - Criar banner (admin)
    • PATCH /banners/{id} - Atualizar banner (admin)
    • DELETE /banners/{id} - Deletar banner (admin)
  • Interface admin: Metabox completo e colunas customizadas

Arquivos novos:

  • inc/Model/CPT_Banner.php - CPT de banners
  • inc/REST/Banners_Controller.php - Controller REST

Arquivos modificados:

  • inc/Admin/Menu_Restaurant.php - Adicionado submenu "Banners"
  • vemcomer-core.php - Registro do CPT e controller

v0.25 - Sistema de Analytics - Middleware de Tracking (7.3)

Novas funcionalidades:

  • Tracking automático de eventos:
    • Visualização de restaurante: hook em template_redirect para single de restaurante
    • Visualização de cardápio: hook em template_redirect quando há restaurant_id na URL
    • Tracking via REST API: hooks em rest_prepare_* para visualizações via API
  • JavaScript de tracking: Script inline no footer para eventos do lado do cliente
    • Cliques no WhatsApp: detecta links wa.me, whatsapp.com, api.whatsapp.com
    • Adições ao carrinho: detecta botões com data-action="add-to-cart"
    • Início de checkout: detecta botões com data-action="checkout"
    • Usa navigator.sendBeacon para não bloquear navegação
  • Endpoint REST para tracking: POST /analytics/track para receber eventos via JavaScript
  • Processamento assíncrono: Todos os eventos são logados via shutdown hook (não bloqueiam requisições)

Arquivos novos:

  • inc/Analytics/Tracking_Middleware.php - Hooks automáticos para tracking
  • inc/Analytics/Tracking_Controller.php - Endpoint REST para tracking via JS

Arquivos modificados:

  • vemcomer-core.php - Registro dos novos controllers

v0.24 - Sistema de Analytics - Dashboard (7.2)

Novas funcionalidades:

  • Endpoint REST de Analytics: GET /restaurants/{id}/analytics
    • Métricas: visualizações de restaurante, visualizações de cardápio, cliques WhatsApp, adições ao carrinho, inícios de checkout
    • Taxa de conversão: cliques WhatsApp / visualizações de restaurante
    • Clientes únicos: total de clientes distintos que interagiram
    • Itens mais vistos: top 10 itens do cardápio mais visualizados
  • Filtros de período: today, week, month, custom (com date_from e date_to)
  • Controle de acesso: Apenas dono do restaurante ou admin pode ver analytics
  • Cálculo de métricas: Agregaçã

This README is longer than the copy stored here. Read the rest on GitHub →