Ecosystem & CLI
Optional external services
Third-party tools you can connect to FluxyChat — what each one does, whether you need an account, and setup steps.
Optional external services
FluxyChat runs on Cloudflare Workers. Most features work without third-party accounts. Connect external services only when you need that capability.
Do I need any of these?
| Service | Required? | When to set up |
|---|---|---|
| Cloudflare | Yes | Always — Workers, D1, R2 |
| Clerk | Optional | Hosted dashboard sign-in |
| Stripe | Optional | Paid billing / checkout |
| Turnstile | Recommended for prod | Public /demo, /embed, guest rooms |
| Langfuse | Optional | Agent trace dashboards, eval datasets |
| Upptime | Optional | Public status page at status.yourdomain.com |
| Algolia DocSearch | Optional | Full-text search on marketing docs |
| Synapse (Matrix) | Optional | Matrix federation bridge |
| Meta WhatsApp | Optional | WhatsApp Business + structured forms |
| RCS provider | Optional | RCS outbound (paid aggregator) |
| LiveKit | Optional | WebRTC voice/video SFU |
| ClamAV | Optional | Virus scan on uploads (EICAR blocked without it) |
| Tavily / SearXNG | Optional | Agent web search tools |
If you only use private rooms + dashboard + agents, you can skip everything except Cloudflare (and Clerk/Stripe if you use hosted billing).
Turnstile (guest anti-spam)
Purpose: Bot protection on public demo, embed widget, and guest room join.
Account: Free at dash.cloudflare.com → Turnstile → Add site.
Steps:
- Create a Turnstile widget → copy Site key and Secret key.
- Worker secrets:
TURNSTILE_SECRET_KEY,TURNSTILE_SITE_KEY. - Enable:
PUBLIC_GUEST_TURNSTILE_REQUIRED=true(embed) and/or demo Turnstile flow. - Dashboard build env:
NEXT_PUBLIC_TURNSTILE_SITE_KEY(same site key).
Verify: Open /embed — badge shows Turnstile required. Complete widget → guest session mints.
See also: Public demo hardening.
Langfuse (agent observability)
Purpose: Traces, scores, and eval datasets for agent runs.
Account: Self-host Langfuse OSS on a VPS (free license) or Langfuse Cloud.
Steps:
- Deploy Langfuse → note public key, secret key, host URL.
- In FluxyChat console: Agents → Observability → Apply Langfuse preset (or
POST /otel/configs/langfuse). - Run an agent in a room → traces appear in Langfuse.
You do not paste Langfuse keys into Worker env if you use the dashboard OTel config store.
See: OpenTelemetry reference.
Upptime (public status page)
Purpose: Public uptime history (status.fluxychat.com style).
Account: GitHub (free).
Steps:
- Copy
.upptime/config.jsonfrom the monorepo into a new repo (e.g.yourorg/status). - Enable GitHub Pages on that repo.
- Point DNS
status.yourdomain.com→ GitHub Pages. - Dashboard:
NEXT_PUBLIC_STATUS_PAGE_URL=https://status.yourdomain.com(links from Settings → Status).
Verify: pnpm run check:upptime in CI validates config shape.
Algolia DocSearch (docs search)
Purpose: Search box on /docs and /guides marketing pages.
Account: Apply at docsearch.algolia.com (free for open source).
Steps:
- After approval, Algolia crawls your docs site weekly.
- Dashboard env:
NEXT_PUBLIC_ALGOLIA_APP_ID,NEXT_PUBLIC_ALGOLIA_API_KEY,NEXT_PUBLIC_ALGOLIA_INDEX_NAME.
Without Algolia: Local guide search still works on /guides and /docs.
Matrix / Synapse (federation bridge)
Purpose: Bridge Matrix rooms ↔ FluxyChat rooms.
Account: Self-host Synapse on a VPS.
Steps:
- Deploy Synapse + register appservice pointing at your Worker webhook.
- FluxyChat console: Bridges → Matrix → create bridge → copy Bearer token.
- Synapse config:
Authorization: Bearer as_…onPOST /webhooks/matrix/:bridgeId.
See repo runbook: docs/MATRIX_SYNAPSE_RUNBOOK.md.
WhatsApp Business (structured forms)
Purpose: Multi-step forms on WhatsApp → normalized room messages.
Account: Meta Business + WhatsApp Business API.
Steps:
- Create app → WhatsApp product → phone number ID + permanent token.
- Worker:
WHATSAPP_PHONE_NUMBER_ID,WHATSAPP_ACCESS_TOKEN,WHATSAPP_VERIFY_TOKEN. - Register webhook URL on Meta → verify token matches.
- Console: Bridges → Forms to design schemas.
Without credentials: Dry-run mode saves payloads for testing (no Meta delivery).
RCS (Rich Communication Services)
Purpose: RCS outbound messages and forms (16th channel).
Account: Paid — Twilio or MessageBird RCS API.
Status: Adapter scaffold in repo; requires vendor account before production send.
Steps when ready:
- Obtain RCS sender from vendor.
- Worker:
RCS_OUTBOUND_URL(+ optionalRCS_API_KEY) pointing at vendor JSON API.
See: Platform status — RCS.
LiveKit (voice / video SFU)
Purpose: WebRTC rooms — voice huddles, calls (not on Workers CPU).
Account: LiveKit Cloud free tier or self-host.
Steps:
- Create project → API key, secret,
wss://URL. - Worker secrets:
LIVEKIT_API_KEY,LIVEKIT_API_SECRET,LIVEKIT_URL. - Client:
useLiveKitTokenfrom@fluxy-chat/react.
See: LiveKit integration.
ClamAV (media virus scan)
Purpose: Scan uploads beyond built-in EICAR block.
Account: Self-host ClamAV HTTP API (optional).
Steps:
- Deploy
clamav+ HTTP wrapper on internal network. - Worker:
CLAMAV_HTTP_URL, optionalCLAMAV_HTTP_TOKEN.
See: Media pipeline.
Agent web search (Tavily / SearXNG)
Purpose: [web-search] and deep research tools in agent rooms.
Account: Tavily free tier and/or self-hosted SearXNG (public HTTPS).
Steps:
- Tavily:
TAVILY_API_KEYon Worker. - SearXNG: expose HTTPS endpoint + Basic Auth →
SEARXNG_BASE_URL, user/pass.
No account needed if you disable web-search tools in agent config.