Skip to content

feat(feedback): in-app feedback collection with roadmap & GitHub integration#355

Open
Asheeyah23 wants to merge 1 commit into
Traqora:mainfrom
Asheeyah23:feat/feedback-collection
Open

feat(feedback): in-app feedback collection with roadmap & GitHub integration#355
Asheeyah23 wants to merge 1 commit into
Traqora:mainfrom
Asheeyah23:feat/feedback-collection

Conversation

@Asheeyah23

Copy link
Copy Markdown

Summary

Adds in-app feedback collection for user suggestions and bug reports.

Closes #308

Backend (api)

  • POST /api/v1/feedback — create feedback (category ∈ bug/feature/general, message, optional email + screenshot data URL). Best-effort opens a GitHub issue when a token/repo are configured and stores its URL.
  • GET /api/v1/feedback — admin list with status/category filters + pagination.
  • PATCH /api/v1/feedback/{id} — admin status tracking (open / planned / in_progress / completed / declined).
  • GET /api/v1/feedback/roadmappublic roadmap grouped by planned / in_progress / completed.
  • Feedback ORM model on Base.metadata; services/github.py issue creation is a no-op without credentials and never fails the request.

Frontend (web)

  • Feedback.tsx — category selection, message, optional email, optional screenshot attachment (read as a data URL), and a success state.

Requirements coverage

  • Feedback modal/panel
  • Screenshot attachment
  • Category selection (bug, feature, general)
  • Feedback status tracking
  • Public roadmap integration (/feedback/roadmap + status-driven grouping)
  • GitHub issues integration (gated by config)

Tests

  • API (9): create, invalid category / blank message / non-image screenshot → 422, image data URL accepted, list filter by category, status update + roadmap reflection, unknown id → 404, invalid status → 422. Use the repo's client fixture.
  • Web (4): renders categories + message, blocks empty submit, submits selected category + message → success, server error surfaced. All 4 pass.

Notes / scope decisions

  • Follows the same shape as the contact-form work: GitHub integration is provider-gated and degrades to a no-op so the feature runs locally without a token; screenshots are stored as data URLs (no blob storage dependency).
  • Feedback is registered on Base.metadata like the other recent feature tables (FAQ, mentorship, notifications) — Alembic --autogenerate will pick it up; no hand-written migration, consistent with those features.
  • The endpoints provide everything an admin dashboard and a public roadmap page need (list/filter/status + grouped roadmap); this PR focuses on the API + the user-facing feedback component. FeedbackOut intentionally omits email/screenshot to keep PII out of list responses.
  • Backend tests validated via py_compile and written against the client fixture; I couldn't run pytest locally (importing api.app pulls the full ML/OpenTelemetry stack). They run in CI. Web tests were executed and pass.

…gration

Implements an in-app feedback system for bug reports, feature requests,
and general comments (Traqora#308).

Backend (api):
- POST /api/v1/feedback — create feedback (category, message, optional
  email + screenshot data URL); best-effort opens a GitHub issue when a
  token/repo are configured and stores its URL.
- GET /api/v1/feedback — admin list with status/category filters +
  pagination.
- PATCH /api/v1/feedback/{id} — admin status update (open/planned/
  in_progress/completed/declined).
- GET /api/v1/feedback/roadmap — public roadmap grouped by planned /
  in_progress / completed.
- Feedback ORM model on Base.metadata; services/github.py issue creation
  (no-op without credentials, never fails the request).

Frontend (web):
- Feedback.tsx: category selection, message, optional email, optional
  screenshot attachment (read as a data URL), success state.

Tests: 9 API tests (create, category/screenshot validation, list filter,
status update + roadmap, 404/422) and 4 web tests (render, validation,
submit with category, server error).

Closes Traqora#308
@drips-wave

drips-wave Bot commented Jun 26, 2026

Copy link
Copy Markdown

@Asheeyah23 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Contact] Implement feedback collection system

1 participant