Inspiration

We kept seeing the same pattern: a company gets blindsided by a wave of customer complaints that started days ago on Reddit or Trustpilot, but nobody internally noticed until it hit the press. We thought, what if you could catch that signal in the first hour, not the first week? That's where VoxAlert came from. We wanted to build something that actually listens across all the messy places customers complain and turns that noise into something actionable before it becomes a crisis.

What it does

VoxAlert scrapes customer complaints from public channels, classifies them using LLMs, and clusters them into themes. It detects severity spikes, figures out which team should own the issue, and posts a ready-to-act Slack alert to the right channel. Payments complaints go to the payments team, legal issues go to legal, engineering bugs go to engineering. High severity stuff also gets escalated to a critical channel. The whole thing streams live to a dashboard so you can watch themes, alerts, and severity breakdowns populate in real time as the pipeline runs.

How we built it

The frontend is Next.js with a custom workflow visualizer that shows every pipeline step as it executes. The backend agents handle classification, clustering (cosine similarity on embeddings), trend detection (z-score spike analysis), root cause inference, routing, drafting, governance, and publishing. We used Gemini through OpenRouter for LLM calls, Nimble for web scraping, and ClickHouse for the event store and baseline comparisons. Slack Block Kit handles the alert formatting, and we built a team resolution system that maps complaint themes to the right Slack webhook using regex pattern matching.

Challenges we ran into

Getting the multi-channel Slack routing right was harder than expected. Our first version sent every alert to every channel, which completely defeated the purpose. We had to rewrite the publish layer to group complaints by team and post each group only to its relevant channel. PII detection was another tricky one because you need to catch sensitive data without being so aggressive that you block legitimate alerts. Keeping the dashboard in sync with live pipeline data also took real work since we had to pipe scraped complaints through React context and dynamically compute themes, severity scores, and sparklines on the fly.

Accomplishments that we're proud of

The end-to-end flow actually works. You type a brand name, hit run, and within minutes you have real complaints scraped from real sources, classified into themes, scored for severity, and posted to the correct team's Slack channel with evidence and context. The governance guard catches PII before anything goes out. The dashboard goes from empty to fully populated with live data as the pipeline completes. We also got the "what the agent will do next" preview card working, which shows exactly what action is about to be taken with a countdown timer before it executes.

What we learned

Building agentic systems that take real actions (posting to Slack, routing to teams) is a fundamentally different challenge than building chatbots. We learned that the hardest part of a multi-agent pipeline isn't any single agent, it's the orchestration and making sure data flows correctly between steps. Streaming SSE events to keep the UI responsive while the backend does heavy LLM work was a pattern we'll definitely use again.

What's next for VoxAlert

We want to add more action targets beyond Slack, things like auto-creating Jira tickets and drafting customer response emails in the brand's voice. We're planning to build historical trend comparison so you can see how a theme is evolving week over week against ClickHouse baselines. We also want to add a feedback loop where resolving an alert in the dashboard automatically posts a resolution notice to Slack channels. Longer term, we want VoxAlert to predict emerging issues before they spike, not just detect them after they start.

Built With

Share this project:

Updates