Pitchbar — Self-hosted SaaS Sales AI Widget for Any Website
Pitchbar is a complete, multi-tenant SaaS platform
you can install on your own server. Every visitor on your site —
or your client's site — gets a sub-second AI sales assistant that
learns from your own pages, captures leads, and hands off to a
human in real time.
One <script> tag drops the widget on
any website — WordPress, Shopify, Next.js, React,
Vue, plain HTML, anywhere. The whole stack — agents, knowledge
base, inbox, billing, documentation — ships in one Laravel + React
application. Run it for yourself, for ten clients, or for a
thousand subscribers.
One purchase. Unlimited workspaces. Your data, your
infrastructure, your AI.
What's New in v2.1.0
External tool servers, a themeable marketing site, real control over
which AI model you run, and three dashboards that show you what the
product is actually doing. Existing buyers get this update for
free.
New: MCP tool servers
Agents can now call tools hosted on external Model Context
Protocol servers — your order system, your CRM, your internal
API, anything that speaks MCP. Register a server once per workspace,
discover its tools, and grant them per agent.
- Server registry — endpoint plus credentials, with the JSON-RPC handshake and server info handled for you. Credentials are encrypted at rest and never rendered back into the UI.
- Per-agent tool grants — discovered tools are listed with their schemas, and each agent gets an explicit allow-list, so a server shared across a workspace never exposes every tool to every agent.
- Safety rails — a remote tool is untrusted input: arguments are sanitised before dispatch, output is truncated before it reaches the prompt, and every server sits behind a circuit breaker that trips on repeated failures instead of stalling the visitor's turn.
- Activity log — every call recorded with arguments, result size, duration and outcome, viewable per agent, pruned on a schedule.
New: pluggable marketing themes — Aurora and Prism
- The public marketing site is now theme-driven, and two complete themes ship in the box — each with its own home, pricing, how-it-works, integrations, changelog, privacy and terms pages plus a matching sign-in shell. Switch from the admin without touching code.
- Try Now — the hero can fetch a visitor-supplied URL and run a live demo conversation against that page, so a prospect watches the assistant answer questions about their own site before signing up.
New: model picker with a real latency probe, and provider failover
- Roughly 95 models across Cloudflare Workers AI, OpenAI and OpenRouter, with the Cloudflare catalogue fetched live from the provider so it can never go stale.
- Probe before you commit — measure a model's real round-trip latency from your own server instead of guessing.
- Embedding-dimension warnings — a switch that would invalidate your vector index is flagged up front, not discovered after a rebuild.
- Automatic failover — when the primary provider errors or times out, the request falls through to the next provider instead of failing the visitor's turn. Cloudflare deployments additionally self-heal model-to-model when a model is retired upstream.
New: three operator dashboards
- Widget Monitor — records widget-side events including the failures that never reach the server, like a stream that closes without completing. A broken embed on a customer site becomes visible in your admin instead of only in a visitor's browser.
- Hot-path latency — breaks every visitor turn into its stages (embed, vector search, rerank, tool loop, first token, total) and shows prompt size per turn, so a slow deployment is traced to the stage responsible. A
perf:hotpath command runs the same measurement from the CLI.
- Turn debugger — a per-turn trace of which path answered, what was retrieved and with what scores, and where the time went.
New: Translation Manager and trial plans
- Translation Manager — override any user-facing string in any of the 133 shipped locales from the admin, layered over the shipped translation file at runtime. Marketing copy and SEO metadata included, so you can retitle and re-describe the public site per language without editing files or redeploying.
- Time-limited trial plans without a card — grant a plan for a fixed window; when it closes the workspace hits an upgrade wall instead of silently continuing, and the customer keeps their data.
Improvements
- Sharper retrieval. A follow-up that drops its subject ("and the year?") keeps that subject for search instead of embedding as a generic query. Optional LLM query rewriting condenses a conversational message into a standalone search query, guarded so a rewrite can never come out worse than the deterministic version it replaces. Sources marked global — contact details, company facts — answer from any page.
- Faster turns. Knowledge-only questions skip the tool-check round-trip entirely, and the reranker is skipped adaptively when the vector search already returned a confident ordering.
- Crawling reach. Two new extraction tiers: Cloudflare's page-to-markdown renderer, and a vision OCR fallback for pages whose content is locked inside images.
- Indexing that repairs itself. Every indexing job retries on transient failure and a scheduled sweep re-runs sources that failed anyway, so a provider blip no longer leaves a source permanently unindexed. Reindex now works correctly for pasted text, uploaded files and auto-indexed pages, and pasted-text sources can be edited in place.
- Workflow builder. Validation, a test-run mode that simulates a flow without touching a live conversation, and a canvas-first creation flow.
- Right-to-left support. The widget mirrors layout and input direction for Arabic, Hebrew, Persian and Urdu.
- Billing. Stripe automatic tax, pay-by-invoice subscriptions with bank transfer, operator-selectable default currency, yearly pricing, the Stripe-hosted invoice PDF in billing history, and an in-app Stripe health panel that verifies the webhook and tax configuration and can repair them.
Fixes
- Runs correctly with or without FrankenPHP. The cron queue tick resolves the PHP binary rather than assuming the serving one, and streaming responses lift the execution-time limit PHP-FPM would otherwise apply mid-stream — so a plain Nginx + PHP-FPM host behaves exactly like an Octane deployment.
- Octane worker memory. FrankenPHP's static binary ships no
php.ini, so its compiled-in 128MB limit applied to every worker. A php.ini now ships with the application and is read at worker start.
- No more empty 500s. A PHP deprecation raised while rendering an error could replace the response with an empty 500 and destroy the original exception, making the real failure invisible in the logs. Fixed, with a dedicated log channel so a misconfigured logging environment can't break logging itself.
- Adding a Google Sheet no longer breaks your Google Docs. The sheet sync kept its own copy of the OAuth token logic and wrote the expiry in a different format than the shared token store reads, so a first Sheet source could break every Doc source in the same workspace. One owner for Google tokens now, and a row already written in the wrong format repairs itself.
- Chat no longer breaks after an hour. The widget session token expires after 60 minutes; a tab left open past that received an error on every message, and the retry button replayed the same expired token. The widget now re-authenticates silently and replays the message — the conversation is resumed, nothing is lost.
- A slow reranker no longer times out the turn. Its HTTP timeout was long enough to push a turn past the widget's own connection timeout; it now fails fast to the vector ordering, configurable by env var.
- Certificate-mismatched www hosts index again. A site whose TLS certificate covers only the apex domain failed every crawler tier for its www URLs and was treated as permanently broken. The crawler now retries the apex host once, for exactly that signature.
- Other fixes. Duplicate-content detection scoped to the source rather than the whole agent; a Google Docs link pasted into the URL form becomes a Google Doc source instead of a failed crawl; dead OAuth tokens flag the connection and tell the owner to reconnect; provider timeouts are no longer reported as firewall or DNS faults; the message id handed to the widget during streaming is the id that persists; analytics and turn-persistence jobs are consumed rather than accumulating; only one verification email at signup; soft-deleted workspaces no longer appear in the platform list; links in chat messages are clickable; and the marketing site gained a mobile navigation menu.
Run Your Own SaaS — Out of the Box
Pitchbar is not a chat plugin. It's a complete
SaaS-in-a-box. Install it once, hand customers a sign-up
link, and you're running an AI sales-widget business under your
own brand. Every piece needed to operate a real subscription
product is included and wired up.
You keep 100% of the subscription revenue minus
Stripe's processing fee. No per-tenant fees from us, no
per-conversation tax, no usage-based reseller cost. One Envato
license, unlimited workspaces, unlimited end-customers.
What's wired for SaaS operation
- Multi-tenant from the database up — every workspace is fully isolated by a global query scope, regression-tested. One customer's agents, conversations, leads, and analytics can never leak to another.
- Self-serve sign-up — visitor lands on your marketing site, hits "Get started", goes through Fortify-backed registration, lands in onboarding, picks a plan, pays through Stripe Checkout, deploys their widget — all without you touching a thing.
- Stripe-synced plans — define plans inside Pitchbar's admin console. Stripe Products and Prices are created automatically. Plan changes archive the old Price and mint a new one without breaking existing subscriptions.
- Monthly + annual billing — visitors toggle between monthly and yearly on the pricing page; checkout uses the matching Stripe Price.
- Metered billing — each plan has a monthly conversation quota. Over-quota workspaces get a 429 + friendly upgrade prompt; conversations already in progress finish normally so visitors are never left hanging.
- Customer Portal — Stripe's hosted portal handles cancellations, card updates, invoice downloads. Zero billing UI you have to build.
- Per-plan feature flags — branding removal, custom widget domain, higher rate limits, integration access, AI rate-limit + max-tokens dials. Add new flags in one line of code.
- Workspace roles & team invitations — Owner / Admin / Editor / Viewer with granular permissions. 7-day invite tokens. Owner transfer with confirmation. Multi-workspace user support out of the box.
- Platform admin console at
/admin — manage plans, watch every workspace's usage, retry failed jobs, impersonate any user for support, monitor site health across seven automated checks.
- Audit log — every privileged action (plan change, role change, ownership transfer, impersonation) is recorded for compliance.
- Quota enforcement on the hot path — gate happens at
/api/v1/widget/init, never mid-conversation. Existing chats and human takeovers are never interrupted.
Two licenses, two business models
- Regular License — install Pitchbar on your own infrastructure for your own use. Run it for your team, your portfolio sites, or one client.
- Extended License — run it as a paid service for unlimited end-customers. White-label the marketing site, set your own pricing, and keep all the revenue. Same codebase as Regular License.
The financial model in plain numbers
Set up three plans (Free / Pro / Enterprise) at $0 / $49 / $249.
Acquire 100 paying customers averaging the Pro tier — that's
roughly $4,900/month recurring, before any
Enterprise upsells. Pitchbar's external infrastructure cost on
Cloudflare's "one-bill" mode is around $5/month plus per-request
usage. The math works whether you sell to ten customers or ten
thousand.
Why Pitchbar
- Self-hosted, not SaaS. Pay once, own forever. No per-conversation fees from us. No data leaving your servers. No vendor lock-in.
- Multi-tenant from day one. Each workspace is fully isolated by a global query scope, enforced by a regression test that fails the build on tenancy violations. Run it for one client or one thousand.
- Sub-second responses. The hot path has a 1-second p95 time-to-first-token contract. No DB writes mid-stream, no synchronous webhooks, async persistence after the response completes.
- Provider-flexible AI, with automatic failover. Cloudflare Workers AI by default (cheapest path) with OpenAI, OpenRouter, and Qdrant alternatives — one env var swaps providers, no code changes. When the primary errors or times out, the request falls through to the next provider instead of failing the visitor's turn.
- Real engineering, not a wrapper. Prompt-injection defence, strict origin enforcement, encrypted secrets at rest, multi-language support, OpenTelemetry traces — all included.
- Built-to-rank. Per-page SEO meta + JSON-LD + sitemap.xml + smart robots.txt out of the box. Your marketing site indexes properly from day one.
Core Features
1. AI agents grounded in your knowledge
- Build unlimited AI agents per workspace, each with its own persona, theme, system prompt, behaviour rules, and knowledge base.
- Crawl URLs, sitemaps, RSS feeds, paste text, or sync from Notion / Google Docs via OAuth.
- Auto-index every page a visitor lands on (with safety guards — never indexes
/admin, /login, /checkout, internal IPs, etc.).
- Two-stage retrieval: ANN recall plus cross-encoder rerank for precision.
- Versioned publishing — every Publish creates an immutable snapshot. Roll back to any prior version with one click.
2. Drop-in widget for any website
- One
<script> tag, no other setup required.
- Under 50 KB gzipped — fast load, no Lighthouse score impact.
- Renders inside a Shadow DOM — your CSS can't accidentally style it; the widget can't accidentally style your site.
- Works on WordPress, Shopify, Next.js, React, Vue, Angular, Astro, plain HTML — any framework that produces HTML.
- Persistent visitor sessions across page loads (24-hour resume window).
- Visitors get streamed answers token-by-token over Server-Sent Events with real-time citations linking to source pages.
- Suggested follow-up questions — every answer ends with up to three tappable prompts that keep the conversation moving. Auto-generated.
- Stage-aware typing indicator — "Searching your site…" while we pull pages, then "Thinking…" while the AI writes, then streamed reply. The wait feels deliberate.
- Unread badge + soft chime when minimised — visitors who walk away mid-reply come back to a red unread badge and a one-time soft tone. Honours OS "reduce motion".
- Built-in voice microphone — visitors can dictate questions in any of the supported languages.
- Strict origin allow-list — the widget refuses to load on unauthorised domains so nobody can drain your quota.
- Restricted paths — per-agent glob list of URLs (e.g.
/admin/*, /checkout) where the widget should NOT mount, configured without code.
- Position picker — centered bar (default), bottom-right floating bubble (Intercom / Drift style), or bottom-left, per agent.
3. Real-time inbox + human takeover
- Operator inbox shows captured leads and active conversations live, powered by Laravel Reverb (WebSocket).
- One-click Take over on any thread — the AI pauses, the visitor sees a "Human is here" badge, every reply you type streams to them in real time.
- Hand back to the bot when you're done — seamless transition, no thread duplication.
- Full conversation transcript attached to every lead automatically.
- Live in-app toast on every lead capture, plus branded email notification to owners and admins, so a new lead is never missed.
4. Lead capture, form builder & intent detection
- Custom form builder — per-agent schema with text / email / tel / textarea / select / checkbox fields. Drag-to-reorder, four starting presets (Classic, B2B SaaS, Support, GDPR-friendly), inline label / placeholder / required editing.
- Four lead-form trigger strategies per agent — Engagement (default, intent + turn count), First message (every visitor sees the form on turn one — best for sales-led agents), Keyword only (no surprise prompts), and Never (chat without lead capture).
- Pre-chat name + email gate — optional per-agent toggle that asks for the lead before the chat surface unlocks. Higher capture rate; the same schema renders in both the gate and the inline form.
- Captured leads land in the inbox immediately and fire HMAC-signed outgoing webhooks for CRM integration.
- Reserved keys (
email, name, phone) map onto Lead columns; everything else lands on the Lead's fields JSON.
- Dedup on (agent, email) so the same person filling out twice doesn't create two rows.
5. Workflows — scripted multi-step flows
- Visual canvas editor — drag-and-drop branching flows. Trigger node + step nodes wired with edges; branches fan out and reconnect visually.
- Linear form editor — same workflow round-trips to a flat keyboard-friendly form for simple cases.
- Six step types:
message, question, branch, tag_lead, webhook, escalate.
- Branching with
equals / contains / starts_with / is_empty / not_empty / default match operators on captured variables.
- Match modes
any / all / exact on keyword triggers so flows fire on the right intent.
- Variable interpolation —
{{var_name}} in any message resolves the captured value at runtime.
- Loop-guarded engine — 32 jumps max per turn so a malformed graph can't hang.
- Workflows scope to one agent or workspace-wide.
6. Customisation that doesn't need code
- Persona, tone, system prompt — all editable from the dashboard.
- Theme: primary colour, accent colour, corner radius, launcher position, custom launcher label.
- Live preview of the visitor-facing widget while you edit.
- Up to six starter prompts shown as chips above the input on first open.
- 133 locales ship in the box, auto-detected from the visitor's browser, with right-to-left layout for Arabic, Hebrew, Persian and Urdu. Any string in any locale can be overridden from the admin.
- Behaviour rules: scroll-depth, idle, exit-intent, time-on-page, abandoned-cart, intent-keyword triggers — each fires on its own cooldown so multiple stack cleanly.
- Curated answers for pricing or refunds where you can't risk paraphrasing — short-circuit the LLM with hand-written replies.
- Up to three CTA cards stacked per reply — define multiple CTAs with priorities and the matching ones render together (Pricing + Demo + Docs side by side). Each opens a URL, sends a message, captures a lead, or dismisses.
7. Analytics & knowledge gaps
- Dashboard with conversation volume, deflection rate, lead conversion, average response latency.
- Knowledge gap detection — the system clusters questions visitors asked that the agent couldn't answer, giving you your content roadmap automatically.
- Per-source citation effectiveness — see which knowledge sources actually drive answers and which never get cited.
- CSV export for everything.
8. Multi-tenant workspace model
- Each workspace is fully isolated — agents, conversations, leads, sources, analytics never cross the boundary.
- Four workspace roles: Owner, Admin, Editor, Viewer — granular capabilities for managing agents, members, billing, knowledge.
- Email invitations with 7-day expiry, accept-or-revoke from the same page.
- Owner transfer with two-step confirmation.
- Workspace switcher in the sidebar for users who belong to multiple.
9. Subscription billing — Stripe synced
- Platform admins create plans in Pitchbar — Stripe Products and Prices are created automatically.
- Monthly + annual billing toggle on the pricing page with auto-calculated savings;
interval=year Checkout flow.
- Per-plan AI rate-limit + max-tokens dials enforced server-side.
- Price changes archive the old Stripe Price and create a new one (no breaking existing subscriptions).
- Customer portal access for cancellations, card updates, invoice history.
- Metered enforcement — workspaces blocked from starting new conversations once the monthly quota is reached. Existing conversations and human takeovers continue.
- Branding-removal feature flag per plan.
- 30-day money-back guarantee shipped as a configurable copy block.
10. Platform admin console
- Operator-only surface at
/admin — gated by a super-admin role flag.
- Workspace browser, user list, agent list, conversation log across all tenants.
- Plan CRUD with one-click Stripe sync per row.
- Subscription overview with revenue context.
- Usage metering: month-over-month conversation count by workspace.
- Site Health pill with seven automated checks (failed jobs, Stripe, LLM provider, vector store, mail, Reverb, cache).
- Widget Monitor — widget-side events including the failures that never reach the server, so a broken embed on a customer site is visible here instead of only in a visitor's browser.
- Hot-path latency dashboard — every visitor turn broken into its stages (embed, vector search, rerank, tool loop, first token) with prompt size per turn, so slowness is traced rather than guessed. Repeatable from the CLI with
perf:hotpath.
- Turn debugger — a behind-the-scenes trace per conversation turn: which path answered, what was retrieved and with what scores, and where the time went.
- Model picker with a live latency probe — roughly 95 models across Cloudflare, OpenAI and OpenRouter, the Cloudflare catalogue fetched live so it can't go stale, each probeable for real round-trip latency from your own server before you commit. Embedding-dimension changes are flagged before they invalidate your index.
- Lead-email pipeline test button — exercises mail driver + queue worker + email template end-to-end.
- Failed-job inspector with retry / forget / retry-all controls.
- Impersonate any user with a banner so you can support customers without asking for their password.
- Global search across workspaces, users, agents, conversations, leads.
- Buyer-facing changelog authoring at
/admin/changelog — drafts publish to a public /changelog page with a dismissable "what's new" banner inside the dashboard.
11. Integrations
- MCP tool servers — connect any Model Context Protocol server (your order system, CRM, internal API) and let agents call its tools mid-conversation. Per-workspace registry, per-agent tool grants, encrypted credentials, argument sanitising, output truncation, circuit breaker per server, and a full activity log.
- WordPress & WooCommerce — official companion plugin (PHP 7.4+, WordPress 6.4+). One-click content sync for posts, pages, custom post types, and WooCommerce products. Page-builder rendering for Elementor, Beaver Builder, Oxygen, Bricks, Divi. WooCommerce order lookup, coupon emission & apply, abandoned-cart trigger. Resumable sync that survives shared-hosting timeouts. Bundles a standalone
documentation.html for offline reference. Ships with an English + Simplified Chinese translation pack out of the box.
- Connected sites surface — every WordPress install that connects to one of your agents is listed in the Integrations page (URL, plugin version, WooCommerce status, last-seen timestamp).
- Notion — OAuth, ingest pages or databases as knowledge sources.
- Google Docs — OAuth, ingest documents from Drive.
- Slack — outgoing notifications for leads, low-confidence escalations, and routed conversations.
- Stripe / PayPal / Razorpay — Cashier-backed subscription billing on Stripe, plus first-class PayPal and Razorpay support. Auto-synced products and prices, webhook signature verification on every gateway.
- Outgoing webhooks — HMAC-signed POSTs to your endpoint for every captured lead. Use it as a Zapier catch-hook to fan into HubSpot, Salesforce, Mailchimp, Pipedrive — anything.
12. Built-in marketing site & SEO
- Two complete marketing themes ship in the box — Aurora and Prism — each with its own home, pricing, how-it-works, integrations, changelog, privacy and terms pages plus a matching sign-in shell. Switch from the admin without touching code.
- Try Now — the hero can fetch a URL the visitor types and run a live demo conversation against that page, so a prospect sees the assistant answer questions about their own site before signing up.
- Landing page with hero, video, feature grid, growth chart, testimonial carousel (auto-advance), 10-question FAQ accordion, and final CTA — every section editable from Settings → Marketing.
- Per-page SEO meta on every public route — title, description, canonical URL, Open Graph card, Twitter card.
- JSON-LD structured data — Organization on every page, SoftwareApplication on home, FAQPage sourced live from your editable FAQ items so Google's rich-result picker renders Q+A directly.
- Auto-generated
/sitemap.xml covering every marketing page, every doc slug, every published changelog entry.
- Smart
/robots.txt — allows public surfaces, disallows admin / app / api / settings.
- Custom Open Graph image — drop a 1200×630 PNG at
public/og-image.png.
13. Built-in documentation site
- Mintlify-style reference shipped at
/documentation — 90 pages covering every feature, the widget API, the architecture, security, deployment, white-label audit, SEO surface.
- Self-host installation guide at
/documentation/installation — 20–40 minutes from a fresh server to a running deployment. Requirements, environment variables, database, asset build, Octane/Horizon/Reverb processes, cron (host or one-click Cloudflare Worker), first admin via the bundled artisan command, smoke test, common troubleshooting.
- Seven dedicated WordPress & WooCommerce docs pages covering Overview, Install & connect, Content sync, Page builders, WooCommerce deep links, REST API reference, Troubleshooting.
- Light and dark themes, on-page table of contents, search, code-copy buttons.
- Operators can rebrand it via the admin settings and ship docs under their own domain.
What's Inside the Stack
- Backend: Laravel 13 (PHP 8.3+), Octane on FrankenPHP, Reverb (WebSocket), Horizon (queue), Cashier (Stripe), Fortify (auth), Sanctum (API tokens).
- Database: MySQL 8 / Postgres 16 — both supported via standard Laravel database drivers.
- Cache, queue, sessions: Redis 7.
- Frontend admin: Inertia v3, React 19, TypeScript (strict mode), Tailwind v4, shadcn/ui (Radix primitives), Wayfinder for typed routes, React Flow for the workflow canvas.
- Visitor widget: Preact 10 + Vite, isolated build, ≤ 50 KB gzipped, Shadow DOM rendered.
- AI providers (preferred): Cloudflare Workers AI (Llama 3.x chat + bge-base embeddings), Cloudflare Vectorize (vector store), Cloudflare Browser Rendering (crawler).
- AI providers (fallback): OpenAI
gpt-4o-mini + text-embedding-3-small, OpenRouter, Qdrant, Browserless. One env var swaps providers.
- Object storage: S3-compatible (Cloudflare R2 by default).
- Tests: Pest 4 — 2,641 feature + unit tests shipped.
- Observability: Sentry, OpenTelemetry traces wired through the hot path.
Server Requirements
- PHP 8.3 or newer (8.4 supported).
- MySQL 8+ or Postgres 16+.
- Redis 7+ (cache, queue, sessions).
- Composer 2.x and Node.js 20+ (for build).
- A web server able to serve a Laravel application — Nginx, Apache, FrankenPHP, or any managed Laravel host.
- An LLM provider key — Cloudflare Workers AI (cheapest), OpenAI, or OpenRouter.
- A vector store — Cloudflare Vectorize (recommended) or self-hosted Qdrant.
- Stripe account if you want to bill customers (free tier works for testing).
- SMTP / Postmark / Resend / Mailgun / SES for transactional email.
- Optional: Cloudflare account for Browser Rendering (best crawl quality on JS-heavy sites).
Total external infrastructure cost on Cloudflare's "one-bill" mode:
starting at ~$5/month on a small VPS plus
Cloudflare's per-request usage tier.
Security & Privacy
- Strict origin enforcement on the public widget — empty allow-list means deny everywhere; subdomains never inferred. Stops third parties from embedding your snippet on their site.
- Restricted paths — buyer-side per-agent path glob list keeps the widget off
/admin, /checkout, /account flows without code.
- Auth-aware widget suppression — the marketing demo widget never mounts on signed-in admin or customer pages, server-side, can't be misconfigured.
- Prompt-injection defence — retrieved content is wrapped in
<source> tags and the system prompt instructs the model to treat them as data, never instructions. Regression-tested.
- SSRF protection — the crawler refuses to fetch private IP ranges, loopback, link-local, and cloud metadata endpoints.
- Encrypted at rest — OAuth tokens, Stripe secrets, mail passwords, custom LLM keys all use Laravel's encrypted casts.
- Rate limiting on every public endpoint — per-IP for init, per-JWT for messages and leads.
- Stripe webhook signature verification, HMAC-signed outgoing webhooks, CSRF on every authenticated form.
- Two-factor authentication via TOTP, recovery codes, all standard Fortify auth flows included.
- Audit log for every privileged action — admin changes, plan changes, member changes, ownership transfers, impersonation.
- White-label audit checklist shipped at
/documentation/whitelabel-audit for reviewing every customer-facing surface before each release.
Multi-language
The widget auto-detects the visitor's preferred language from their
browser and replies in it. 133 locales ship in the box,
including every major commercial language — English, Spanish, French,
German, Portuguese, Dutch, Italian, Japanese, Chinese, Arabic, Hindi,
Turkish, Russian and Indonesian among them.
Right-to-left is handled properly, not bolted on: the
widget mirrors its layout and input direction for Arabic, Hebrew,
Persian and Urdu.
Every string is yours to change. The built-in
Translation Manager lets you override any user-facing string in any
locale from the admin — including the marketing copy and the SEO title
and description of each public page, so you can run the same install as
a fully localised product in several markets without editing a file or
redeploying.
The system prompt instructs the model to translate retrieved
sources but keep numbers, prices, and proper nouns verbatim.
The WordPress companion plugin also ships with
a Simplified Chinese (zh_CN) translation pack — when
you set a WordPress site or user locale to 简体中文, the
Pitchbar plugin admin renders in Chinese automatically. More
plugin translation packs land in later releases.
Frequently Asked
Can I use this for my client's site?
Yes. The Regular License covers a single end product (a single
deployment). For agency use across many client sites, the Extended
License grants the resale and white-label rights you need.
Will it work on WordPress / Shopify / Wix / Squarespace?
Yes — the widget is a single <script> tag, framework-agnostic. Any platform that lets you paste HTML before
</body> can run Pitchbar. WordPress: paste in
your theme's footer.php or use a "header/footer code"
plugin. Shopify: paste in theme.liquid. Squarespace:
Settings → Advanced → Code Injection → Footer.
How accurate are the answers?
The agent answers only using the knowledge sources
you've added. If the answer isn't in your sources, it says so
plainly and offers to capture the visitor's email instead of
making something up. The confidence threshold is configurable per
agent.
Can I customise the look of the widget?
Yes — primary colour, accent colour, corner radius, launcher
position (centered bar, bottom-right bubble, or bottom-left),
launcher label, persona, tone, and starter prompts are all
configurable from the dashboard with a live preview. The
"Powered by" footer can be removed on paid plans.
Do I need a Cloudflare account?
Recommended but not required. Cloudflare Workers AI is the cheapest
AI path and handles chat, embeddings, vector search, and crawl in
one bill. If you prefer OpenAI, set OPENAI_API_KEY and
VECTOR_PROVIDER=qdrant — same features, different
pricing.
What about data privacy?
Pitchbar is self-hosted — visitor messages, captured leads, and
knowledge content live on your infrastructure. The only third
party that sees the content is your chosen LLM and vector
provider. You control retention, encryption, and deletion.
Can I run multiple agents per site?
Yes — embed multiple <script> tags with
different data-agent-id values. One agent per workspace can run on the same domain.
Does it scale?
Yes. The hot path is engineered for <1s p95 time-to-first-token.
Async persistence, Redis caching for retrieval and conversation
history, queue-driven crawling and indexing — the architecture
handles thousands of concurrent visitors per server.
All buyers within the major version get every release for free.
Ready to Ship
Pitchbar is production-ready software, not a starter kit. Every
page is polished, every feature is documented, every endpoint is
tested. The hot-path latency is engineered, the multi-tenancy is
enforced by tests, the security defaults are tight.
Buy once. Deploy anywhere. Sell to anyone.