For example, if I were to build an application similar to Instagram where each post displays the number of likes for each activity.
What streams would I need to create? What would the network calls look like for liking and unliking an activity? Where would I get the number of likes associated with each post?
Can I do this all on stream, or would I need to rely on another backend?
There are two approaches you can take. One updates the original activity with a counter, another uses our analytics.
When you add an activity, if you send us a foreign id and timestamp, you can use that foreign id later to update the activity. Then, in the metadata of the activity you can have a field to count the likes and each like/unlike would update the activity. If you look at the Instragram-clone project I built in late 2016 you'll see an example of this in the Go backend code. The pros/cons of this approach: easy to manage yourself, but you need to send the entire activity as it was (same timestamp, and all other fields as you originally sent it) so you'll need to keep the data on your side as well. Also, if a user follows the feed where that activity is stored, they may not see the updated content as a new activity in the feed.
The feeds you'll need: https://getstream.io/blog/best-practices-for-instagram-style-feeds/
Backend code: https://getstream.io/blog/example-go-service-for-photo-sharing-app/
The second approach uses our analytics properties that can track this kind of metadata field in a different way, but the down side is that it's only available on our enterprise plans. You can look at our documentation page for information on how to use this.
Introduction: https://getstream.io/analytics/
Documentation: https://getstream.io/docs_analytics/#introduction