Project facts
- Business
- Hilos y Encanto, my haberdashery in San Cristóbal de las Casas, Chiapas: yarn, thread, kits and tools for knitting, embroidery and crafts.
- Channels
- Shop counter, Mercado Libre, Amazon Mexico, hilosyencanto.com and WhatsApp
- Status
- In production. The team uses it for every sale, every shipment and every stock count.
- Role
- Owner, operator and builder: I designed it, coded it, deployed it on my own server and run it.
- Pieces
- Point of sale, offline warehouse app, central inventory, web store, WhatsApp agent with CRM, and attendance tracking with single sign-on
Context
Hilos y Encanto is my haberdashery. It sells over the counter in San Cristóbal de las Casas and online across Mexico: Mercado Libre, Amazon, its own web store and WhatsApp. A small team runs it, ringing up sales, packing, restocking and answering messages all day.
Before writing a single line of code, I ran it. I counted boxes, packed shipments, cancelled sales of items that were already gone and reconciled by hand what no system could. Everything I built here came from that counter, not from a requirements document.
The problem
Five places to sell. Five versions of how much was left.
Every channel kept its own count. The counter did not know what went out through Mercado Libre, the web store did not deduct stock when someone paid, and the warehouse was a count on paper. Selling an item that no longer exists is not a rare mistake: it is what happens when nobody has the right number.
And a haberdashery is the worst case: thousands of small SKUs, nearly identical colours, boxes filled with labels from different listings. No off-the-shelf software understands that operation.
Key decisions
Four rules I learned running the business, which the software follows without exception.
A person deducts warehouse stock
The system never deducts physical stock on its own. The team deducts the box when packing and when building a shipment; the software records, warns and compares.
An automatic deduction plus a human one is a double deduction. I would rather the system ask than believe it knows what is in a box it has never seen.
The SKU is not enough
One SKU can cover several listings, each with its own physical pile. Channel and warehouse are matched by the listing code, and only by that.
I learned it by breaking production: matching by SKU switched off listings that did have stock. Since then a self-test watches for it.
Zero is not always zero
«Zero in the warehouse» can mean it does not exist, it is not boxed yet or it has no label. Sellable stock is boxes plus loose pieces.
Ignoring loose pieces produced false oversells. Telling the three zeros apart avoids restocking what is already on the shelf.
One account for the whole team
The point of sale and the warehouse app check identity against the attendance app: the same person signs in everywhere with their phone or business email.
Each application still owns its permissions. A promotion in one system does not open another system's till.
How a skein of yarn moves
The central inventory is the single source of truth. Channels read from it, the warehouse confirms it and the data tells what happened.
It sells anywhere
At the counter, on Mercado Libre, on Amazon, in the web store or over WhatsApp.
One inventory records it
Every sale lands in a ledger that is never edited: corrections are added.
Every channel finds out
Stock is written back, and every write is read again to verify it.
A person confirms it
The warehouse scans, packs and deducts from a phone, even with no signal.
The story gets told
Three years of reconstructed sales show what moves and what does not.
The solution
Six applications that talk to each other. A point of sale for the counter. A warehouse app that scans, counts by location and works offline. A central inventory connecting Mercado Libre, Amazon, the web store and the bot. The hilosyencanto.com store, which no longer keeps stock of its own. A WhatsApp agent with a CRM that answers using local AI. And attendance tracking, which is also the front door for the whole team.
On top sits the data layer: three years of sales rebuilt into an analytical model, and twenty-eight months of spreadsheets migrated into a ledger traceable to sheet and row.
Everything runs on my own server, in containers, behind a tunnel and with no ports open to the internet. Each piece has its own published case with its decisions and its numbers.
Results
- One inventory for five channels: 796 Mercado Libre listings audited and a ledger with 1,742 movements.
- The warehouse works offline, and a replay of 3,536 real events verified the fix for a shipment that did not add up.
- 56,739 transactions over three years rebuilt to learn what really sells.
- Twenty-eight months of spreadsheets brought into a single ledger, without duplicates.
- The WhatsApp agent answers catalogue and order questions with AI running on my own server: conversations never leave the business.
Figures are published in units and movements. The business's monetary amounts are not published, by the project's own rule.
What I learned
That building for your own business is unforgiving: if the system lies, I find out at the counter that same afternoon. That pressure is what made every piece admit its limits instead of inventing a comfortable number.
And that operating experience is the advantage. The most valuable rules —a person deducts, zero has three meanings, the SKU is not enough— were in no manual. I learned them behind the counter, and they are the same ones I bring to my clients' systems.
Does your business sell in several places and nothing adds up? I already solved it in mine.
Let's talk