The client
Mobilni Market. Serbian B2B mobile-parts wholesaler. The owner runs the day-to-day across hundreds of SKUs, dozens of recurring customers, and a WhatsApp inbox that had outgrown manual reply. Customers are small phone-shop operators across the Balkans, buying cases, chargers, cables, and accessories in small recurring batches.
The problem
The bottleneck was not customer support. It was the entire revenue loop:
- Inventory aging. Stock that sat too long needed to move, but the owner had no time to walk the catalog every morning.
- Outreach. Pushing stale inventory meant writing the same WhatsApp message fifty times, in Serbian, with the right product references for each customer.
- Conversation. Replies came back in free-form natural language, sometimes in local dialect like "imaš onu Devia maska 13 sto sam pre uzimao". A chatbot built for English would miss every nuance.
- Order capture. Accepted orders had to land in a system the owner could actually pack from.
- Fulfillment. Packed, shipped, marked-as-sent status had to round-trip back to the customer.
Five distinct workflows, gluing together through one phone and one tired owner. Off-the-shelf chatbot tools could only solve the inbound conversation step, and badly. The owner needed automation of the entire loop, with full control over what went out the door.
Our approach
We designed the stack around a single principle: AI handles every customer conversation; the owner approves every outbound batch. Inbound is fully automated. Outbound has a hard human gate. That responsibility split is the architectural backbone.
Inventory aging detection. Every morning, an automated scan walks the entire catalog, identifies products that have not moved in 3+ months, and queues them for review. The owner opens his mobile app and sees the day's stale-SKU list with a tap-to-approve interface. He accepts or rejects each one. That is the only human decision in the daily loop.
Outreach in any language. The approved list goes to every customer on WhatsApp, in free-form natural language, in their language. Serbian for local customers. English for international. German, Italian, anything the underlying AI handles. Each message is personalized, references real product details, and reads like a human wrote it.
Two-way conversation, fully AI-handled. Customers reply however they want. They accept, decline, switch to a different product, ask about pricing, ask about availability of something we did not pitch, ask about their order history. Six well-defined tools cover all of it: search products, create order, cancel order, customer history, product images, business info. Conversations flow naturally across multiple back-and-forths.
Order pipeline with status tracking. Confirmed orders land in the owner's app, marked Pending. The owner sees a clean order list with customer name, products, totals, and status chips. He packs, ships, marks Sent. The status round-trips back into the customer record so the AI knows for next time.
What we built
- Mobile management app for the owner. Home dashboard with overview stats (total orders, pending, customers, low stock), Orders list with status chips, Products inventory with stock badges, Customers, Offers, Profile.
- Inventory aging detector. Daily automated scan that finds 3+ month stale SKUs and queues them for approval.
- Owner approval workflow. Every outbound batch passes through a human gate before fire.
- Multi-tool AI agent. Six structured tools for search, order creation, cancellation, customer history, product images, business info.
- WhatsApp integration. Handles real-world WhatsApp identity quirks (LID name fallback) and stays compliant with platform messaging rules.
- Order pipeline. Pending to Packed to Shipped to marked-as-sent, with status visible to both the owner and (via the AI) the customer.
- Multi-language conversation. Serbian primary, plus any locale the underlying AI supports, with handling for messy local dialect.
December 2025 trial period, what actually happened
- 5,413 customer messages routed through the AI
- 1,230 AI tool invocations across the 6 tools
- 42 orders processed end-to-end through the pipeline
- 20 low-stock alerts auto-triggered
- Zero crashes
- Zero "I don't understand" fallbacks
- Approximately 45 hours of manual reply work avoided every week
- Infrastructure cost: around $15 per month
The system did the job. The owner has since decided to keep the customer relationship hands-on for now, and that is his call. The stack itself is shippable, meaning this exact architecture is available for the next operator who wants the loop deployed for their business.
Architecture choices we made
- One human decision in the daily loop. Everything else is automated. The owner approves outbound; the AI handles inbound. Cleanest responsibility split we have shipped.
- Free-form natural language in the customer's language. Not menu-driven, not button-driven. The AI works in whatever language the customer messages in, including local dialect.
- Owner-app and AI-agent share one data store. Everything the AI sees, the owner sees, and vice versa. No sync drift, no two-source-of-truth confusion.
- Vertical AI sales team framing, not support chatbot. This is not customer-support automation. It is the entire revenue loop running with one human gate. That is a different category of system, and the architecture reflects it.
- Lean infrastructure. Production system runs on a single small server. Total monthly infrastructure cost is two-digit dollars.
Most AI-in-commerce pitches automate one step, badly. A chatbot on the support inbox. A recommender on the product page. A copy generator for the marketing emails. They look impressive in demos and fall apart in real workflows because each tool sees only its own slice of the loop. Mobilni Market needed something different: AI that automates the entire revenue loop, with one human approval gate to keep brand control where it belongs. That is not customer support automation. It is a tiny vertical AI sales team, deployed for one operator, ready to deploy for the next. We built the first. We can build the next in days, not quarters.



