EnoughStack
Feedback

Listen to customers, plan what comes next and share what shipped.

Share

Invite customers to share feedback, and see where their visits come from.

Your portal

Give customers one place to share ideas, follow your roadmap and read product updates.

PublicAnyone can find and open it.Change

https://www.enoughstack.com/portal/ws_demo

Open
  • People sign in with an emailed code before they post. Allow anonymous posts in Settings → Moderation to drop that step.Fix

  • New posts wait in Moderation before anyone else sees them.Fix

QR code

For posters, slides and packaging. Scans count as “QR code” below.

Share it

Each button opens that network with your link filled in; visits from it are counted under its name.

Copied links carry ?ref=link, counted as “Shared link”.

Invite people

Email people a link to the portal, with a note from you.

Email your customers

Invite your whole email list in one campaign.

Drafts a campaign to your email list (200 subscribed contacts) with a button to the portal, tagged so its visits count as “Email campaign”. It opens in the Email editor; nothing is sent until you send it there.

Embed it

Put feedback where your users already are: your site, app, docs and emails.

The launcher, its colours and what it shows are set up under Settings → Widget

Widget

A launcher on every page of your site. Configure it under Settings → Widget.

<script async src="https://www.enoughstack.com/widget.js" data-key="demo000000000000framecast"></script>
<script>
  // Optional: tell the widget who is signed in to your app.
  window.EnoughStackFeedback = window.EnoughStackFeedback || {};
  // window.EnoughStackFeedback.user = { id: "42", email: "jane@example.com", name: "Jane" };
</script>

Widget (React)

The same widget, loaded from a React component.

useEffect(() => {
  const script = document.createElement("script");
  script.src = "https://www.enoughstack.com/widget.js";
  script.dataset.key = "demo000000000000framecast";
  script.async = true;
  document.body.appendChild(script);
  return () => script.remove();
}, []);

Where feedback comes from

Visits and new posts in the last 30 days, by the channel that brought them in.

Visits
0
Portal visits in the last 30 days
New posts
10
Posted in the last 30 days
New votes
118
Cast in the last 30 days
Changelog subscribers
25
Subscribed now
Portal views
3,860
All time
Widget opens
412
All time

Visits by channel

From ?ref= tags, or the site that linked to the portal.

No visits yet

Share the link, the QR code or a badge above — each visit is counted under the channel it came from.

New posts by channel

Posts keep the channel of the visit they were written in.

Direct or unknown
4 · 40%
Widget
4 · 40%
Added by the team
2 · 20%