VisitorAI puts an assistant on the front of your site that has actually read it. Visitors ask in
plain English and get an answer from your real pages — with a link to where it came from.
When it cannot help, it takes their details instead of losing them. And because it runs through
dijitul.ai, every message a customer types is processed in London.
Version 0.2.0 · WordPress 5.8+ ·
PHP 7.4+ · needs a
dijitul.ai key
On a real site
London
do you deliver to the highlands?
We do — Highlands and Islands deliveries are £8.50 and take 3–5 working days rather than the usual 2. Orders over £75 are still free, but the longer timescale applies.
Delivery & Returns
and if I need it faster than that?
Our next-day service doesn't cover Highland postcodes, so 3 working days is the quickest we can promise. If you have a fixed date to hit, I can pass your details to the team and they'll tell you what's possible — what's the best email for you?
The delivery detail came off the site. The offer to pass it on came because the site does not
answer the second question — and that is the enquiry you would otherwise never have heard about.
Why it is safe to put in front of customers
The objection to a chatbot is that it makes things up.
It is the right objection. Most site chatbots are a general-purpose model with your homepage stapled
to the prompt, and they will confidently invent a returns policy. VisitorAI is built so that
objection does not apply.
Grounded
It answers from your pages, or not at all.
Every reply is built from passages retrieved out of your own content. Where your site is silent, it says so
instead of inventing a price, a lead time or an opening hour — the four things a wrong answer costs you a
customer over.
Ringfenced
It will not be talked off-topic.
Ask it to write your homework, argue about politics or recommend a competitor and it declines and steers back.
Retrieved content and visitor messages are both handed to the model as untrusted data, so a "ignore your
instructions" line pasted into the chat — or hidden in a page by a contributor — does not become an instruction.
Bounded
It cannot run up a bill.
A public chat box is an anonymous endpoint spending your allowance. There is a cap per visitor, a cap per
conversation, and a whole-site daily ceiling you set. Reach the ceiling and it stops politely rather than
quietly carrying on.
It is still a language model, and it can still be wrong. The widget says so under every conversation, the
sources are linked so an answer can be checked, and you should read what it has been asked rather than
assume. Anything it genuinely cannot answer turns into an enquiry, which is the point.
How it answers
The search happens on your own server.
Most AI chatbots work by shipping your entire website to a third party, converting it into
vectors, and keeping that copy so it can be searched later. It works well, and it means a
complete duplicate of your content lives on somebody else's infrastructure indefinitely.
VisitorAI indexes your content into your own MySQL database and searches it there. When a
visitor asks something, the plugin finds the relevant passages locally and sends only those,
with the question. Your site is never uploaded, and there is no copy of it anywhere to leak,
subpoena or re-embed.
1
You index the site
Pages are split on their headings, with navigation, menus and footers stripped out so every search does not match every page.
2
A visitor asks something
The plugin searches its local index — including any synonyms you have taught it — and picks the handful of passages that match.
3
Those passages go to London
The question and the matched passages are sent to dijitul.ai and answered by Claude in AWS Europe (London).
4
The answer comes back with its sources
Short, in your tone of voice, with links to the pages it used. If nothing matched, it says so and offers to take their details.
The honest trade-off
Local search matches on words. Vector search matches on meaning, and it is genuinely better
at questions phrased in words that appear nowhere on your site.
We took the trade deliberately, and we closed most of the gap rather than pretending it is not
there: the plugin stems words so delivery finds deliver, folds the previous
question into short follow-ups so “how much is it?” still works, and gives you a synonym box
for the vocabulary only you know about.
Word swaps
price = cost, fee, tariff
delivery = shipping, postage
holiday = annual leave, time off
Three lines like these fix more wrong answers than any amount of model tuning, because the
mismatch is almost always vocabulary rather than reasoning.
Data residency
What your customers type stays in the UK.
A front-end chatbot is the one place on your site where members of the public type whatever they
like — order numbers, addresses, health details, complaints about a named member of staff. You
are the controller for all of it, and where it goes next is your decision to be able to answer.
Route it to a model in the United States and you have made a restricted transfer, which needs an
Article 46 safeguard and — where the vendor relies on standard contractual clauses, as
Anthropic does — a transfer risk assessment that is yours to complete.
VisitorAI runs through dijitul.ai, where inference happens in AWS Europe (London) and nowhere
else. There is no international transfer to assess, because there is no international transfer.
A request that cannot be served in London fails rather than quietly routing somewhere it should
not.
There is no "use Anthropic directly" option — unlike AdminAI, this plugin has one route out and no way to change it
The gateway address is fixed in code, not a settings field somebody can repoint at a US endpoint
Only Claude Sonnet 4.6 and Claude Opus 4.6 are selectable, because they are the models that can be invoked in London
Test connection reports the residency tier your key is actually on, and warns loudly if it is not UK-only
Visitor IP addresses are used for rate limiting and stored only as a salted hash
Conversations are discarded after two hours unless they produced an enquiry, and enquiries are deleted on a schedule you set
Hosting in the EEA is also a lawful answer, and we are not going to tell you otherwise —
UK → EEA transfers are covered by adequacy. The UK tier matters where your own
procurement, sector rules or client contracts ask for a UK answer specifically.
dijitul Ltd is not a law firm and this is not legal advice.
What you get
Everything it knows, you put there.
Three sources, in order of how much it should trust them. Notes you write outrank uploaded
documents, which outrank the pages it scraped — so correcting a wrong answer takes one paragraph,
not a rewrite of the page that caused it.
Trained on your site
Pages, posts and any custom post type you tick. Re-read automatically when you edit them, with a full pass nightly.
Notes you write
Facts that live nowhere on the site — parking, lead times, what you do not do. These outrank your pages when the two disagree.
Uploaded documents
Price lists and FAQs as plain text, Markdown or CSV. A two-column CSV is read as a question-and-answer list.
Enquiry capture
When it cannot answer, or when someone wants a quote, it takes a name and contact details and emails them to you.
Sources under every answer
Replies carry links to the pages they came from, so a visitor can read the detail and you can see where it got it.
Word swaps
Visitors say "price", your site says "fee". One box of synonyms fixes more wrong answers than anything else in the plugin.
Enquiries
A bot that only answers questions is worth less than a search box.
The visitors worth catching are the ones asking something your site does not cover. Today they
read two pages, find nothing, and leave — and you never learn they existed.
VisitorAI recognises those moments. When it cannot answer, or when somebody is clearly after a
quote or a booking, it offers to take their details, records what they were asking about, and
emails it to you with the conversation attached. It asks once, and it never invents a name or an
email address it was not given.
Everything lands in an Enquiries screen inside
WordPress. Nothing is sent to a CRM you do not own, and there is a hook for pushing it into one
you do.
New enquiry — email to you
NameRachel Okonkwo
Emailr.okonkwo@example.co.uk
Page/delivery-and-returns
ReasonCould not answer
What they asked about
Needs a Highland delivery for a fixed date next Thursday. Our next-day service does
not cover her postcode, so she wants to know what is possible.
Cost control
It is an anonymous endpoint spending your money.
That single fact drives most of how this plugin is built. Four layers, because every one of them
is defeatable on its own.
Signed sessions
A signed, short-lived token issued per visitor. WordPress nonces are cached along with the page for logged-out visitors, so they are the wrong tool here.
History on your server
The browser holds a session id and nothing else. It cannot pad the conversation to inflate a bill, or forge a reply that says the product is free.
Per-visitor limits
Messages per hour, messages per conversation, message length, and a minimum gap between messages.
A daily ceiling
One number, for the whole site, that you set. Reach it and the assistant stops until tomorrow. This is the backstop the others fall back to.
The plugin also reads your live allowance from the gateway. Once it is spent, the widget stops rendering
altogether — a visitor sees no chat box, rather than a chat box that apologises. Cloudflare Turnstile can
be added for a silent check before anyone's first message.
Getting started
Four steps, about ten minutes.
1
Download and install it
Plugins → Add New → Upload Plugin. The plugin is free; it just does nothing yet.
2
Paste your key
VisitorAI → Setup. Press Test connection — it reports your plan, your allowance and the residency tier you are on.
3
Index your content
Tick the post types it should read, then Rebuild the index. A few hundred pages takes under a minute.
4
Switch it on
Set the tone, the opening line and the colour, then tick Show the assistant to visitors.
It refuses to go live until there is a key and something in the knowledge base, so there is no
state where a visitor meets an assistant that knows nothing.
Full-text search is used where your database supports it and falls back to a simpler search
where it does not. The Setup screen tells you which one you have.
Live demo
It is running on this page.
The assistant in the corner is VisitorAI, trained on this website instead of yours. Same
widget, same prompt, same rule that it answers from the site or not at all. Ask it what a
plan costs, where your prompts are processed, or how this differs from calling Anthropic
directly.
Then try to catch it out. Ask it something this site does not cover, and watch it say so
rather than invent an answer — that behaviour is the entire product.
This site is not WordPress, so the demo re-implements the plugin’s server side in
Laravel — but it loads the plugin’s own widget, speaks the same protocol, and
goes through the same public API on the same UK-only tier a customer would use. The
“Powered by dijitul.ai” line at the bottom of the panel is what your visitors
will see too — you are looking at the real thing. Lead capture is switched off here;
on a real install this is where it would offer to take your details.
Questions
The things people ask before installing it.
Is the plugin really free?
Yes. The plugin is a free download and there is no licence fee, upsell or paid tier inside it. It does nothing
without a dijitul.ai API key, because the answers are generated by Claude and that costs money to run. The Solo
plan at £29/month is where most single sites start.
Does my whole website get uploaded somewhere?
No. The search that decides which passages are relevant runs inside your own MySQL database. Only the handful of
matching passages travel with the visitor's question. Nothing is embedded, vectorised or stored by us, and your
content is not used to train anything.
What stops it making things up?
Two things. It is instructed to answer only from the passages it is given and to say so plainly when they do not
cover the question. And it is given very little room to improvise — replies are short, and the passages it used are
linked underneath so you can check them.
It is still a language model. It can be wrong, the widget says so, and you should read the enquiries it produces
rather than assume every conversation went well.
Can someone abuse it to run up my bill?
It is designed on the assumption that they will try. Sessions are signed, conversation history is held on your
server rather than in the browser so it cannot be padded, and there are per-visitor hourly limits, a per-conversation
message limit and a site-wide daily cap. Cloudflare Turnstile can be switched on for a silent check before a
visitor's first message.
The plugin also reads your live allowance from the gateway and hides the widget entirely once it is spent, rather
than greeting visitors and then failing in front of them.
Where are visitors' messages processed?
In AWS Europe (London), on Claude Sonnet 4.6 or Claude Opus 4.6. The plugin cannot be pointed anywhere else: the
endpoint is fixed in code and only models that can be invoked in London are selectable. Press Test connection
in the plugin and it reports the residency tier your key is actually on.
What about PDFs and Word documents?
Not supported, deliberately. Extracting text from a PDF in PHP on shared hosting is unreliable, and on a scanned
document it produces silent gibberish — gibberish the assistant would then quote to a customer as fact. Paste the
text into a note instead, which takes a minute and works every time.
Will it slow my site down?
The widget is about 20KB of CSS and JavaScript with no framework and no build step, loaded at the end of the page.
It makes no network request until a visitor opens it. Indexing runs in the background, and the page-load check for
whether to show it is cached.
How is this different from AdminAI?
Same gateway, opposite side of the login. AdminAI is for you: it reads your
database, pulls reports and makes changes with your approval. VisitorAI is for the public: it reads only your
published content, changes nothing, and never touches your database beyond its own tables.
Put it on one site and read what people ask.
The plugin is free and the questions it cannot answer are worth reading on their own — they are the pages
your website is missing.
We would like to measure how people use this site, using Google Analytics. That sets cookies
and shares your IP address with Google in the United States, so we will not do it unless you
say yes. Everything on the site works either way.
Privacy notice.