All updates
Fix8 April 2026

One lead, one sales call. Every time.

A race condition in the lead agent could put the same lead into three different sales calls if they replied quickly. Killed at the source. Existing duplicate calls have been merged.

A small number of you spotted that an enthusiastic lead replying twice to a reschedule message could end up with two or three sales calls on the calendar. Embarrassing for the gym, confusing for the lead.

The cause was a race in the agent's state machine. Two webhooks arrived within a second of each other, both passed the "is this lead already booked?" check, and both went on to book.

Fix:

  • The state transition is now atomic. The first webhook claims the lead, the second sees the new state and exits cleanly.
  • The booking write itself goes through a single helper that de-dupes by (start_time, lead_id) and refuses to insert a duplicate.
  • Existing duplicate sales-call rows from the past two months have been merged.

If you remember a lead that ended up with two sales calls, check their record now. It's been cleaned up.

Built for gym owners

Ravini is the AI CRM gym owners actually wanted.

£50/mo for the first 50 customers. No setup fee.

Start free trial
One lead, one sales call. Every time. · Ravini changelog | Ravini