Marrying a developer gets you more than cat pictures

I'm getting married in May of 2013. I wanted to create an app for my wedding that would help my guests interact with the event as much as possible. I wanted them to be able to get directions, easily contact designated people with questions and see the guest list, but most importantly -- share photos... in real-time! Currently there appear to be multiple apps available that have all or part of this functionality, but at the time I thought of this nothing existed. And in all reality, even now that they exist, I still wanted to build something (looking at the apps available, I'm not impressed with the quality) :)

So, given that I'm an Android owner, I decided the best way to go about this would be to build the app for Android, and see where I could get. I could build the backend in Rails which I know quite well, and throw in a few other new tools where I see fit.

Long story short, I ended up creating something that I'm quite happy with, and really pretty proud of. The app is called OURSVP (get it, our.. s.v.p) and can be downloaded for free in Google Play.

Some things I used that I think are neat (and what I used them for):

  • Imgix: This allowed me to serve different image sizes, both dimensions and quality, depending on the screen densities and operating systems ensuring a consistent experience across all phones.
  • Node.js: All photos are uploaded to a node.js endpoint that streams them directly to S3 (using a forked repo since the owner won't accept pull requests to the original), which makes them immediately available to Imgix, the app, and the live stream. This also pulls the heaviest operation of the app to a separate, asynchronous application that is served from Heroku
  • Pusher: I realize there are more complex, robust ways of doing this but given my time constraints I had to fall short on some things. This provides the real-time functionality for the photo viewer to display photos as guests take them.
  • Rabl: The web app is written in rails, so I decided to create a JSON API for the app using Rabl which is what the mobile apps use to communicate with the app.
  • ActionBarSherlock: Awesome library that allowed me to provide the same experience on older Android devices, very well done and extremely useful.

Some challenges I ran into and/or things that I need to fix:

  • Syncing to the device: I'm still not convinced I've done this correctly, I think there are far more efficient ways of doing it, and there are bugs.. mostly to due with timezones.
  • Legacy Support: Even with ABS, and the Support Library from Google, dealing with older APIs is tough and resulted in functionality (mostly cool affects) being left out due to a lack of support in older OSs.
  • Testing: I love my Android, and you cannot convince me to switch away -- but testing 1,456,345,004 different phones and operating systems is tough
  • Design: The default design of Android UI elements is.. well, shit. So making things purty took a bit longer than I had hoped it would. That being said I'm quite happy with the result.
  • I've not quite figured out why it doesn't work on Android tablets yet :-/

If you are kind enough to download the app and try it out, you'll notice that its not focused on weddings (even though the design is kind of.. weddingy). My thought was that if I made it more broad I could use it for the holidays, sporting events, and random gatherings. This worked out surprisingly well as I used it for Christmas, New Years, parties at my house, and even an NFL game.

Over the next two months I'll be doing my best to make improvements (if you have any suggestions, or constructive criticism, feel free to shoot me an email at ryan [at] oursvp (dot) com) and ensure that the app will live through my wedding :)

Not so surprisingly many of the things I learned in creating this app have already been implemented in Science Exchange. It's always a great feeling when you create something as a chance to learn, and realize how much that new *thing* applies to applications you've already created. 

Shout out to Raphael Caixeta who whipped together the iPhone app for me, and to Eric Alli for the website design -- much appreciated guys!