This past weekend, together with Emmanuel Oga, we've been coding a Ruby on Rails application for this year's Rails Rumble.

The idea: in github you can watch some repositories, but later you can't make a search over those watches. The only search github provides is one over all repositories. When your watches reaches a big number it's defeats its purpose. So we decided to let users tag their watches and then be able to search them by tags.

(Well, actually the original idea was a lot bigger: github generates a big feed for your watches, including commits, comments and gists, and we wanted to filter that feed in a smart way, but in just 48 hours, having to install a server from scratch it was a little ambitious)

What we wanted is the tags to be a community effort: if I tag a project with "java", let that tag be shown to other users. On the other side, we also wanted the users to have personal tags. But we didn't want the user to choose, when tagging, wheter it's personal or global, because that's a burden on him. So we came up with the following idea: if more than five users put the same tag on a give repository, that tag becomes automatically available to all users.

We also wanted to start out with some tags, like for programming languages or common software terms, so when a user logs in she starts with some tags on her repositories. So we have a background process that imports a user's watches and put tags on them if their description contains one of those common words. That list gets expanded as tags become automatically available to all users, as described in the previous paragraph. For instance, if the initial tags list didn't contains "orm" as a tag, but more than five users tagged the same repository as "orm", all repositories whose description contain "orm" will now contain that tag. That makes the community effort a lot easier.

On the other hand, the automatic tagging might not be perfect and a repository might get tagged with an incorrect word. So, if more than five users remove the same tag from a repository, that tag gets automatically removed from that repository to all users.

Unfortunately, we forgot to put this behavior on our web site so users might think they must tag their watches without the system ever helping them. We hope to spread that knowledge with blogs and tweets, since we will get disqualified if we make changes after those 48 hours.

It was a really fun experience. I couldn't install the necessary software to deploy it on my computer so I used Emmanuel's one, with Arch Linux and using gvim. I learned a lot!

Emmanuel's brother-in-law helped us out with the design and the logo, which we really like. It seems that octocat had some troubles keeping his watches organized and got tired of it. :-)

Finally, here's the website: We hope you find it useful!