Case study · Atravesar Services · atravesar.ca
An AI assistant layer on top of a real repair and reverse-logistics operation
For Atravesar Services—a Canadian electronics repair, refurbishment and reverse-logistics company—SolvoSync built the public website, the business platform underneath it and an AI assistant that answers customers in nine languages through retrieval-augmented generation and Model Context Protocol tools. Presented live at NATEA Toronto on October 21, 2026.
- internal services
- 9
- lines of Python
- ~175K
- languages, one knowledge base
- 9
- allow-listed assistant tools
- 10
- per AI answer at list prices
- US$0.004
- of the code base is the AI layer
- ≈3%
The client
From customer returns to return to customer
Atravesar Services is a Canadian electronics repair, refurbishment and reverse-logistics company with an office in Richmond Hill and a repair bench and warehouse in Markham, serving the whole country by courier. It runs B2B managed repair and returns programs for manufacturers and retailers plus direct-to-consumer mail-in repair, and is the exclusive authorized Narwal after-sales provider in Canada, with ECOVACS and Segway/Ninebot support.
Every day the team answered the same questions: Where is my package? What does error E12 mean? How much is the repair with tax in Québec? Is my work order in repair yet? Each answer already existed—in a document, a database or a carrier API. The brief: let software answer them, safely, around the clock, in the customer's language.
-
Richmond Hill office · Markham repair bench & warehouse · Canada-wide service by courier
-
Exclusive authorized Narwal after-sales provider in Canada · ECOVACS and Segway/Ninebot support
-
Robot vacuums · e-scooters · smartphones · tablets · laptops · gaming · small appliances
-
EN简体繁體日本語한국어Tiếng ViệtESITFR
Design principle
AI reads, understands and talks. Software decides, records and pays.
The architecture draws one explicit line. An assistant layer sits on top of the daily workflow and reaches the business only through narrow, named, logged doors—tools and APIs. Underneath, ordinary software with authentication, authorization and accounting decides prices, records work orders and moves money.
-
AI assistant layer
Reads, understands, looks things up and answers people—in their language, around the clock.
-
Narrow, named, logged doors
Orders, payments, warehouse, shipping, tracking and support are reachable only through allow-listed tools with JSON schemas. The model never touches a database.
-
Security & control
Authentication (who are you?), authorization (what may you see or do?) and accounting (what happened—logged and auditable).
What already ran the business
Nine services, about 175,000 lines of Python
The website is the visible part. Behind it, SolvoSync designed and operates the platform that runs the company—warehouse and RMA management, multi-carrier shipping, payments and tax, identity, inspections and manufacturer integrations. The AI layer is roughly 3% of the code base; everything else is the discipline it inherits.
-
7.7K LOC
www · Public website
9 languages · service pages & guides · out-of-warranty webform · chatbot widget · admin knowledge upload · llms.txt
-
59.5K LOC
Flow · WMS / RMA
Receiving · inventory · parts · RMAs · delivery orders · pallets · ECOVACS ESB · Mammotion FS Cloud · LSS · 31 test files
-
50.6K LOC
Fulfill · Shipping
UPS · Canpar · Canada Post · Purolator (ShipEngine) · Freightcom · rates, labels, pickups, manifests, tracking · EDI 210 billing audit
-
5.2K LOC
Payment · Payments & tax
Stripe Checkout + webhooks · Canadian tax by postal code (GST/HST/PST/QST) · invoices to S3 · weekly report
-
2.6K LOC
SSO · Identity
Accounts · OAuth2 client-credentials · roles ADMIN, CUSTOMER, DEALER, RECEIVER, REPAIR, TECH, SHIPPER · vendor scopes
-
35.4K LOC
Track · Digital system
Earlier inventory / RMA system · React + TypeScript front end
-
10.0K LOC
Maintain · Equipment inspection
Checklists, photos, signatures, scheduled reports
-
2.8K LOC
Mammotion · Manufacturer scripts
FS Cloud depot repair, spare parts, RMA and pending-shipment exports
-
0.6K LOC
Stock take
Scan AVS labels ↔ EAN, flag missing units, Excel export
- AWS EC2 (Ubuntu)
- RDS MySQL
- S3
- Redis
- nginx + gunicorn
- Flask
- React + TypeScript
- Qdrant
- Gemini API
- Stripe
- Google Places
LOC = lines of Python excluding virtual environments, migrations and vendored packages, counted October 2026.
The AI assistant layer
Gemini + RAG + MCP: where the assistant plugs in
The AVS Assistant lives on www.atravesar.ca behind a session-bound token and rate limits. It runs on Gemini Flash with function calling—at most four tool rounds per answer—retrieves knowledge from a Qdrant vector database and reaches shipping, tax and identity through MCP and function endpoints that each enforce their own authentication, limits and logs.
-
1
Knowledge assistant (RAG)
Staff upload PDFs, Markdown or text on an admin page. Documents are chunked (≈1,000 characters, 150 overlap), embedded with gemini-embedding-001 into 768-dimension vectors and stored in Qdrant. Each question retrieves the top five passages by cosine similarity and the model answers from them, naming the source. English documents answer questions in nine languages.
-
2
Tool-using assistant (function calling & MCP)
A tool is a name, a description and a JSON schema. The model picks the tool and arguments, our code executes it with an OAuth2 service token, and the model explains the result. The Shipment MCP server speaks MCP over Streamable HTTP (JSON-RPC 2.0), so one integration serves the website chatbot today, a staff desktop assistant tomorrow and partner agents with scoped keys later.
-
3
Workflow automation (no model)
Payment confirmed → create label → create work order → email. Rules for price, tax, numbering and stage transitions live in deterministic, tested code—this is where money and records move.
The tool catalogue, as deployed
Design rule #1: the model never touches the database—it asks for tools.
| Tool | Runs in | What it does | Guardrail |
|---|---|---|---|
| search_knowledge_base | www → Qdrant | Semantic search; returns the top five passages with source and title. | Read-only; the model is told to cite and never invent. |
| share_oow_webform | www | Returns the out-of-warranty form URL in the user's language. | The model may not collect form fields in chat. |
| list_provincial_tax_rates calculate_tax |
Payment | GST/HST/PST/QST by province or postal code; goods vs. services. | Deterministic Decimal math; the model never computes tax. |
| rate_shipment track_shipment |
Shipment MCP (fulfillapi) | Carrier rates; tracking by UPS 1Z / Canpar D / Canada Post PIN or customer reference. | OAuth2 service token; read-only. |
| email_waybill validate_address |
Shipment MCP (fulfillapi) | Re-sends a label to the address on file; Google-verified address match. | Email only to the shipment's own contact; Canada/US only. |
| get_account_info get_account_access |
SSO MCP | Account profile and which vendors' data a user may see. | Server-side token; vendor-scoped. |
| clear_chat_history | www | Wipes this browser's conversation. | Session-scoped only. |
Limits: at most 4 tool rounds per answer · each tool result ≤ 12,000 characters · 5 passages per search · no tool writes to the database · no tool moves money.
One workflow, end to end
The out-of-warranty repair journey
AI at the start and at the end—the conversation. Ordinary, testable software in the middle. Built by a small team on systems the company already had.
-
A customer asks the assistant: “My Narwal is out of warranty—can you repair it?” The share_oow_webform tool returns the form link in the customer's language; no personal data is collected in chat.
-
The four-step webform collects device, problem and address—validated with Google Places—with drop-off or ship-in options.
-
The quote is computed by code: a $40 inspection fee, tax for the postal code from the Payment service, and the lowest live courier rate (carriers queried in parallel) with a fixed markup.
-
Stripe Checkout takes inspection and shipping; a PDF invoice with 15-day terms is emailed.
-
A verified webhook creates work order AVSOOW{YYMMDD}#### and opens it in Flow at stage “Receiving”; an inbound label on the cheapest carrier plus a QR code is emailed to the customer.
-
The device is received and inspected, a repair quote is issued and paid through a second Stripe payment, and the work order moves to “Repair”.
-
The repaired device ships back with tracking emailed—and the assistant answers “Where is my shipment?” the whole time through the Shipment MCP.
Plain automation carries most of the value
Where we deliberately do not use AI
- Pricing & tax
- Decimal math with banker's rounding and province rules by postal prefix, in the Payment service.
- Carrier choice
- Rules: PO Box → Canada Post; preferred manufacturers → Canpar; UPS rate limit → fallback; otherwise the cheapest live rate.
- Work orders & stages
- Unique numbers and a stage machine (Receiving → Repair → …) in Flow, covered by 31 test files.
- Billing audit
- Nightly EDI 210 invoice parsing (UPS, Canpar) against the quoted rate, with automatic overcharge reports.
- Payments & identity
- Stripe Checkout with verified webhooks, invoices and receipts in S3; SSO with roles, OAuth2 client-credentials between services and MFA for staff.
- Scheduled jobs & manufacturer integrations
- Tracking twice every weekday, a weekly warning email, manufacturer imports three times a day; ECOVACS SEEBURGER ESB, Mammotion FS Cloud and LSS—contracts, not conversations.
Rule of thumb: if the output must be exactly right, repeatable and explainable to an accountant or a lawyer, it is code. AI sits beside it, explaining and routing.
Security & control underneath
Authentication, authorization, accounting
Authentication — who are you?
- SSO for staff and partners; MFA on shipping-system logins.
- OAuth2 client-credentials tokens between services (Fulfill, Payment, SSO).
- Chatbot session: HttpOnly JWT bound to IP and browser for 30 minutes; same-origin check and a Redis blacklist for abuse.
Authorization — what may you see or do?
- Roles ADMIN, CUSTOMER, DEALER, RECEIVER, REPAIR, TECH, SHIPPER; partners see only their own vendor's data.
- The model holds no credentials—only allow-listed tools.
- Tools are read-only, except emailing a label to the shipment's own contact and clearing your own chat.
Accounting — what happened?
- Every chat turn logged: session, question, answer, tools used, model version; CSV export.
- Stripe webhooks verified; payment events and invoices stored in S3.
- Nightly EDI 210 reconciliation of carrier invoices against quotes; weekly automated reports.
None of this is AI-specific. It is the discipline you want anyway—the AI layer simply inherits it.
Outcomes
What it delivers
-
Customers get answers about warranties, error codes, tax, shipments and the repair process in nine languages, 24/7, with sources named.
-
Out-of-warranty intake runs from the first question to a paid work order without staff typing a quote, a label or an email.
-
One MCP integration serves the website assistant today and is ready for staff and partner assistants—no second integration.
-
Cost per answer is measured in cents: roughly US$0.004 at list prices, about US$45 for 10,000 answers a month.
-
Every chat turn is logged with the tools used and the model version—quality improves by reading logs and fixing documents, not by retraining.
Honest engineering: failure modes we planned for—and what actually happened
- Hallucination
- Grounded in retrieved passages, forced lookups for facts, temperature 0.4, hand-off to email. What happened: early answers about hours and address came from general knowledge—fixed by the lookup rule.
- Prompt injection
- A policy prompt and schema-constrained tools; nothing sensitive to unlock—no phone list, no payment tool. What happened: people try; refusals hold because capabilities are narrow.
- Outage
- Tool errors are returned as data and the bot keeps answering from knowledge; carriers are queried in parallel with rule-based fallbacks. What happened: a carrier API rate limit → fallback carrier.
- Model drift
- A floating model alias changes tone, verbosity and tool use under you. The model version is logged with every turn and a regression set of real questions is re-run on every change.
What we would tell ourselves a year ago
Nine engineering lessons
-
01
Start from the questions already in your inbox—not from the technology.
-
02
Tools over prompts: when the model must know something dynamic, add a tool, not a paragraph.
-
03
Keep the knowledge base boring: PDFs and Markdown your staff already maintain.
-
04
Pin the model and log the version—floating aliases change behaviour under you.
-
05
Degrade gracefully: tool errors are data; the bot keeps working when a dependency is down.
-
06
Cap everything—rounds, characters, tokens, rate. Unbounded consumption is a real bill.
-
07
Money behind Stripe and forms, never behind a chat window.
-
08
Use the standards: MCP + OAuth2 made the integration reusable for clients not built yet.
-
09
Build the admin page first: upload documents, read the logs—that is where quality comes from.
Tenth, for free: write the system prompt like a policy—version it, review it, test it like code.
Presented live
NATEA Toronto · AI for Small and Mid-Size Business
- 60 min · talk & live demo · online
Speaker: Nelson Lai — SolvoSync · CTO, Atravesar Services
A 60-minute talk and live demo on October 21, 2026 (online) showing how a retail business runs on atravesar.ca and where AI actually earns its place: what the 2026 Statistics Canada data says about SMB AI adoption, the three patterns—knowledge, tools, automation—two production demos, the security and privacy checklist for Canada and a four-week starter plan.
19% of Canadian businesses use AI, 25% plan to and 40% think it is not relevant. The relevance is in your inbox.
Questions people ask about this project
How do you stop the assistant from making things up?
Facts come from retrieved passages or tools, never from the model's memory: the system prompt forces a knowledge-base lookup for addresses, hours and policies, temperature is 0.4, and the assistant hands off to email when tools cannot answer. Early answers about opening hours came from general knowledge; the lookup rule fixed it.
What does an AI answer cost?
At October 2026 list prices one answer—about 12,000 input tokens plus 300 output tokens—costs roughly US$0.004, so 10,000 answers a month are about US$45. The real cost is engineering and content upkeep, not tokens.
Could my business reuse this approach or the MCP servers?
Yes. The tools layer is built on open standards—MCP over Streamable HTTP with OAuth2 client-credentials—so the same servers can serve any assistant. SolvoSync builds the same pattern for other small and mid-size businesses: start from the questions already in your inbox, ship one channel in four weeks, measure before you claim.
How is personal data handled?
Personal data stays out of the chat window. The assistant routes people to forms with consent, validation and Stripe; secrets stay server-side; sessions are HttpOnly tokens bound to IP and browser; and every turn is logged with the model version. The design follows PIPEDA and Québec Law 25 principles: the model does not decide—code and people do.
Want this for your business?
SolvoSync designs, builds and operates the website, the integrations and the AI assistant layer—starting from the questions already in your inbox, with one channel live in four weeks.