Live demo stand
Three channels. One CRM. No duplicates.
Press a button — the stand sends itself a real signed webhook and you watch where it lands.
- Events today
- 0
- Duplicates dropped
- 0
- Deals in CRM
- 0
- In queue now
- 0
Send a real event
Now break it — nothing is lost, nothing is doubled
Flow
feeders → hub → CRM → notificationsLive log
tap a line for the full trace- Nothing has happened yetPress a button on the left and this fills up.
Do not trust the animation — check it yourself
Every number here comes from an HTTP request you can repeat.
The CRM has a read-only key printed below. The webhook takes a signature, like a real telephony provider. Send a lead from your own terminal and find it in the CRM.
# 1. send a lead from the website channel — no signature needed
curl -sS -X POST https://crm-hub.devs-code.site/hooks/website \
-H 'content-type: application/json' \
-d '{"name":"Your Name","phone":"+380670001122","email":"you@example.com",
"monthly_bill":180,"battery":true,"message":"checking your hub"}'
# 2. run the same command again — the hub refuses it
{"status":"duplicate","duplicate_of":"01KZ…","deal":"D-1042",
"hint":"Same idempotency key was already processed — no second deal created"}
# 3. read the CRM back
curl -sS -H 'authorization: Bearer demo_readonly' \
https://crm-hub.devs-code.site/crm/api/v1/deals
# 4. the whole diagram, in your terminal
curl -sS https://crm-hub.devs-code.site/flow
Signed channels use x-hub-signature: t=<unix>,v1=<hmac-sha256 of "t.body">. The telephony secret on this stand is public on purpose: —. A stale timestamp is refused, so a captured request cannot be replayed.