Unread/Read State Tracking
Why it matters
Without a read-state column, every notification looks identical forever — the bell badge never clears, users learn to ignore it, and push/email digests repeat content the user already saw in-app. A single read_at timestamp unlocks unread counts, mark-all-as-read, per-channel deduplication across web and mobile, and analytics on notification effectiveness. Missing this field means every downstream notification feature is blocked until the schema is backfilled.
Severity rationale
Low because notifications still deliver, but engagement quality and cross-channel deduplication are blocked without the field.
Remediation
Add a nullable readAt DateTime? column to the notification model, expose PATCH endpoints for single-item and bulk mark-as-read, and compute the unread badge from notifications.filter(n => !n.readAt).length. Store the timestamp (not a boolean) so you can audit read latency later. See prisma/schema.prisma and app/api/notifications/[id]/route.ts:
model Notification {
id String @id
readAt DateTime?
userId String
}
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Social Features & Engagement Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
Taxons
History
- 2026-04-18·v1.0.0·Initial import from community-social-engagement·automated