New: Decision Runtime — closed-set judgments for Agent OS. Read the guide →
HazelJS LogoHazelJS

Zynli.AI

Live in production

Multi-tenant AI support on the HazelJS stack

A shipped SaaS product — RAG inbox, guided flows, billing, and real-time handoff — built by HumanBee AB as proof HazelJS packages run real workloads.

Built by HumanBee AB

Case study

Why this product exists

Generic chatbots invent answers. Pure ticket queues drown agents. Zynli had to ground every reply in each workspace’s knowledge, escalate when confidence drops, and still feel like a real SaaS product — tenants, embeds, subscriptions — not a demo script.

The challenge

Four problems that break naive AI support

  1. Answers must be knowledge-grounded

    Each workspace owns its own policies, FAQs, and product docs. A shared model with no retrieval path drifts into confident fiction — unusable for support.

  2. Low confidence needs a human path

    When retrieval is thin or intent is ambiguous, the visitor should reach a live agent with full conversation context — not restart in email.

  3. Tenants need hard isolation

    KB, branding, embed allowlists, and billing are per workspace. One leaky shared index or shared billing edge case becomes a trust failure.

  4. Actions need guided tools, not vibes

    Order lookup, ticket creation, and HTTP actions must follow intent routes and structured inputs — free-form model guesses are not an integration layer.

Requirements

What the product had to ship

Zynli was scoped as a production multi-tenant support platform, not a single-tenant chatbot experiment.

  • Per-workspace knowledge base with agentic RAG answers before human escalation
  • Intent-routed guided flows for order tracking, tickets, and custom HTTP tools
  • Embeddable widget with origin allowlist, branding, and optional verified identity
  • Real-time agent inbox and visitor handoff (Socket.IO)
  • Workspace subscriptions and billing suitable for SaaS operations
  • Public booking / meeting surfaces for demos and discovery calls

How HazelJS solves it

Package map — challenge to capability

Zynli uses HazelJS packages inside a TypeScript SaaS backend. That is the ecosystem proof path — not the Agent OS DNA / Skillgate teaching path (see Meridian for that).

Challenge

Knowledge-grounded answers per tenant

HazelJS

Agentic RAG over workspace corpora before the model speaks

Retrieval and grounding patterns keep replies tied to ingested knowledge instead of generic chat completions.

@hazeljs/rag

Challenge

Model orchestration & tool-ready replies

HazelJS

AI call surface for providers, prompts, and structured generation

Provider and generation plumbing stay in-package so product code focuses on support workflows, not SDK glue.

@hazeljs/ai

Challenge

Conversation and session context

HazelJS

Memory primitives for durable conversational state

Turns, session context, and follow-ups need memory beyond a single request — especially across handoff.

@hazeljs/memory

Challenge

Async work and reliability edges

HazelJS

Queue-backed jobs for work that must not die with a request

Background and deferred work (ingest, notifications, retries) sit on queue patterns instead of ad-hoc fire-and-forget.

@hazeljs/queue

Challenge

SaaS subscriptions

HazelJS

Payment integration patterns for plan-based workspaces

Workspace plans and billing hooks follow HazelJS payment patterns rather than a one-off Stripe wrapper.

@hazeljs/payment

Challenge

Shared runtime building blocks

HazelJS

Core utilities and composition shared across the app

Cross-cutting primitives keep the multi-package stack coherent inside one Node/TypeScript product.

@hazeljs/core

Architecture

Visitor path through Zynli

The embed loads from CDN (or app origin), mounts an allowlisted iframe, and routes each message through knowledge and flows before any human sees the thread. Live agents join over Socket.IO with the same conversation context the bot already built.

  1. 01

    Host site

    embed.js · allowlist · tenant

  2. 02

    Widget iframe

    branding · identity · locale

  3. 03

    RAG + flows

    KB retrieve · intent tools

  4. 04

    Confidence gate

    answer · escalate · ticket

  5. 05

    Agent inbox

    Socket.IO · full context

What shipped

Verified product surfaces

We publish implemented functionality — not invented ticket-deflection percentages, CSAT lifts, or revenue claims. Open the live product for current capabilities.

01

Agentic RAG inbox

Visitors get KB-grounded answers first; low-confidence turns escalate to live agents with full context.

02

Guided flows & tools

Intent routing runs order tracking, ticket creation, and custom HTTP actions.

03

Multi-tenant SaaS

Workspaces, subscriptions, embed domains, and branding — shipped as a product, not a demo repo.

04

Embeddable React widget

@zynli/react-widget loads embed.js (CDN by default) with appUrl for the workspace origin.

HazelJS stack in production

@hazeljs/rag@hazeljs/ai@hazeljs/core@hazeljs/memory@hazeljs/payment@hazeljs/queue

Try the support widget on this site — it runs on the same HazelJS RAG stack as Zynli.

Want the Agent OS path instead?

Zynli proves HazelJS packages in a SaaS product. For DNA, HITL, Skillgate, Gatekeeper, and local apply, clone Meridian — that is the Agent OS teaching path.

HumanBee × HazelJS

Build a similar AI support product

HumanBee ships production AI products on HazelJS. Consulting is optional — the framework stays open source.