feedback_engine 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12457e35c33daf8032e5eae4336964217b969d4d45d8d8a13ca85f6706833e26
4
- data.tar.gz: 82ce331114ef1a88718e9879f7a263c6ea89456d0fb32c098804431df8fa6106
3
+ metadata.gz: 0dbeb9cc3333acd2485439cb1896536b2617595f980da907d79ddf0cdb9ccb6c
4
+ data.tar.gz: a7f6907958921185994ea549d3a6ed987c567a4cc17019e281a8cf821fcbb89f
5
5
  SHA512:
6
- metadata.gz: 16ab901cdc39fbd5dfa1c26ef896717610f8da85a2afd96348bfbaa1b13b196b4d9e12e6fb8d47f2194d0bd86e6ba46729f88e86a3e5089f853ab9dbdfff097c
7
- data.tar.gz: ee81a5410c06cfaaea26f143ef0ce2bccde945d2d1826e68e30b90f154191e4178cac1f2b2f8279465ccf22b1f20810ca8f9aa2828f6ab184594e7582b56ec2a
6
+ metadata.gz: 8f9bc37eeafccb24cac72fc0ce2099a604e66325e9b4e966cebe622688517575c68154b6b9dce8fdc9b1791b3ed9bba1118fccf0c9e11b1bf6b4c229c003cadf
7
+ data.tar.gz: 8ad4196a942eab2ce07a17a3fe9048b27015ca769251df5c777876914e7cbb93aa5e3f0168a13ac38ba920e55fd129d9c23d1064f3368eaadbacee25287da256
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.1 (2026-07-23)
4
+
5
+ - The widget JavaScript moved from `app/assets/` to `lib/` (it was always
6
+ inlined server-side, never served as an asset). Rails auto-registers every
7
+ engine's `app/assets/*` directory with the host's asset pipeline, so
8
+ Propshaft hosts were ingesting the file into their asset namespace under
9
+ the bare logical name `widget.js` — colliding with any other gem or host
10
+ file of the same name — and needlessly digesting a public copy at
11
+ precompile. The gem is now invisible to Sprockets/Propshaft entirely.
12
+ No behavior change.
13
+
3
14
  ## 0.4.0 (2026-07-22)
4
15
 
5
16
  - Removed the clipboard-paste / drag-and-drop / file-chips screenshot intake
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # feedback_engine
2
2
 
3
3
  [![Gem Version](https://img.shields.io/gem/v/feedback_engine)](https://rubygems.org/gems/feedback_engine)
4
+ [![Downloads](https://img.shields.io/gem/dt/feedback_engine)](https://rubygems.org/gems/feedback_engine)
4
5
  [![CI](https://github.com/yshmarov/feedback-engine/actions/workflows/ci.yml/badge.svg)](https://github.com/yshmarov/feedback-engine/actions/workflows/ci.yml)
5
6
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](MIT-LICENSE)
6
7
 
@@ -12,6 +13,30 @@ every submission in your own database. A minimal built-in dashboard lets you
12
13
  browse and triage what users send. No third-party service, no data leaves your
13
14
  app.
14
15
 
16
+ <picture>
17
+ <source media="(prefers-color-scheme: dark)" srcset="demo-widget-dark.png">
18
+ <img alt="The feedback widget: type, section, message, and screenshots" src="demo-widget-light.png" width="420">
19
+ </picture>
20
+
21
+ <picture>
22
+ <source media="(prefers-color-scheme: dark)" srcset="demo-dashboard-dark.png">
23
+ <img alt="The built-in triage dashboard: status tabs, filters, search" src="demo-dashboard-light.png" width="820">
24
+ </picture>
25
+
26
+ Both the widget and the dashboard follow the viewer's system appearance —
27
+ these screenshots are the same pages in light and dark mode.
28
+
29
+ ## Why not Canny (or another feedback SaaS)?
30
+
31
+ Hosted feedback tools are great until you notice the trade: your users'
32
+ feedback lives in someone else's database, behind someone else's login, at a
33
+ per-seat price. `feedback_engine` keeps the core loop — collect, triage,
34
+ resolve — inside your app: **your database, your users, your auth, one gem.**
35
+ Attribution plugs into whatever authentication you already have, gating is a
36
+ lambda, and submissions are ordinary ActiveRecord rows you can query, export,
37
+ or wire into Slack. (A public voting board à la Canny is on the
38
+ [roadmap](https://github.com/yshmarov/feedback-engine/issues/1).)
39
+
15
40
  - **Zero UI dependencies.** The widget is plain JavaScript and styles itself.
16
41
  No Tailwind, no Stimulus, no importmap, no build step. The dashboard renders
17
42
  its own styles too.
@@ -32,7 +32,7 @@
32
32
  <thead>
33
33
  <tr>
34
34
  <th><%= t('feedback_engine.kind', default: 'Type') %></th>
35
- <th><%= t('feedback_engine.message', default: 'Message') %></th>
35
+ <th><%= t('feedback_engine.dashboard.message', default: 'Message') %></th>
36
36
  <th><%= t('feedback_engine.section', default: 'Section') %></th>
37
37
  <th><%= t('feedback_engine.dashboard.from', default: 'From') %></th>
38
38
  <th><%= t('feedback_engine.dashboard.filed', default: 'Filed') %></th>
@@ -33,8 +33,9 @@
33
33
  .count { display: inline-block; min-width: 20px; padding: 0 6px; margin-left: 4px; border-radius: 999px;
34
34
  background: var(--border); font-size: 12px; text-align: center; }
35
35
  .filters { margin-bottom: 16px; display: flex; gap: 8px; align-items: center; }
36
- .filters select { padding: 6px 8px; border: 1px solid var(--border); border-radius: 8px;
37
- background: var(--surface); color: var(--text); }
36
+ .filters select, .filters input[type=search] { padding: 6px 8px; border: 1px solid var(--border);
37
+ border-radius: 8px; background: var(--surface); color: var(--text); font: inherit; }
38
+ .filters input[type=search] { flex: 1; max-width: 320px; }
38
39
  .card { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; overflow: hidden; }
39
40
  table { width: 100%; border-collapse: collapse; }
40
41
  th, td { padding: 10px 14px; text-align: left; vertical-align: top; }
@@ -30,6 +30,7 @@ en:
30
30
  title: "Feedback"
31
31
  all_kinds: "All types"
32
32
  filter: "Filter"
33
+ message: "Message"
33
34
  search: "Search"
34
35
  search_placeholder: "Search message, author, section…"
35
36
  from: "From"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FeedbackEngine
4
- VERSION = '0.4.0'
4
+ VERSION = '0.4.1'
5
5
  end
@@ -7,9 +7,11 @@ module FeedbackEngine
7
7
  # framework, no build step) and styles itself inline, so it drops into any
8
8
  # Rails app regardless of its CSS or JS setup. It is inlined into the page
9
9
  # rather than served as a separate asset to avoid any dependency on the
10
- # host's asset pipeline.
10
+ # host's asset pipeline — and it lives under lib/ (not app/assets/) so a
11
+ # host that *does* run a pipeline never ingests it either: nothing lands in
12
+ # the host's asset namespace or precompiled output.
11
13
  module Widget
12
- SOURCE = File.expand_path('../../app/assets/feedback_engine/widget.js', __dir__)
14
+ SOURCE = File.expand_path('widget.js', __dir__)
13
15
 
14
16
  # Right-to-left scripts, so the form renders mirrored for those locales.
15
17
  # Matched on the language subtag, so region variants ("ar-EG") count too.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feedback_engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yaroslav Shmarov
@@ -38,7 +38,6 @@ files:
38
38
  - MIT-LICENSE
39
39
  - README.md
40
40
  - Rakefile
41
- - app/assets/feedback_engine/widget.js
42
41
  - app/controllers/feedback_engine/application_controller.rb
43
42
  - app/controllers/feedback_engine/feedbacks_controller.rb
44
43
  - app/controllers/feedback_engine/screenshots_controller.rb
@@ -79,6 +78,7 @@ files:
79
78
  - lib/feedback_engine/configuration.rb
80
79
  - lib/feedback_engine/engine.rb
81
80
  - lib/feedback_engine/version.rb
81
+ - lib/feedback_engine/widget.js
82
82
  - lib/feedback_engine/widget.rb
83
83
  - lib/generators/feedback_engine/install/install_generator.rb
84
84
  - lib/generators/feedback_engine/install/templates/create_feedback_engine_feedbacks.rb.tt
@@ -87,8 +87,10 @@ homepage: https://github.com/yshmarov/feedback-engine
87
87
  licenses:
88
88
  - MIT
89
89
  metadata:
90
+ homepage_uri: https://github.com/yshmarov/feedback-engine
90
91
  source_code_uri: https://github.com/yshmarov/feedback-engine
91
92
  changelog_uri: https://github.com/yshmarov/feedback-engine/blob/main/CHANGELOG.md
93
+ bug_tracker_uri: https://github.com/yshmarov/feedback-engine/issues
92
94
  rubygems_mfa_required: 'true'
93
95
  rdoc_options: []
94
96
  require_paths:
File without changes