# Phase 4: Settings **Status**: 🔴 Planned **Features**: F2 (Customizable Rating Weights) ## Components ### WeightCustomizer.tsx ```typescript
{Object.entries(weights).map(([criterion, weight]) => (
updateWeight(criterion, parseFloat(e.target.value))} /> {weight.toFixed(1)}
))}
``` ## Recalculation on Weight Change When user saves settings: 1. Store settings to AT Protocol 2. Fetch all completed reviews 3. Recalculate each review's `calculatedRating` 4. Update review records with new ratings 5. Re-sort completed reviews list 6. Update UI ```typescript async function recalculateAllReviews(newWeights: RatingWeights) { for (const review of completedReviews) { const newRating = calculateFinalRating(review, newWeights) review.calculatedRating = newRating await agent.com.atproto.repo.putRecord({ repo: agent.session.did, collection: 'social.drydown.review', rkey: extractRkeyFromUri(review.uri), record: { ...review, calculatedRating: newRating } }) } } ``` --- **Implementation complete!**