Sure, just Create a data type called User Activity or Milestone or whatnot. It would have fields including a [type] or perhaps just a [name] (either of which would just be a text). It will also have a verbose description (text) and maybe an icon (image or bb code if fontawesome will do). It should have a boolean field for whether the Milestone has (dynamic data) at the end of it. It would look something like this:
This will be a global type of variable that only you (or other admins) will create (you can either make an admin interface for them using a repeating group, or use the App Data section).
These would look like:
Now create a new data type called User Milestone. This is where you’re going to customize individual Milestones for specific users. It should be something like this:
Then add to your User object a field called User Milestones (of type User Milestone and make it a List).
In any workflow that represents the user achieving a Milestone, you:
(1) Create a new thing of type User Milestone. Set the fields for that like this:
Milestone = Do a search for Milestones where Name = (for example) "Relationship":first item
Parameter = Text version of whatever it is the argument represents. In the relationship example, we might resolve that to "Some other user's first_name last_name:truncated to 1."
Note: you don't need to set a date, right? It's been captured in Created Date ;)
(2) Make changes to current user > User Milestones, add item, Results of Step 1 (Create new thing)
Now you can easily present Current User’s User Milestones in a repeating group (in many nifty ways, depending on how you want to show them).
You could, for example, filter the list of User Milestones where Created Date is just in the last 3 months. Or you could filter it so that only the most recent item of a given type is displayed in the list. Or, for users who have a storied relationship history (say >5 relationship changes in a year) you could just display those as “Current User’s Walks of Shame” or some such.