Record Rack in a nutshell

Record Rack official logo

Chase the vision, not the money; the money will end up following you.

Tony Hsieh, Zappos CEO
Poem: Rack to the rescue
Inventory tracking by the books is such a pain;
For every sale I make, I have to calculate the gain.
But apps like Record Rack have saved the day, it's such a hack;
It solved my tracking issues and have shown me where I lack.
Even on vacation, I can keep up with my business,
Track goods with precision and know my profit any instant!

Record Rack is the first "big" project I've ever worked on. It would be the first application tailored towards solving actual (paying) customer needs. Before then, I just coded for a hobby and to solve my own problems. The Record Rack project would change all of that.

In this post, I'd like to talk about Record Rack: its purpose, its history, and its evolution.

The problem

Meet Jane Doe.

Jane owns a retail shop in Nigeria. She sells rice, beans, noodles, can tomatoes, pasta, flour, oil, garri, and a lot of other raw ingredients you would find in your kitchen.

From Monday to Saturday, Jane would drive to her shop to monitor all operations that took place. She paid a staff of 5 to sell goods, attend to customers and ensure that the items she had in stock were well accounted for.

As the years went by, the shop only got bigger and more profitable. She tried to open multiple shops in various locations but had to close them down because of theft from her very own staff in those shops. She had seemingly reached an impasse.

And though her business seemed to be at its peak since she's started, it was plagued with unspoken problems:

  • All transactions were written on paper, making transactions error-prone and slow. Customers also had to wait long times, leading to some leaving for other nearby shops.
  • Receipts were written by hand by her staff, making each transaction take longer. The copy of receipts were done by literal carbon copy.
  • At the end of the day, all money made and stock sold (or purchased by the business) had to be balanced. Balancing the accounts involved counting the stock to make sure the quantity is correct and ensuring the money made equals the money documented. Since this was done at the end of the day, workers had to leave late on days where miscalculations happened or a lot of money was made1.
  • Jane was unaware when stock items were low or sold out, making it harder to satisfy customers reliably.
  • Jane had no way to measure what stock items sold well or which ones she made the most profit from without measuring it herself from the books.
  • Jane had to rely on staff to report the right numbers.
  • If any of the books used for taking records was lost, there was no backup.
  • Debtors and creditors were loosely tracked in a book. Looking up old records was hard.
  • Recurring customers were not tracked. If they were, the business can decide to offer discounts.

Record Rack to the rescue!

Out of all the pain mentioned above, Record Rack wore its cape and offered to save the day ๐Ÿฆธ!

From hearing all these issues faced by Jane, my business partner and I rose to the challenge. We were laser-focused on making a software that could solve Jane's problems and the many local retailers that face similar issues.

This ultimately led to the creation of Record Rack.

Record Rack is an inventory management software made with the pain of the Nigerian retail entrepreneur in mind:

  • It tracked all the stock items sold and purchased.
  • Jane was kept up-to-date on all inventory changes and transactions through a mobile app we provided; she no longer was required to visit her shop to monitor operations.
  • Sale transactions were much faster and all receipts were printed by the software. Jane's revenue increased.
  • It tracked other income (i.e. income that was not made from stock items).
  • It tracked all business expenses.
  • It notified the user when a product was low in stock or sold out.
  • It allowed users to edit created transactions (useful for customers who needed changes).
  • It tracked debtors and creditors, along with each payment made, the deadline for payment and how much was left to pay.
  • It supported subunits, allowing users to track goods with multiple units. For example, a carton of noodles can be sold by the sachet instead of the full carton.
  • Recurring customers could be tracked and therefore rewarded.
  • It used a simple interface. This was important in getting her staff up to speed quickly.

If business is all about relieving pain ๐Ÿค•, Record Rack was definitely the Tylenol ๐Ÿ’Š.

The official Record Rack logo: Record Rack official logo

Background used in the main Record Rack application: The Record Rack application's background

Notifications showing items low in stock: The Record Rack application showing items that are low in stock

Newer version of the notifications showing items low in stock in red: The Record Rack application showing items low in stock in red

"Manage debtors/creditors" window: The "Manage debtors/creditors" window in the Record Rack application

"Manage users" window: The "Manage user" window in the Record Rack application

Multiple sale and purchase windows: Multiple sale and purchase windows open in the Record Rack application

Multiple sale windows: Multiple sale windows open in the Record Rack application

First summary page: The old summary page in the Record Rack application

Revised summary page: The new summary page in the Record Rack application

Old "User Privileges" window: The old "User Privileges" window in the Record Rack application

Revised "User privileges" page: The new "User Privileges" window in the Record Rack application

Add a note to a new sale entry: Dialog in the Record Rack application that allows you to enter notes concerning a transaction

The notification widget: The notification widget in the Record Rack application, keeping users up-to-date

Windows load independent of others: The Record Rack application with different windows open; each can load without blocking the UI

Highlighted terms for quick search: Searched terms are highlighted in the Record Rack application

Alternate summary page: Alternate summary page in the Record Rack application, displaying the end-of-day report

Another alternate summary page: Alternate summary page in the Record Rack application, displaying the end-of-day report

Another alternate summary page: Alternate summary page in the Record Rack application, displaying the end-of-day report

Show detailed quantity breakdown using the subunits: The Record Rack application displaying of quantities in their subunits

List of sale entries for the day: The Record Rack application showing all sale entries made for the day

Miscellaneous details about the project

  • Date started: September 2013
  • Initial release date: ~ March 2014
  • Stable release date: ~ May 2014
  • Customers: 1
  • Used between: 2014 - 2022
  • Released as a desktop app and a mobile app

Tech stack used

Record Rack Epsilon

After I left Nigeria, I worked in in-flight entertainment2 for a couple years and I decided to work on a new version of Record Rack. This version was created to:

  • Address all the bugs of the previous version.
    • There was a lot of rounding errors, since I stored floating point numbers for subunit quantities. (I know, rookie mistake ๐Ÿ™ˆ).
    • There were random crashes.
    • Some days, the application wouldn't record some quantity changes.
  • Make the look-and-feel of the application more modern.
  • Update the UI code to use QML instead of C++, since QML was better for rapid application development.
  • Write better code. The last version's code was monstrous!3.

Unfortunately, this version was canned, but it did teach me a lot about C++/QML development and separating UI and logic.

Testing Chart.js (excuse my French in the image ๐Ÿ™ˆ):

Record Rack Epsilon application with a few charts displayed

Same screen with a more defined sidebar (excuse my French in the image ๐Ÿ™ˆ): Record Rack Epsilon application with charts and full sidebar displayed

Our company name and logo, Gecko Solutions: Gecko Solutions official logo

Login screen: Login screen for Record Rack Epsilon

Login screen with access granted dialog: Login screen for Record Rack Epsilon with access granted dialog

Login screen with access denied dialog: Login screen for Record Rack Epsilon with access denied dialog

Login screen with access granted message (revised design): Login screen for Record Rack Epsilon with access granted message instead of dialog

Login screen with access denied message (revised design): Login screen for Record Rack Epsilon with access denied message instead of dialog

Stock page with a product list: List of products in Record Rack Epsilon

Dashboard page: Dashboard page in Record Rack Epsilon displaying charts

New stock item page (though it says "New Sales Entry" ๐Ÿ™ˆ): New stock item page in Record Rack Epsilon, though "New Sales Entry" is displayed as the title

New sales home page: Sales home page in Record Rack Epsilon

New sales entry page: New sales entry page in Record Rack Epsilon

Stock page with extended sidebar: Stock page with the fully extended sidebar in Record Rack Epsilon

Stock page with collapsed sidebar (ignore the Spider-Man background ๐Ÿ™ˆ): Stock page with the sidebar collapsed in Record Rack Epsilon

Old login screen vs new login screen (ignore the Spider-Man background ๐Ÿ™ˆ): Login screen of both old version and new version placed side by side

Old access denied screen vs new access denied screen (ignore the Spider-Man background ๐Ÿ™ˆ): Login screen with access denied message of both old version and new version placed side by side

Old access granted screen vs new access granted screen (ignore the Spider-Man background ๐Ÿ™ˆ): Login screen with access granted message of both old version and new version placed side by side

Old login screen vs new login screen (ignore the Spider-Man background ๐Ÿ™ˆ): Loading login screen of both old version and new version placed side by side

Old main screen vs new main screen (ignore the Spider-Man background ๐Ÿ™ˆ): Main screens of both old version and new version, with new version placed a little over old version

Old "New Sales Entry" page vs new "New Sales Entry" page with prompt: "New Sales Entry" page of both old and new version placed side by side, the new version showing a prompt

Old "New Sales Entry" page vs new "New Sales Entry" page without prompt: "New Sales Entry" page of both old and new version placed side by side

Old stock page vs new stock page: "Manage Stock" page of both old and new version placed side by side

Old main screen vs new dashboard page: Main screen of both old and new version placed side by side

Login page (again): Login page for Record Rack Epsilon

Sales home page: Sales home page for Record Rack Epsilon

Sign up page: Sign up page for Record Rack Epsilon

Sign up page with picture selected: Sign up page for Record Rack Epsilon with picture selected

Stock grid view: Stock grid view in Record Rack Epsilon

Old stock page: Old stock page from the original Record Rack application

Miscellaneous details about the project

  • Date started: ~ November 2015
  • Date ended: ~ November 2018
  • Release date: Never released
  • Created as a desktop app
  • Eventually abandoned

Tech stack used

Record Rack Paper: Yet another version

I stopped Record Rack Epsilon because I got distracted. Plus, it lacked some solid UI patterns like the first version. The first Record Rack used the widgets library from Qt, making the look and feel more consistent. Epsilon used QML, which encouraged you to code the UI yourself from scratch at the time.

Building Epsilon from scratch was kinda hard. Mind you, at the time I knew nothing about typography, colors, spacing, nothing! My shortcomings were revealed in my final design. (Check the Epsilon gallery above.)

So for this version, I chose to use Material Design by Google instead. With the help of a QML library I found on GitHub (called Fluid), I decided to start Record Rack (again) from scratch. This time, I would use more of my experience and all the best practices I've learned over the years.

This was definitely my best attempt, compared to previous years.

Unfortunately, I don't have any pictures of this lying around. If I could get it to compile again, I'll update this section.4

Miscellaneous details about the project

  • Date started: ~ January 2019
  • Date ended: ~ November 2020
  • Release date: Never released
  • Created as a desktop app (to be ported to mobile)
  • Eventually abandoned

Tech stack used

Record Rack: To infinity, and beyond!

On October 2025, my college colleague and I decided to give it one more go. We observed that the market is still vacant in Nigeria, and since we've done it before, we believe we could do it again. However, this time, we are much more knowledgeable in our crafts (we both code) and the market needs. My colleague also has connections to some of the businesses that would be interested, so we decided to get back to the Rack!

Over the course of the year, I'll update you on how things are going. Right now, we are still ironing out bugs and features, but we plan to release soon. By the time we release, I would blog more about how that is going. The main focus is to make a product and get it out there as soon as possible so we can get user feedback quickly and iterate.

List of products: List of products in the latest Record Rack

"New Sale Entry" page: "New Sale Entry" in the latest Record Rack

"New Sale Entry" page with cart items: "New Sale Entry" with cart items in the latest Record Rack

"Stock" home page: "Stock" home page in the latest Record Rack

List of income entries: List of income entries in the latest Record Rack

"Reports" page: "Reports" page in the latest Record Rack

"Stock Reports" page: "Stock Reports" page in the latest Record Rack

Miscellaneous details about the project

  • Date started: October 2025
  • Release date: To be determined
  • Created as a PWA (supported by all platforms a browser can run on)

Tech stack used

The bottom line

In summary, Record Rack is dead; long live Record Rack! ๐Ÿ‘‘


  1. Almost like they were punished for making more money.ย โ†ฉ

  2. Shout out to Thales ๐Ÿ›ซ!ย โ†ฉ

  3. I guess I should have expected it, being an amateur at the time.ย โ†ฉ

  4. This is why I chose the current stack for the latest. I hated having to recompile and with newer versions of Qt, though my functionality hadn't changed. This is part of the reason why web code "lasts forever" compared to native code.ย โ†ฉ

Reply via email ๐Ÿ“จ