Problem
activities.kudos_count and trails.rating/review_count are only set by factories and never recomputed when kudos/reviews are created or deleted, so they drift.
Acceptance
- After-write hooks (or scheduled recompute) keep counters in sync.
- Trail rating = avg of review ratings; review_count = count.