Laravel Feedback
Drop-in floating feedback widget for Laravel apps — sentiment + free-text + email, Filament admin triage, and pluggable notification drivers.
Bottom-right pill that opens a small panel. Dark-mode aware, RTL via dir="auto", zero JS build step.
feedback (default), bug (triage filter), notify (email required, message optional — perfect for "Coming Soon" lead capture).
Name, email, phone — each independently enabled/required. Authenticated users get name + email auto-filled.
Swap the default 😊 😐 😞 for star ratings, NPS 0-10, thumbs, or any emoji set you want — pure config change.
Optional user-chosen category (Bug / Idea / Complaint / Question / Praise by default). Filterable in admin.
Attach JSON metadata (plugin slug, tenant, tags) to every submission. Surfaces in the admin context column.
10 submissions per IP per hour by default. IP is SHA-256(ip + APP_KEY); never stored raw.
mail, Slack, Telegram, webhook out of the box. Custom drivers via extendDriver(). All swallow their own exceptions.
RTL-friendly out of the box. Publishable lang files for any locale.
List, mode + category + sentiment columns, mailto reply, one-click triage, navigation badge for untriaged count.
Notification drivers
mail
Plain text email to a configured address. Uses Laravel's mail config.
slack
Posts to a Slack incoming webhook. Includes sentiment emoji + source URL.
telegram
Posts to a Telegram bot chat. Markdown formatting + sentiment emoji.
webhook
POSTs the full JSON payload to any endpoint. Custom headers supported.
Triage submissions, reply via mailto, filter by mode/sentiment.
Try the live widget
The floating Feedback pill is rendered bottom-right on every page of this demo — submit a message right now and check the admin triage to see your row.
The three modes
Same widget, different defaults. Pick the mode per page based on what you're asking for.
mode="feedback"
Generic feedback channel — sentiment + free text + optional email. The default mode.
Marketing pages, landing pages, anywhere you want a low-friction "tell us what you think" surface.
mode="bug"
Same shape as feedback, but stored with mode=bug for the bug triage filter.
Beta apps, in-product surfaces where you specifically want bug reports separated from general feedback.
mode="notify"
Email is required, message is optional, no sentiment buttons.
Coming Soon pages, waitlists, "Notify me when this ships" lead capture for unreleased plugins/products.
Installation
Usage — default feedback mode
Usage — bug report mode
Usage — notify-me lead capture
In notify mode the email becomes required,
sentiment buttons hide, and the message is optional. Perfect for the
"Coming Soon" pages of plugins you haven't shipped yet — every submission lands in the same admin inbox
with the plugin slug captured in the context column.
Register the Filament admin
v0.2 — Customizable identity fields (name / email / phone)
Each identity field is independently enabled and
required via config. Authenticated users get their name and email auto-filled.
v0.2 — Custom sentiment options (any emoji set)
Replace the default 😊 😐 😞 trio with any value set — star ratings, NPS 0-10, thumbs up/down, whatever fits the surface.
The widget loops over sentiments.options and the controller validates against the configured values.
v0.2 — Category dropdown
A user-chosen Category field surfaces above the message. Ships with sensible defaults (Bug / Idea / Complaint / Question / Praise) but every option is config-driven. The chosen value lands in the category DB column and is filterable in the Filament admin.
v0.2 — Per-instance widget overrides
Want a different shape on just one page? Pass per-instance overrides directly to the @include — they merge on top of the global config without touching it.
Notification drivers via env
Drivers run sequentially on every new submission. Misconfigured drivers swallow their own exceptions — a broken Slack webhook won't block the mail driver behind it.