
A bespoke internal web system for running a timber yard with a hardware line: sales, inventory in board feet, customers and suppliers, goods receipts, dashboard and reports. It automates the timber trade's own arithmetic and keeps inventory in sync sale by sale, with full traceability.
In the timber trade the unit of sale is not the piece but the board foot, which depends on thickness × width × length. That calculation had to be automated (along with finished products on a fixed equivalence), pricing errors eliminated, and stock kept in sync across sales, voids and goods receipts, with an audit trail of who did what.
I built a standalone, zoneless Angular 21 SPA (signals) on Firebase, with mixed timber/product line items, automatic board-foot calculation, transactions (runTransaction) to decrement and restore stock alongside the sale sequence number, and writeBatch for denormalisation cascades. I added role-based security with granular permissions and hardened Firestore rules (anti-escalation, pre-registration, immutable audit log, default-deny).