Spaced Repetition + Feed Blending (WI-3)
Context
Implement SM-2 spaced repetition scheduling, blended feed algorithm, and per-card interaction indicators in the feed.
Challenges
Challenge 4.1: Spaced Repetition Module
Requirement: Pure calculateNextReview() function with SM-2 variant.
Acceptance Criteria:
-
packages/shared/src/spaced-repetition.tsexists - Interval schedule: [4h, 1d, 3d, 7d, 14d, 30d] based on streak
- Exported from
packages/shared/src/index.tsEvaluation: PASS
Challenge 4.2: Interact Route Wiring
Requirement: Card interactions compute spaced repetition fields. Acceptance Criteria:
-
/api/cards/[slug]/interactcomputesnextReviewAt,streak,reviewCount - Uses
calculateNextReviewfrom shared package Evaluation: PASS
Challenge 4.3: Review API Endpoint
Requirement: Endpoint for fetching facts due for review. Acceptance Criteria:
-
apps/web/app/api/review/route.tsexists - GET returns facts where
next_review_at <= now()Evaluation: PASS
Challenge 4.4: Blended Feed Algorithm
Requirement: Feed mixes content types with weighted blend. Acceptance Criteria:
-
/api/feeduses: 40% recent validated, 30% review-due, 20% evergreen, 10% exploration - Round-robin interleave
- Per-card
userStatusfield - New DB queries:
getEvergreenFacts,getRandomFacts,getUserFactStatuses,getLatestAnswerInteractionEvaluation: PASS
Challenge 4.5: Interaction Indicator Badges
Requirement: Feed cards show color-coded completion status. Acceptance Criteria:
- Yellow badge = in progress
- Orange badge = review due
- Green badge = mastered
- Renders in
fact-card.tsxEvaluation: PASS
Evaluation Summary
| Challenge | Result |
|---|---|
| 4.1 Spaced Repetition Module | PASS |
| 4.2 Interact Route Wiring | PASS |
| 4.3 Review API Endpoint | PASS |
| 4.4 Blended Feed Algorithm | PASS |
| 4.5 Interaction Badges | PASS |
Score: 5/5 PASS