03Pharmacy · Wholesale2026

Paaros

The desk a wholesale pharmacy runs its week on.

Paaros is the web app a wholesale pharmacy uses to sell to clinics and shops, collect what they owe, and keep track of stock by batch and expiry. The parts that needed the most care were stopping a customer from buying on credit once they owe too much, treating a cheque as unpaid until it clears, and keeping the stock count honest.

Origin
Client project
Platforms
Web
What people open
Staff desk
Role
I designed it and I built it
On this project
Next.js · Convex · TypeScript
paaros.app
Paaros Today screen on web
Today. Sales, money in, profit, and what needs a person this morning.

Why it matters

A wrong number becomes an argument.

When a business sells on credit, every decision depends on the figures: who can still buy, who needs a reminder, which batch should go out first. Paaros keeps the sale, the payment, and the stock together in one place, so the day starts with what to do next, not with checking whether the numbers are right.

Where it started

The medicine moved. The books didn't keep up.

A wholesale pharmacy sells to clinics and shops, mostly on credit. They take the stock now and pay weeks later, and the record of that was a spreadsheet, a handwritten invoice, and someone's memory of who was late.

When a number is wrong, the argument ends up being about the books instead of the medicine, and a batch can sit on the shelf past its date unnoticed. Every morning came down to the same questions about what sold, what came in, who owes, and what is about to expire.

What I built

One desk for the sale, the debt, and the shelf.

  1. 01

    A Today screen showing sales, money in by method, profit, what is overdue, low stock, batches near expiry, who to collect from, and who is blocked from buying more.

  2. 02

    Invoices for cash or credit. A credit sale gets its due date from that customer's terms, and saving it takes stock from whichever batch expires first.

  3. 03

    Payments by cash, mobile money, bank transfer, or cheque. One payment can cover several invoices, and one invoice can be settled by several payments.

  4. 04

    A view of who owes, split by how late it is, from not yet due through 1 to 30 days, 31 to 60, 61 to 90, and over 90.

  5. 05

    Customers with a credit limit and a discount. A new credit sale is stopped when they are over the limit or an invoice is past its date.

  6. 06

    Products with a price and a unit, and stock listed by batch and expiry, with low, out of stock, near expiry, and expired each getting their own list.

Sell

The invoice, the payment, and who is late.

paaros.app/invoices
Paaros invoices on web
Invoices. Open, overdue, or paid, and what is still owed.
paaros.app/customers/achimota-pharmacy
Paaros customer account on web
One account. An invoice is past its date, so a new credit sale is blocked.
paaros.app/payments
Paaros payments on web
Payments. Cash, mobile money, a transfer, or a cheque still with the bank.
paaros.app/who-owes
Paaros who owes on web
Who owes. Not yet due, then how many days late.

In the build

The hard parts.

Credit that stops itself

A customer who is over their limit, or late on an invoice, can't take more on credit. An administrator can allow it, but has to give a reason, and that reason is kept.

A cheque is not money until it clears

Cash, mobile money, and bank transfers land as paid. A cheque stays pending, and if it bounces the debt goes back on the account while the original payment stays on the record.

Stock is a list of changes

Nobody types over a quantity. A delivery, a sale, a return, and a correction are each their own line, and what is on hand is simply the sum of those lines, batch by batch.

The price on the invoice stays put

Each line keeps the price, the discount, and the tax from the day it was written, so changing a product's price later never rewrites sales that are already made.

Profit is not on every screen

A salesperson can sell and record a payment. Cost and profit show on Today, and only for an administrator.

Two ways an invoice gets a number

The website numbers its own invoices in order, but an invoice already written in a paper book keeps the number printed on it and the date it was written.

The shelf

Who they sell to, and what is still in date.

paaros.app/customers
Paaros customers on web
Customers. Clinics and shops, and who is blocked from buying more.
paaros.app/products
Paaros products on web
Products. The price, and how much is on the shelf.
paaros.app/stock
Paaros stock by batch on web
Stock. Each batch, its expiry, and what is still on hand.

Next project

An iPhone app for keeping track of every show you watch, episode by episode.