Beansight is now open source

Four years ago, I started working on Beansight with Cyril, Guillaume and Jean-Baptiste, a project that became a long adventure.

beansighthb

The website (that we host at www.beansight.com) and associated mobile apps allow users to create predictions and vote on other’s predictions. Computation is done to extract from all votes a percentage of probability for a given event.
The website features all mechanisms of a social website : registration, login, user profiles, followers / following, content creation, comments, moderation tools, administration dashboard, API, i18n.

Main page when logged into Beansight
Main page when logged into Beansight

All our code and design are now available under the open source Apache licence. That means anyone is free to use it to run a similar website or to build upon it. Get it from GitHub.

The technological architecture is quite regular: a server is generating web pages using a MVC framework, data is stored in a relational SQL database and user generated images are stored on the file system. Some simple client-side JavaScript is enriching these generated pages.

We built Beansight using the great Play! Framework. It turned out that Play! was a really great choice for our architecture and project. At that time, Play! was a Java web framework that got rid of the traditional Java web stack to focus on a simple MVC architecture, inspired by rails and other modern web frameworks, that prevails convention over configuration.
It was a real pleasure working with this language in a framework so well designed for websites like our.

Beansight Android application
Beansight Android application

Mobile application are native for iOS and Android and we used jQuery mobile for the mobile web version.
We decided to keep a very simple UI as part of our native mobile apps. We were one of the first apps to use ViewPager on Android for example.

We realised quite soon that we needed to build an API, mostly for these mobile apps. Our MVC architecture allowed us to easily create one. Ideally I think the main website should have use it (either client or server side). Anyway, our API code and website code were sharing a lot, thanks to our rich object oriented Models. You can find the API documentation in a GitHub wiki.

We used different hosts. We first started with PlayApps.net, the Platform As A Service offer from the builders of the Play! Framework. We never encountered any issue with it and were very satisfied to not bother about system administration. However, we had to move due to the service closing. Beansight was then running on Gandi Hosting. Here we had to take care about administring our server, which added some pain to the maintenance of Beansight.
Finally, in order to reduce the costs and make it easier to setup as part of the open source process, we made sure it is compatible with the Heroku PaaS hosting.
Today, Beansight can be easily run on any Linux server or pushed to Heroku with any MySQL database (beansight.com is now using clearDB for example).

I hope this code will be useful to somebody. I would be pleased to see you starting a new community from it, building something on top of it, or using it as part of another project.
While a few technical improvements could be done, I think it is still quite reliable, with a pretty well documented source code and good architecture.

Get all the code on GitHub:

Advertisements

First project: Open Divers

I’m back from a week on the red sea in Marsa Shagra, Egypt. We did mostly scuba diving (2 or 3 per day). Check my pictures on flickr. And with this first project, I decided to stay a little longer in the scuba diving world.

Let’s start this diving project!

The idea

I am a passionate diver with around 70 dives. Since my first dive, I’ve been writting them  down in a paper dive log. Every diver is doing so. Last summer, I was wondering what it could look like if it was a digital dive log.

Basically, I wanted an online place to put my personal dives.

Of course, if we put together all these dives of the many divers around the world, it could lead to a large amount of data about diving spots. (what can be seen at a particular location, what diving center to contact, difficulty of the dive…) And thus be a huge knowledge base.

Moreover, I want to stay in touch with other divers I met, I want to explore where they have been diving in the world, I want to connect with diving centers before my trip. It will thus have social functions. A social networks of divers, of sea lovers.

Done 100 times

Of course, I was sure this had been done by others. I started looking at existing solutions. My conclusion is simple: there are many online dive logs, but many of them suffer from a bad user experience, and none succeeded in attracting me. They do not merge data to create something larger. There are also many dive spot encyclopedia, and none of them is open data, most of them do not offer a pleasant way to browse spots…

I didn’t find the experience I have in mind. That’s why I will build it.

Let’s do it

My plan is to build something in a 2 weeks timeframe, starting today. I will post regular updates on this blog and more frequent updates on twitter (@sterenlabs).

How can you help ?

If you are a beginner or experienced diver or not at all, I would love to hear what you think about the project in the comments of this post. What would you expect in such a platform? Your ideas and suggestions are welcomed.

If you know and use an existing website that does the same, please let me know.

I’m also still looking for a name. It’s hard because many domain names mixing diving words are already taken (“dive”, “log”, “wiki”, “bubble”) and we tend to forget them because they are not original. I really want something people will remember easily. I like quite well “opendivers“, but I’m not convinced (and the .com is selling at 1200$). I wanted also “globglob” (if you get the reference), but the .com is taken.

Specifications

Here is what will drive my work in the next weeks:

  • Adding an entry should be pleasant: basic parameters (location, depth, time and date) but also strong emphasis on what has been seen, on who I dove with.
  • Fishes and things I’ve seen could be added by drag and dropping icons from a library (I do draw on my dive log, I think it’s important to visualize things).
  • No need to be too technical. Users will be able to fill in technical details, but they are optional (the track of the dive from my computer…)
  • I can upload photos of my dive and tag things in them.
  • It is not a social network of friends, it is a network of divers. I am linked to you because we dove together once or we met at a diving center.
  • I can group a set of entries into a “trip”.
  • On my profile page, I enter my info. (my levels, my gears), it is public.
  • On my profile page, there are nice statistics : map of the world where I dove, badges if I’ve seen many manta, if I’ve done many wreak dives…
  • I can print a nice dive log of my dives.
  • I can always export all my data in many formats.
  • Content is gathered and dive spots can be browsed (from a map or by country).
  • On a dive spot page, we can see fishes people have seen the most, there are pictures of dives + info can be added (comments, a drawn map of the spot).
  • Diving centers could have their pages, and be linked to dive spots, to my dives and levels…
  • non-personal data is licensed under a permissive license such as CC-BY-SA
  • I can add an entry, even if I’m not online (need to build offline mobile apps that synchronize with the service)