Ales on Rails: Making a Smarter Brewery with Ruby
CC Attribution - ShareAlike 3.0 Unported:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this
Shippee, Ben
Rails is a great framework to empower people to work smarter, not harder. I'll be sharing the evolution of technology in a Pittsburgh brewery, from a simple MVP to a production application. This talk will explore how Ruby and Rails was leveraged to help manage brewery data, control aspects of the taproom environment, and automate the tedious parts of the job to a few clicks.
 My name is Ben Shippey and I'm the tech director for Brewjohnman. I do feel obligated to tell you all that there is no free beer at this talk, unfortunately. So by show of hands, how many from Pittsburgh? All right. So mostly the southern. That's great. So I'm sure a lot of you are aware that Brewjohnman is a craft brewery located in Braddock, Pennsylvania. This talk is going to focus on how we leverage technology at the brewery and how we've really had a journey over the past three and a half years with our technical projects at the brewery, including the menu board, our hackathons, and bring shout-ins to the new and exciting areas in the brewery. So let's talk a bit about Brewjohnman. All right. So Brewjohnman was founded by two senior graduates and they opened their doors in 2014. There has been a recent craft beer explosion in Pittsburgh and we have close to 40 different breweries either in the city or shortly outside the city. So what makes Brewjohnman stand out? The beer. Well, two things, but mainly the beer. Brewjohnman aims to create a soft balance and elegant beers and meaningful experiences while helping revitalize the historic steel town of Braddock, Pennsylvania. And they're doing a pretty good job of making the beers. They're consistently rated highly. This is a screenshot from Pace Magazine, which I'll quote this, this is the best, most complex double IPA we had a chance to taste out of a whopping 176. And that's nationwide. So we're making some really awesome beer there and a lot of that credit goes to the Brewmaster and Brewing staff as well as co-founders for the talent that they've managed to acquire. So let's talk about the brewery. Looks like typical of Brewhouse, you know, grain, hops, yeast and water go in, beer comes out. By show of hands, how many of you have been on a brewery tour before? Wow. Okay. So none of this should surprise anyone here, right? So he has some barrels. We do barrel each beer. Essentially, same thing, right? We put the ingredients in, beer comes out, put that in a barrel, let's sit there for a bit. Some tours will occasionally talk about that. Those tours we'll talk about, fermentation vessels, break tanks, keying equipment, cleaning equipment and that's pretty similar to everything that you've seen so far, right? And that's pretty standard. Brewers might change it a little bit, but generally it's the same process. And we're not going to talk about any of that today because automation here is expensive, dangerous and best left to professionals, which I'm not a brewer technician in terms of automating that level of sophistication. So what are we going to talk about today? What goes on here? Because without the back office, we have a lot of beer, but we can't do anything with it. So this is the business side of the brewery. And that brings me to the second reason why Brewers Gentlemen stands out, the core values. So a lot of this comes from Japanese philosophy with Miyabi, Soshin, Kanzo and Kaizen. The one that's throughout to me mostly is Kaizen, continual improvement, basically asking ourselves what can we do to make things better and that brings us to the taproom. So as you can see here, this is a shot from taproom and what you might notice first is the digital menu board. Now this is a shot from a couple of years back and when Brewers Gentlemen opened, they had a digital menu board. A lot of brews at the time, we're still using shock boards or any other way of doing it that wasn't digital. So that lets us have some interesting conversations. So let's have a look at that. I'll zoom in on that. And this is more or less a mock-up of what that menu board held at the brewery. So after a few tasers, I had a very fruitful conversation with Aisa, one of the co-founders there. And we got to talking about how they were doing this and what you told me kind of surprised me. It was an illustrator file that he'd export into an image format, put that on an iPod and have the iPod pipe it to the TV. Sounds horrible, right? But it worked and that goes towards the DIY spirit of the brewery. Now bear in mind, this is also pre-untapped before they launched their menu offerings. So you kind of had to roll your own system at that point. So just to break down that process a bit, tap change. So that could be kegs kicked, new kegs added, Aisa has to create an image, images add to the iPod, menu board's updated. Now those two steps are a huge bottleneck, right? How many of you have ever ordered a beer only to find out kegs kicked, you can't get it? It's infuriating, right? Because now you basically have to order a second beer and maybe, you know, if something just happens, you just plan ordering two beers. So having either stale or outdated information isn't great. When the iPod has to be disconnected, we have no information on there. So that's just not a good situation. So I suggested put that on rails, right? Because we got some other free benefits other than just like the real-time updates, but also website integration. So that changed the process to removing those bottlenecks. Now any member of the bar sap could go in, update the list, and it'd be updated in real time. So now we have something that is guaranteed to be accurate up until, you know, you go up to order and then you kick a keg and now we just need to change the body. So with rails, it's a very modular web framework. And what we're going to do is leverage the different engines and gems to really tie it together. One such gem was Active Admin. So we have a custom Active Admin dashboard here and I'll zoom in on some of the sections you can momentarily. But basically it boils down to a very quick overview of unavailable beers and beers on tap. So beers on tap. We can drag and drop these beers to reorder them if needed. We have the icon, we have the name, we have the style, and the kicks. You click the kick button and it goes out. Really simple. Likewise, unavailable beers, names, style, and click put on tap. Now that is something that any member of the bar staff can do. We don't need to have any specialized desktop software and it makes the entire process go a lot easier. Now the other benefits we get out of this. We get beer database. So now we have this persistent record of all the beers that we've brewed, pricing information so we can go back and run LX on those. The brewmaster can go in and enter all the details that, you know, you need to for either the ABV, the tasting notes, the name, the style. And creative can go in and put in the icon separately. So now there's no ball neck wing on one person who can distribute the work. Now I also mentioned the iPod. Originally, we started out with a Chromecast, just proof of concept, making sure this works. We already had one. One of us had money and more hardware because at the time the brew just opened, we don't want a lot of debt, either technical or not. And eventually we moved to Razor Pies because those would be self-sustaining. We don't need a laptop constantly pushing this to the TV and that worked really well for us. And as of today, we have four Raspberry Pi power displays in the brewery pulling from the API. So now we have the main board digital, but we also wanted to print it. And we were able to generate PDFs whenever we needed to and print those and put those on the tables in the taproom. So that was a very nice benefit to make sure that the printed material matched the digital material and keeping that all in sync. So just a quick recap right now. We have a Rails app. It has a menu, it has a beer database, we have printables. Where do we go from here? Well we have a website integration at this point where it's more or less an iframe being injected into the static site just because the static site predated my work with the brew gentleman and we want to kind of keep that for the moment. We decided to change that and make it a CMS-based system. So we added refinery to the stack and that worked really well. It allowed people to go in, edit content, and you can be edited. The only issue was we had the blog on WordPress. So how do we get from WordPress to refinery without spending any money? Well any paid plan would allow us to do that, but we don't want to pay for those. But what does WordPress give you for free? An RSS feed. So we're able to actually scrape all the RSS data, reformat it a bit, put it into the refinery blog model, and save that and push it to the website in the format we want. We do need to strip links because some of those are relative, but that's again a minor trade off for being able to do this so quickly. Now with this being a website that we're running, we can push the beer database live and have people go in, explore different beers you make. You can sort by seasonals, flagships, sort by tags. And if you click on a beer, you get to see what the brewmaster has laid out for us. We have some nice notes there on the tasting notes if you want to pair it with a beer. And links to untapped beer advocate rate beer. So basically we have a pretty sustainable compendium of all our beers and anyone going to the website can explore them. So at this point, this is about a year after I started working there and we decided to have our first hackathon. Now how many of you are familiar with the Balmer Peak? Yeah, we're brewery so that only made sense. So it was 24 hours, some technical staff, Matt and Ace the co-founders, and what that entailed was a lot of beer code and power tools, which makes for a great night. So one of the things that we built was a Raspberry Pi power display for the bathroom site for a gentleman. We can push our event details of beer and yoga, new ball releases, food truck calendars, and that works pretty well. Those are still in use at brewery today. The Hue lights were an interesting little toy that we picked up and quickly realized that we're there some problems with these. While they are great for being able to turn them on and off with your phone, you can change the color and stuff, having all these different mobile devices with all different bar staff, we can't single the profiles. So we made a custom active admin view for that and this is running on the laptop in the brewery. So the audio reactive scenes could take input through the laptop's microphone and push that to the lights and pulse them accordingly. And that worked really well for us for a little bit. Eventually we ended up taking the Hue lights out because they were not that great in terms of keeping the brewery focused on one thing and one thing only, making a certain beer. So now we're here, back at the taproom. We talked about the menu board briefly, we talked about the Hue lights, the Clover point of sale system. We did investigate integration into the menu board with that. The problem is their API wasn't super friendly at the time. Which would have been kind of cool because we know how many beers are in a keg, we know how many beers are selling through Clover, we could put some real time metrics on, okay, this is going to kick real soon. Unfortunately their API didn't really support that. But if we look over there on the right, we have these tags. And these tags are what we use for our to go packaging. So that could either be a swing top 750 milliliter grower or a full 64 ounce grower. So let's zoom in a bit here. This looks like the same information we have on the menu board largely, right? So why should the creative staff have to do that by hand? And especially because we don't know what beers are going to be selling in to go formats. We don't want to print all these in head time, we need to be able to print these on demand. So let's say a new keg goes on, well, now the creative has to go out and basically do a lot of copypicing to get a sheet like this. Using the prong PDF gem, we're able to generate all those. So now anytime that there's a beer on tap, we can click print tags and bar staff can just print the tags they need. We don't need to have creative involved in that effort at this point at all. So right now I've talked about a lot of things in kind of a short amount of time. So let's take a step back here. Here are all the features that we currently have in the Rails application so far. And going back to the core values of what can we do to make this better and conzo simplification and making sure that we only have what is essential there. So beer database, that seems pretty essential to a brewery app. Tap management, menu screens, that makes sense to keep. Brower display management, that was a bit of a toss up for us because while those are cool, they are in brewery and it's the same type of display as the menu screen really where it's a Raspberry Pi powered and we push content to it. So we decided to keep that. As I mentioned, brewery lighting, we nixed that idea. It just wasn't sustainable and it's a lot easier for something just to put lights on and off. We don't need a whole website to turn lights on. Print menu generation, label generation, yeah, we'll keep those. And CMS, this was something that was kind of a toss up for us too because we wanted brewery staff to be able to manage their own website but we didn't want it to be so heavily dependent on our own infrastructure and systems. So eventually we did decide to nix that and move to Wix as the current platform is hosted on there. It's not a fantastic experience from a technical perspective working with Wix but we are managing to pipe the data that we need to which is largely the food truck schedule and the tab menu. So these features, I like to call brewery driven features and now we are truly BDD, brewery driven development. So let's talk a bit more about VueTech because in this application of what we're doing, we took a step back and we started looking at how we're actually doing these things. So there's a migration path here from Rails server interviews to Angular reviews to React reviews. At this time we ripped out Active Admin and just unmounted the engine. We kept all the core business logic in our models and services so we didn't really lose anything. We just needed to basically write our own Vue and Vue controllers at that point. This was written on Angular 1 so over the course of the next year or so we also migrated to React because the Angular 1, 2 and 4 didn't really sit well with us and React is just so much nicer to work with. No offense. So that also allowed us to take time to look at the UI and UX of all this. And now we have a much cleaner looking house software that I'll zoom in a bit. So we have two tabs with journal and Braillex on it. Only one is actually visible to the customer because we don't want duplicate information to the customer but Barstaff does need to know that, hey, we have two tabs of this. If one kicks you can go ahead and use the other one. There's no issue there. So we can toggle that. We can also print tags, kick it and the edit functionality pops up in the modal window now opposed to the active admin of having to dig through that review. And that's close to that. Super nice to work with and it's all reactive at this point. So we click save, it propagates through the entire system and immediately up these tab board. So any kind of pricing changes or any other, like let's say we mislabeled the ABV, we can update that in real time and how that pushed immediately. So while we're doing all the UI and UX on the back end, that's great for people that actually do this but how many people actually come in to use this versus to order beer? So we started to refine the menu board a bit and what we realized is the way that we originally had it was okay but there's a lot of wasted space in there, especially when we didn't have that many beers on tap, which we did have some days where we would sell through a lot of the beers just because we're a small brewery. We couldn't make that much beer to sustain the demand there. So with the menu board system, we were actually able to test this out in the brewery with different customers and ask them which one they like better, look at how they were perceiving the information, look at where their eyes were going and kind of see where the hangups were. So over the course of about 24 hours, this was a hackathon if you would, it was more a refinement day where we all came together and said okay, we know we have some problems, let's sit down, let's solve problems, let's make them simple and have some good solutions come out of that. So we worked through about four different menus there and that was something that was bit of an eye-opener for us where we were always looking at the screen from a 69 perspective without considering what if we rotated at 9 degrees. And that was actually the solution that we came up with, was having a vertical list of all the taps and pricing. That worked really well. Here's an updated screenshot from a brewery and there it is. And that's how it is currently today. That works really well for us. It doesn't have the issues with the white space. Everything is broken out in terms of flagship seasonals, one-offs and partners in terms of just where it's placed on the menu board. So just to recap, we've talked about drafts, the website, some of the back-end tech, but we're missing one core feature here of the brewery, bottles. Because chances are if you buy beer, you're going to be buying a bottle not from a brewery directly just most of the time. So there are two types of bottles that give relation to the brewery. They're the ones that there are plenty of that you don't need to line up around the corner for and then there are the ones that you need to reserve ahead of time. So how many of you have waited in line for a bottle release? It's not a great experience for waiting around the corner, lining up, and it's also not pleasant for the brewery because now we have this massive influx of people. So to handle that, we had a roller and solution. But let's talk about the common case where we have plenty of these bottles. We don't really care if people line up or not. We want something similar to what we have with the menu board where it can be updated from the same interface and pushed to a much smaller display in the brewery. So we have an iPad just hanging out on the bar top now that has the menu for bottles to go. And that works pretty well for us. It's the same information minus the icon. So it's just a much more condensed version of the menu board, smaller and more focused just the bottles. So going to the limited releases now, as I said, we don't want people to be lining up around the corner because then they're just hanging out there. And while that's great for them to get the beer, it's not pleasant for all the other patrons who don't want those bottles. They're just kind of in everyone's way at that point. So the other way people do this typically is having festivals where you can buy a ticket and you have all day to go explore the brewery or park and whatnot. That didn't really work for us either. So we want something that was a bit more flexible and mindful of people's time that they would be coming to the brewery and also the time that they would take to enjoy the beer. So we came up with this. It's a reservation system that we were able to roll out different allotments on a daily basis. And let's say we had 200 different bottles of beer that we could sell. We're open from Wednesday to Sunday. We had a big update with Sunday and we wanted to make sure that we didn't sell out of these reservations on Wednesday. So we split up. So we had 50 available Wednesday, 50 available Thursday and you get the picture. Now how do we manage that? Without any back end intervention by the brewery staff. We used some cron jobs so that way we just keep opening the signups that were available and with the software you go and you pick your time slot and you get a nice little confirmation on screen but also an email saying, hey, go pick up your beer this time. You pay for it then. And that worked really well for people because it also reminded them that, hey, I have this thing to go to and if we didn't sell out all the beer, it would just be available in Tavern for whoever came by after the last time saw the course. So if we want to take a look at this and if you notice the correlation between the bottle branding and the reservation app branding, it's very similar and we want it to be that way. But we also want it to be something that would be extensible and reusable in the future. We don't want to keep building all these one off apps. So we made that so we can just do a silo sheet change and going back and forth here, there's really no core differences, right? It's some minor styling tweaks where we change the image, we change the color scheme, you might change the border edges on the button. Again, that's pretty straightforward and pretty easy to do. So we're reusing this anytime that we do a bottle release now and that's been working really well for us. So who doesn't like to have some food with their beer? Brezhomon does not actually make their own food in-house but we do have a network of partner food trucks that do come by the brewery and those are on a weekly routine basis. So one of the new tasks now is creating the weekly food truck lineup menu or schedule rather, sorry. And this calendar has to be generated once a week, at the beginning of the week and constantly updates. So it can vary between month to month, turn to colors, we also need that multiple formats and we need it to be easily editable. This is something that we found ourselves wasting a whole lot of time on just because well going in to the show once a week, what really wasn't the best way to do this. So we made that form and now we're using our magic and our VG to generate these PNGs. You can put a Twitter message, post it to Twitter directly, put that on the bathroom displays, the website and download to post to Facebook too. When the brewery originally opened, the annex was something that was generally reserved for events now since opened up usually for people to go enjoy the brewers and the food in that space, however, is still available for a reservation. And one of the core issues that we found was the different ways people tried to reserve this area. Someone called, someone sent an email, so we ended up putting a form on the website so people could just put their request there. We processed them and have our own workflow around that. So they're full out, they click submit and then they're going to our internal source. The way that the general manager does things doesn't really correspond well with how we have the backend set up right now. So we have that piped into Trello and we're using Stripe to generate payment links so people can go ahead and pay the reservation fees online as opposed to having commands for a good credit card or the phone. This is a lot more secure in that respect and that seems to be working well for everyone in that way. This also is something that we're moving away from now with Trello being a third party service. We're actually revamping and rebuilding our own management system of those same cards in React and putting that in our backend software. With these rental requests, we also need to generate contracts. So that was something that the general manager was spending way too much time doing, filling out this person's name, here's when they want it and that's something that can easily be automated. We have that information. It's a pipeline from taking the information from the form, putting it in PDF. Why do we need a human to do that? That's something that we can automate. We won't be working smarter here, not harder. So now it's time for another hackathon. And this happens actually about a month and a half ago. And this is a news cycle where we want to do some physical stuff and some purely digital stuff. So let's have a look at the cold room. We don't get tours at Brugelman, but if you ever get a chance and you're invited to take a look at the cold room, you'll notice that it's something that was built by Matinee, so we didn't go out and pre-purchase one, which is kind of cool. It kind of goes to the DIY aspect of the brewery. So we have a bunch of kegs outside. There are more kegs inside the cold room, but there's also a piece of paper on the door. Any time a keg goes in or out, someone needs to initial that, okay, I made a change here and it was with this beer. The initial request was, okay, can we generate that piece of paper and have printed out? Sure, okay, that's easy. By the end of the month, now we have four pieces of paper that we need to reconcile. And let's say we have multiple locations, are we going to start generating all these different pieces of paper? That seems pretty wasteful. We want to do inventory management. Why don't we do inventory management instead of fixing this small problem? Let's tackle a big problem. So these are the new keg collars and you have the label there that gets generated. You also have a QR code now that gets generated. So now we can actually track where beer is and this is a much more extensible system where it's not limited to just beer. It can be other inventory management. It can be cases of growlers. It can be merchandise. That's flexible. That's extensible. So let's say we have a second cold room. Now we don't need to worry about that. We can just reuse this system. One of the other projects we have in the works is a mobile app. I'm not going to speak towards that today but that is something that we were definitely working towards and should be out hopefully in the summer. We did use Flutter for a quick and dirty kind of prototype of it and it worked pretty well. So I'd like to end with some eye candy here with the screensaver that we currently have running in the annex. So we have a nice high def screen and projector in the annex but it was always blank when there wasn't sports on. So we want something that was something that was pleasant to look at but not overbearing and distracting to the customers. This will also be hooked up to the backend system as well as untapped through a separate Rails app. We're going to break that out but essentially we're going to be able to push events that happen in the brewery, people drinking beer and have it affect the screensaver. So if you're ever there and you see different variations of the screensaver, you'll know someone did something to cause that. And that's kind of a cool thing where it's an art installation that is indirectly influenced by people drinking beer in the brewery. So yeah, at this point I'd like to talk about a limited Russian April stout that we released last February called the end. So that is Brezhelman and Nutshell. We're a very DIY friendly brewery where we'd like to build around solutions that fit our needs but also think forward enough and really try to ask ourselves what can we do to make this better without overcomplicating it and keeping things simple. Thank you for coming. At this point I'd like to open up to questions. All right. Well, thank you. Thank you.
 My name is Ben Shippey and I'm the tech director for Brewjohnman.  I do feel obligated to tell you all that there is no free beer at this talk, unfortunately.  So by show of hands, how many from Pittsburgh?  All right.  So mostly the southern.  That's great.  So I'm sure a lot of you are aware that Brewjohnman is a craft brewery located in Braddock, Pennsylvania.  This talk is going to focus on how we leverage technology at the brewery and how we've really  had a journey over the past three and a half years with our technical projects at the brewery,  including the menu board, our hackathons, and bring shout-ins to the new and exciting  areas in the brewery.  So let's talk a bit about Brewjohnman.  All right.  So Brewjohnman was founded by two senior graduates and they opened their doors in 2014.  There has been a recent craft beer explosion in Pittsburgh and we have close to 40 different  breweries either in the city or shortly outside the city.  So what makes Brewjohnman stand out?  The beer.  Well, two things, but mainly the beer.  Brewjohnman aims to create a soft balance and elegant beers and meaningful experiences  while helping revitalize the historic steel town of Braddock, Pennsylvania.  And they're doing a pretty good job of making the beers.  They're consistently rated highly.  This is a screenshot from Pace Magazine, which I'll quote this, this is the best, most complex  double IPA we had a chance to taste out of a whopping 176.  And that's nationwide.  So we're making some really awesome beer there and a lot of that credit goes to the Brewmaster  and Brewing staff as well as co-founders for the talent that they've managed to acquire.  So let's talk about the brewery.  Looks like typical of Brewhouse, you know, grain, hops, yeast and water go in, beer comes  out.  By show of hands, how many of you have been on a brewery tour before?  Wow.  Okay.  So none of this should surprise anyone here, right?  So he has some barrels.  We do barrel each beer.  Essentially, same thing, right?  We put the ingredients in, beer comes out, put that in a barrel, let's sit there for  a bit.  Some tours will occasionally talk about that.  Those tours we'll talk about, fermentation vessels, break tanks, keying equipment, cleaning  equipment and that's pretty similar to everything that you've seen so far, right?  And that's pretty standard.  Brewers might change it a little bit, but generally it's the same process.  And we're not going to talk about any of that today because automation here is expensive,  dangerous and best left to professionals, which I'm not a brewer technician in terms  of automating that level of sophistication.  So what are we going to talk about today?  What goes on here?  Because without the back office, we have a lot of beer, but we can't do anything with  it.  So this is the business side of the brewery.  And that brings me to the second reason why Brewers Gentlemen stands out, the core values.  So a lot of this comes from Japanese philosophy with Miyabi, Soshin, Kanzo and Kaizen.  The one that's throughout to me mostly is Kaizen, continual improvement, basically asking  ourselves what can we do to make things better and that brings us to the taproom.  So as you can see here, this is a shot from taproom and what you might notice first is  the digital menu board.  Now this is a shot from a couple of years back and when Brewers Gentlemen opened, they  had a digital menu board.  A lot of brews at the time, we're still using shock boards or any other way of doing it  that wasn't digital.  So that lets us have some interesting conversations.  So let's have a look at that.  I'll zoom in on that.  And this is more or less a mock-up of what that menu board held at the brewery.  So after a few tasers, I had a very fruitful conversation with Aisa, one of the co-founders  there.  And we got to talking about how they were doing this and what you told me kind of surprised  me.  It was an illustrator file that he'd export into an image format, put that on an iPod  and have the iPod pipe it to the TV.  Sounds horrible, right?  But it worked and that goes towards the DIY spirit of the brewery.  Now bear in mind, this is also pre-untapped before they launched their menu offerings.  So you kind of had to roll your own system at that point.  So just to break down that process a bit, tap change.  So that could be kegs kicked, new kegs added, Aisa has to create an image, images add to  the iPod, menu board's updated.  Now those two steps are a huge bottleneck, right?  How many of you have ever ordered a beer only to find out kegs kicked, you can't get it?  It's infuriating, right?  Because now you basically have to order a second beer and maybe, you know, if something  just happens, you just plan ordering two beers.  So having either stale or outdated information isn't great.  When the iPod has to be disconnected, we have no information on there.  So that's just not a good situation.  So I suggested put that on rails, right?  Because we got some other free benefits other than just like the real-time updates, but  also website integration.  So that changed the process to removing those bottlenecks.  Now any member of the bar sap could go in, update the list, and it'd be updated in real  time.  So now we have something that is guaranteed to be accurate up until, you know, you go  up to order and then you kick a keg and now we just need to change the body.  So with rails, it's a very modular web framework.  And what we're going to do is leverage the different engines and gems to really tie  it together.  One such gem was Active Admin.  So we have a custom Active Admin dashboard here and I'll zoom in on some of the sections  you can momentarily.  But basically it boils down to a very quick overview of unavailable beers and beers on  tap.  So beers on tap.  We can drag and drop these beers to reorder them if needed.  We have the icon, we have the name, we have the style, and the kicks.  You click the kick button and it goes out.  Really simple.  Likewise, unavailable beers, names, style, and click put on tap.  Now that is something that any member of the bar staff can do.  We don't need to have any specialized desktop software and it makes the entire process go  a lot easier.  Now the other benefits we get out of this.  We get beer database.  So now we have this persistent record of all the beers that we've brewed, pricing information  so we can go back and run LX on those.  The brewmaster can go in and enter all the details that, you know, you need to for either  the ABV, the tasting notes, the name, the style.  And creative can go in and put in the icon separately.  So now there's no ball neck wing on one person who can distribute the work.  Now I also mentioned the iPod.  Originally, we started out with a Chromecast, just proof of concept, making sure this works.  We already had one.  One of us had money and more hardware because at the time the brew just opened, we don't  want a lot of debt, either technical or not.  And eventually we moved to Razor Pies because those would be self-sustaining.  We don't need a laptop constantly pushing this to the TV and that worked really well  for us.  And as of today, we have four Raspberry Pi power displays in the brewery pulling from  the API.  So now we have the main board digital, but we also wanted to print it.  And we were able to generate PDFs whenever we needed to and print those and put those  on the tables in the taproom.  So that was a very nice benefit to make sure that the printed material matched the digital  material and keeping that all in sync.  So just a quick recap right now.  We have a Rails app.  It has a menu, it has a beer database, we have printables.  Where do we go from here?  Well we have a website integration at this point where it's more or less an iframe being  injected into the static site just because the static site predated my work with the  brew gentleman and we want to kind of keep that for the moment.  We decided to change that and make it a CMS-based system.  So we added refinery to the stack and that worked really well.  It allowed people to go in, edit content, and you can be edited.  The only issue was we had the blog on WordPress.  So how do we get from WordPress to refinery without spending any money?  Well any paid plan would allow us to do that, but we don't want to pay for those.  But what does WordPress give you for free?  An RSS feed.  So we're able to actually scrape all the RSS data, reformat it a bit, put it into the  refinery blog model, and save that and push it to the website in the format we want.  We do need to strip links because some of those are relative, but that's again a minor  trade off for being able to do this so quickly.  Now with this being a website that we're running, we can push the beer database live and have  people go in, explore different beers you make.  You can sort by seasonals, flagships, sort by tags.  And if you click on a beer, you get to see what the brewmaster has laid out for us.  We have some nice notes there on the tasting notes if you want to pair it with a beer.  And links to untapped beer advocate rate beer.  So basically we have a pretty sustainable compendium of all our beers and anyone going  to the website can explore them.  So at this point, this is about a year after I started working there and we decided to  have our first hackathon.  Now how many of you are familiar with the Balmer Peak?  Yeah, we're brewery so that only made sense.  So it was 24 hours, some technical staff, Matt and Ace the co-founders, and what that  entailed was a lot of beer code and power tools, which makes for a great night.  So one of the things that we built was a Raspberry Pi power display for the bathroom  site for a gentleman.  We can push our event details of beer and yoga, new ball releases, food truck calendars,  and that works pretty well.  Those are still in use at brewery today.  The Hue lights were an interesting little toy that we picked up and quickly realized  that we're there some problems with these.  While they are great for being able to turn them on and off with your phone, you can change  the color and stuff, having all these different mobile devices with all different bar staff,  we can't single the profiles.  So we made a custom active admin view for that and this is running on the laptop in  the brewery.  So the audio reactive scenes could take input through the laptop's microphone and push  that to the lights and pulse them accordingly.  And that worked really well for us for a little bit.  Eventually we ended up taking the Hue lights out because they were not that great in terms  of keeping the brewery focused on one thing and one thing only, making a certain beer.  So now we're here, back at the taproom.  We talked about the menu board briefly, we talked about the Hue lights, the Clover point  of sale system.  We did investigate integration into the menu board with that.  The problem is their API wasn't super friendly at the time.  Which would have been kind of cool because we know how many beers are in a keg, we know  how many beers are selling through Clover, we could put some real time metrics on, okay,  this is going to kick real soon.  Unfortunately their API didn't really support that.  But if we look over there on the right, we have these tags.  And these tags are what we use for our to go packaging.  So that could either be a swing top 750 milliliter grower or a full 64 ounce grower.  So let's zoom in a bit here.  This looks like the same information we have on the menu board largely, right?  So why should the creative staff have to do that by hand?  And especially because we don't know what beers are going to be selling in to go formats.  We don't want to print all these in head time, we need to be able to print these on demand.  So let's say a new keg goes on, well, now the creative has to go out and basically do  a lot of copypicing to get a sheet like this.  Using the prong PDF gem, we're able to generate all those.  So now anytime that there's a beer on tap, we can click print tags and bar staff can  just print the tags they need.  We don't need to have creative involved in that effort at this point at all.  So right now I've talked about a lot of things in kind of a short amount of time.  So let's take a step back here.  Here are all the features that we currently have in the Rails application so far.  And going back to the core values of what can we do to make this better and conzo simplification  and making sure that we only have what is essential there.  So beer database, that seems pretty essential to a brewery app.  Tap management, menu screens, that makes sense to keep.  Brower display management, that was a bit of a toss up for us because while those are  cool, they are in brewery and it's the same type of display as the menu screen really  where it's a Raspberry Pi powered and we push content to it.  So we decided to keep that.  As I mentioned, brewery lighting, we nixed that idea.  It just wasn't sustainable and it's a lot easier for something just to put lights on  and off.  We don't need a whole website to turn lights on.  Print menu generation, label generation, yeah, we'll keep those.  And CMS, this was something that was kind of a toss up for us too because we wanted  brewery staff to be able to manage their own website but we didn't want it to be so  heavily dependent on our own infrastructure and systems.  So eventually we did decide to nix that and move to Wix as the current platform is hosted  on there.  It's not a fantastic experience from a technical perspective working with Wix but we are managing  to pipe the data that we need to which is largely the food truck schedule and the tab  menu.  So these features, I like to call brewery driven features and now we are truly BDD, brewery  driven development.  So let's talk a bit more about VueTech because in this application of what we're doing, we  took a step back and we started looking at how we're actually doing these things.  So there's a migration path here from Rails server interviews to Angular reviews to React  reviews.  At this time we ripped out Active Admin and just unmounted the engine.  We kept all the core business logic in our models and services so we didn't really lose  anything.  We just needed to basically write our own Vue and Vue controllers at that point.  This was written on Angular 1 so over the course of the next year or so we also migrated  to React because the Angular 1, 2 and 4 didn't really sit well with us and React is just  so much nicer to work with.  No offense.  So that also allowed us to take time to look at the UI and UX of all this.  And now we have a much cleaner looking house software that I'll zoom in a bit.  So we have two tabs with journal and Braillex on it.  Only one is actually visible to the customer because we don't want duplicate information  to the customer but Barstaff does need to know that, hey, we have two tabs of this.  If one kicks you can go ahead and use the other one.  There's no issue there.  So we can toggle that.  We can also print tags, kick it and the edit functionality pops up in the modal window  now opposed to the active admin of having to dig through that review.  And that's close to that.  Super nice to work with and it's all reactive at this point.  So we click save, it propagates through the entire system and immediately up these tab  board.  So any kind of pricing changes or any other, like let's say we mislabeled the ABV, we can  update that in real time and how that pushed immediately.  So while we're doing all the UI and UX on the back end, that's great for people that  actually do this but how many people actually come in to use this versus to order beer?  So we started to refine the menu board a bit and what we realized is the way that we originally  had it was okay but there's a lot of wasted space in there, especially when we didn't  have that many beers on tap, which we did have some days where we would sell through  a lot of the beers just because we're a small brewery.  We couldn't make that much beer to sustain the demand there.  So with the menu board system, we were actually able to test this out in the brewery with  different customers and ask them which one they like better, look at how they were perceiving  the information, look at where their eyes were going and kind of see where the hangups  were.  So over the course of about 24 hours, this was a hackathon if you would, it was more  a refinement day where we all came together and said okay, we know we have some problems,  let's sit down, let's solve problems, let's make them simple and have some good solutions  come out of that.  So we worked through about four different menus there and that was something that was  bit of an eye-opener for us where we were always looking at the screen from a 69 perspective  without considering what if we rotated at 9 degrees.  And that was actually the solution that we came up with, was having a vertical list of  all the taps and pricing.  That worked really well.  Here's an updated screenshot from a brewery and there it is.  And that's how it is currently today.  That works really well for us.  It doesn't have the issues with the white space.  Everything is broken out in terms of flagship seasonals, one-offs and partners in terms  of just where it's placed on the menu board.  So just to recap, we've talked about drafts, the website, some of the back-end tech, but  we're missing one core feature here of the brewery, bottles.  Because chances are if you buy beer, you're going to be buying a bottle not from a brewery  directly just most of the time.  So there are two types of bottles that give relation to the brewery.  They're the ones that there are plenty of that you don't need to line up around the corner  for and then there are the ones that you need to reserve ahead of time.  So how many of you have waited in line for a bottle release?  It's not a great experience for waiting around the corner, lining up, and it's also not pleasant  for the brewery because now we have this massive influx of people.  So to handle that, we had a roller and solution.  But let's talk about the common case where we have plenty of these bottles.  We don't really care if people line up or not.  We want something similar to what we have with the menu board where it can be updated  from the same interface and pushed to a much smaller display in the brewery.  So we have an iPad just hanging out on the bar top now that has the menu for bottles  to go.  And that works pretty well for us.  It's the same information minus the icon.  So it's just a much more condensed version of the menu board, smaller and more focused  just the bottles.  So going to the limited releases now, as I said, we don't want people to be lining up  around the corner because then they're just hanging out there.  And while that's great for them to get the beer, it's not pleasant for all the other  patrons who don't want those bottles.  They're just kind of in everyone's way at that point.  So the other way people do this typically is having festivals where you can buy a ticket  and you have all day to go explore the brewery or park and whatnot.  That didn't really work for us either.  So we want something that was a bit more flexible and mindful of people's time that they would  be coming to the brewery and also the time that they would take to enjoy the beer.  So we came up with this.  It's a reservation system that we were able to roll out different allotments on a daily  basis.  And let's say we had 200 different bottles of beer that we could sell.  We're open from Wednesday to Sunday.  We had a big update with Sunday and we wanted to make sure that we didn't sell out of these  reservations on Wednesday.  So we split up.  So we had 50 available Wednesday, 50 available Thursday and you get the picture.  Now how do we manage that?  Without any back end intervention by the brewery staff.  We used some cron jobs so that way we just keep opening the signups that were available  and with the software you go and you pick your time slot and you get a nice little confirmation  on screen but also an email saying, hey, go pick up your beer this time.  You pay for it then.  And that worked really well for people because it also reminded them that, hey, I have this  thing to go to and if we didn't sell out all the beer, it would just be available in Tavern  for whoever came by after the last time saw the course.  So if we want to take a look at this and if you notice the correlation between the bottle  branding and the reservation app branding, it's very similar and we want it to be that  way.  But we also want it to be something that would be extensible and reusable in the future.  We don't want to keep building all these one off apps.  So we made that so we can just do a silo sheet change and going back and forth here, there's  really no core differences, right?  It's some minor styling tweaks where we change the image, we change the color scheme, you  might change the border edges on the button.  Again, that's pretty straightforward and pretty easy to do.  So we're reusing this anytime that we do a bottle release now and that's been working  really well for us.  So who doesn't like to have some food with their beer?  Brezhomon does not actually make their own food in-house but we do have a network of partner  food trucks that do come by the brewery and those are on a weekly routine basis.  So one of the new tasks now is creating the weekly food truck lineup menu or schedule rather,  sorry.  And this calendar has to be generated once a week, at the beginning of the week and constantly  updates.  So it can vary between month to month, turn to colors, we also need that multiple formats  and we need it to be easily editable.  This is something that we found ourselves wasting a whole lot of time on just because  well going in to the show once a week, what really wasn't the best way to do this.  So we made that form and now we're using our magic and our VG to generate these PNGs.  You can put a Twitter message, post it to Twitter directly, put that on the bathroom  displays, the website and download to post to Facebook too.  When the brewery originally opened, the annex was something that was generally reserved  for events now since opened up usually for people to go enjoy the brewers and the food  in that space, however, is still available for a reservation.  And one of the core issues that we found was the different ways people tried to reserve  this area.  Someone called, someone sent an email, so we ended up putting a form on the website so  people could just put their request there.  We processed them and have our own workflow around that.  So they're full out, they click submit and then they're going to our internal source.  The way that the general manager does things doesn't really correspond well with how we  have the backend set up right now.  So we have that piped into Trello and we're using Stripe to generate payment links so people  can go ahead and pay the reservation fees online as opposed to having commands for  a good credit card or the phone.  This is a lot more secure in that respect and that seems to be working well for everyone  in that way.  This also is something that we're moving away from now with Trello being a third party  service.  We're actually revamping and rebuilding our own management system of those same cards  in React and putting that in our backend software.  With these rental requests, we also need to generate contracts.  So that was something that the general manager was spending way too much time doing, filling  out this person's name, here's when they want it and that's something that can easily be  automated.  We have that information.  It's a pipeline from taking the information from the form, putting it in PDF.  Why do we need a human to do that?  That's something that we can automate.  We won't be working smarter here, not harder.  So now it's time for another hackathon.  And this happens actually about a month and a half ago.  And this is a news cycle where we want to do some physical stuff and some purely digital  stuff.  So let's have a look at the cold room.  We don't get tours at Brugelman, but if you ever get a chance and you're invited to take  a look at the cold room, you'll notice that it's something that was built by Matinee,  so we didn't go out and pre-purchase one, which is kind of cool.  It kind of goes to the DIY aspect of the brewery.  So we have a bunch of kegs outside.  There are more kegs inside the cold room, but there's also a piece of paper on the  door.  Any time a keg goes in or out, someone needs to initial that, okay, I made a change here  and it was with this beer.  The initial request was, okay, can we generate that piece of paper and have printed out?  Sure, okay, that's easy.  By the end of the month, now we have four pieces of paper that we need to reconcile.  And let's say we have multiple locations, are we going to start generating all these  different pieces of paper?  That seems pretty wasteful.  We want to do inventory management.  Why don't we do inventory management instead of fixing this small problem?  Let's tackle a big problem.  So these are the new keg collars and you have the label there that gets generated.  You also have a QR code now that gets generated.  So now we can actually track where beer is and this is a much more extensible system  where it's not limited to just beer.  It can be other inventory management.  It can be cases of growlers.  It can be merchandise.  That's flexible.  That's extensible.  So let's say we have a second cold room.  Now we don't need to worry about that.  We can just reuse this system.  One of the other projects we have in the works is a mobile app.  I'm not going to speak towards that today but that is something that we were definitely  working towards and should be out hopefully in the summer.  We did use Flutter for a quick and dirty kind of prototype of it and it worked pretty well.  So I'd like to end with some eye candy here with the screensaver that we currently have  running in the annex.  So we have a nice high def screen and projector in the annex but it was always blank when there  wasn't sports on.  So we want something that was something that was pleasant to look at but not overbearing  and distracting to the customers.  This will also be hooked up to the backend system as well as untapped through a separate  Rails app.  We're going to break that out but essentially we're going to be able to push events that  happen in the brewery, people drinking beer and have it affect the screensaver.  So if you're ever there and you see different variations of the screensaver, you'll know  someone did something to cause that.  And that's kind of a cool thing where it's an art installation that is indirectly influenced  by people drinking beer in the brewery.  So yeah, at this point I'd like to talk about a limited Russian April stout that we released  last February called the end.  So that is Brezhelman and Nutshell.  We're a very DIY friendly brewery where we'd like to build around solutions that fit our  needs but also think forward enough and really try to ask ourselves what can we do to make  this better without overcomplicating it and keeping things simple.  Thank you for coming.  At this point I'd like to open up to questions.  All right.  Well, thank you.  Thank you.
Ales_on_Rails_0_155.png Ales_on_Rails_156_1451.png Ales_on_Rails_1452_2255.png Ales_on_Rails_2256_4295.png Ales_on_Rails_4296_4379.png Ales_on_Rails_4380_7823.png Ales_on_Rails_7824_8447.png Ales_on_Rails_8448_9035.png Ales_on_Rails_9036_9431.png Ales_on_Rails_9432_10919.png Ales_on_Rails_10920_11279.png Ales_on_Rails_11280_12659.png Ales_on_Rails_12660_13859.png Ales_on_Rails_13860_14339.png Ales_on_Rails_14340_14795.png Ales_on_Rails_14796_15263.png Ales_on_Rails_15264_16931.png Ales_on_Rails_16932_17543.png Ales_on_Rails_17544_17867.png Ales_on_Rails_17868_20531.png Ales_on_Rails_20532_21671.png Ales_on_Rails_21672_21815.png Ales_on_Rails_21816_25031.png Ales_on_Rails_25032_27047.png Ales_on_Rails_27048_27803.png Ales_on_Rails_27804_28727.png Ales_on_Rails_28728_29783.png Ales_on_Rails_29784_30383.png Ales_on_Rails_30384_31475.png Ales_on_Rails_31476_33755.png Ales_on_Rails_33756_34271.png Ales_on_Rails_34272_35963.png Ales_on_Rails_35964_36551.png Ales_on_Rails_36552_37343.png Ales_on_Rails_37344_38747.png Ales_on_Rails_38748_38903.png Ales_on_Rails_38904_38951.png Ales_on_Rails_38952_39083.png Ales_on_Rails_39084_39287.png Ales_on_Rails_39288_40019.png Ales_on_Rails_40020_40739.png Ales_on_Rails_40740_40883.png Ales_on_Rails_40884_40931.png Ales_on_Rails_40932_40997.png