GlitchPin – Visual Bug Feedback

Description

GlitchPin helps visitors and testers report problems without leaving the page. Administrators review reports in the WordPress dashboard.

  • Floating icon-only bug button with configurable position and color.
  • PluginPeer QA feedback panel: one message and Save feedback, without a second form.
  • Capture the visible page, then add a message, select an area, draw, and place numbered markers with notes.
  • Retry capture or upload PNG, JPEG, or WebP if automatic capture fails; annotated images are stored privately in the database.
  • PluginPeer-styled report list, category/status filters, date sorting, pagination, and bulk actions.
  • Five statuses: New, Confirmed, In Progress, Resolved, and Rejected.
  • Optional administrator email notifications.
  • Per-visitor and site-wide limits, storage quotas, and daily retention cleanup.
  • WordPress personal data export/erasure support.

The widget is disabled by default. After activation, open GlitchPin > Settings, enable reporting, and choose who can submit. The default audience is logged-in users. Public visibility of the widget never grants public access to reports or screenshots.

Privacy

Reports remain in this website’s database. No data is sent to PluginPeer and no external JavaScript, fonts, or CDN resources are loaded. Optional notification email uses WordPress wp_mail and the site’s configured mail service. Messages contain the report title, category, date, and private admin link; no image is attached.

Reports contain the feedback message, numbered marker notes, annotated screenshot, page address without query parameters or fragments, and account ID for signed-in reporters. The report title is derived from the first message line. The widget does not ask for email, reproduction steps, DOM element selection, or extended diagnostics. Clicking the bug icon captures the visible page locally. Capture hides form fields, editable content, embedded frames/video, and sections marked data-ppbh-private. Other visible page content may contain personal information. Manual uploads are not automatically redacted. Review the captured image before saving; close the panel without saving if it contains information you do not want to share. Only Save feedback sends the final annotated image and message. DOM markup, cookies, tokens, and network requests are not collected as report data. Older reports and compatible API clients can contain optional email, element geometry, and diagnostics.

Original screenshots are decoded and re-encoded to strip image metadata and appended content. Only the resulting image is retained, outside the Media Library and public uploads filesystem. A capability-checked, nonce-protected administrator endpoint serves images with no-store headers. Images are PNG or JPEG after normalization; WebP inputs are converted to PNG.

Rate limiting stores a keyed hash of an IP address or account ID in an hourly bucket. Raw IP addresses are not stored. Buckets expire after at most two hours and are removed by daily cleanup. Hosting access logs are outside this plugin’s control.

Reports expire after 90 days by default. Choose another period or 0 to retain reports until deletion. Daily WP-Cron cleanup handles up to 200 expired reports per run; low-traffic sites should configure a real cron runner if timely deletion is required. Deleting a report also deletes its image. Deactivation preserves reports. Uninstall removes data only if the administrator enabled that setting first.

Use Settings > Privacy to configure your policy page and review the suggested policy text. Tools > Export Personal Data and Erase Personal Data handle reports matched by submitted email or account email. Screenshot data is included as MIME/base64 text in authorized privacy exports. Reports without either identifier must be handled manually by an administrator.

Development

TypeScript sources are included under src/. Run npm ci and npm run build to rebuild public/assets/reporter.js. No build step or Node.js is required on the production WordPress site. See docs/TECHNICAL.md for architecture, API contracts, testing, and release checks.

Installation

  1. Upload the plugin folder to wp-content/plugins or install the ZIP from Plugins > Add New.
  2. Activate GlitchPin.
  3. Open GlitchPin > Settings and check Enable bug reporting.
  4. Choose the reporting audience and save settings.
  5. Open a frontend page as an eligible visitor and click the bug icon (Report a bug).
  6. Add a message in the PluginPeer feedback panel. Optionally select an area, draw, or add marker notes, then choose Save feedback. There is no second form.

PHP GD is required for saving screenshot feedback. Supports MySQL/MariaDB with InnoDB and WordPress Playground with the WordPress SQLite Database Integration adapter. Multisite administrators should activate the plugin separately for each site; network-wide activation is intentionally refused.

FAQ

Do I need a PluginPeer account?

No. GlitchPin runs locally on your WordPress site. No PluginPeer account or external service is required.

Can visitors see reports or screenshots?

No. Viewing and managing reports requires the manage_options capability. The public creation response contains only success and a message, without a report ID.

Will this work with Nginx?

Screenshot privacy does not depend on Apache rules or a private uploads directory. Image bytes are stored in a separate database table and delivered only after administrator authorization.

How large can screenshots be?

Screenshots are automatically compressed and, when needed, resized before submission. There is no administrator image-size setting. The widget adapts to the server upload limit with headroom for form data and an internal 5 MB upload ceiling. Replacement images can be up to 32 MB locally, 16 megapixels and 8192 pixels per side; they are optimized before upload. The server removes metadata and optimizes again if re-encoding increases the size. Hosting memory and upload constraints still apply.

Does capture reproduce every part of the page?

Capture uses a bundled html2canvas renderer, not browser screen sharing. It captures the current viewport, not the full scrollable page. Unsupported CSS, cross-origin images, embedded content, and some canvas content may be absent or differ. Upload a screenshot instead when needed. Mark areas private with data-ppbh-private. This hides the marked element and its children in automatic captures without changing the live page.

Can I use this behind a reverse proxy or a page cache?

Rate limiting uses REMOTE_ADDR and ignores untrusted forwarding headers. Visitors behind a proxy can share a quota. Configure your trusted proxy at the server level. Exclude role-restricted and signed-in widget pages from shared full-page caching. REST authorization still enforces the audience even if a cached page contains the widget. If a session expires, reload the page.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“GlitchPin – Visual Bug Feedback” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

1.2.25

  • Keep the page visible through a transparent background while preparing a screenshot, with a compact capture panel on mobile.
  • Allow capture cancellation and ignore results from cancelled attempts.

1.2.24

  • Remove deprecated GD image cleanup calls to prevent PHP 8.5 warnings when processing screenshots.

1.2.23

  • Preserve loaded page styles when capturing feedback in WordPress Playground.
  • Keep stylesheet order, imported rules, media conditions, and relative asset URLs in captured screenshots.

1.2.12

  • Fix feedback storage in WordPress Playground with SQLite using transactional row locking instead of MySQL advisory locks.
  • Keep report and screenshot deletion atomic with portable queries and checked transaction results.
  • Add a retryable schema upgrade that preserves existing feedback and screenshots.

1.2.11

  • Change the distribution slug and text domain to ppeer-glitchpin.

1.2.10

  • Use glitchpin prefixes for admin page URLs and the REST API namespace. Existing feedback and settings are preserved.

1.2.9

  • Rename the plugin to GlitchPin with the glitchpin distribution slug and text domain. Existing feedback and settings are preserved.

1.2.8

  • Rename the plugin to Bug Hunter, with the bug-hunter distribution slug and text domain. PluginPeer remains the author.

1.2.7

  • Expand feedback details to the same content width as the Bugs hunted list.

0.2.6

  • Remove the maximum image size setting and optimize large screenshots automatically before upload and after server re-encoding.

0.2.5

  • Make the site-wide hourly submission limit configurable, separately from the per-visitor limit.
  • Replace typed deletion confirmation with an accessible confirmation modal.
  • Simplify feedback details, show reporter profile links, and rename admin views and routes.

0.2.4

  • Show a persistent Report saved confirmation beside the widget after successful submission, with a dismiss action.

0.2.3

  • Remove the visible launcher label and tooltip; keep the refined circular bug icon button.

0.2.2

  • Refine the floating button with a fixed Report a bug label, bug icon, pill shape and softer elevation. No custom-label setting.

0.2.1

  • Match the PluginPeer QA feedback panel and save directly from it.
  • Use an icon-only launcher and remove obsolete collection and button-label settings.
  • Keep screenshots intrinsic to reporting and preserve audience restrictions.
  • Isolate test settings so verification cannot overwrite concurrent administrator changes.

0.2.0

  • Capture-first feedback with a message box, area selection, freehand drawing, and numbered marker notes.
  • Expanded screenshot review, annotation undo/clear, upload fallback, and keyboard/touch support.
  • Hide Allowed roles unless Selected roles is chosen.

0.1.1

  • Apply the PluginPeer visual identity to the reporting widget, element picker, and administrator screens.
  • Make optional element selection visible at the start of the report form.
  • Fix single-page pagination warnings and mobile report-table layout.

0.1.0

  • Initial release.