One support inbox for every app you run. Each app is a project; its users keep their own accounts (the app signs an identity token), an operator answers everything from one panel, and a drop-in widget or your own UI talks to a documented API.
/v1/*, OpenAPI at /_docs/scalar. Every /v1/admin/* operation accepts either an operator session or a general ak_… admin key created in the panel’s API keys page, either for the whole workspace or limited to chosen projects./inbox, /projects, /emails, /agents, /knowledge, /assistants. A fresh install shows a sign-up form for the first operator (set SETUP_TOKEN so only you can complete it); teammates are added from the Team page (or bun run add-agent).SUPPORT_FAQ.md, review the detected FAQs, organize them in a path tree, and assign them to AI assistants that suggest or (optionally) send grounded answers. Hybrid search via Meilisearch./widget.js + /embed/feedback.js or build on /v1/feedback; operators triage it under Project → Feedback./changelog/pk_… + RSS. Operators write it under Project → Changelog./roadmap/<pk>, in the feedback embed, or on GET /v1/feedback/roadmap; operators plan under Project → Board..html file), a block document or a plain message with POST /v1/emails/send: per-recipient variables, attachments, custom headers, scheduling, idempotency keys and a per-project sender. Every message lands in a searchable log kept current by Mailgun's delivery webhook, bounces and complaints are suppressed automatically.git clone https://github.com/elrumo/help-bites-oss.git && cd help-bites-oss
scripts/install.sh help.example.com # or no argument for a trial on http://localhost:3100
docker compose up -d # pulls elrumo/helpbites from Docker Hub
install.sh writes a .env with generated secrets. With a domain it also turns on the bundled Caddy for HTTPS (point
the domain and files.<domain> at the server first). Open the site and create the first operator right away:
whoever gets there first becomes the owner. The image is also at ghcr.io/elrumo/helpbites. Pin a version with
HELPBITES_VERSION=0.1.0 in .env. Full guide, upgrades and backups: docs/DEPLOYMENT.md.
cp .env.example .env # fill in keys
docker compose -f docker-compose.yml -f docker-compose.dev.yml --profile dev up -d sb-mongo sb-parse sb-redis sb-meili sb-rustfs
bun install
bun run schema:apply # classes, CLPs, indexes (idempotent)
bun run search:setup # Meilisearch indexes + settings (idempotent)
bun run dev # http://localhost:3100 — the first visit asks you to create the operator account
Checks: bun test (pure logic), bun run smoke (end-to-end against the running stack),
and bun run smoke:isolation (one workspace can never reach another's data).
Seed a demo knowledge model: bun run seed:knowledge (against a running app). Backfill search: bun run reindex.
docker compose up -d runs sb-mongo, sb-parse, sb-redis, sb-meili and the app. Nothing publishes a host port
unless you use the bundled Caddy (--profile proxy): otherwise attach domains from Dokploy's Domains tab (or your
own proxy) by service name and container port (app → 3000). Never give sb-parse a domain: it holds the master
key. The app container applies the schema on every boot. Attachments go to any S3-compatible bucket (S3_* env).
Full guide (Dokploy, plain Compose, every env var, backups, troubleshooting): docs/DEPLOYMENT.md. An install from before workspaces upgrades on its own: its data moves into one workspace on the first boot.
Don't want to run it yourself? HelpBites Cloud is the hosted, paid edition. See docs/EDITIONS.md for how it differs from the self-hosted one.
server/routes/v1/** the API, one file per route
server/utils/ auth (identity tokens, agent sessions), conversations (write rules), events (Redis → SSE), mailer, s3
shared/ vocabulary and pure transcript helpers, used by server and app
shared/feedback.ts feedback board vocabulary, defaults and validation
shared/board.ts project board and roadmap vocabulary, validation and grouping
app/ Nuxt UI panel and the embed pages (/embed chat, /embed/feedback board)
public/widget.js the chat loader host sites include
public/feedback.js the feedback board loader
scripts/ ensure-schema, migrate-workspaces, add-agent, dev-token, smoke (+ isolation)
cli/ `helpbites changelog`: git changes → changelog entries (see cli/README.md)
HelpBites comes in two editions built from this one repository:
/source, set with SOURCE_CODE_URL) does that.docker compose up builds.What else is not AGPL
| Code | License | Why |
|---|---|---|
public/widget.js, public/feedback.js | MIT | Your site embeds them |
cli/ | MIT | Runs in your repo |
Using the name: "HelpBites" and the logo are trademarks. Forks and hosted services must use their own name; see TRADEMARKS.md.
Contributing: contributions need a one-time CLA; see CONTRIBUTING.md.
More detail: docs/EDITIONS.md.
Content type
Image
Digest
sha256:f9dee5fb0…
Size
143.6 MB
Last updated
5 days ago
docker pull elrumo/helpbites