Skip to content
Adaptive Systems
Menu

Front Desk · conversations

One engine. Every decision on the record.

The AI receptionist, support bot and lead qualifier behind every chat, call, form and email. Self-hosted, Docker-based, provider-agnostic: models where language is messy, code wherever the answer must be right.

Open the Front Desk appThe five modules Case study on GitHubFor documents: Docket

Architecture

Seven layers. Watch a request go through them.

Pick a path or let it play: each step lights the part of the stack that handles it. Hover to pause.

1/10 · Web forms: the form posts to its business's secret URL

Channels

what you already have

  • Chat widget

    one script tag, call button

  • Voice

    browser widget + phone number

  • Web forms

    one secret URL per business

  • Email

    forward your inbox to an intake address

  • Telegram

    a bot per business

  • Admin / MCP

    Claude connector, ops tools

Edge

TLS · allowlists · limits

  • nginx

    per-host path allowlists, rate limits

  • CrowdSec

    bans brute-force sources

  • Secrets

    HMAC, per-client keys, header secrets

Orchestration

visual, inspectable

  • n8n

    lead pipeline, alerts, booking events

  • Alerts

    Telegram, Slack, email, daily digest

  • CRM webhook

    signed events to any URL

Engine

Python · FastAPI · LangGraph · Pydantic AI

  • Support

    facts + RAG, citations, refusals

  • Booking

    profile-driven slots, alternatives

  • Voice tools

    speakable answers; facts p95 ≈ 40 ms

  • Lead scoring

    sub-scores with evidence quotes

Decision

deterministic

  • Policy gate

    TypeScript, versioned policy, reason codes

  • Jev overlay

    independent second opinion → review

Data

client_id on every row

  • Postgres

    audit log, bookings, calls

  • pgvector

    1536-dim HNSW cosine

  • Redis

    session memory, rate limits

Operations

boring on purpose

  • Uptime Kuma

    monitors + status page

  • Backups

    checksums + real restore test

  • Boot check

    every service checked after a reboot

  • Test suites

    golden, static, live smoke, real calls

Flows

Three paths through the engine.

Support answer

  1. 1question
  2. 2injection check
  3. 3split into intents
  4. 4facts from profile
  5. 5RAG over client docs
  6. 6unsupported-fact guard
  7. 7answer + citations

Voice booking

  1. 1caller
  2. 2voice agent
  3. 3availability tool
  4. 4book tool
  5. 5row in Postgres
  6. 6signed post-call webhook
  7. 7call record + alert

Lead

  1. 1form / webhook
  2. 2n8n
  3. 3deterministic extract
  4. 4LLM sub-scores
  5. 5policy gate
  6. 6route + reply
  7. 7audit + Telegram

Worked example

What the lead pipeline does with one message.

Inbound leadn8n webhook · secret header
Hi! We run a B2B SaaSindustry and need an AI-powered RAG chatbot trained on our documentationneed, plus a lead-qualification bot for our website. Budget is $8-10kbudget, we want to start next monthtimeline. Can we book a scoping call this weekintent?

Reference case from the golden test suite. It must route to a full offer on the primary model, with the primary model switched off, and with keyword fallbacks disabled.

  1. 01Extractbudget $8,000 (range → lower bound, USD) · start = 1st of next month · no spam signals
  2. 02Evidenceeach LLM sub-score must quote the lead; a quote that isn't in the message is dropped
  3. 03Scorefit · budget clarity · urgency · authority · scope, weighted from client config
  4. 04Gatebudget ≥ $1,000 tier · plausible · no injection · confidence floor → PASS
  5. 05Routefull offer · reply names the verified need and industry · no prices or dates invented
  6. 06Recordaudit row with every input, score, quote, gate and timing · Telegram alert

Principles

The rules the code follows.

The model scores, code decides

LLMs extract and rate; a deterministic TypeScript gate with versioned policy makes the final call and records its reason codes.

Facts from config, never generated

Hours, prices, services and addresses come from one profile file per business. Answers that contain anything else are blocked.

Degrade, don't fail

Every model has a deadline and a fallback. If all of them are slow, the lead goes to human review instead of an error page.

Every decision is auditable

Each lead, answer, booking and call is stored with its inputs, outputs, timings and the rules that fired.

Tenants can't leak

The business a request belongs to comes from its credential, never from model output. Every row carries a client id, and cross-client reads are tested.

Tested like software

Golden suites across a dozen industries, static checks, live smoke tests and real voice calls run after changes.

Deployment

Your server or ours.

Installed on your server

The full stack runs in Docker on a VPS you own: your data never leaves it, you pay the model providers directly, and we hand over monitoring, backups and the test suites.

Hosted by us

Your business runs as a client on our stack: its own keys, knowledge base, bookings and audit trail, isolated from every other client, with rows tagged by client id and cross-client reads tested.

See them run on real data.

The apps run real models on every click, so they sit behind a password. Ask for a login or a guided walkthrough: talk to our AI receptionist in Front Desk, drop invoices into Docket, or load forged applicants into Dossier. Or try them in public: score a lead, read your invoice, forge an applicant, or connect Docket and Dossier to Claude. Or hire us to build yours.