Powered by Cloudflare Workers

Your AI persona.
One script tag.

Drop PersonaGPT into any website. Visitors chat with an AI trained on your work, expertise, and knowledge — running entirely on your own infrastructure.

Three steps.
You're live.

No setup. No servers to manage. Your subdomain, your persona, your rules.

Subscribe & set up your persona

Sign up, fill in your persona — your expertise, knowledge, and style. We provision your dedicated backend instantly.

2 minutes

Get your personal subdomain

You receive a unique you.personagpt.me subdomain. Your AI backend runs on it — no infra work, no servers to manage.

you.personagpt.me

Drop one <script> tag anywhere

Copy the snippet. Paste it before </body> on any site — portfolio, docs, or landing page. That's it.

<script defer>

Built different.

Not another SaaS wrapper. PersonaGPT is infrastructure you own — with the DX of a product.

Streaming AI

Real-time Server-Sent Events stream tokens as they're generated. Multi-model fallback chain — GPT-4o → GPT-4o-mini — so you never hit a dead end.

SSE · model fallback

Your Data

Intent classification runs locally before any LLM call. Deterministic, structured responses pulled directly from your own JSON — no RAG SaaS, no embeddings API bill.

local intent · deterministic

Privacy First

Rate limiting enforced at the edge. Prompt injection guards baked in. Session logs written to your own Cloudflare R2 bucket — not ours, not anyone else's.

rate limit · R2 logging

Zero Dependencies

The widget is vanilla JS. No React, no Vue, no 400KB bundle. Ships at 37KB — fast on any connection, works inside any host app without conflicts.

37KB · vanilla JS

Copy. Paste. Done.

One line in your HTML is all it takes. The widget self-initialises, injects its UI, and connects to your dedicated backend — no config object needed.

index.html
<!-- PersonaGPT widget — drop anywhere before </body> -->
<script
  src="https://you.personagpt.me/widget.js"
  defer
></script>
Your subdomain is provisioned automatically when you subscribe. The widget reads its backend endpoint from the same origin — no extra configuration needed.