Skip to content
Product · Nerv

The question line in the corner of this page is Nerv

Your visitors don’t go looking for a chat button — they type the question. Nerv answers from your help center, hands the conversation to your team the moment it’s unsure, and you set it all up from a settings screen, not your code

Start free
Free plan · no cardOne script tagNo developer to change it
The question line

A line to type in, not a bubble to click

A chat bubble asks for a click, then shows a welcome screen, then wants another click before anyone types. The line takes the question first, and the chat opens on the answer

It shows what to ask

Your suggested questions take turns in the line and line up above it when a visitor clicks in. One click sends the question

It speaks first, in the line

A proactive message appears in the line itself, with a dot, instead of a pop-up over your page. A click opens the conversation

Replies wait in the line

When your team answers after the visitor has moved on, the start of the reply shows in the line with a count. One click and they’re back in the conversation

It stays out of the way. No logo on it and nothing flashing. It steps aside while a visitor types in one of your own forms, and on a phone it becomes a bar above the keyboard only when it’s tapped. Prefer the classic chat bubble? It’s one switch in the panel.

The AI

Watch it answer one

A customer asks. It reads your help center, shows the article it used, and answers only above the confidence threshold you set. Click any step

Conversation#4192
triage
“Can I still get a refund on invoice #4192?”
Triage
Intent
Refund request
Priority
Urgent
Language
Russian
Route
Billing team
Read from your help center3 of 142
KB-127Refund policy0.91
KB-204Subscription tiers0.86
KB-307Cancellation flowstale 14d0.74
Drafted · grounded
Your invoice #4192 is 6 days old, and refunds are available within 14 days on the Pro plan — so you’re still eligible. To start one, open Billing → Invoices and choose Request refund.
cites KB-127cites KB-204
Safety checks
GroundedOn policyPII redacted

Email addresses, phone numbers, card numbers and IP addresses detected in content sent to AI models are removed before it is sent. Contact details that your workspace publishes for customers in its knowledge base are not removed. Grounding and policy checks run before the reply is sent.

Decision
Confidence0.94
Outcomeanswered from KB · no handoff

Below its confidence threshold it hands the conversation to a human in Portal, with the sources it was working from.

It answers from the help center you give it. No articles, nothing to answer from. Each article carries its own switch for the customer-facing AI, so you choose what it’s allowed to use.

Below its confidence threshold, it does not answer. It hands the conversation to a person, with a card in the chat and their real name on it — so your customer is never quietly switched from bot to human.

Anatomy

Every element, named and accounted for

Most vendors show you a screenshot. Nothing on this diagram is a mock-up of something we plan to build

tap any element
Where is my order?How do refunds work?Do you ship abroad?
Ask a question
AI

Admin panel means you change it yourself and visitors pick it up on their next page load. Built in means the widget just does it — there’s nothing to set.

NervAIReplies instantly
AI-powered assistant
Can I still get a refund?
Read
NervAI

Your invoice is 6 days old and refunds run for 14 days, so you’re still eligible. Start it from your order page.

Sources:Refunds and returns
Did this answer your question?Yes, thanksTalk to a human
Type a message…
Powered by TruSend

Admin panel means you change it yourself and visitors pick it up on their next page load. Built in means the widget just does it — there’s nothing to set.

Help Center
refund3 results
Getting started12Billing & refunds8Integrations5
Still need help?Ask us — we’ll keep your question
Powered by TruSend

Admin panel means you change it yourself and visitors pick it up on their next page load. Built in means the widget just does it — there’s nothing to set.

Nothing you just clicked needs a developer — it’s the panel, or it’s built in.

Start freeFree · 50 AI resolves, one-time · no card
Make it yours

Set in the panel, not in your code

The launcher, the colour, where it sits and how the chat opens — the controls below are the same settings your admin panel has. Push on them

Customizelive preview
Brand color
Theme
Launcher
Button shape
Position
Chat window
Header

Change any of this in the panel — no deploy, no developer.

yoursite.com
preview
My Company

Your product, beautifully supported

Get startedLearn more
AI

The preview covers the look; the same panel screen also holds your logo, the questions the line suggests, the line’s placeholder, which pages it shows on, language, the pre-chat form and white-label — all in the panel, none of them a deploy.

When a change reaches people

Change it in the panel and visitors pick it up on a page load within the next few minutes — we hold onto your settings for five minutes so the widget starts fast. A chat that’s already open keeps the settings it started with until they reload

Your brand colour

Pick any colour. We work out whether the text on it should be black or white so it stays readable, and lift it in dark mode if it’s too dark to see against the panel

Install

One tag, and it's live

You need one line in your page. Everything above happens after that, from the panel

<script
  type="module"
  src="https://cdn.trusend.ai/widget.js"
  data-app-id="YOUR_APP_ID">
</script>
  • Loads after your page — it never holds up what your visitors see
  • Checks the site it's running on is one you allowed
  • Loads your settings
  • Starts an anonymous session for the visitor

That’s the whole install — no backend, no glue code. Add your domains to the allowlist and the widget only boots on them — an App ID copied off your page won’t load anywhere else.

Want the line inside your page instead of the corner? Put <nerv-ask></nerv-ask> where it should sit — under a pricing table, on a help page. The answer opens right there, and the corner line steps aside while the one in your page is in view.

From zero to live
  1. 01
    Create your workspace

    Free plan, no card — the panel is yours in a minute

  2. 02
    Give it answers

    Write help articles in the platform, or import the ones you already have

  3. 03
    Paste the tag

    One line, on the pages you choose from the panel

  4. 04
    Go live

    The AI answers from your content; everything else lands in your team's inbox

Proactive

Catch the visitor who was about to leave

Someone stalls on your pricing page, drifts toward the close button, or comes back for a second look — Nerv can speak first at that moment, right in the question line. Three of the triggers you can build:

Greet first-time visitors

Message
whenFirst visit30s on page
New here? Ask us anything.AI

Nudge the pricing reader

Banner
whenScroll depth 50%URL is /pricing
Got a pricing question? Ask here — it takes two minutes.

Catch leads after hours

Collect data
whenOutside business hoursIdle 60s
We’re offline until morning — leave an email and we’ll pick it up first thing.
you@company.comSend
Mix any moment
Time on pageTime on siteIdle timeExit intentFirst visitReturning visitorScroll depth (fires at 50%)
With conditions
Page URLClick on a selectorCustom eventBusiness hours

The copy, the pages, the caps and the cooldowns are all yours, authored in the panel — no code, no deploy.

And it can’t become the annoying kind. Proactive chat got its bad name from tools that let you spam. Nerv’s anti-spam limits are built into the widget itself — however aggressively it’s configured, your visitors stay protected. One visit, drawn:

Forms

Ask who they are after they’ve asked

A form in front of the chat is where visitors turn around. Nerv takes the question first, then asks for a name and email in a card under it, so the question is never lost

  • Switch it on in the panel — Name and Email are there by default, both required
  • Add your own: a label, a type (text, email or phone), required or not
  • Nothing gets through half-filled: required fields have to be answered, and we check the email and phone are the right shape
  • Asked once per session, not on every page
Compliance

Your customer can always tell it's a bot

The AI disclosure is built in, on by default and locked — not a setting your team has to remember or can switch off

Article 50(1) of the EU AI Act requires that people are told when they are interacting with an AI system. The notice does that, and the handoff card shows when a person takes over.

EU AI ActArticle 50
  • The AI disclosure is on by default and locked on — white-label can restyle the copy, never remove the marker
  • While the AI has the conversation: its name, an “AI-powered assistant” label, and no green online dot. A bot is never dressed up as an available human
  • On handoff, an explicit card with the agent's real name — the responder is never silently switched
Personal dataControls
  • Conversations encrypted in transit (TLS)
  • Crash reports are scrubbed in the visitor's own browser before they reach us — passwords, tokens, cookies and anything that looks like an email address are stripped first
  • Your team's accounts can export their data or delete the account themselves, confirmed by an emailed link
Payment dataNo payments taken
  • Nerv doesn't take payments — it isn't a cardholder data environment
  • Agent drafts are scanned for card numbers, IBANs and national IDs; a flagged draft is never saved in their browser. We log that it happened — never what it said

We describe what’s built, not what’s certified — the full security posture is on the security page →

What it costs

Start free. Paid plans meter what the AI closes on its own

The conversations your team answers are free and unlimited, on every plan. The meter only moves when the AI resolves one end to end, with no human involved

Free
€0/mo
free — no card
50 AI resolves, one-time
3 seats
kick the tires
Starter
€39/mo
€468 billed yearly · or €49 billed monthly
150 AI resolves /mo
4 seats
a small team
Recommended
Growth
€99/mo
€1,188 billed yearly · or €129 billed monthly
800 AI resolves /mo
6 seats
teams of 3+
Pro
€349/mo
€4,188 billed yearly · or €449 billed monthly
3,000 AI resolves /mo
12 seats
high volume

Free is a sandbox, not a free tier: 50 AI resolves, one-time, no card. When they’re used up the AI stops auto-resolving — your widget and inbox keep working, and upgrading turns it back on.

The widget carries a “Powered by TruSend” footer on Free, Starter and Growth — white-label is a Pro feature.

Full pricing and calculator

Coming from Intercom, Crisp or Tidio? Why switch to TruSend →

Billing · JuneGrowth · €129 / mo
512 / 800
AI resolves this cycle
64%
forecast
Used
512
Remaining
288
Projected
672
overage off · AI stops at 800soft cap · email alert at 90%
Questions

The ones owners actually ask

The developer questions have their own section below — these are yours

What happens when the AI can’t answer?

When its confidence is below the threshold, the conversation goes to your team with an explicit handoff card and the agent’s real name — and the visitor can ask for a person at any time. A handoff is not billed as a resolve.

Do I need a help center before I start?

No — but the AI only answers from content you’ve approved. Write articles in the platform or import what you already have; until then Nerv still works as a live-chat widget with your team’s inbox behind it.

Can I run it without the AI?

Yes. The widget and your inbox work on every plan even with zero AI resolves — the meter only runs when the AI closes a conversation end to end. Each help article also carries its own switch for the customer-facing AI, so you decide what it’s allowed to use.

Can I try it next to Intercom or Crisp?

Yes. The install is one script tag, and you choose which pages it appears on from the panel — so Nerv can run on a few pages while your current tool keeps the rest. Nothing to migrate before you’ve decided.

Won’t a line in the corner get in my visitors’ way?

It’s smaller than most cookie banners, carries no logo and doesn’t flash. It steps aside while a visitor is typing in one of your own forms, and on a phone it stays a small capsule until it’s tapped. If you’d rather have the classic chat bubble, switch the launcher to Button in the panel.

Where do conversations land for my team?

In Portal — the team inbox that ships with TruSend: assignment, notes, macros and SLAs, in the browser. The widget and the inbox are one platform, so a handoff is instant.

You’d be among the first teams on TruSend — and the person on the other end of founders@trusend.ai is the one building it.

Founder · TruSend

Founding customers

No logo wall yet. Be the reason there is one

12 founding spots
01

Apply

Two sentences about your support queue, then a short call. We pick 12 teams in two waves for fit — and say no to the rest.

02

Pilot for 6 weeks

Full Growth for your whole team, 5,000 resolve credits, €0 base. Before day one we agree what success means on your queue — say, the AI holding half of it with CSAT steady.

03

Your call

Criteria missed — you walk away free; the performance risk is ours. Criteria hit — Growth at €768 a year, billed annually, at that price for as long as your annual subscription renews without interruption (list €1,188/yr)

What we ask back, in writing: a feedback call every two weeks, a case study with real numbers by week 8, and your logo — only once it has earned its place

Apply for a founding spottwo sentences about your queue is a fine application
The technical bit

Everything your developer will ask

How it loads, what you can drive from code, who the visitor is, and the security answers — drawn where a diagram beats a paragraph. Forward it, or skim it yourself

01

Off your critical path

The tag is an ES module — deferred by spec, so your page paints first and never waits. Watch the boot happen

02

Drive it from your own code

Click a method — the widget shows you what it does

six of the methods on window.NervChat
NervChat.open({
  message: 'Where is my order?',
});
NervChat.setBranding({
  brandColors: { primary: '#0ea5a3' },
});
NervChat.setTranslations({
  'chat.input.placeholder': 'Ask us…',
});
// your backend signs the token — see below
NervChat.identify({ userId, token });
NervChat.getUnreadCount();  // → 2
// call it from your sign-out
NervChat.logout();

Anything you hard-code in init() wins over the panel — hard-code sparingly, or your support lead can’t change it without you. Pre-1.0: pin an exact version.

03

Who the visitor is

Anonymous out of the box; a signed token from one endpoint when your customers log in

The default
visitor
  1. Script tag loads
    nothing to build — this is the whole install
  2. Bot check
    no token, no chat — junk can't reach your inbox
  3. Anonymous session
    the widget starts it on its own
  4. Continuity cookie
    one cookie, in one browser — not a login
<!-- the whole install — anonymous needs nothing else -->
<script
  type="module"
  src="https://cdn.trusend.ai/widget.js"
  data-app-id="YOUR_APP_ID">
</script>

Continuity isn’t a security boundary — identify your signed-in customers if you need one.

customer
  1. Customer signs in
    on your site, the way they already do
  2. Your backend signs a token
    with your key — it never leaves your server
  3. Widget presents it
    the signed token is the whole verification
  4. Refreshed before it expires
    we re-call your endpoint rather than dropping the chat
// your backend signs it — we never see the key
NervChat.init({
  appId: 'YOUR_APP_ID',
  tokenProvider: async () => {
    const r = await fetch('/api/nerv-token');
    return (await r.json()).token;   // re-called before it expires
  },
});

We don’t hold your signing key — and can’t: client-side signing was removed on purpose, and the build forces the secret to empty in every mode.

04

Send these to your developer

Every verdict reads without opening a row — the detail is inside

Is your signing key in my page?No

The bundle carries public identifiers only. Client-side token signing was removed deliberately, and the build forces the JWT secret to empty in every mode, so it can't be reintroduced by accident.

Can someone else embed my App ID on their site?Not with the allowlist on

The widget calls a verify endpoint with its own origin before it renders anything — an origin that isn't on the list fails with DOMAIN_NOT_ALLOWED, and the widget never fetches your config and never opens a socket. Wildcards and a separate test-mode list are supported.

How do I rotate a leaked key?Two live keys

Two live API keys per workspace. Create the second, migrate to it, revoke the first — no window where the widget is down.

Can a malicious message run script in my page?Sanitized, both paths
Message markdown
Rendered through react-markdown. Raw HTML is only ever enabled together with rehype-sanitize, applied after it — so inline handlers and dangerous tags are stripped rather than trusted. Link protocols are checked: javascript:, data:, vbscript: and file: are blocked.
Help-center HTML
DOMPurify against a strict allowlist that forbids script, style, iframe, object, embed and form outright.

Both paths have regression tests.

What's on the wire?TLS · no cookies sent

The conversation runs over RSocket on a secure WebSocket; the bootstrap calls — verify, config, triggers, anonymous token — go over HTTPS, each with credentials omitted, so your cookies are never attached to them.

What does it put in my visitor's browser?A session, the chat history, 2 cookies
localStorage
Session token, cached transcript, read state
IndexedDB
Media blobs
Cookies
Two, first-party

This data is stored on your visitors' devices. List it in your cookie and privacy notices and decide whether your consent banner must cover it.

Is it isolated from my page?Shadow root, no iframe

Nerv renders inside a shadow root on your page, not in an iframe, so your stylesheets don't reach the widget and its styles don't leak into your page. A shadow root isolates styling only; it is not a security boundary against scripts running on your page.

Accessibility

Tested on every commit

Not a one-off audit that goes stale the week it’s signed — the checks run in CI, against the widget itself

axe suites in CIARIA feed patternLive-region announcementsprefers-reduced-motion honouredNon-modal — Tab returns to your page
If your site sends a Content-Security-Policy headerthe directives
script-src
The CDN host serving widget.js
connect-src
Our API host and WebSocket gateway for config and the conversation, plus the two attachment buckets a file is uploaded to and read back from
img-src
The same two buckets and our API host, plus data: and blob: — logos, image attachments, and the preview of a file before it leaves the browser
media-src
The same two buckets, plus data: and blob: — voice and video attachments. Miss it and they fail silently
style-src
'self' is enough — the widget's stylesheet is adopted, not injected, and style-src doesn't govern that

The install snippet and the panel settings live in the docs → The platform’s security posture is on the security page →

Ask the line in the corner — that’s the demo

No sandbox to request and no call to book. Ask it something, push on it — then talk to us

Start free

Curious where handoffs land for your team? See Portal →