Search code examples
ruby-on-railsuser-interfacesocial-networkinguser-experiencespam-prevention

UX Solution for Potential Activity Stream Spam


My app implements an activity stream for different types of activities. One of the activity types is related to the different virtual currency a user can accumulate. For example, a user can accumulate "Points" for posting a comment, voting on a topic, etc. If I were to do no filtering or aggregating, you would get a lot of self-generating spam over the course of a mere hour, for example:

  • Earned 5 points for commenting (total points = 505)
  • Earned 10 points for voting (total points = 515)
  • Earned 5 points for commenting (total points = 520)
  • Earned 5 points for commenting (total points = 525)
  • Earned 5 points for commenting (total points = 530)
  • Earned 10 points for voting (total points = 540)
  • Earned 10 points for voting (total points = 550)
  • Earned 10 points for voting (total points = 560)
  • ...
  • ...
  • ...

How would you go about preventing this potential for self-generating spam but also present the stream of activities in such a way that invites your friends to see what you've been doing?


Solution

  • I can think of a couple options. The first being an aggregation of the data. I don't know how many activity types you have, but you could distill what you have posted down to 2 items:

    • <Name> made <x> comments and scored <x * 5> points!
    • <Name> voted on <x> things.

    You could make each of these list items clickable to expand and show the details. So, after a click on the summary of comments user would see this:

    • <Name> made <x> comments and scored <x * 5> points!
      • Earned 5 points for commenting (total points = 505)
      • Earned 5 points for commenting (total points = 520)
      • Earned 5 points for commenting (total points = 525)
      • Earned 5 points for commenting (total points = 530)
    • <Name> voted on <x> things.

    You could use something like jQuery UI accordion to implement this.

    The approach Facebook takes is that it uses a sample post and then lets users know that more items are available, like this:

    • Earned 5 points for commenting (total points = 505)
    • Made <x> more comments

    Then when the user clicks on the "Made <x> more comments" the user can see every comment (within a certain span of time).