Every sales channel lived in a different tool.
Online orders went through Etsy, market and in-person sales went through Square, and everything else lived in spreadsheets and email. Nobody could answer a simple question like "what did we actually make this month?" without an evening of copying numbers between tools.
- ×Marketing page linking out to Etsy
- ×Stock counted by hand
- ×Square and online sales never reconciled
- ×Invoices and receipts made one by one
- →Direct checkout, no marketplace fees
- →Stock updates itself from every sale
- →Every channel lands in one set of books
- →Branded PDFs generated automatically
What the platform does
The customer only sees the storefront. Behind it is the system the owner runs the business from every day.
Storefront
- →Catalogue with size and colour variants
- →Stripe checkout and customer accounts
- →Order tracking links sent by email
- →Promo codes and product waitlists
Operations
- →Square POS sync for markets and pop-ups
- →Custom enquiries that convert into orders
- →Quotes, invoices, receipts and packing slips
- →Bill-of-materials costing and production runs
Finance
- →Profit and loss, balance sheet, profitability
- →Expenses, payouts and per-account ledgers
- →Year-end reports, exportable to CSV and PDF
- →Role-based access with a full audit log
Keeping stock right across five sales channels
A piece can sell online, at a market, through a custom enquiry, as a manual order or on the Square terminal. Each path used to touch stock differently, so counts drifted. I moved every path onto one inventory service with the same lifecycle, so a sale reserves stock once and removes it once, no matter where it came from.
Any channel hands the order to the same service.
Available stock drops. Physical stock stays put. committed += qty
Stock comes off exactly once, by exactly the quantity sold.
Customer gets a tracking link and a branded receipt.
Engineering decisions
Money in cents
Every amount is stored as a whole number of cents. No floating point anywhere near a price.
Tested before it ships
The full suite runs against a sandbox database before anything reaches production.
Permissions by item
Roles control access to 42 individual areas, from website orders to the balance sheet.
Idempotent webhooks
Stripe and Square can resend events safely. An order is never counted twice.
Shop-local time
Reports, receipts and daily totals follow Toronto time, including daylight saving.
Brand on every page
Invoices, receipts and slips are generated as PDFs in the studio's own type and colours.



The business runs on one system now, and the books reconcile without anyone copying numbers.
The studio sells online, at markets and on commission without switching tools, and the owner can see how the business is doing on any given day. I still maintain it and ship improvements as the business grows.
