This is a big #workinprogress #wiiiiiip
Updates are the best way to keep your projects alive, and keep other hackers up to date and interested.
They really became central to how other hackers interact with Devpost projects, so let's see how they've been built, and what you should know to get the most out of them!
Who can see my updates?
Good question. Every time you post an update, all your followers, your team member followers, AND hackers who liked your project, will see it in their feed. If it's going well and people start commenting, even more hackers will see it, as their followers will be notified about it too. So get the conversation going!
From a project page
Nothing special there really, just a basic form. Something to note, any team members can post updates.
From the feed
No need to leave your beloved feed to post an update. There's a form to add an update to your last project at the top, with a sweet, sweet dropdown allowing you to chose which project the update is about.
The dropdown contains all your projects (the ones you created, and the ones you're a member of), so instead of performing a somewhat expensive MySQL query, I used Solr, which makes it a lot easier:
Commenting on an update automatically subscribes you to it, making sure you'll never miss anything. But I know you can get bored of a discussion, that's why it's super easy to unsubscribe:
The somewhat tricky part about this, technically, was to update the subscription status of the update whenever a comment was added. Backbone events and channels made it easy enough to solve.
Youtube video support!
disclamer: not deployed yet!
When I implemented the #emoji and @mention support, I built a pipeline of HTML filters that can be chained to modify a piece of text and enhance it, very similar to GH's.
update_pipeline = FilterPipeline.new [ FilterPipeline::MarkdownFilter, FilterPipeline::EmojiFilter ] update_pipeline.to_html(update_body)
This made it pretty easy to respond to the request a user made recently about supporting YouTube videos in updates! All I had to do was adding a
FilterPipeline::YouTubeFilter in the pipeline :)