pyr0ball created pull request Circuit-Forge/snipe#18

pyr0ball
Fri, 03 Apr 2026 19:06:06 -0700

18#feat: in-app feedback FAB#

Summary

GET /api/feedback/status — probed on mount; returns {enabled: bool}; hidden when FORGEJO_API_TOKEN unset or DEMO_MODE true

POST /api/feedback — creates Forgejo issue with type/title/description/repro steps + view, version, platform context; 503 without token, 403 in demo mode

FeedbackButton.vue — 2-step modal (type → review/attribution → submit); starts hidden, shows after status probe confirms enabled; Teleported to body to avoid z-index/overflow clipping

App.vue — mounts FeedbackButton with route.name as view context

.env.example — documents FORGEJO_API_TOKEN, FORGEJO_REPO, FORGEJO_API_URL

Ported from kiwi (Circuit-Forge/kiwi#14) with snipe adaptations:

Route prefix /api/ (not /api/v1/)

view field instead of tab in context

Route name via useRoute() (RouterView pattern vs kiwi tab state)

Test plan

Set FORGEJO_API_TOKEN in .env — confirm FAB appears on load

Leave token unset — confirm FAB stays hidden

Submit bug report → verify Forgejo issue created in Circuit-Forge/snipe with beta-feedback + needs-triage + bug labels

Submit in demo mode → confirm 403 response

Check FAB positioning on mobile (above bottom nav) and desktop (bottom-right corner)