Mar 14th, 2023
RentSoft was a custom cloud application that ran the day-to-day business at Top Hat Video, one of the last brick and mortar video rental stores to survive the Netflix age. RentSoft included a point of sale terminal with Stripe integration, a rentals and returns manager, a suite of business report dashboards, and reservations system. I built it along with two friends that I'd known since elementary school, Joe Wesemann and Spencer Dixon, who also worked with me to build The Campus Market.
Top Hat Video was a local institution in our community, and they'd managed to stay in business over the years due in large part to their cult following. Spencer was a proud member of that cult and had worked at Top Hat since high school. After high school he was only able to go into the store on the weekends, but he'd never miss the opporutnity to assist customers and offer movie recommendations. Since he had worked in the store for 10+ years he was intimately familiar with the software the business used; a Windows application that only worked on a few computers connected to an Access database running on a machine in the back room. The developers who had created the software hadn't actively worked on it in years, so the issues Top Hat dealt with on a daily basis weren't going to be fixed anytime soon.
This is a screenshot of the old software Top Hat was using, pretty isn't it?
I was looking for another project to work on after we shut down The Campus Market, and there was clearly room to improve the current software Top Hat used. However, after seriously looking into it we quickly realized building something from scratch would be the better option. Spencer easily convinced the owners that a new system would benefit the business so we agreed to build a new web app with the below features. But by the time we launched the list of features and scope of RentSoft had grown dramatically.
Before we could start building anything we had to understand how the old software structured the data since we'd have to migrate customer, item, and rental data into our new application. Long story short, it was a mess. The old software seemed as if it had been built for a completely different use case and then adapted to rentals. I spent days working on Python ETL scripts to manipulate the data into a structure that would allow us to build the new application with modern features. But the worst part of the data migration was launch night. When we moved Top Hat onto RentSoft, we had to use the most up-to-date data to ensure that all of the rentals and returns were imported correctly. To do that we had to wait until the store closed, export all of the data, run the ETL sripts, import the newly cleaned data into our database, and launch RentSoft before the store opened in the morning. Of course that night didn't go smoothly, and we were at Top Hat until 4:30am. But we got it done.
3:28am on launch day attempting to migrate Top Hat data into RentSoft.
At Top Hat each customer was tied to an account. Typically an account represented a family but the old software was setup in a way that only allowed 3 customers to be tied to an account. That resulted in families sharing accounts and the data couldn't show exactly who was renting what. We fixed all of that and added a bunch of improvments. On the account details page you could view all of the customers tied to an account along with their pictures (used to verify identity when renting). Additionally you could view all of the account information and history in one place. This included rentals, fees, credits, transactions, reservations, and more.
You could also edit and make changes to an account such as updating an address or phone number, gifting a free rental for a loyal customer, modifying a reservation, or adding a note to the account for other employees to see.
The account details page, all account information in one place.
Top Hat rented a massive library of movies and video games that were in a wide variety of formats (DVD, VHS, Bluray, Xbox, Playstation, etc.) Representing the relationship between a Title/Disc/Format/Rating properly within our software was critical and the foundation of RentSoft.
On the item details page you could view all of the discs associated with a title, including their rental status and location within the store. You could manage those items and the title on this page, and we integrated with various external APIs to pull in additional information about the title in case a customer wanted to know more before renting.
The item details page, all item and title information in one place.
The Point of Sale (POS) component was the most complicated aspect of RentSoft. Not only did we have to calculate totals using various tax rates, but we had to tailor the checkout process to their existing processes. Examples include:
Integrating with Stripe for credit card payments was the easiest part of the POS, though we also had to upport payments in cash and by check.
The Point of Sale page where the money was made.
I can still remember laughing when Spencer explained to me how the old software handled reservations. You could only make a reservation for a specific disc rather than any disc that matched the title and format criteria. So if you made a reservation for the newest Marvel movie disc number 12345 and it was returned late, the customer would wait weeks for disc number 12345 while other discs of the same movie were sitting on shelves in the store. And to match an item to a reservation the employees had to manually consult the reservation list while checking in items, so if they saw one that was reserved they set it aside.
We made sure to structure our database in a way that you could make a reservation for a title (i.e. Iron Man 2) and that reservation could be fulfilled by any Iron Man 2 disc. And when a matching item was returned, it was automatically assigned to a pending reservation and if you tried to rent it to anyone other than the account with the reservation you were denied.
In addition to showing reservations, the reports component displayed a list of various custom reports used by the business. Some of them were financial reports for end of month sales tracking, and others were used day-to-day in various processes.
The reservations report that showed all future reservations.
We were also asked to create a new customer facing website that could tie into RentSoft and allow future improvements to give customers control over their account online. The two features they wanted initially was the ability for customers to search for an item and the ability to display recently added items.
Customers could go to the Top Hat website and search for items before coming into the store.
Customers could view items that have been recently added to the Top Hat library.
Building software from scratch for a business that was going to be entirely dependent on us was a daunting task. The stakes were much higher than with The Campus Market, and the lessons learned were very different.
Just because something has been done that way in the past doesn’t mean it’s the best way to do it now.
Don’t start by building something complex, start simple and then build up from there (easier said than done).
Make sure everyone understands the vision, engineers make much better technical decisions when they have context.
Don't forget to plan for the data migration!
Stakeholder/Business Management is always harder than I want it to be.
Top Hat was in business for 40 years, but eventually closed its doors in 2023.
The improvements we made to their business processes, and the money we saved them on credit card transaction fees likely prolonged Top Hat's life by at least a few years. But as they say, all good things must come to an end.
We got a check every month from Top Hat, but the amount of money we made pales in comparison to the hours we put into building RentSoft. We started with ambitious plans: after building a proof of concept and using Top Hat as our pilot store, we aimed to expand to other industries such as heavy equipment rentals, libraries, tool rentals, etc. But life got in the way, and by the time Top Hat was closing its doors we decided we didn't want to pursue the idea further.