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 `