Skip to content


[Video] Building an IoT Beer Kiosk with Elixir and Nerves

photo of Emily Maxie, Very CMO

Emily Maxie

October 31, 2018
2 min read

On October 26, 2018, IoT practice lead Jeff McGehee gave a talk at Gig City Elixir called, “How to Pour Beer with Your Face.” In his presentation, he gave an overview of how we used Phoenix, Elixir, and the Nerves framework to build an IoT beer kiosk powered by facial recognition. The product, called Hop, debuted on the Vegas strip earlier this year.

We built a scalable, modular, distributed self-pour draft beer system with facial recognition authentication. The system included:

  • Credit card payment
  • An iPad app at the tap
  • Beer flow measurement at the tap
  • Beer inventory tracking
  • White-labeling capabilities
  • User management

With this system, patrons walk up to the kiosk, create an account, have their photo taken, and enter payment information. After creating an account, customers approach a tap and enter their phone number. The iPad application at the tap scans their face and uses facial recognition to authenticate their identity. Upon authentication, they are free to pour beer, and their credit card is charged for only the ounces they pour.  

The IoT Firmware Problem

During this project, we faced a common problem with building IoT solutions – your devices out in the field can only reach out to your server, but you can’t reach into any of them and make updates or changes. To improve a product, you need to continually ship new code, but this is an issue with devices in the field. It’s often messy, unreliable, not secure, and really slow to iterate. Thus, for many IoT products, firmware updates and new features don’t come often. It’s a very different experience for web development, where you ship new features every day or even multiple times per day.

Nerves is a complete paradigm shift that makes this problem much easier. Why do we love it? First off, it has everything we love about Elixir as a language, and it gives us the ability to leverage Elixir tooling built at web pace. It also (mostly) avoids the complexities of embedded Linux. And importantly, it’s a full-stack solution that handles over-the-air firmware updates, the build of your Linux distribution, packaging of your application code, and the update process.

Watch the 45-minute talk above to learn more about the project and why we love using Nerves! For more information about IoT application development, download our Guide to IoT Development: What You Need to Know, From Frameworks to Best Practices.