Plainbase Ask is a support chatbot you embed in five minutes. Point it at your help center, PDFs, and Markdown. It answers the obvious questions, cites the source, and escalates to a real human by email when it should.
Feed it your sources, write a paragraph of instructions, drop a script tag on your site. Grounded answers, or an escalation email to your support team.
Drop PDFs and Markdown files into the admin, or point the crawler at your docs site. Each source is chunked, embedded, and stored in a local vector DB.
Write the bot's tone, scope, and escalation rules in four short fields. Pick an AI provider — Mistral, OpenAI, Anthropic, or Google. Save and you're ready to embed.
Paste one <script> tag into your site. The chat bubble appears. Conversations, tickets, and AI logs land in the admin.
The admin is laid out the way you actually work: ingest, instruct, embed, review, escalate, tune. Nothing else.
Every answer is grounded in what's indexed. Drop in PDFs and Markdown for one-off content; point the crawler at a URL and it walks the same-domain links, respects robots.txt, and stays within the page limit you set.
Plainbase Ask assembles its system prompt from four layers, stacked. You edit one of them — the part that actually changes between deployments. Tone, scope, when to escalate, anything time-sensitive.
Hardcoded platform rules: KB search, citation format, ticket tool, markdown allowlist.
Tone & persona · scope & guardrails · escalation hints · additional context · trigger phrases.
Top matching chunks retrieved per turn from your vector store.
Last 10 messages (configurable) so context survives across turns.
Configure the chat bubble in the admin; copy the embed snippet; paste it into your site. Multiple languages get a built-in picker. Allowed domains keep the widget locked to your sites and nobody else's.
Read what visitors asked, what the bot answered, and exactly what the model saw on each call — system prompt, retrieved chunks, tool calls, response. Useful when the bot says something it shouldn't have, and you want to know why.
When the bot can't help — or someone asks for a human — the widget captures their email and submits a ticket. The ticket is recorded in the database and emailed to your inbox with the full transcript attached. Forward it into Zendesk, HubSpot, Linear, or just answer it from your support inbox.
Five rate limits with sensible defaults protect your model budget. Cost tracking lets you mirror provider pricing so the spend numbers in the admin reflect what you're actually paying.
Requests above this rate receive 429.
Simultaneous chat sessions per IP.
Sealed past the cap; visitor opens a new one.
Higher = better memory, higher cost.
Hard cap on each AI reply.
Used for spend estimates only.
Two models do the work: a chat model and an embedding model. Set them via environment variables and restart. If your chat provider doesn't ship embeddings, set a second provider for that one role.
Plainbase Ask is a Node server packaged as one Docker container. All state lives in two SQLite files on disk. Litestream streams them to any S3-compatible bucket continuously — restore from backup with the same env vars and an empty /data directory.
1–2 vCPU, 1–2 GB RAM, 10–20 GB disk. CPU barely moves — most time is spent waiting on the model.
A CX22 (€4.15/mo) handles 1,000 visitors / day comfortably. Scaleway, Koyeb, Scalingo, OVH all work too.
Litestream replicates both SQLite files continuously. If the box dies, restore from S3 — you lose at most a few seconds of writes.
Bring an OpenAI / Mistral / Anthropic / Google key. Bring an SMTP server if you want ticket emails. Bring an S3 bucket if you want backups.
Free, forever. Bring your own model key, your own SMTP, your own bucket. We never see your queries, your customers, or your knowledge base.
Check out the docs, or shoot us an email at hello@plainbase.dev.
github.com/plainbase-dev/plainbase-askYes. The code is AGPLv3-licensed and free forever. The only money that ever leaves your account goes directly to your AI provider — Mistral, OpenAI, Anthropic, or Google — at their usual per-token rates. We never sit in the middle of that bill.
If you'd rather not run the server, a managed hosted option is on the roadmap; sign up for updates from the footer.
For most teams, Mistral is the recommended default: cheap embeddings, fast chat, EU-based. OpenAI and Google are good if you already have credits. Anthropic doesn't ship embedding models, so you'll pair it with one of the others for the knowledge base.
You can switch providers from the admin without re-indexing as long as you keep the same embedding model.
It says so, instead of inventing. The system prompt is locked to "answer only from the indexed sources," and the retrieval threshold is tunable per deployment. When confidence is below the threshold — or when the visitor asks for a human — the widget surfaces a Get help from a human button that opens a ticket and emails the full thread to the address you set in 'Escalation' config.
Yes. But it's not ideal. The Docker container bundles the Node server and Litestream together, and the SQLite files are stored in a volume on disk. If you run the Node server without Docker, you need to set up Litestream separately to sync the SQLite files to your S3 bucket for backups. It's possible, but Docker Compose is the recommended way to run it for simplicity and ease of management.
Each crawl source has a recheck schedule — daily, weekly, biweekly, monthly, or never. The crawler re-fetches the page, diffs the content, and only re-embeds chunks that actually changed, so the bill stays small.
You can also trigger a recrawl manually from the admin.
It does. All labels are translateable from within the admin. Visitors can choose their preferred language when opening the widget, the AI sticks to that language for the duration of the chat.
Yes. Add your logo and primary color from the admin. For deeper styling, adjust the base widget files.