From the beginning
Three months ago, together with my business partners at RST-IT, I decided to build a MVP (minimum viable product) of virtual whiteboard. Leanboard.it (the app’s name) was going to allow its users to:
- create virtual whiteboards,
- share the boards with friends,
- simultaneously draw on shared boards with friends.
My initial approach was to build it on Ruby on Rails, so started to think “which libraries I should use to build it?”, and came up with the following list:
- RoR as an API server,
- angularjs on yeoman as web client,
- nodejs with socket.io as a websocket library (client and server)
- and redis - allowing sharing data between node and RoR apps.
Stack was definitely too complicated. I needed something simpler, so I started to look for other solutions. And that is how I came across meteorjs and decided to give it a try.
I started to code the application in meteorjs. After four hours I had a working prototype deployed online. Not kidding: four hours with zero knowledge of how meteorjs works.
It was insane - those are several things that just blew my mind
css, js and html modules
Meteor doesn’t have dedicated places for css, js and html files. It means that you can put files responsible for the same UI element in the same folder. Thus you can create totally autonomous frontend modules. These modules can read user input, perform validation, and store data in a database.
super easy deployment
Deploying meteorjs apps for testing is super easy. Just run
meteor deploy yourappname.meteor.com
and this is it. Let me write this again: THIS IS IT.
websockets out of the box
Remember RoR stack I mentioned at the beginning? With meteorjs it’s just meteorjs. There’s no need to setup external services, frontend frameworks or websocket libraries. Meteor has it all.
After building a prototype and all the 'wow'! I decided to build the entire app in this platform. And there come more wows:
Easy validation on client and server
The only thing I wasn’t quite comfortable with, using a meteorjs at the beginning was lack of database schema. Solution for that are two amazing packages meteor simple schema and meteor autoform. Simple schema adds schema, validations, default values and field descriptions do your database. Autoform incorporates super easy form generation with action callbacks, field dependencies, and works with bootstrap3.
You can use your favourite tools
I love using SaaS instead of css and jade/slim instead of html. I also usually connect my apps with mandrill and amazon S3. Those things aren’t natively supported by meteorjs, but there is a meteor package system: atmospherejs.com where you could easily find them.
So if you use external tools/services in your projects, you will most probably be able to easily add them using atmosphere.
There is always a "but"
Among all these possibilities and amazing features that meteorjs gives you, there are two things to complain about:
Slow updates after code change
In development mode Meteor refreshes the website whenever you change something in your code. When the project is small, it takes milliseconds, but growth of codebase creates bottleneck. For example, when I change anything in my current project which is executed on the client and the server, page reload takes more than 5 seconds.
Velocity - meteor official test runner is very young and that is why there is not much information on how to use it. Probably this will change soon with the release of meteortesting book, but at the time of writing - testing was pain in the neck.
Next - production environment
Last week I launched two apps on meteor.js: (as mentioned earlier) leanboard.it and hausor.com. I believe both of them will be in beta stage for three months. After this period I will definitely write how it went and how meteor operates in production.