Skip to content

v0.1.7

Data de lançamento: 8 de maio de 2026

Novas Funcionalidades

Armazenamento de Assets em S3

  • Uma nova configuração opcional ASSETS_STORAGE_MODE=s3 permite que as lojas enviem uploads para um bucket compatível com S3 e os sirvam a partir de um CDN, em vez do diretório local padrão data/files/
  • Quando o modo S3 está ativo, cada imagem enviada é pré-gerada em larguras comuns (200/400/600/800/1200) como variantes WebP e armazenada junto do original, para que a loja possa servir imagens de tamanho correto sem conversão em tempo real
  • Um novo limite opcional ASSETS_MAX_BYTES controla o armazenamento cumulativo de ficheiros (tanto em modo local como S3), para que um fluxo de uploads descontrolado não dispare a fatura do bucket — os limites por upload (5 MB imagem / 50 MB vídeo) permanecem inalterados
  • Um script único migrate-assets-to-s3.mjs é incluído na imagem Docker; executá-lo dentro de um contentor envia os ficheiros locais existentes para o bucket, reescreve as URLs guardadas para o CDN e pré-gera as variantes

Exportações CSV de Utilizadores e Encomendas

  • A lista de Utilizadores tem um novo botão Exportar Utilizadores que descarrega a vista atual em CSV
  • A lista de Encomendas tem um novo botão Exportar Encomendas que descarrega a vista atual em CSV
  • Ambos os endpoints estão protegidos contra CSRF e têm rate limiting

Imagens Responsivas na Loja

  • Cards de produto, páginas de produto, slides do slideshow, secções imagem-com-texto, mosaicos de coleções e outras imagens da loja agora são renderizados com srcSet e sizes, alinhados às larguras WebP pré-geradas (200/400/600/800/1200)
  • Telemóveis e tablets carregam a menor variante que cabe no seu viewport em vez de carregar sempre o asset de tamanho desktop, reduzindo o peso da página e melhorando os Core Web Vitals em ligações lentas

Telemetria de Erros

  • Quando a Telemetria da Plataforma está ativada em Definições → Integrações, exceções no servidor e erros não tratados no cliente (window.onerror, rejeições de promises não tratadas) são reportados anonimamente à equipa Capyshop como eventos $exception
  • Nenhum dado pessoal, informação de cliente ou detalhe da loja é encaminhado — o interruptor de telemetria existente controla todo o pipeline, e desligá-lo também interrompe o reporte de erros

Carregamento de Fontes do Construtor de Páginas

  • Títulos e subtítulos de slideshow, títulos/subtítulos/corpo de imagem-com-texto, e fontes do corpo de secções de texto escolhidas no construtor de páginas são agora carregadas automaticamente com a página
  • Anteriormente apenas a fonte global do tema era carregada, o que significava que as escolhas de fonte do admin nas secções da página inicial caíam silenciosamente na fonte padrão na primeira renderização

Localização do Checkout Stripe

  • O Stripe Elements (o formulário de cartão integrado) agora é montado no idioma selecionado pelo cliente, para que rótulos de campos, mensagens de erro e o botão "Pagar" correspondam ao resto do checkout

Melhorias

  • O carregamento de webfonts já não bloqueia a renderização — a loja renderiza imediatamente e a webfont entra assim que estiver carregada, eliminando o anterior "ecrã em branco até o Google Fonts responder"
  • Target de build atualizado para browsers modernos (Chrome 111+, Edge 111+, Firefox 128+, Safari 16+) para que o bundle deixe de incluir polyfills ES6 que nenhum browser atual precisa
  • Tamanhos refinados nos gráficos do dashboard, da visão geral de analytics e do funil de analytics para visualização mais clara
  • O pipeline de release da imagem Docker passou para um workflow dedicado acionado por GitHub Releases, condicionado a uma execução de CI verde em main para o mesmo commit — sem mais pushes de imagem ad-hoc

Correções de Segurança

  • Todos os endpoints da API que alteram estado (POST/PATCH/PUT/DELETE) agora validam a Origin do pedido contra TRUSTED_ORIGINS e rejeitam discrepâncias; apenas os webhooks Stripe ficam isentos, uma vez que se autenticam por assinatura em vez de cookie
  • O proxy do assistente IA (/api/admin/chat, /api/admin/generate-text) e o endpoint de registo agora contabilizam todas as chamadas no rate limit — não apenas as falhadas — para defender contra esgotamento de API paga e abuso de criação de contas em massa