Folks, we wanted to share with you the launch of our Digital Classroom application using Meteor. Already used by thousands of students internationally even before it goes out of Beta. Feedback from schools, admins and teachers is that it is leaps and bounds better than the next Learning Management System / Digital Classroom. It would not have been possible had it not been for Meteor.
Here is the ChromeBook version if you are interested in taking it for a spin (email me for user credentials if interested) https://chrome.google.com/webstore/detail/zeschool/dnkgfibmbiedenohnljjgideijmadkpk – here is the Web App version (https://zeschool.zegenie.com) – checkout the Wizards if you want to see a live demo / tutorial.
Short Story
We have a (VERY) solid PHP-based back-end, and were using Adobe AIR as our front end. Target devices are ChromeBooks, iOS, Android, PC, Mac. Adobe AIR became cumbersome and heavy to program in. Every new UI update took forever.
We used Meteor + MongoDB + Blaze + Semantic UI. Loading time is super fast (even with Cordova), code is very clean. We used the observer approach in our development (i.e. everything is an Event) and things work really well, including adding new features on the fly.
The total JS to download client-side is 2MB’s.
What we love
We are not embarking on React anytime soon, so we loved the fact that we can create our own components (e.g. Modals, Steps, Lists, Cards) in HTML / Blaze and re-use them throughout our App. This means:
- Faster time to market
- Faster fixes
- Faster feature(s) addition
Specifically, Adobe AIR was in a previous life using XML for its view layer, and enterprise loved this. Blaze / Spacebars / Handlebars are all in the same spirit.
Since this is not a compiled / linked app (i.e. Native or with compiled language) we are not necessarily keen on adding ‘imports’ everywhere. Pedantic vs. practical. We chose names wisely, so don’t expect collisions. Most of our objects are static, e.g.:
List = new function() {
var self = this;
self.initialize = function() {
...
}
}
And then we can simply call List.initialize();
We do not subscribe to collections in templates. It is done in the respective classes that need them. Each class that has a collection is responsible for managing it, and sharing with the rest of the App what data it needs.
AtmosphereJS has also been great, makes it easy to add new Meteor-specific features (actually, it going down is a concern for us).
We love real-time reactivity! A teacher makes a change, everyone sees it live.
Performance on mobile is really great.
Custom Development
Aside from JS, we did some custom native Cordova development, really minor and very specific.
We developed our own State / Model. It simply dispatches events when things change. And it does it with deep diff-ing. This makes it very easy to react throughout the app to any changes. We have a couple of those states in use within the App at any given time (user, content, role).
Hosting
We host ourselves on Digital Ocean. We would jump in a heartbeat onto Galaxy, but the challenge is that we are DB-heavy, so need Mongo to be nearby.
Next Steps
We are close to the end of our features list. What we are working on is some UI improvements, deeper integration with applications on School premises. Pushing mobile apps onto respective mobile stores.
I really think Blaze needs Incremental UI / Virtual DOM. I don’t see anything else wrong with it now (HTML is HTML). Maybe some cleanups of syntax, but nothing that is disturbing development.
Acknowledgments
We are very grateful for @aldeed’s SimpleScheme, autoForms and @fabien4 for the Semantic UI version.
We are extremely grateful for Semantic UI – leaps and bounds more dev-friendly than Bootstrap and Foundation.
Summary
The original design of Meteor really shone for us. As we played with deeper functionalities, we saw how well designed and built Meteor is. While I am sympathetic with MDG opening more doors for a wider adoption, I truly think Meteor is great, and under advertised.
Anyway, wanted to share the news (specifically that our use of Blaze has made a HUGE difference in productivity and ROI – we are very pragmatic organization, things have to work and have to work well.).