
Expert AI Labs connected order imports, lifecycle synchronization, inventory data, and AI-assisted customer service while preserving deterministic controls and human review.
Moss Home USA is a furniture business with configurable products, dealer relationships, quote and order lifecycles, fabric inventory, and customer questions spread across several systems. Staff spent real hours every day moving records between them, reconciling changes, hunting for order facts, and writing the same replies.
Expert AI Labs built three connected systems: an hourly importer that moves genuine orders and their line items into the operating sheet, an annual review log that tracks every quote as it becomes an order, and an AI-assisted customer-service decision engine that reads support email, looks up order and fabric facts, and returns one bounded action for the workflow layer to execute.
The result Moss Home cares about: the recurring manual workload previously carried by three employees no longer needs them, and all three now spend that time on other business priorities.
The design decision that made it safe: language models interpret requests and draft language. Ordinary code controls the authoritative order, inventory, pricing, and customer records. People keep the decisions that move money, commit inventory, or answer a complaint. We call the system AI-assisted rather than autonomous because that is exactly what it is.

Moss Home sells configurable furniture through dealers, designers, and showrooms, with customer-supplied (COM) fabrics and a catalog of several hundred products. Earlier in the engagement, before the automations described here, the work covered the commerce foundation: BigCommerce catalog architecture, variant modeling for configurable pieces, bulk product imports, merchandising, and seasonal launches.
Day to day, operational truth lives in five places:
Three issues made a simple point-to-point integration insufficient:
The system therefore had to be fast on the routine path and conservative the moment data was incomplete, contradictory, or operationally sensitive.
| Principle | Implementation choice | Operational purpose |
|---|---|---|
| Authoritative data stays deterministic | AMPtab, Smartsheet, BarCloud, and configured reference data supply every fact | A model can never invent status, inventory, pricing, or policy |
| Every automation fails closed | Missing archives, unavailable sources, uncertain matches, and closed send gates stop the action | Incomplete information becomes a visible exception, not a silent error |
| Human authority follows business risk | Routine supported cases proceed; transactions, complaints, shortages, and ambiguity require review | Accountability stays where a wrong answer would cost money or trust |
Two deterministic pipelines keep the structured record current. The third system uses that record to make bounded decisions about email. Nothing in the AI layer writes to the systems of record.
The systems share more than a diagram. Both Python pipelines use one core sync function for cloud and local execution, so the fallback path is the production path on a different scheduler. The decision engine publishes a narrow contract (one POST, one decision) so n8n owns everything that touches the inbox.
The importer creates the operational view of open orders. Every hour it runs the same six steps against the AMPtab export and the Master Open Order Smartsheet.

| AMP field | Smartsheet column |
|---|---|
| ORDER ID | Order ID |
| UTC DATE | Order Date |
| DEALER NAME | Customer |
| ORDER # | AMP Order # |
| PO # | Customer PO # |
| Customer email (dealer extra) | ACCOUNT EMAIL (contact) |
| LI SKU / LI NAME | SKU / Item Name |
| LI UNIT PRICE / LI QUANTITY | Unit Price / Qty |
| DISCOUNT % | Discount % |
| Rep name / rep email (dealer extra) | Territory Mgr / TM Email (contact) |
Archive verification is a deliberate safety control. If either archive sheet fails to load, is missing the AMP Order number column, or returns zero keys, the run aborts before writing anything. The importer would rather delay new records by an hour than re-import completed orders because one API response came back short.
The second system preserves the quote-to-order history that operations reviews. It is a one-way sync from the AMPtab quotes-and-orders export into a Smartsheet named AMP Order Review Log, one sheet per year.
The third system addresses the most judgment-intensive workflow. It is the customer-service brain for the Moss Home support inbox. It reads each message, decides what kind of request it is, looks up order and fabric facts, and returns a reply decision. It does not send mail itself. Sending, labeling, and inbox polling stay in n8n.
| Decision | Meaning |
|---|---|
| auto_reply | Safe to send, and only if every send gate is open and the intent is allowlisted |
| draft_only | A draft exists, but a person must decide whether to send it |
| human_review | Risky, incomplete, ambiguous, or not approved for automatic sending |
| no_reply | Acknowledgment, spam, or a thread the automation should stay out of |
| ignore / ignore_outbound | Duplicate, skip-list sender, or Moss Home's own outbound mail |
| error | Processing failed; no customer-facing action occurs |

Sending is fail-closed. A reply can leave only when four independent gates are all open: dry-run mode is exactly off, automatic sending is exactly on, external sending is exactly on, and the intent is on the auto-send allowlist. The allowlist is narrow by design: order status and new furniture quote requests. Everything else is drafted for a person or left unanswered. Closing any one gate is a practical shutdown switch.
Wording is linted before anything can be sent. Replies cannot say “scheduled to ship,” cannot name internal systems, and cannot use em dashes.
Held cases can be written to a Supabase review table and read back through a review-queue endpoint. An audit table records each decision. If that configuration is absent the app still runs, but it does not claim a durable audit record. Tests run against mocked Claude and Smartsheet clients so the policy logic can be exercised without live credentials.
The first version of this workflow was a 32-step Zapier automation, Final Order Status Automation, that polled Gmail, classified messages with AI, extracted order and invoice numbers, looked them up in Smartsheet, drafted responses, and routed on branches with delays and attachments. It proved the pattern. The current engine moved that logic into typed, tested code with explicit gates so each new intent could be added one at a time with evidence.
The architecture draws a hard line between language interpretation and operational authority. A fluent answer can still be wrong if it is not tied to a current record.
Five recurring controls keep routine automation from becoming silent operational risk.
The primary result is capacity. Together, the three systems removed the recurring manual workload previously handled by three Moss Home employees, and all three redirected their time toward other business priorities. Routine record movement, lifecycle reconciliation, source lookup, and first-pass email handling no longer require continuous manual attention.
| Area | Before | Operating model now |
|---|---|---|
| Order intake | Repeated transfer and checking of new order records | Hourly import with filtering, field mapping, deduplication, and batching |
| Quote and order review | Manual reconciliation as records moved from quote to confirmed order | Latest state retained by normalized order number and routed by year |
| Customer service | Staff interpreted every message and searched several sources before replying | AI-assisted triage and drafting with deterministic fact retrieval and human escalation |
| Operational continuity | Automation depended on a single execution environment | Cloud execution with local recovery procedures and shared core logic |
The systems also changed the quality of the operating process. Scheduled imports produce a consistent working record. Identifier normalization and archive checks reduce duplicate risk. Customer replies are tied to current business sources. Unsupported or consequential requests become visible review work instead of improvised answers.
| Layer | Technology | Role |
|---|---|---|
| Commerce | BigCommerce | Several-hundred-product catalog, variant modeling, bulk imports, merchandising, seasonal launches |
| Source systems | AMPtab CMS, Smartsheet, BarCloud, Gmail | Authoritative order, quote, inventory, fabric, and communication records |
| Structured automation | Python 3, requests, csv, smartsheet-python-sdk, zoneinfo | Import, mapping, normalization, deduplication, batch writes, business-hours gate |
| Decision application | Next.js 15, React 19, TypeScript, Zod | Email processing, validation, deterministic policy, decision API |
| Language models | Anthropic Claude (Haiku for extraction, Sonnet for drafting) with OpenAI fallback | Intent extraction and response generation inside fixed controls |
| Orchestration | n8n, Vercel Cron, Python and Node serverless functions | Inbox polling, scheduled execution, routing, Gmail actions |
| Review and audit | Supabase, application logs, Smartsheet records | Held cases, decision records, diagnostics |
| Testing | Vitest with mocked Claude and Smartsheet | Policy logic exercised without live credentials |
| Recovery | macOS launchd / cron, written runbooks | Fallback execution on the same core code |
Secrets, sheet identifiers, export URLs, and customer data are intentionally absent from this write-up.
Many growing companies have the same shape. Important facts live in a commerce platform, spreadsheets, email, an inventory tool, and the heads of a few people. The work looks simple until duplicate records, lifecycle changes, exceptions, and customer commitments show up.
The Moss Home implementation shows how to introduce AI without letting it replace business controls. Deterministic integrations maintain the operating record. AI interprets unstructured language and prepares communication. Humans keep the decisions that change money, commitments, inventory, or customer outcomes.
That division makes the system easy to test, easy to shut down, easy to recover, and easy to extend one supported intent at a time, with evidence, instead of granting broad authority up front. It is the same operating model Expert AI Labs runs on its own production systems.