Problem
kudos has no unique index on (giver_id, activity_id) and saved_trails has none on (user_id, trail_id), so a user can kudos/save the same thing repeatedly.
Acceptance
- Migrations adding the composite unique indexes.
- Store actions handle the conflict gracefully (idempotent toggle).