Naalya Handbook

Feedback

In-app feedback capture from any signed-in user, triaged by platform operators — message plus page, device, and screenshot context.

Feedback lets any signed-in user report a problem or suggestion from inside the app. The row captures the message plus debugging context: currentPage, browser / os / device, location, an optional screenshotStorageId, and a free-form metadata jsonb.

RouteGuard
POST feedbackAny signed-in user type — students, staff, guardians
GET feedback, GET :id, GET :id/screenshot-url, DELETE :idPLATFORM_ADMIN only — feedback is triaged by operators, not schools

Two things that make it unusual in this codebase:

  • The entity carries a schoolId column but is not @TenantScoped() — reads happen platform-side, across tenants, so the school is recorded as context rather than used as a filter.
  • The screenshot lives in storage; screenshot-url mints a signed URL on demand rather than exposing the file.

Where to go next

On this page