Bartap

Manage products, orders and bills of your bar on a personal level

February 2024 ↬ present
Original API Original Front-end Microservices API PWA Front-end

Bartap

Bartap is a hobby project I developed in collaboration with a great developer and friend of mine, Jort Willemsen.

Having a private bar with a beer tap, refrigerators and many rows of liquor gets messy to manage. This project aims to reduce manual labor when drinking with a group of friends. The system can be used to manage an inventory of all these drinks, add information, and add prices. Every drinking session with friends, the host can digitally assign drinks and calculate the total afterwards. Bar owners can track who has paid their bills and manually check off the payments.

Design

We modelled the concept into a domain model to plan out the structure of the system. The core domain concepts we decided on were the bar, products, session, bills (with orders), and the people. This was the very first version of our system.

Model of back-end domain (v1.0)

Model of back-end domain (v1.0)

We developed the front-end (Jort) and back-end (Me) in parallel during our bachelor over the course of a couple of years. The front-end was developed using React Native to allow direct compilation to mobile applications. The back-end API was written using Java and Spring Boot. We started with the initial design and expanded it over the years.

Release 1.0

The first full version of the system included functionality for just the bar owner.

  • Managing drinks and their prices
  • Managing drinking sessions
  • Managing customers and their bills
  • Managing the payments between the customers and bartender

Testing the first release under in our friend group, we got a positive response. Since then we kept adding different features for the bar and customers.

Release 2.0

We soon followed with roles for different users. Aside from the bar owner there were no other users. People could now create a customer account and the bar owner can assign customers as bartenders, giving them the ability to manage drinking sessions.

We continued on the project to increase the usability for customers. Customes can now see their current and past bills, as well as the amount of money they still owe a bar. Simple user statistics were also added. These show the user what their most popular drink is, how much they have spent in total at a bar, and also the largest bill they have ever gotten.

Experimental RFID

Later on we experimented with some fun concepts. With the help of Daan Kerbusch we created a concept version of RFID functionality. Using RFID tags and some experimental code on an Arduino Nano made by Daan, we made a small device for displaying information. It had a small black and white screen used to display text. When a customer scans their RFID tag, they are automatically added to the session. Scanning again will show their current bill total. On idle it will just show the bar name.

Remake

Micro Services

Influenced by my back-end oriented bachelor, I decided to remake the back-end using micro services. My aim was to get more familiar with event driven systems and microservices. In this version I adapted many design patterns including CQRS, Entities, Value Objects, and much more. A lot of these were inspired by the Domain Driven Design way of working.

Having attempted this conversion, it became inevitably clear that micro services are overkill for the small scale of this project. After many weeks of work, I got it tested and working. This version also housed some of the newer functionality of the system.

Progressive Web App

During the same period Jort revamped the front-end. He moved aside the native approach and switched to TypeScript. Using the nifty features of web workers, Jort ported the front-end to a Progressive Web App. Removing the restrictions for native compilation eased the front-end development a bit. A positive of this approach is that it still allows mobile users to install the application, albeit wrapped inside a browser application.

Screenshot of Progressive Web App (mobile)

Screenshot of Progressive Web App (mobile)

If you are interested, you can find all of the repositories on Github.