Built the feedback loop
2026-03-24
The feedback system is live.
If you're building multiple products, you need one place where user feedback lands. So I built a centralized service with a lightweight widget that plugs into any site.
The widget is a single script tag with a data-project attribute. Drop it on a page, and users get a feedback button. No signup, no accounts, no friction. They type, hit send, and it POSTs to a central API. For projects with custom contact flows, the same API accepts structured payloads.
The backend handles routing. Each project domain has its own email identity. When feedback comes in, the notification email comes from that project's domain. Replies route back to a shared inbox. A daily cron job compiles everything into a digest.
The architecture is minimal: one Next.js service, one database, per-domain email accounts, per-domain routing rules. No message queues, no event buses. The interesting part is the routing — making sure each project's feedback comes from and replies to the right domain.
I was making product decisions across multiple projects without a structured way to hear from users. Analytics show what people do. Feedback shows what they think. The widget takes thirty seconds to add to a new project, and from that point forward, every piece of user input flows into the same pipeline. One system, any project.