From 4f6460297f567cbda4bca8c52279d138d82f92ac Mon Sep 17 00:00:00 2001 From: Ethan J Lewis Date: Sun, 17 May 2026 22:57:34 -0500 Subject: [PATCH] docs: design for Bugpin + Bugsink bug reporting Footer link triggers Bugpin's screenshot widget (lazy-loaded) which forwards to GitHub Issues. Bugsink captures uncaught JS errors via the Sentry SDK. Both servers live on the half.st host. Co-Authored-By: Claude Opus 4.7 --- .../specs/2026-05-17-bug-reporting-design.md | 152 ++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 docs/superpowers/specs/2026-05-17-bug-reporting-design.md diff --git a/docs/superpowers/specs/2026-05-17-bug-reporting-design.md b/docs/superpowers/specs/2026-05-17-bug-reporting-design.md new file mode 100644 index 0000000..1022c57 --- /dev/null +++ b/docs/superpowers/specs/2026-05-17-bug-reporting-design.md @@ -0,0 +1,152 @@ +# Bug reporting: Bugpin (user) + Bugsink (auto) + +**Status:** Approved design, ready for implementation plan. +**Date:** 2026-05-17 + +## Goal + +Let visitors report bugs in the Halfstreet site with a screenshot, and capture uncaught JavaScript errors automatically. Reports should flow to systems already running on the `half.st` host so there is no new infrastructure to manage. + +## Two distinct flows + +| | Bugpin | Bugsink | +|---|---|---| +| Trigger | Visitor clicks "Report a Bug" in footer | Uncaught JS error | +| Capture | Screenshot, annotations, free-text note, console/network metadata | Stack trace, breadcrumbs | +| Destination | Bugpin portal → auto-creates a GitHub Issue in the halfstreet repo | Bugsink portal only | +| Library | `bugpin.half.st/widget.js` (lazy-loaded on click) | `@sentry/browser` npm package (loads on every page) | + +The two are intentionally separate. Bugpin owns user-facing reports; Bugsink owns automatic exception capture. Sentry's user-feedback widget is **not** used — that would overlap Bugpin and muddle the responsibilities. + +## Components + +### 1. Footer link + +`src/pages/index.astro` + +Add "Report a Bug" to the footer chain after the existing links. Render as a `