Shipping: the tracking number has a home now
This is the smallest module I'll write about, and that's the compliment. Shipping does one job: when an order leaves your hands, the shipment gets a record — and the record answers the questions that used to interrupt you.
What it records
A shipment belongs to a catalog order — one fulfilled through the stock manager or shipped by hand, both fine. On it: the carrier, the tracking number, and a snapshot of the ship-to address taken at the time of shipping, so a customer who moves house mid-order doesn't rewrite history. The status runs a short, honest lifecycle: pending, shipped, delivered — with "exception" reachable from pending or shipped for the moments when the carrier does what carriers do.
No rate shopping, no label printing, no carrier accounts to connect — that's deliberate. Your postage process is yours; what 2nd Shift owns is the record of what shipped, to where, under which tracking number.
Why the boring version wins
Because the questions stop. When a customer asks "has my order shipped?", the answer is on the order — carrier, tracking, status — instead of in someone's memory of this morning's post office run. When something goes wrong, the exception state marks it visibly, so stuck shipments surface instead of aging silently in a pile of "delivered" rows that aren't. And the ship-to snapshot means disputes about where it went end with a record, not a shrug.
Where it sits in the pipeline
Shipping is the last station on the order track the other modules build: the catalog creates the order, checkout takes the payment, the stock manager fulfills the goods out the door, and shipping is the record of the journey. It's also the start of the customer conversation — an order that shows "exception" is a ticket waiting to be written, and it's far better written by you than by them.
The lifecycle stays deliberately small. Pending means the record exists and the box hasn't left. Shipped means it has — carrier and tracking number filled in. Delivered means it arrived. Exception is the honest extra: reachable from pending or shipped when something has gone sideways, so a stuck shipment is a visible state instead of a conversation you keep postponing. There's no label purchasing, no rate shopping and no carrier integrations to configure — if your postage workflow lives in another tool or at the counter, nothing here competes with it.
What you get in exchange is coherence. Shipments belong to orders and orders belong to contacts, so a customer's shipping history reads straight down their record — and when someone calls about a package, the answer is on the order page next to the ticket you're already typing in. The address snapshot taken at ship time settles the rare but expensive dispute about where a parcel went, because it shows what was true when it shipped, not what's true now.
Related: shipments record orders built in the catalog and fulfilled out of stock — the last station on the order track.
How this compares
The shipping-software market is dominated by label engines — ShipStation and its cousins excel at buying postage in bulk and printing hundreds of labels an hour. If that's your volume, use one; this module isn't competing with them. The other common "solution" is tracking-by-inbox: a teammate pastes tracking numbers into emails and everyone hopes.
What this module deliberately does is the record-keeping half, and it does it without pretending to be more. Every outbound shipment on a catalog order carries the carrier, the tracking number, an address snapshot captured at ship time, and a pending-to-shipped-to-delivered lifecycle with an exception side-state for the moments when the world misbehaves. That sounds humble because it is — and it's the part that makes order status answerable everywhere else in the workspace, instead of living in a label vendor's dashboard. Where the label itself comes from is your choice: a carrier portal, a bulk tool, whatever fits. The record here is what customer service sees when someone asks "where's my order" — and that answer no longer requires opening a different app. Boring on purpose; useful forever.
Try it
Shipping lives under Shipping in your sidebar, next to your orders. Fulfill an order through stock, mark the shipment out the door with a carrier and tracking number, and watch the status move pending → shipped → delivered. Then imagine every customer "where is it?" message answered by pointing at the row instead of looking for the box.
