@@ -141,6 +273,58 @@
const params = new URLSearchParams(window.location.search);
const clickKey = "lp_click_id_" + window.location.hostname;
+
+ // --- Timer Logic ---
+ function startTimer() {
+ const timerElement = document.getElementById("countdownTimer");
+ if (!timerElement) return;
+
+ // 10 minutes from now (in seconds)
+ let totalSeconds = 10 * 60;
+
+ // Check if we already have a timer running in session storage to persist across refresh
+ const sessionKey = "lp_timer_" + window.location.hostname;
+ const savedTime = sessionStorage.getItem(sessionKey);
+ const savedTimestamp = sessionStorage.getItem(sessionKey + "_ts");
+
+ if (savedTime && savedTimestamp) {
+ const elapsed = Math.floor((Date.now() - parseInt(savedTimestamp)) / 1000);
+ const remaining = parseInt(savedTime) - elapsed;
+ if (remaining > 0) {
+ totalSeconds = remaining;
+ }
+ }
+
+ const interval = setInterval(() => {
+ if (totalSeconds <= 0) {
+ clearInterval(interval);
+ timerElement.innerText = "00:00";
+ timerElement.classList.add("alert"); // Change color to red/alert
+ return;
+ }
+
+ const minutes = Math.floor(totalSeconds / 60);
+ const seconds = totalSeconds % 60;
+
+ const formattedMinutes = minutes.toString().padStart(2, '0');
+ const formattedSeconds = seconds.toString().padStart(2, '0');
+
+ timerElement.innerText = `${formattedMinutes}:${formattedSeconds}`;
+
+ // Persist in case of refresh
+ sessionStorage.setItem(sessionKey, totalSeconds.toString());
+ sessionStorage.setItem(sessionKey + "_ts", Date.now().toString());
+
+ if (totalSeconds <= 60) {
+ timerElement.classList.add("alert"); // Final minute warning
+ }
+
+ totalSeconds--;
+ }, 1000);
+ }
+
+ startTimer();
+ // -------------------
function getClickId() {
const fromUrl = params.get("click_id") || params.get("clickid") || params.get("utm_id") || params.get("gclid");
diff --git a/progresso/2026-03-03_landing_page_ux_improvement.md b/progresso/2026-03-03_landing_page_ux_improvement.md
new file mode 100644
index 000000000..6b95a89e5
--- /dev/null
+++ b/progresso/2026-03-03_landing_page_ux_improvement.md
@@ -0,0 +1,26 @@
+# Objetivo
+Melhorar o design e as conversões da Landing Page (`show.html.erb`), focando em interface moderna ("glassmorphism"), eliminação de scroll desnecessário, e implementação de gatilhos psicológicos de urgência (cronômetro).
+
+# Contexto
+A página antiga do iachat para atendimento de WhatsApp possuía um design simples. Como arquiteto e UX expert, a refatoração visual manteve a performance de um arquivo único (HTML/CSS inline leve) mas modernizou a apresentação utilizando as variáveis de cores dinâmicas para gerar maior apelo visual e Call-to-Action.
+
+# Passos Realizados
+1. Refatoração do layout com responsividade fluida via CSS `clamp()` para as fontes e paddings. O body passou a ter `overflow: hidden` na maioria das telas modernas para manter o formato "above-the-fold".
+2. Aplicação de visual premium no card de contato usando `backdrop-filter: blur()`, reduzindo contraste chapado e gerando sensação de profundidade.
+3. Adição de um Cronômetro regressivo ("Oferta expira em 10:00") que utiliza `sessionStorage` para manter a persistência entre recarregamentos de página.
+4. Animação de "brilho" (shine) contínuo e pulso na sombra (`box-shadow`) do botão do WhatsApp para destacar de forma definitiva o CTA.
+
+# Arquivos Alterados
+- `app/views/public/landing_pages/show.html.erb`
+
+# Variáveis / Features
+- `countdownTimer`: Elemento e classe no JS nativo adicionado.
+- `sessionKey = "lp_timer_"`: Controle por hostname para evitar resets de timer na mesma sessão.
+
+# Como Validar
+1. Abrir no navegador a URL de teste local de algum Landing Host (/lp/[hostname]).
+2. Testar o redimensionamento de janela; o layout não deve forçar scroll a não ser que a altura seja criticamente pequena (ex: < 500px).
+3. Aguardar os 10 minutos (ou editar session storage) para validar a cor vermelha piscante do cronômetro finalizado.
+
+# Como Reverter
+Executar no terminal raiz: `git checkout app/views/public/landing_pages/show.html.erb` caso ainda não tenha "commitado", ou usar o git revert correspondente.