Projects A point of sale built for a seven-branch recycling business

A point of sale built for a seven-branch recycling business

350 employees, 5,000 transactions a day, weighbridge to till to cashup. Built solo in 13 months.

A point of sale built for a seven-branch recycling business, screenshot
See the demo recording and the full gallery of purchase, sale, weighbridge, float and reporting screens above.
How long
2021 to 2022
My role
Technical ConsultantProject Management, Software Architecture, UX / UI
Kind of project
New systemLarge project

The problem.

A recycling company with 7 branches and 350 employees was running on an outdated, subscription-based point of sale system. They needed centralised data, real-time access from any branch, and a system built around how their business actually works: weighing scrap metal first, then buying or selling it, with different prices for cash, dealer and account customers.

What I built.

I designed, architected and built the entire platform alone, over 13 months. It covered the full transaction flow: a weighbridge note weighed each item and worked out gross, tare and deduction, which converted straight into a purchase or sale; multi-branch cash floats with a full cashup process; business expenses; customer accounts with loans and account balances; product and pricing management per branch and customer type; and live, exportable reports across every part of the business.

What they got.

It went into trial in November 2021 and full production in January 2022, running across all 7 branches and processing 5,000 transactions a day, with the audit trail a recycling business handling cash needs.

For your technical person

Stack. Node.js and Express.js API, React and Redux client-rendered frontend, and one central MongoDB database (Mongoose) serving all 7 branches in real time. Deployed on AWS with CI/CD from GitHub. Wireframes and UI/UX came first, turning the business rules into screens before any code was written, on a theme framework to save build time.

Weighbridge. A truck carrying mixed scrap was weighed one element at a time as it was offloaded or loaded, and the system worked out whether the note was a purchase or a sale. Each line captured product code, description, gross, tare, deduction with a deduction note, and nett. Notes also recorded order, delivery, reference and container numbers, vehicle registration, vehicle and transporter. A note could be issued as a weighbridge certificate only, or converted into a purchase or sale, with the note attached to the till slip.

Purchases and sales. Order numbers ran in sequence per branch, with a branch prefix and a P or S suffix. Prices filled in by customer type (cash, dealer or account); a till user could override a price, but only with a price-change note. Each line worked out nett, subtotal, VAT and total, with 10c rounding and exclusive-to-inclusive conversions that always came back to the same amount. An order could be saved as pending and finished later, or completed straight to the payment screen: cash, EFT or account, with anything unpaid posted to the customer's account. Orders took attachments, cancellations and refunds, and every till slip could be reprinted.

Cash floats and cashup. A till user started the day either by counting each note and coin into a new float, or by carrying over the previous day's system balance. Floats could be issued and received between tills and users, float expenses were recorded, and a live dashboard showed each user's float for the day. At cashup every denomination was counted again and matched against the system float, and the cashup report broke down the day's transactions and showed any difference. Orders, payments and floats each had protection checks built in.

Expenses and loans. Business expenses, such as fuel, were captured inclusive or exclusive of VAT with the invoice attached, on their own filterable dashboard with reprintable slips. A customer could take several loans; each loan was credited to the customer's balance, and repayments settled the oldest outstanding loan first, then the next, until the payment was used up. Every loan issue and repayment logged the user who handled it.

Customers, products, branches and users. Customers were typed cash, dealer or account, and could be found by name, ID number, account number or vehicle registration on every screen that dealt with customers, with their invoices, purchase notes, loans and files in one view. Products carried separate purchase and sale prices per branch for cash and dealer customers, plus account prices, with stock held per branch. Stock changed only through movement logic, never by overwriting a count, using 128-bit decimal precision. Users could work across one or several branches with role types and change their own passwords, and each branch ran its own sessions. Customers, products, users and branches could be disabled but never deleted, so no order history or audit trail could break.

Reports. Live, filterable reports broken down to line items for weighbridge notes, purchases, sales, floats, cashups, customers and products, plus a trade summary that also showed live stock. Every report exported to CSV, and slips printed as till slips, A4 or PDF.

Timeline. Built solo over 13 months, 2021 to 2022. Trialled in November 2021, in full production from January 2022.

Running into the same problem? Tell me about yours.

+27 87 150 9305

Monday to Friday, 09:00 to 20:00 SAST. Or email info@antondevilliers.com.

Tell me the problem

Step 1 of 3. Pick what’s closest. You can explain in your own words next.

I reply myself, usually the same working day. The first conversation is free, and you’ll know the price of every piece before it starts. How a project works · Privacy

WhatsApp