Adicione social proof, timers, barras de anúncio, modais de desconto e mais em qualquer frontend — com uma única linha de código.
Cole este snippet antes do </body> do seu site:
<script
src="https://storefront.acessocomercial.com/tools/loader.js"
data-hostname="minha-loja"
async
></script> Substitua "minha-loja" pelo hostname da sua loja no painel. Pronto — as ferramentas configuradas no painel serão automaticamente aplicadas ao seu site.
O sistema usa uma arquitetura de dois arquivos para performance máxima:
Carregado imediatamente. Busca configuração e carrega o bundle principal apenas se houver ferramentas ativas.
Carregado sob demanda. Contém todos os widgets com isolamento CSS via Shadow DOM.
loader.js lê o data-hostname do script tagGET /api/storefront/tools/{hostname}localStorage por 5 minutos (navegação instantânea entre páginas)tools.js dinamicamenteTodas configuráveis pelo painel administrativo. Ativam automaticamente quando configuradas.
| Ferramenta | Descrição | Requer data attributes? |
|---|---|---|
| Barra de Anúncio | Barra fixa no topo com mensagens rotativas (ex: "Frete grátis acima de R$99") | Não |
| Timer | Contagem regressiva em cards de produto com data de expiração | Sim — data-ac-product-id |
| Indicador | Badge colorido nos produtos (ex: "Novo", "Mais vendido", "Exclusivo") | Sim — data-ac-product-id |
| Últimas Unidades | Alerta de escassez ("Restam apenas 3!") em produtos com baixo estoque | Sim — data-ac-product-id + data-ac-quantity |
| Desconto à Vista | Preço com desconto PIX exibido nos cards de produto | Sim — data-ac-product-id + data-ac-price |
| Modal de Desconto | Popup com formulário para captura de leads e exibição de cupom | Não |
| Prova Social | Notificações tipo toast mostrando compras e visualizações recentes | Não |
| Funil | Modal de upsell exibido após adicionar ao carrinho | Não (via Data Layer) |
| Session Replay | Gravação de sessão do visitante para análise no painel | Não |
Ferramentas que atuam em produtos individuais precisam saber qual produto está sendo exibido. Adicione estes atributos nos elementos que representam cards de produto:
<div class="product-card"
data-ac-product-id="abc123"
data-ac-price="14900"
data-ac-quantity="5"
>
<!-- conteúdo do card -->
</div> | Atributo | Tipo | Descrição |
|---|---|---|
data-ac-product-id | String | Obrigatório. ID do produto na plataforma (Relay Global ID). |
data-ac-price | Number | Preço em centavos (ex: 14900 = R$149,00). Usado pelo Desconto à Vista. |
data-ac-quantity | Number | Estoque disponível. Usado pelo Últimas Unidades. |
MutationObserver para detectar novos elementos com data-ac-product-id. Em aplicações SPA (React, Vue, Angular), os widgets são aplicados automaticamente quando os cards são renderizados no DOM.
O SDK implementa uma fila de eventos no padrão GTM. Você pode enviar eventos antes ou depois do SDK carregar:
// Inicializa a fila (pode ser feito antes do script carregar)
window.acDataLayer = window.acDataLayer || [];
// Evento de visualização de página
window.acDataLayer.push({
event: "page_view",
page: "product",
productId: "abc123"
});
// Evento de adição ao carrinho (ativa o Funil/Upsell)
window.acDataLayer.push({
event: "add_to_cart",
productId: "abc123",
productName: "Camiseta Premium",
quantity: 1
}); | Evento | Campos | Efeito |
|---|---|---|
page_view | page, productId | Ativa prova social para o produto |
add_to_cart | productId, productName, quantity | Ativa funil/upsell, alimenta prova social |
purchase | customerName, city, productName | Alimenta prova social |
Após o carregamento, o SDK expõe um objeto global para controle programático:
// Acessar configuração carregada
console.log(window.AcessoComercial.config);
// Enviar evento via API global
window.AcessoComercial.push({
event: "add_to_cart",
productId: "abc123"
});
// Destruir todos os widgets (SPA cleanup)
window.AcessoComercial.destroy(); O loader busca a configuração das ferramentas do seguinte endpoint REST:
| Método | Rota | Descrição |
|---|---|---|
| GET | /api/storefront/tools/{hostname} | Retorna configuração JSON de todas as ferramentas ativas para a loja. |
| GET | /api/storefront/tools/loader.js | Bundle do loader (~2KB, IIFE). |
| GET | /api/storefront/tools/tools.js | Bundle completo dos widgets (~31KB, IIFE, lazy loaded). |
{
"hostname": "minha-loja",
"tools": {
"adBar": { "messages": ["Frete grátis acima de R$99!", "10% OFF no PIX"] },
"timers": [{
"endDate": "2026-07-01T00:00:00.000Z",
"variant": "danger",
"targets": [{ "type": "product", "productId": "abc123" }]
}],
"indicators": [{
"text": "Novo",
"variant": "success",
"productIds": ["abc123", "def456"]
}],
"lastUnitsRule": {
"active": true,
"maximumUnits": 5,
"variant": "danger",
"productIds": []
},
"cashDiscounts": [{
"discountPercentage": 10,
"productIds": []
}],
"discountModals": [],
"socialProofRule": {
"active": true,
"showViews": true,
"showAddToCart": true,
"showOrders": true
},
"sessionReplay": { "enabled": true, "sampleRate": 100 }
},
"theme": null
} Em desenvolvimento, aponte o script para o servidor local:
<script
src="http://localhost:8082/api/storefront/tools/loader.js"
data-hostname="demo"
async
></script> Todos os widgets são renderizados dentro de Shadow DOM. Isso significa:
Cache-Control: public, max-age=300 — 5 minutos de cache + localStorage no navegadorCache-Control: public, max-age=3600 — 1 hora de cachetools.js só é baixado se houver ferramentas ativas