This summer I began an experiment: build a full featured web application 100% in the cloud all on a Chromebook Pixel.
The idea: I was toying with accessing my highlights from my Kindle with Ruby. Well, why not build a service that collects all your highlights and sends you reminders of all the quotes you've saved over the years, right? And who doesn't love sharing quotes!
It turns out what I've started building is also a better way (IMHO) to browse the books you've read on your Kindle than the solution Amazon offers.
Bookmarked.it was born
My platform of choice
With Nitrous.io I provisioned a cloud box, got a pretty sweet IDE, and I even got a fully functional terminal! The best part is the ability to preview my work live while developing. Some alternatives have this but this was why I really didn't go with dual booting or developing just on a cloud box via ssh alone.
(I've written more about using a Chromebook Pixel here)
My stack of choice
I built a simple Ruby on Rails application using Ruby 2.0, Rails 4 + Heroku. It's all in the cloud and all the rage! Development, staging and production!
I'm using MongoDB as a datastore and rather than using the local instance of Mongo available on Nitrous.io, I decided to use a free MongoLab instance, mostly because when I started, I didn't think I could install Mongo, you now can. Database in the cloud!
Most people might not include this, but I am using Trello to track my progress, help me remember where I left off, and where I'm building next.
Connecting with Amazon
By far the trickiest part of this project is fetching Kindle highlights on behalf of the people who signup for Bookmarked.it. Luckily I leaned on Github and found this repository that more or less did what I wanted: connect to kindle.amazon.com and get a users Kindle highlights. A git clone, pull request, and git push later I was ready to integrate Amazon Kindle highlights into Bookmarked.it!
Next up, I hooked up DelayedJob to run the processes that pulls users highlights from Amazon so that all that time consuming back and forth can be done asynchonously.
Heroku charges a pretty penny for running these background tasks. To limit the cost (this is a side project right?) I stumbled upon this background worker (and dyno) autoscaling tool called workless. Pretty cool right? I am paying pennies for Bookmarked.it so far, yay!
The buck stops here (aka security)
The one sticky part to this project is that connecting to Amazon requires me to hold onto a users Amazon password to allow Bookmarked.it to periodically poll for new highlights. I want to respect everyone that stubles upon this project to I implemented two security features from the get go:
- I made the decision to fork over the $$ to buy a SSL certificate so all requests (not only those used to signup/login) are sent over https. This is the one part of Bookmarked.it thats going to cost me. But it's important, so it's in. Period.
- I decided to use the AES-256-CBC algorithm to encrypt users passwords that are stored in my Mongo instace (on Mongolab). The key used to encrypt and decrypt these passwords are not kept in this database.
Luckily DNSimple makes it really easy to buy SSL certificats && set them up with Heroku. Really simple.
(If you signup for DNSimple with this link you and I will both get 1 month free!)
Building time == Weekends
By day I work at Shelby.tv as the team Entertainment Scientist, by night I work at Home as team dad, so I built Bookmarked.it on weekends during my toddler's nap time. That's it.
Overall, I'm really enjoying this experiment! It feels great to open my Chromebook, connected to Nitrous.io and I get off to the races. Keeping the scope of "what bookmarked.it is" simple makes developing a very focussed endeavour.
Do you have a Kindle?
Do you highlight passages?
Never forget those great quotes!
I'm looking for people that are interested to try Bookmarked.it out. All feedback is welcome and appreciated!