Joswell Ledger; Replacing a spreadsheet that lost sales

A family run store outgrew its Google Sheet the day a formula quietly stopped counting sales. Joswell Ledger replaced it with role based sales recording, approvals and one source of truth the whole team can trust.

Product Design
AI Product Engineering
Retail
Joswell Ledger desktop dashboard shown with the mobile Home and Approvals screens
01/ The spreadsheet that stopped counting

What Joswell Ledger is about

‍

Joswell is a family run retail and wholesale store in Nigeria that sells mostly drinks, by the crate and by the bottle. For months, every sale, restock and credit lived in a Google Sheet.

‍

Then one day the numbers stopped adding up.

‍

The Daily Sales total used =SUM(G2:G101). Once sales went past row 101, every new one was left out of the total. No error. No warning. The sheet showed ₦242,715 when the real figure was ₦352,315. That was the moment the spreadsheet stopped being something we could trust.

‍

Joswell Ledger is the web app that replaced it: every total is calculated, never typed.

Role
Product Designer & AI Product Engineer
Duration
September 2026 to present
Deliverable(s)
Progressive web app for mobile and desktop
Tools
Figma, ChatGPT, Claude Code, React, Fastify, Neon Postgres, Vercel, Railway
02/ Where the sheet was breaking

Understanding how the store actually runs

‍

Before designing anything, I went through the sheet and the way the store works day to day.

‍

What I found:

  • Totals were worked out by hand, so one wrong range or missed cell changed the whole day.
  • Sales, restocks, credit and stock lived in separate places and never updated each other.
  • Small entry gaps crept in, like a sale saved without its unit price.
  • There was no way to trace where a dashboard total came from.
  • Crates and bottles sell at different margins, so a bottle price can't just be the crate price divided by 24.

‍

The store didn't need a smarter spreadsheet. It needed a ledger where the numbers check themselves, and where nothing becomes permanent until the right person says so.

Joswell Ledger Add sale screen recording crates and bottles at separate prices
03/ Designing a ledger the team can trust

Decisions that kept the numbers honest

‍

I designed every screen in Figma, then built it with AI doing most of the coding. ChatGPT handled most of the first implementation, and I now use Claude Code for cleanup and new features. I owned the product direction, the PRD, the roadmap, the branding and the production setup.

‍

Calculated, never typed:
Totals, balances and stock are always worked out by the app. Nobody can type a number that disagrees with the records behind it.

‍

Crate and bottle prices stay separate:
Each product has its own crate price and bottle price, because they carry different margins. The app never guesses one from the other.

‍

Three roles, one approval flow:
The Admin runs setup and analytics. The Store Manager runs the daily ledger. Store Staff create drafts and submit them. Drafts only become permanent once the Manager or Admin approves them, and a rejection comes with a reason so the entry can be fixed and resubmitted. The roles are enforced on the server, not just hidden in the interface.

‍

One entry, no double work:
A credit sale creates both the sale and the customer's credit record in one step.

‍

Reliability before features:
Database migrations run by hand, so a routine deploy can never quietly change the data. Offline mode, multiple branches and an AI copilot all wait until the basics have months of real data behind them.

Store staff drafts screen next to the manager approvals queue in Joswell Ledger

Some of my favorite screens

Joswell Ledger Home screens for the store manager and store staff

Home

‍

The day at a glance

‍

Today's sales, quick actions and anything that needs attention, like low stock or entries waiting for approval. The first thing the team sees when they open the app.

Sales

‍

Crates and bottles in one entry

‍

Record crates and bottles sold, each at its own price, then pick cash, transfer or credit. The total is calculated as you go, so nobody does sums in their head at the counter.

Joswell Ledger Sales list and Add sale screens
Joswell Ledger approvals queue and reject reason screens

Approvals

‍

Nothing permanent without a second look

‍

Staff drafts land here for the Manager or Admin. Approve it and it becomes a permanent record. Reject it and the reason goes back to staff so they can correct it and resubmit.

Inventory and restock

‍

Stock that updates itself

‍

Every restock and sale moves the stock count automatically, with estimated value and low stock status per product. No separate stock sheet to keep in sync.

Joswell Ledger Inventory and Restock screens
04/ What changed for the store

From a sheet nobody trusted to one source of truth

‍

Joswell Ledger went live in the store in late September 2026. From cutover, it became the system of record and the Google Sheet was retired for new entries.

  • The whole team works in it, each with their own permissions: Admin, Store Manager and Store Staff.
  • On one recorded day, the store logged 26 sales entries through the app.
  • Moving the API closer to the database cut response times from about 1,350ms to between 26 and 80ms, a difference you can feel in use.

‍

What broke, and what I learned

A billing issue on the hosting side once blocked logins. I fixed it and added usage alerts so it can't sneak up again. The API also started out in San Francisco while the database sat in Frankfurt, which is where that slow response time came from.

The lesson: when real money runs through an app, boring reliability work matters more than the next feature.

‍

What's next
  • General products beyond crates and bottles, requested by the store manager. Think a tin and a carton of milk, or a pack and a carton of noodles, all tracked in one base unit underneath.
  • Nightly backups with a tested restore.
  • Low stock thresholds set per product.

‍

The goal was never to build software for its own sake. It was to make sure every sale the store makes actually gets counted.

Joswell Ledger Admin home screen
Joswell Ledger desktop Sales page
Joswell Ledger desktop Inventory page
Joswell Ledger desktop Approvals page
Joswell Ledger desktop Credit page

Next project

HR Management System
Web App · Webflow Build

An in-house HR Management System for AFEX, replacing costly third-party software with a comprehensive, tailored and cost-effective solution.

ProVita; One brand, one system, two products
Brand · Design system · Webflow development

A rebrand, a shared design system and a Webflow website for a fertility hospital in Tema, Ghana, built as the front door to its new patient portal.

Case study coming soon
ProVita rebrand, design system and website preview