The model: you don't rent a warehouse. You register your home, a spare room, or a mini-storage unit as a ViettelPost pickup point, keep it stocked, and let software handle everything between "customer clicks buy" and "courier walks away with the parcel". Your job shrinks to two things: marketing, and making sure the shelf has goods on it. Everything else — pickup booking, labels, stock counts, low-stock alerts, reorder triggers — runs itself. For a one- or two-person shop this is not a compromise; it is the correct architecture until volume genuinely demands more.
What the software layer actually does
- Pickup booking per order batch. New orders accumulate; before each collection window the system books a ViettelPost pickup at your registered address for the batch, generates labels, and prints them to a thermal printer. The API mechanics are in our ViettelPost deep dive — booking, label generation and the tracking webhooks that flow back.
- Stock counts synced to the storefront. The shelf count lives in a small inventory service; the storefront (and TikTok Shop, if you run both — see the two-storefront article) shows availability derived from it. Sell out on the shelf and the listing pauses itself.
- Low-stock alerts to your phone. Per-SKU thresholds based on sales velocity, delivered by Zalo — the same channel your customers get their tracking numbers on (Zalo automation guide).
- Supplier reorder triggers. When projected days-of-stock falls below the supplier's lead time plus a buffer, the system drafts the reorder — quantities pre-filled from velocity — and you approve it with one tap. Approval stays human; arithmetic doesn't.
Registering the pickup point: do it properly once
Address verification is the first friction. The address you register must match what the courier's system can geocode and route — ward, district and province exactly as their address book expects, not as you'd write it on an envelope. Sloppy registration produces the worst failure mode in logistics: pickups booked successfully into a void, where no courier is ever dispatched. Verify with a few test bookings before you route real orders through, and keep the registered address details in your configuration under version control so a "quick fix" doesn't silently break routing.
Cut-off times decide your promise to customers
Every district has pickup cut-off realities: book after the last collection window and the parcel leaves tomorrow. Your automation must know the cut-off and — more importantly — your storefront's delivery promise must be derived from it. If the checkout says "ships today" at 16:40 and your district's last practical pickup was 16:00, you have automated disappointment. Encode the cut-off, batch orders against it, and roll the promise over automatically after the window closes.
Keeping the storefront honest: the family-shelf problem
The classic warehouse-free failure has nothing to do with APIs. The shelf is in your home, and someone in the family takes two units of something for a relative — with the best intentions and no data entry. The storefront now oversells by two. You cannot patch human behaviour with a webhook, so you patch it with process:
- Cycle counts. A recurring task — weekly for fast movers, monthly for the rest — where you count a rotating subset of SKUs and enter actuals. The system reconciles counted versus expected and adjusts.
- Withdrawal logging. A one-tap "took N units of X" action in your phone, treated identically to an order in the inventory ledger.
- Shrinkage tracking. Persistent gaps between counts and ledger are a signal — of process failure or of a SKU that needs a dedicated box with a lid.
Scaling to two or three pickup points
When you outgrow one shelf, the same architecture extends: register a second pickup point (a relative's house across town, a mini-storage unit near your supplier), hold stock per location, and let a routing rule choose the pickup point per order — usually by destination region or by which location holds the SKU. The table below shows the decision inputs that matter in practice:
| Input | Why it matters |
|---|---|
| Stock availability per point | No booking from a location that can't fulfil the whole parcel |
| Destination region | Shipping from the same region cuts transit time and cost |
| Cut-off proximity | A point whose window is still open beats a nearer one that closed |
| Split-order policy | Decide explicitly whether one order may ship from two points |
Resist splitting orders across points until you must — two parcels mean two shipping fees, two tracking numbers and double the customer confusion.
Where the money side connects
COD remittances from all pickup points land in the same reconciliation ledger (how we automate đối soát), and every delivered order still flows to e-invoicing (Shopify → MISA AMIS guide). Warehouse-free changes where the goods sit — it changes nothing about your compliance obligations. For the full picture of how fulfilment, finance and marketing interlock, start with the end-to-end stack article.