Your customers are already telling you what to build.
Rereflect reads every review, ticket and chat you receive and returns structured signal: sentiment, pain points, ranked feature requests and churn risk. Self-hosted, MIT licensed, every feature unlocked.
“The new billing page is confusing — I was charged twice and couldn’t find my invoices anywhere. If this happens again next month we’re switching.”
- source
- intercom
- customer
- maya.chen@acme.io
- sentiment
- negative · −0.82
- pain_point
- billing · conf 0.94
- feature_req
- invoice_export
- churn_risk
- high · 92%
- playbook
- save_the_customer
Four stages, from raw text to something you can act on.
Every item takes the same path. Nothing is sampled, nothing is thrown away, and each stage writes back to the record so you can audit exactly how a conclusion was reached.
Ingest
Slack, Intercom, Zendesk, email, CSV or webhook. Everything lands in one queue with its source, customer and timestamp intact.
Analyse
VADER scores sentiment locally at zero cost. Add an LLM key and the same pass extracts pain points, requests and urgency.
Cluster
Records are deduplicated and grouped by topic, so five hundred tickets about billing become one ranked pain point.
Act
Automation rules fire on thresholds: assign an owner, open a Jira issue, alert Slack, or run a churn playbook.
For years, teams had two ways to understand their customers. Both cost you something.
Control, at the cost of coverage
Someone reads tickets on Friday afternoon and writes a summary nobody trusts
The same complaint gets counted twice, or not at all
Feedback lives in six tools and gets reconciled in a spreadsheet
By the time a churn signal is spotted, the renewal has already lapsed
Coverage, at the cost of control
Per-seat pricing, so the people closest to customers never get a login
Your customers’ words sitting on a vendor’s infrastructure, indefinitely
SSO, audit logs and the API held back for the enterprise tier
Export is a support ticket, and the model behind the scores is a black box
Both, on hardware you own
Runs on your own Postgres and Redis. The feedback never leaves your network unless you point it at an LLM yourself.
MIT licensed with no plan checks in the code path — SSO, the API, automations and churn prediction are all simply on.
Bring your own key, or run entirely offline on VADER for free. Swap the model whenever you like; the scores stay in your database either way.
Four signals. No guesswork.
Every piece of feedback comes out the far end as structured data — scored, categorised, deduplicated and ranked — in your own database, queryable over the API.
Every word, scored.
Reviews, chats and tickets are scored positive, neutral or negative with a confidence value attached — not a vibe. VADER runs locally for free; an LLM key sharpens the edge cases without changing the schema.
n = 1,284 · last 30 days · conf ≥ 0.7
The top complaints, surfaced.
Pain points are extracted and bucketed automatically, then clustered across every channel. Five hundred tickets about billing collapse into one row with a count you can take to a planning meeting.
What to build next, ranked.
Requests are pulled out of the noise, deduplicated across phrasings, and ranked by how many distinct customers actually asked. The roadmap argument stops being a matter of who spoke loudest.
Save the account first.
When sentiment sours or someone mentions leaving, the account is flagged and a playbook is suggested. Predictions are calibrated against outcomes you labelled yourself, and each one carries a confidence interval rather than a single number.
- account
- Acme Inc.
- probability
- 0.92 · CI [0.86, 0.96]
- drivers
- billing · 3 negatives · 14d
- playbook
- save_the_customer
- owner
- unassigned → CSM
Everything the model concluded, in one table you can argue with.
No score is a black box. Every row links back to the original message, the confidence the model assigned, and the rule that fired because of it.
| ID | Customer | Source | Sentiment | Pain point | Churn |
|---|---|---|---|---|---|
| fb_9f21c4 | Acme Inc. | intercom | −0.82 | billing | 92% |
| fb_9f21c1 | Northwind | zendesk | −0.41 | onboarding | 48% |
| fb_9f21be | Globex | slack | +0.66 | reporting | 07% |
| fb_9f21bb | Initech | −0.12 | performance | 31% | |
| fb_9f21b7 | Umbrella | csv | +0.88 | support | 04% |
| fb_9f21b2 | Soylent | webhook | −0.74 | billing | 77% |
| fb_9f21ae | Hooli | intercom | +0.23 | integrations | 12% |
Questions, answered.
Stop guessing. Run it yourself.
Three commands and roughly thirty minutes. No account, no trial, no sales call — the whole thing is MIT licensed and runs on infrastructure you already have.
git clonePull the monorepo and copy .env.example.docker compose upPostgres, Redis, API, worker and web.alembic upgrade headSchema applied; the console is live on :3000.