Skip to content

v0.1.6

Data de lançamento: 3 de maio de 2026

Novas Funcionalidades

Reduções de Preço em Conformidade com a UE

  • Os produtos têm uma nova opção "Mostrar preço anterior" no formulário do produto para optar pela exibição de uma redução de preço
  • O preço riscado na loja agora utiliza o menor preço dos últimos 30 dias, conforme a Diretiva Omnibus da UE — e não o preço anterior inserido manualmente
  • O formulário do produto avisa quando nenhuma badge de promoção será exibida (porque o preço atual não é menor que o mínimo de 30 dias), para que os admins saibam que a redução não aparecerá
  • As alterações de preço são registradas automaticamente e um cron semanal remove o histórico com mais de 90 dias

Preço Unitário

  • Os produtos agora podem declarar uma quantidade e uma unidade (kg, g, L, ml, m, cm, m²), e a loja exibe uma linha "por kg" / "por L" / etc. abaixo do preço nos cards, na página do produto, na coleção e na busca
  • Produtos vendidos por unidade ("por item") estão isentos do preço unitário, conforme exigido pela diretiva
  • O preço unitário é exportado para o feed do Google Merchant como unit_pricing_measure e unit_pricing_base_measure

Preços com Imposto Incluído na Loja

  • Todos os preços exibidos na loja (cards, página de produto, carrinho, checkout, e-mails de pedido) agora sempre incluem o imposto, conforme exigido para vendas B2C na UE
  • A página do produto exibe um aviso quando uma regra de imposto possui sobreposições por país, sinalizando que o valor final pode ser recalculado no checkout assim que o país de cobrança do cliente for conhecido
  • O formulário de produto do admin tem uma nova prévia de imposto que mostra o que cada país será cobrado quando uma regra de imposto possui sobreposições por país

Endereço de Cobrança no Checkout

  • O fluxo de checkout tem uma nova etapa de endereço de cobrança: manter o endereço de entrega (padrão), escolher um endereço salvo ou inserir um novo
  • Os clientes podem opcionalmente salvar um endereço de cobrança personalizado em sua agenda para pedidos futuros
  • Alterar o país de cobrança limpa o método de pagamento selecionado e qualquer Stripe PaymentIntent em andamento, para que os impostos sejam recalculados para o novo país
  • Os e-mails de confirmação de pedido e a página de histórico de pedidos do cliente exibem os endereços de entrega e cobrança separadamente quando são diferentes
  • A visualização administrativa do pedido mostra entrega e cobrança lado a lado

Melhorias

Dashboard de Analytics

  • As tabelas nas páginas de Tráfego, Produtos e Carrinhos Abandonados agora usam paginação no servidor, mantendo lojas grandes responsivas
  • A interface do gráfico de funil foi refinada para uma visualização mais clara dos pontos de abandono
  • As sessões de admins autenticados são excluídas do analytics para que os números reflitam a atividade real dos clientes
  • Os caminhos de página são normalizados para que a mesma página lógica não se fragmente em várias linhas

Pedidos

  • Novo filtro de origem do pedido na lista de pedidos separa os pedidos de checkout dos pedidos criados manualmente
  • A criação de pedidos manuais bloqueia e-mails de placeholder quando um e-mail real do cliente está disponível, garantindo que as notificações cheguem à caixa certa

Onboarding

  • A etapa de Idiomas agora pré-seleciona Inglês, Espanhol, Holandês e Português (antes apenas Inglês); os admins ainda podem ajustar a lista

Estabilidade do Checkout

  • Locks consultivos e atualizações de snapshot serializáveis protegem ações concorrentes de checkout contra condições de corrida
  • As datas no seletor de data do checkout e nos e-mails de pedido agora respeitam o locale do cliente

Envio e Locale

  • Os limites mínimos de pedido para envio agora são comparados com o subtotal + imposto menos qualquer desconto de mercadoria, alinhado ao que o cliente vê no resumo do pedido (cupons exclusivos de envio são excluídos do desconto)
  • As páginas da loja renderizadas no servidor e os e-mails de pedido resolvem o idioma pela preferência salva do cliente, depois pelo cookie locale, depois pelo primeiro idioma habilitado pela loja, com fallback para Inglês — assim, um cookie desatualizado não renderiza mais um idioma que a loja tenha desativado

Operações

  • Uma nova variável de ambiente opcional ENABLE_AUTH_RATE_LIMIT permite que operadores desativem o rate limit do Better Auth em ambientes de CI e teste; o comportamento em produção permanece inalterado a menos que a variável seja explicitamente definida

Correções de Bugs

  • A mesclagem de carrinhos agora valida o estoque para ambos os lados e notifica os clientes quando as quantidades são ajustadas
  • Um toast de aviso é exibido dois minutos antes da expiração da reserva do carrinho
  • Os handlers de webhook do Stripe (sucesso e falha) agora são idempotentes e usam guards atômicos para evitar processamento duplicado
  • Aplicar e remover cupons é serializado pelo lock do checkout; cupons de uso único por cliente não contam mais pedidos cancelados ou com falha de pagamento
  • A revalidação de cupons de envio é ignorada quando o cliente troca de país antes de escolher um método de envio
  • O cohort do visitante é persistido no snapshot do pedido para que os eventos de compra do servidor permaneçam no cohort correto
  • O botão Cancelar no formulário de edição de usuário agora redefine os campos sem deixá-los marcados como modificados

Correções de Segurança

  • O canal do iframe do page builder agora está restrito a postMessage de mesma origem
  • As operações PATCH e DELETE de endereço agora são vinculadas à propriedade no nível SQL
  • Rate limit por IP é aplicado no endpoint de webhook do Stripe
  • As queries agregadas de analytics agora usam chamadas parametrizadas de make_interval() em vez de interpolação de string
  • A tolerância de timestamp do constructEvent do Stripe está fixada em 300 segundos
  • Order.stripePaymentIntentId agora tem um índice único e o webhook usa findUnique por segurança