# 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!**