Data/workflow on a decentralized forum

This feels awkward to ask for help from such a bird’s-eye level on this project. I’ve taken many tutorials/lessons, read a lot on these forums and can’t sort out the data/workflow to fit the UX I want.

The product is a decentralized forum, with no moderation whatsoever, that naturally incentivizes good-faith interactions among strangers.

First the similarities to existing forums:

  • Content is posted in subs.
  • Users can comment on the posts.
  • These posts/replies are value-indicated* by readers.

Now the differences:

  • *Posts/replies are RANKED, not up/down voted. Users see 3 pieces of content (in the same category) and are asked to rank them from most to least relevant.

  • These rankings deliver points to the creators of the content.

  • Rankings are weighted; 1st place ranking from a high-scoring user will deliver more points than a 1st place from a low-scoring user.

  • The “posts” are not on a board, but received as private messages. These messages are delivered based on a user’s score (high-scoring users see high-scoring content).

  • There is no browsing. Users see one post, and must reply to it before seeing the next one.

  • These replies are similarly ranked by the creator of the post, but never seen by anyone else.

  • There are no front-end profiles or casual private messaging! The platform is pseudonymous.

Bonus features (will implement in the MVP if it’s easy):

  • Scores are an average of the user’s last 10 actions (to give new people a chance to see high-value content).
  • Users see this “rolling average” score and their % (performance percentile) on the home page.

Some questions:

  • To structure the data, I’ve read that having posts/replies as a FIELD under a USER (data type) can bloat the system. And that it may be better to structure these as a field under a THREAD data type. Is that true in my case, given that there is no scrolling element here?
  • There are 4 scores: that of the poster, their message, the recipient, and their reply (not dissimilar from Reddit’s post/comment scores). By default, I want users to receive content from posters who are at/below their level (in descending order). How do points fit into the data types here? Are they their own data type?
  • Privacy: I want the messages to be seen by anyone (who has a high enough score to do so), but replies should only be seen by the person being replied to. I don’t want scores to be visible by anyone (except the ones mentioned in bonus features above). Should I structure all data types to private, then make exceptions as-needed?
  • From a UX perspective, what’s the best way to do rankings? My preference is for the user to hit each post in the order of value (first click is 1st place, 2nd click is 2nd, etc), then make it so a 4th click will reset. The simplest way from a design perspective would be a drop-down menu that grays out the options as they’re selected. Also considering drag and drop (but that feels like a bulky feature for this app).

Thank you for reading this! I don’t expect anyone to have the full answer (though that’d be awesome), so if you have any advice on any aspect of what I’m building please chip in!

Hello! Below I’ve addressed each of your four questions:

  • To structure the data, I’ve read that having posts/replies as a FIELD under a USER (data type) can bloat the system. And that it may be better to structure these as a field under a THREAD data type. Is that true in my case, given that there is no scrolling element here?
    • I would recommend creating separate data types, one that includes the basic details of a post/thread (like creator, ranking, etc.) and another that includes the bulk of the content (the actual post and replies). These can have user as a field for reference purposed. The “How to Build an Instagram Clone” tutorial is a good resource to show you how to structure your data this way, and can be adapted for your specific use case.
  • There are 4 scores: that of the poster, their message, the recipient, and their reply (not dissimilar from Reddit’s post/comment scores). By default, I want users to receive content from posters who are at/below their level (in descending order). How do points fit into the data types here? Are they their own data type?
    • You would likely want to include points/ranking as a field under the User datatype. You can use a calculation to average the a user’s points, and when you search for a data source (when choosing what to display) you could filter by something along the lines of: posts’s creator’s ranking is greater than or equal to current user’s ranking (this won’t be the exact expression - that will depend on how you structure your data and what exactly you want to display). Check out the “How to Build Expressions" and “How to Use the Do a Search For Data Source” tutorials for some quick tips on this.
  • Privacy: I want the messages to be seen by anyone (who has a high enough score to do so), but replies should only be seen by the person being replied to. I don’t want scores to be visible by anyone (except the ones mentioned in bonus features above). Should I structure all data types to private, then make exceptions as-needed?
    • In this case, it would be a good idea to apply privacy rules individually to each data type that you want conditions on. You can find some helpful tips on this in the “Protecting Data” section of the user manual.
  • From a UX perspective, what’s the best way to do rankings? My preference is for the user to hit each post in the order of value (first click is 1st place, 2nd click is 2nd, etc), then make it so a 4th click will reset. The simplest way from a design perspective would be a drop-down menu that grays out the options as they’re selected. Also considering drag and drop (but that feels like a bulky feature for this app).
    • You might consider using hidden elements to show each element (for the post content) one at a time. Basically you would show one element, then set a workflow action to hide that element when a button or another element is clicked, and another action to show the next element, and so forth. I’m not 100% certain this is what you’re looking for, so I recommend playing around with this to see if it works for your use case!

I hope this information helps!

1 Like

This topic was automatically closed after 70 days. New replies are no longer allowed.