1. Front Matter
Title: Reviewer Queue Backend
Author: scorevi (Sean Patrick Caintic)
Reviewers: dyorgie (Jethro Lagmay)
Created: February 2026
Status: Approved
References:
Issue: [5.4] Reviewer Queue Backend #179
Milestone: [5] Dashboards
2. Introduction & Goals
Problem Summary: Reviewers need a queue system to see quests awaiting review, claim quests for review, and manage their review assignments with lockout mechanisms to prevent concurrent reviews.
Goals:
Add REVIEWER role to platform
Provide queue management APIs
Implement lockout mechanism (single reviewer per quest)
Auto-release stale claims after 72 hours
Non-Goals:
Automated review assignment
Review scoring/rating system
Cross-agency review sharing
Glossary:
Claim: Reviewer locks a quest for exclusive review
Lockout: Prevents other reviewers from claiming same quest
Auto-Release: Automatic claim release after 72h inactivity
3. High-Level Architecture
System Diagram:

Technologies Used:
Supabase - Queue storage, claim columns
Clerk - Role management
Next.js Middleware - Route protection
4. Detailed Design & Implementation
Data Model / Schema:
questsTable (Review Columns)
Column | Type | Description |
|---|---|---|
| TEXT | Reviewer's Clerk ID |
| TIMESTAMPTZ | When claimed |
| TIMESTAMPTZ | When submitted for review |
Index: (status, submitted_at) for efficient queue queries
API Specification:
GET /api/reviewer/queue- List quests with status IN_REVIEWPOST /api/reviewer/claim-quest/[questId]- Claim quest for reviewPATCH /api/reviewer/update-quest-status- Approve or request changesPOST /api/reviewer/release-quest/[questId]- Release claim
Logic & Workflows:
Role Hierarchy:
ADMIN > AGENCY > REVIEWER > CREATOR > LEARNERLockout Mechanism:
Single Claim - Only one reviewer can claim a quest at a time
Visual Indicator - Shows "In Review by [Name]" to other reviewers
Auto-Release - Claims released after 72 hours of inactivity
Manual Release - Reviewer can voluntarily release a claim
Queue States:
IN_REVIEW- Submitted, awaiting review (visible to all reviewers)CHANGES_REQUESTED- Reviewer requested changes (visible to all reviewers)Claimed - In active review (visible to claiming reviewer only)
Key Files:
app/api/reviewer/queue/route.ts- Queue listing APIapp/api/reviewer/claim-quest/[questId]/route.ts- Claim questapp/api/reviewer/update-quest-status/route.ts- Status updatesapp/reviewer/layout.tsx- Role guard for reviewer routeslib/auth/role-guard.ts- Role authentication utilities
5. Infrastructure & Operations
Dependencies:
Supabase - Queue persistence
Clerk - Role management
Monitoring & Alerting:
Background Job: Auto-release stale claims (72h)
Logs: Track claim/release events
Deployment Plan:
Add
claimed_by,claimed_at,submitted_atcolumnsDeploy API routes
Add role guard to reviewer routes
6. Testing & Quality Assurance
Test Strategy:
Manual: Claim, release, queue listing
Integration: Role guard, concurrent claim prevention
Known Limitations:
No automated assignment algorithm
Single reviewer per quest (no team reviews)
7. Maintenance & Support
Troubleshooting:
Quest already claimed → Wait for release or admin override
Stale claim not releasing → Check background job status
Role guard blocking access → Verify Clerk role assignment
Changelog:
1.0 (Feb 2026): Initial implementation
Document Version
1.0 - Approved, Feature deployed to production, 02/27/2026