Free tool
Feedback widget generator
A floating feedback button for sites that don't want a full account. Customize it below, copy the snippet, paste it before </body>. Submissions open as a pre-filled email to you — no server required.
Live preview
Your snippet
Add a valid email above — the copied snippet will send feedback there.
<script>
(function () {
var CONFIG = {
buttonText: "Feedback",
email: "",
accentColor: "#E05A33",
side: "right",
};
var style = document.createElement("style");
style.textContent =
"#uw-btn{position:fixed;bottom:20px;" + CONFIG.side + ":20px;z-index:2147483000;" +
"background:" + CONFIG.accentColor + ";color:#fff;border:none;border-radius:999px;" +
"padding:12px 18px;font:600 14px/1 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;" +
"box-shadow:0 4px 16px rgba(0,0,0,.18);cursor:pointer;}" +
"#uw-overlay{position:fixed;inset:0;background:rgba(20,18,16,.45);z-index:2147483001;" +
"display:none;align-items:center;justify-content:center;padding:20px;}" +
"#uw-modal{background:#fff;border-radius:16px;max-width:360px;width:100%;padding:20px;" +
"font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;box-shadow:0 20px 60px rgba(0,0,0,.25);}" +
"#uw-modal h3{margin:0 0 10px;font-size:15px;color:#222;}" +
"#uw-modal textarea{width:100%;box-sizing:border-box;min-height:100px;border:1px solid #ddd;" +
"border-radius:10px;padding:10px;font:13px/1.4 inherit;resize:vertical;margin-bottom:12px;}" +
"#uw-modal .uw-row{display:flex;gap:8px;justify-content:flex-end;}" +
"#uw-modal button{border:none;border-radius:999px;padding:9px 16px;font:600 13px inherit;cursor:pointer;}" +
"#uw-cancel{background:#f1f1f1;color:#444;}" +
"#uw-send{background:" + CONFIG.accentColor + ";color:#fff;}" +
"#uw-powered{display:block;text-align:center;margin-top:14px;font-size:11px;color:#999;text-decoration:none;}";
document.head.appendChild(style);
var btn = document.createElement("button");
btn.id = "uw-btn";
btn.type = "button";
btn.textContent = CONFIG.buttonText;
var overlay = document.createElement("div");
overlay.id = "uw-overlay";
overlay.innerHTML =
'<div id="uw-modal" role="dialog" aria-modal="true">' +
"<h3>Send feedback</h3>" +
'<textarea id="uw-text" placeholder="What\'s on your mind?"></textarea>' +
'<div class="uw-row">' +
'<button id="uw-cancel" type="button">Cancel</button>' +
'<button id="uw-send" type="button">Send</button>' +
"</div>" +
'<a id="uw-powered" href="https://upstep.dev/?utm_source=widget&utm_medium=referral&utm_campaign=feedback-widget-generator" target="_blank" rel="noopener">Powered by Upstep.dev</a>' +
"</div>";
document.body.appendChild(btn);
document.body.appendChild(overlay);
function open() { overlay.style.display = "flex"; document.getElementById("uw-text").focus(); }
function close() { overlay.style.display = "none"; document.getElementById("uw-text").value = ""; }
btn.addEventListener("click", open);
overlay.addEventListener("click", function (e) { if (e.target === overlay) close(); });
document.getElementById("uw-cancel").addEventListener("click", close);
document.addEventListener("keydown", function (e) { if (e.key === "Escape") close(); });
document.getElementById("uw-send").addEventListener("click", function () {
var text = document.getElementById("uw-text").value.trim();
if (!text) return;
var subject = encodeURIComponent("Feedback from " + location.hostname);
var body = encodeURIComponent(text + "\n\n---\nSent from " + location.href);
var a = document.createElement("a");
a.href = "mailto:" + CONFIG.email + "?subject=" + subject + "&body=" + body;
a.target = "_blank";
a.rel = "noopener";
document.body.appendChild(a);
a.click();
a.remove();
close();
});
})();
</script>Paste this right before </body> on any page.
Outgrown mailto?
Upstep gives you a real feedback inbox: voting, statuses, comments, and a public roadmap your users can follow — same idea, a lot more room to grow.
Get started free