Skip to content

Comments queue

Moderation → Comments (/moderation/comments) is the comment review surface. Reported comments float to the top; keyword-flagged comments are auto-highlighted; everything else is chronological.

Columns:

ColumnMeaning
AuthorUser email/phone; clickable to User 360.
Series → EpisodeWhere the comment was left.
BodyFull text, with keyword flags highlighted.
Statusvisible / hidden / deleted.
ReportsCount of user reports on this comment. Sorts top of queue.
Author strikesTotal user_strikes for this author (kind=comment). At 3, they auto-suspend commenting.
CreatedTimestamp.

Per comment:

  • Approve: clears the report flag but keeps status='visible'.
  • Hide: sets status='hidden' (invisible on mobile). No strike.
  • Delete: sets status='deleted' (also invisible). Optional: also strike the author.
  • Strike author: inserts a user_strike row (kind=comment) with your reason.

Strikes are cumulative:

  • 1 strike: warning, no automated action.
  • 2 strikes: comment permissions still allowed; UI shows warning banner.
  • 3 strikes: automatic comment suspension (not full account suspension). User can watch/pay but not comment.

The auto-suspend is triggered inside admin-moderation.service.ts at strike-write time.

Multi-select rows → Bulk hide / delete / strike. Useful when a spam wave hits.

The service maintains a small keyword list (spam, slurs, off-topic patterns). Comments containing them get a flag icon and float above unflagged rows. Add/remove keywords: settings.moderation_keywords (superadmin).

If a comment was flagged via Reports, resolving the comment (hide/delete) also resolves the linked report. Come back to Reports queue to close the loop.

  • Deleting a comment does not delete the strike. Strikes are per-author, per-incident, forever.
  • Hidden vs deleted: no functional difference on mobile (both invisible). Delete is stronger and audits differently. Choose based on severity.
  • Reactivating a suspended commenter: you cannot manually reverse an auto-suspension in v2. Contact a superadmin to clear strikes if warranted.
ActionEndpoint
List commentsGET /v1/admin/moderation/comments
Act on a commentPOST /v1/admin/moderation/comments/:id/action
Bulk actionPOST /v1/admin/moderation/comments/bulk

Full details in API: Engagement.