All work

Rara Labs

Redstone: AI Back Office for Retail & Fuel

A store owner's numbers live in four systems that disagree with each other. Redstone gets them to agree.

Year2023 — 2024
RoleFrontend Developer
ScopeSales, invoicing and reconciliation workspace
Overview

Redstone is an AI back-office platform for retail fuel and convenience businesses: gas stations, c-stores, smoke shops and lottery retailers. It brings fuel sales, POS transactions, supplier invoices and accounting into one system, so owners can see profitability without doing the reconciliation by hand. I worked closely on the frontend and reviewed the work as it shipped.

The challenge

One store produces data in several systems that rarely agree. The POS says one thing, the payment methods say another, the supplier invoice says a third. Owners were reconciling that by hand in spreadsheets, often across more than one location. The interface had to make a disagreement visible at the row where it happened, and stay quick over long lists of invoices.

What I did
  • Built the invoice grid on TanStack Table against a dataset that does not fit in memory. Filtering, sorting and pagination run on the server and map onto query keys, rows virtualize, and multi-select persists across pages so a bulk action can span an entire filtered set instead of one screenful.
  • Tuned the fetching so the workspace stays quick over long invoice lists. Cached pages are reused when someone steps back through a filter, the next page is prefetched while the current one is read, and opening the inspector reads the row already in cache instead of refetching it.
  • Held the workspace state in Zustand: the active store, the filter set, the row selection and the open inspector each live in their own slice with selector-based subscriptions, so paging through invoices does not rerender the charts above them.
  • Handled the master-detail layout in code, where an inspector panel opens beside a virtualized table. Both panes scroll independently, the table keeps its header and its scroll position when the panel opens, and the layout collapses to a single column on narrow screens without losing the selected row.
  • Surfaced reconciliation inside the invoice itself. The difference between the method-of-payment total and the item total is its own field, so a mismatch shows up at the point where someone can correct it.
  • Wired multi-store into the shell with a store switcher at the top level, so the same screens serve one site or a chain, and added command-palette search and shortcut keys for people who sit in the product all day.
Outcome

Owners get one place to answer a plain question: did this store make money today. The reconciliation that used to happen in spreadsheets now happens in the product, on the row where the numbers disagree.

Built with
Frontend
ReactTypeScriptData tablesCharts
Domain
POS dataReconciliationMulti-storeAccounting

Want the walk-through? The fastest way to reach me is email.