Like most Berkeley students, I live in an apartment. A key is required for entry into our complex, and another key is needed to enter our unit. These practices are generally secure provided that keys cannot be easily acquired by outsiders and convenient provided, and convenient provided we don't forget our keys. My housemate found that he could open our neighbor's unit our keys, so security fails. I forget my keys easily, so convenience fails as well.

To reconcile at least one issue, I decided to modify the behavior of our complex's keypad system. By default, when the unit number is dialed into the keypad, the keypad calls a designated tenant from our unit, who can allow guest access through the phone call. This is inconvenient because all guests, regardless of who the guest has business with, has to call the designated tenant.


Using the twilio API, python Flask, and AWS Elastic Beanstalk, I created an app which, when a twilio number is dialed, would allow the guest to choose which tenant to call through the keypad. This not only makes guest access easier, but also allows my unit's tenants to get into the apartment without a key by simply calling themselves and granting themselves entry access. There might or might not also be a secret feature as well...

While this approach does work, Elastic Beanstalk seems to be extremely expensive. I plan on moving this project over to AWS Lambdas soon to save money.

Update 2017.07.16

The flask app was taken down on July 15. However, due to the importance of the keypad's functionality for package delivery, I quickly implemented the new solution. Twilio also introduced a serverless function feature, thus it was very easy to integrate the phone number with this function. The functions were implemented in Node.js, and this was my first time using Node.