I run a self-hosted Chatwoot for support, and I genuinely love it. But every time I wanted to actually grow on it, I hit the same wall.
Import a few thousand contacts? Hand-write API calls, or click them in one at a time. Run WhatsApp follow-up sequences? Not built in. Send a bulk campaign with a real variable preview, or attach a video over WhatsApp's 16 MB limit? Nope.
And every off-the-shelf "fix" was the same shape: a separate SaaS, a second server, or a subdomain — each with its own login and its own copy of my customers' data.
So I built the missing layer and open-sourced it: chatwoot-power-tools (MIT).
One command, same-origin, no second server
curl -fsSL https://github.com/achiya-automation/chatwoot-power-tools/archive/refs/heads/main.tar.gz | tar xz \
&& cd chatwoot-power-tools-main && sudo bash install.sh
The installer detects your existing Chatwoot Docker Compose stack, provisions a least-privilege DB role, starts one small sidecar container (cwpt-engine) next to your own containers, adds a single reverse-proxy route, and injects a dashboard script. Everything it adds is served same-origin under one /chatwoot-addons/* path — no subdomain, no CORS, no extra account, and no customer data ever leaving your box.
It's a plain, readable Bash installer (no opaque binary piped to root), it's --dry-run-previewable, and --uninstall reverses everything while preserving your data and any existing DASHBOARD_SCRIPTS.
What it adds
📥 Smart contact import — a CSV/Excel wizard styled to look native, detects columns bilingually (Hebrew + English headers), flags duplicates before import, and maps onto custom attributes.
🔁 WhatsApp drip sequences — automated template-message sequences managed from inside Chatwoot. Enroll a lead by setting a conversation attribute; messages then send at the intervals you configure, automatically skipping quiet hours, Shabbat and Jewish holidays.
✨ Dashboard upgrades — a "Sequences" sidebar item, variable chips + a live preview on the native campaign modal, and client-side video compression (WebCodecs) so you can send video past WhatsApp's 16 MB limit with no server-side transcode.
The part I'm most proud of: least-privilege by design
The engine talks to your Chatwoot only through the API, and its database role is deliberately tiny. It gets SELECT on the handful of tables it reads, plus UPDATE on a single column — contacts.custom_attributes. That's it.
It literally cannot read or change names, phones, emails, or anything else. A bug in the engine can't touch them, because the grant doesn't exist. The role's password is generated on your server with openssl rand and written only to your Chatwoot .env — it never enters logs, command output, or git. No telemetry, no third parties.
Fully bilingual, automatically
The entire UI localizes to each agent's own Chatwoot language — Hebrew (RTL) or English (LTR) — detected automatically, no configuration. Same screen, either way.
Try it
It's MIT, self-hosted Docker Compose only (not Chatwoot Cloud), with a full CI suite. If you self-host Chatwoot, I'd genuinely love your feedback — and issues/PRs are welcome.
Top comments (0)