Background
Back in my college days, those odd years between 2010 and 2014, I lived in a high rise apartment in the quiet and chill South Loop neighborhood of Chicago. From organizing hackathons to hosting couchsurfers to odd drunken Thanksgiving potluck / game nights, my apartment hosted a number of people. However, one thing was always frustrating for a lazy person like me: buzzing people up.
The Original Solution
To solve this very first world problem, I decided to build some technology that would answer the door for me. If the visitor knew the password, they'd be allowed up, all without any interaction from me 🎉 Here's the general flow of the hack (shown below)
- I changed my apartment directory listing to a Twilio hosted phone number.
- Before an event, I would set a password and distribute that from my Azure hosted web app
- When a visitor pages up, Twilio would hit the web app for a voice query to present to the user for the event
- After the visitor types in the password on the keypad, Twilio hits the web app with the entry
- If the password is correct, the web app response to Twilio to press the DTMF code to enter the building
- The door opens 🚪
Revisiting the Hack, 6 years later
Since I built this hack in 2013 (and open sourced it in 2014), the world has moved along quite a bit in the way we design web apps. It doesn't hurt that I have a bit more experience building apps for scale as well.
There's only one thing that can be said about the original codebase:
SO. MUCH. FUCKING. CODE.
We don't need a big stinking web app to manage an apartment portal. The original codebase was a Node.js app with a DocumentDB NoSQL backend and Angular frontend. I even used web sockets in that project for some reason!
The Modern Approach
- Move the Twilio webhooks into serverless functions
- Deploy to hosting service - I personally love using Netlify
- Set the password, event title and active times in environment variables
That's it. I was the only user of the app: I didn't need a UI for other people to be able to create events and setup passwords and the time restrictions.
Parting Thoughts
A lot of times, we build extravagant technology for the sake of flashiness or a myopic vision we have in our head. Going back and looking at this project, it's a good reminder for me (and hopefully you) to think smaller and build faster. Projects like these are fun and a great way to explore new tech, but reducing scope and focusing on the outcome is waay more important than building a flashy product.