Product Healing Agent

Your analytics show what happened.
Velum shows what to heal first.

Velum sits on top of your existing analytics stack, turns raw events into named friction patterns, and returns prioritized product and UX recommendations.

Join Waitlist View on GitHub →

Self-hosted or cloud  ·  One API call  ·  AI-powered summaries  ·  Agent-ready

This is what your data looks like right now.

On the left: raw noise. On the right: what Velum extracts from it.

incoming events
12,847 events / min
1707500000 {"event":"checkout_page_view","user_id":"usr-101","device":"mobile"}
1707500002 {"event":"scroll","depth":340,"user_id":"usr-203"}
1707500003 {"event":"click","target":"btn_pay","user_id":"usr-101"}
1707500005 {"event":"page_view","path":"/pricing","user_id":"usr-445"}
1707500008 {"event":"click","target":"btn_pay","user_id":"usr-101","error":"card_declined"}
1707500010 {"event":"focus","field":"card_number","user_id":"usr-312"}
1707500012 {"event":"click","target":"btn_pay","user_id":"usr-101","error":"card_declined"}
1707500015 {"event":"idle","ms":45000,"user_id":"usr-445"}
1707500018 {"event":"page_view","path":"/pricing","user_id":"usr-445"}
1707500020 {"event":"blur","field":"card_number","user_id":"usr-312"}
1707500021 {"event":"exit","user_id":"usr-312","type":"abandon"}
1707500023 {"event":"click","target":"btn_back","user_id":"usr-445"}
1707500025 {"event":"click","target":"btn_pay","user_id":"usr-101","error":"timeout"}
1707500028 {"event":"page_view","path":"/features","user_id":"usr-445"}
1707500030 {"event":"click","target":"btn_back","user_id":"usr-445"}
1707500033 {"event":"exit","user_id":"usr-101","type":"rage_quit"}
1707500035 {"event":"page_view","path":"/pricing","user_id":"usr-445"}
1707500038 {"event":"exit","user_id":"usr-445","type":"abandon"}
velum pipeline
detected patterns
4 patterns
🔥 Retry Storm Critical
usr-101 clicked pay 4× in 25s
error_code: card_declined → timeout
confidence: 0.96 · flow: checkout
🔄 Confusion Loop Warning
usr-445 looped pricing↔features
45s hesitation between navigations
confidence: 0.89 · flow: evaluation
😶 Silent Abandonment Warning
usr-312 focused card field, paused, left
no error · no retry · session: 12s total
confidence: 0.91 · flow: checkout
AI Hypothesis

"Payment retry storm likely caused by 2.3s button latency — users don't see processing state. Confusion loop on pricing suggests hidden fee anxiety. Recommend: add loading indicator, surface fees on pricing page."

The problem

Your dashboard says "12% drop-off."
It never says why.

📊

You have the data

Millions of events stream through Segment, Amplitude, Mixpanel. You see counts, funnels, conversion rates.

> checkout_btn_click: 4,231
> conversion_rate: 3.2%
> avg_session: 4m 12s
🤷

But not the meaning

Why did 847 users click "Pay" four times? Why do mobile users pause for 30 seconds at pricing? Numbers alone can't tell you.

> "Let's A/B test it"
> "Maybe it's a bug?"
> "Can we look at the logs?"
🔥

So you guess

Teams build hypotheses based on vibes. Engineers dig through logs. PMs schedule research. Weeks pass. Money leaks.

> Time to diagnosis: 2-4 weeks
> Cost of inaction: $47K/month
> Root cause found: rarely
What Velum Detects

Hidden friction your funnel metrics will never surface.

Critical
🔥

Retry Storm

Users hammering the same button — latency, missing feedback, or broken state.

usr-101: click click click click
Critical
😶

Silent Abandonment

Users arrive, see, and leave. No clicks. No scrolls. Just gone.

usr-312: view → ............ → exit
Warning
🔄

Confusion Loop

Back and forth between pages — uncertain, looking for answers they can't find.

usr-445: A→B→A→B→A→ exit
Warning

Hesitation

Long pauses before critical actions — doubt, anxiety, hidden friction.

usr-628: view_price → 47s pause → exit
Signal
🚪

Early Dropoff

Users abandon earlier than baseline — something broke or changed.

baseline: step 4 · actual: step 1
Signal

Bypass Behavior

Users skip expected steps — smart shortcut or broken flow?

expected: 1→2→3→4 · actual: 1→4
What makes Velum different

They tell you what happened.
Velum tells you why.

Amplitude · Mixpanel
PostHog · Hotjar
Velum
Event counting & funnels
Session replay
Friction pattern detection
Explains why users struggle
manual
Cross-user analysis at scale
Zero config / schema-free
AI root cause hypotheses
Self-hostable & open source
Agent-ready API

Velum doesn't replace your analytics stack — it complements it.
Feed it the same events you already track. Get back the why behind every metric.

How It Works

Eight layers. One API call. Real-time results.

Send raw JSON events. Get back structured friction patterns with AI-powered hypotheses.

01
Context Enrichment
Classifies unknown properties (error_code, plan_name) as targets or conditions.
AI-powered
02
Vocab Discovery
Tokenizes event names. Learns domain language. No config needed.
AI-powered
03
Event Normalization
Converts snake_case, camelCase, dot.notation into canonical form.
deterministic
04
Session Reconstruction
Re-assembles scattered events into coherent user journeys.
deterministic
05
Behavior Analysis
Tags each action as hesitation, retry, exploration, or abandonment.
deterministic
06
Friction Pattern Detection
Aggregates signals across users into named friction patterns with confidence scores.
deterministic
07
Baseline Comparison
Compares against historical snapshots. Flags what's new, increasing, or anomalous.
deterministic
08
AI Hypothesis
Generates natural language summaries with actionable explanations for each anomaly.
AI-powered
Agent-Ready

One endpoint.
Every agent.

Your AI agent sends events, Velum returns structured friction patterns and healing hypotheses. The agent decides what to do next.

Step 1
🤖
Agent calls
Your agent sends raw product events to Velum via HTTP POST.
POST /api/v1/analyze
Step 2
v_
Velum analyzes
8-layer pipeline detects retry storms, confusion loops, silent abandonment, and more — returns structured JSON.
severity: 0.96 · 847 users
Step 3
Agent acts
Parse the JSON, make decisions. File tickets, trigger alerts, toggle feature flags — automatically.
create_ticket(pattern)
🎫
File Tickets
jira · linear · github
🚨
Trigger Alerts
slack · pagerduty · opsgenie
🎛
Toggle Features
launchdarkly · flags
📊
Feed Dashboards
grafana · datadog
Deploy Your Way

Self-host it. Or let us run it.

Full control with self-hosting, or zero-ops with Velum Cloud. Same pipeline, same results.

Self-Hosted

Run on your infrastructure

Deploy Velum on your own servers. Your data never leaves your network. Full source access.

  • Go binary — single process, minimal dependencies
  • PostgreSQL for storage — use your existing DB
  • Bring your own LLM key for AI layers
  • Full data sovereignty — nothing phones home
  • Docker, Kubernetes, or bare metal
$ git clone https://github.com/gokulnair2001/Velum.git
$ cp example.config.yaml config.yaml
$ go run cmd/velum/main.go
✓ velum listening on :8080
Velum Cloud

Zero-ops, fully managed Coming Soon

In Development

We handle infrastructure, scaling, and upgrades. You send events, we return quantified friction patterns and prioritized healing recommendations.

  • No servers to manage — just an API endpoint
  • Auto-scaling to handle traffic spikes
  • Managed AI models — no API keys needed
  • Historical pattern storage and trend analysis
  • Deeper analysis with richer, more detailed results
Join Cloud Waitlist →

Used by engineers from

Lowe's
Google
Motive
Powerplay
Swiggy
Lowe's
Google
Motive
Powerplay
Swiggy
Open Source

Stop guessing.
Start healing.

Send the same events you already collect. Get back the hidden friction patterns and what to fix first.

Free during beta  ·  Direct onboarding support  ·  Shape the roadmap