Social Proof Widget Generator

Create embeddable conversion-boosting notification widgets for any client site. Copy, paste, deploy.

Customize Widget
5s
15s
Live Preview

Your Client's Website

This is a mock page showing how the social proof widget will look on a real site. Notifications will cycle automatically below.

Book Now

Premium Package

Full service with all the extras. Starting at $499/month.

Saved Widgets
ClientTypeMessagesDateActions
No saved widgets yet
')).then(() => { toast('Copied to clipboard'); }); } function closeModal() { document.getElementById('exportModal').classList.remove('active'); } // ---- SAVE / LOAD ---- function saveWidget() { const name = document.getElementById('widgetName').value.trim(); if (!name) return toast('Enter a client/widget name'); const saved = JSON.parse(localStorage.getItem('rvn_widgets') || '[]'); saved.push({ name, type: currentType, messages: JSON.parse(JSON.stringify(messages)), config: { position: document.getElementById('widgetPosition').value, colorBg: document.getElementById('colorBg').value, colorText: document.getElementById('colorText').value, colorAccent: document.getElementById('colorAccent').value, displayTime: document.getElementById('displayTime').value, delayTime: document.getElementById('delayTime').value, animation: document.getElementById('widgetAnimation').value, }, date: new Date().toISOString().split('T')[0] }); localStorage.setItem('rvn_widgets', JSON.stringify(saved)); loadSavedWidgets(); toast('Widget saved: ' + name); } function loadSavedWidgets() { const saved = JSON.parse(localStorage.getItem('rvn_widgets') || '[]'); const tbody = document.getElementById('savedTableBody'); if (!saved.length) { tbody.innerHTML = 'No saved widgets yet'; return; } const typeBadge = {activity:'cyan',visitors:'green',review:'purple',sale:'orange',fomo:'orange'}; tbody.innerHTML = saved.map((w, i) => ` ${w.name} ${w.type} ${w.messages.length} ${w.date} `).join(''); } function loadWidget(i) { const saved = JSON.parse(localStorage.getItem('rvn_widgets') || '[]'); const w = saved[i]; if (!w) return; document.getElementById('widgetName').value = w.name; currentType = w.type; document.querySelectorAll('#widgetTabs .tab').forEach(t => { t.classList.toggle('active', t.dataset.type === currentType); }); messages = JSON.parse(JSON.stringify(w.messages)); document.getElementById('widgetPosition').value = w.config.position; document.getElementById('colorBg').value = w.config.colorBg; document.getElementById('colorText').value = w.config.colorText; document.getElementById('colorAccent').value = w.config.colorAccent; document.getElementById('displayTime').value = w.config.displayTime; document.getElementById('displayTimeVal').textContent = w.config.displayTime + 's'; document.getElementById('delayTime').value = w.config.delayTime; document.getElementById('delayTimeVal').textContent = w.config.delayTime + 's'; document.getElementById('widgetAnimation').value = w.config.animation; buildMessageUI(); renderMessages(); startCycling(); toast('Loaded: ' + w.name); } function deleteWidget(i) { const saved = JSON.parse(localStorage.getItem('rvn_widgets') || '[]'); saved.splice(i, 1); localStorage.setItem('rvn_widgets', JSON.stringify(saved)); loadSavedWidgets(); toast('Widget deleted'); } // ---- TOAST ---- function toast(msg) { const t = document.getElementById('toast'); t.textContent = msg; t.classList.add('show'); setTimeout(() => t.classList.remove('show'), 2500); }