Project / Customer-facing systems

Support that answers itself, until it can't.

Live demo
app.deskline.io
All channels12 open · 3 waiting
Channel
Customer language
Lena R. returning customer · 3 orders Resolved · no handoff
  1. Lena R. 09:14

    Hi — where is my order? It was supposed to arrive Tuesday.

  2. Agent 09:14
    grounded in orders/4417 · fulfilment record

    Order 4417 · Lena R. · shipped 2 Mar 08:10 · carrier SEUR · tracking ••••8841 · last scan 3 Mar 22:40 Barcelona hub · estimate 5 Mar · 1 day late (carrier delay flag)

    It shipped on 2 March and it is one day behind — the carrier logged a delay at the Barcelona hub last night. Current estimate is tomorrow. Tracking ends ••••8841.

  3. Lena R. 09:15

    Ok. Can I still change the delivery address?

  4. Agent 09:15
    grounded in policies/delivery · address changes

    Address changes are accepted until the parcel reaches the final delivery depot. After the last-mile scan the carrier controls the address; customer is directed to the carrier's redirect page.

    Yes — it has not reached the final depot yet, so I can change it. Send me the new address and I will update it on this order.

app.deskline.io
Grounded in this site's own content — ask it about the work.
  • Claude API
  • OpenAI API
  • LangChain
  • LlamaIndex
  • Pinecone
  • n8n
  • Make.com
  • Zapier
  • Supabase
  • Airtable
  • PostgreSQL
  • Google Sheets
  • Python
  • FastAPI
  • Node.js
  • Cloudflare
  • Google Cloud
  • Hetzner
  • Shopify
  • Slack
  • HubSpot
  • GoHighLevel
  • Klaviyo
  • Chatwoot
  • WhatsApp Business API
  • Meta API
  • Mailgun
  • OpenAI Vision
  • ClickFunnels
  • Twilio
  • ElevenLabs
  • Whisper / TTS
  • Docker
  • Redis
  • Stripe

What it is

Atlas runs several stores and takes inquiries in five places at once — Messenger, Instagram, WhatsApp, email, and the on-site widget. Five tabs, five queues, no shared history, and a per-seat helpdesk bill that grew with the volume.

This replaced all of it with one self-hosted inbox and an agent in front of it. Chatwoot runs on a Hetzner VPS. A Meta developer app connects the social channels; the WhatsApp Business API handles the rest. Every inbound message lands in the same thread history, and the agent answers from that history plus the customer’s live order data — in whatever language the message arrived in.

The number that matters is not how many it answered. It’s that 80.4% of a 60-day run closed with no human handoff, and the other 20% arrived at a person already summarised, already tagged, already holding the order record. Recurring software cost: nothing. The VPS is the only line item.

From a real engagement. Names are changed; the numbers are not.

How it works

Four moving parts, all on infrastructure the operator owns.

  1. Channels land in one inbox

    A Meta developer app with webhook subscriptions routes Messenger and Instagram into Chatwoot; the WhatsApp Business API and inbound email arrive in the same place. Chatwoot itself runs on a Hetzner VPS — the only line item on the whole system. Five tabs become one queue.

  2. Context is assembled before a reply

    Each new message fires a Make.com scenario that pulls the full conversation thread plus the customer's order and shipping records, then hands that to the model. It answers from the account in front of it, not from a generic FAQ.

  3. The model replies in-language

    The reply goes back on the channel it came in on, in the language the customer wrote in, matched to a set reply style. No "our team will get back to you" — the answer is the message. Most threads close here.

  4. Escalation only when it's real

    Refund demands, low-sentiment messages, and anything outside scope are tagged and assigned to a person with the thread summary and order record attached. That hand-off — deciding when the machine should stop — is the part worth building. It's the other ~20%.

  • “It cleared the queue we could never keep up with. We only look at the handful it flags now.”

    Operations lead · multi-store retail operator

  • “Condition grading and pricing that used to be a weekend is now a photo upload.”

    Founder · collectibles brand

  • “The drafts are good enough that answering is now approving.”

    Operations lead · B2B services

  • “I stopped waiting for yesterday's numbers. Today's are just there, all stores in one view.”

    Owner · multi-store retail operator

  • “It books and qualifies before we're even awake. The morning list is just the ones worth a callback.”

    Founder · home-services company

  • “It shipped in pieces we could check as they landed, and the pieces we argued with got changed.”

    Operations manager · logistics

  • “None of it is rented. I did not expect that to matter as much as it turned out to.”

    Founder · consumer goods

Proof

"It cleared the queue we could never keep up with. We only look at the handful it flags now."

Operations lead · multi-store retail operator

Walkthrough
Through the live build — the Meta webhook setup, the Make scenario assembling context, and a real multilingual thread resolving end to end.

References on request.

The operation

Founder-led. Specialist-built.