We rarely get to talk about our Lift work, but I can talk about this one because it’s been a Sunday afternoon project for a while.
I live in Google for my contacts and calendar, and wanted a quick summary of upcoming birthdays and anniversaries. I’m not alone in wanting something like this. Reminder Thing itches this scratch by digging into my contacts and calendar each week, and emailing me a single reminder of upcoming birthdays and anniversaries.
That’s it. Obviously, if you live in Facebook, you don’t need this, as they already sensibly send out such an email. But I’ve not yet, um, fully embraced Facebook.
But this is mostly a tech blog, so here are the details. It’s a Scala app, running on the Lift framework. It uses SendGrid to send email, and uses Google’s own AuthSub and GDATA Java APIs to communicate with Google. The UI is Twitter’s Bootstrap.
We build using SBT and deploy using SBT Cloudbees Plugin to a single CloudBees 128M cell. I believe Cloudbees is currently using JDK 1.6, Tomcat 6 and Nginx, but I neither know for sure and nor do I especially care—if it works, it’s fast and I doesn’t give me hassle, I’m happy.
I have two tech observations from writing this code:
First, firing off asynchronous events to Google is a delight with Scala and Lift. The page where we show spinners while fetching data from Google makes use of the Lift LazyLoad CSS tag (which means it becomes concurrent without me making any code changes) and a little bit of Lift Wiring (8 lines) to make the “Continue” button change colour.
The other comment is that Lift parameterised menus really help you be productive: very worth getting to know. In Reminder Thing the unsubscribe link plus the ability to undo your unsubscribe uses parameterised menus:
So that’s Reminder Thing. There are a couple of tweets on adding birthdays and anniversaries from @rmndrthng, which is also the right Twitter account to use to let us know if you like the idea, anything that doesn’t work, anything we can do better.
If you’re a Google contacts or calendar user, do give it a go.