The work was not a new CRM. It was the plumbing between the CRM and the tools a travel desk already pays for, so that the desk stops being the plumbing.
Five journeys now run without a person in the middle. The page shows one customer’s day both ways, then each journey as it happens, then what it would hand back to a desk like yours.
One customer’s day, done twice.
The same six moments, first the way a sales desk does them by hand, then the way the connected CRM does them. The middle column is the work that used to sit on a person.
- 09:10A lead comes in from an Instagram ad
Open Ads Manager, download the leads sheet, copy the row into Excel, text “Hi” from a personal phone, decide who should take it.
about 6 min, by handThe lead is already in the CRM with the ad and campaign attached, given to the next agent in turn, and a welcome message has gone out on WhatsApp.
nothing to do - 11:30The itinerary is ready
Export it, open WhatsApp Web, search the number, type out the trip summary, attach the file, then send the same thing again by email.
about 5 min, by handPress Publish. The customer gets a WhatsApp message with the trip summary and a “View itinerary” button, plus the email. The agent sees ✓✓ when it is read.
nothing to do - 12:15Time to call the customer
Dial from a mobile, talk, then type what was said into a sheet from memory. No recording, no proof the call happened.
about 3 min, by handPress Call on the lead. The phone rings, the customer is bridged, and the recording and call log attach themselves to the lead.
about 30 s - 15:00The manager asks how the calls went
Listen to a handful of recordings at full length. Most calls are never heard by anyone but the agent.
about 30 min, by handEvery call is transcribed, summarised and scored on eleven points overnight. The manager opens a dashboard and reads the flags.
about 1 min - 16:40The customer pays the first instalment
Fill in the contract, email a PDF, chase for a signature for days, then file the scanned copy somewhere.
about 25 min, by handThe payment itself triggers the contract: generated, sent for e-signature, chased daily on WhatsApp until signed, stored when done.
about 2 min - Next weekThe second instalment falls due
Check the sheet, remember who is due, message each one by hand. Some get forgotten until they are late.
about 4 min, by handReminders go out three days before, on the day, and at three and seven days late, each with a payment link. Nothing to remember.
nothing to do
Minutes are estimates of the by-hand steps described in each row. The manager’s review is counted once a day, the rest once per customer. Put your own numbers in the calculator further down.
Five things that used to be someone’s job, drawn as they happen.
Each journey plays as you reach it. Every card has the plain version and, underneath, the line an engineer would want.
- Journey 01 · WhatsApp
Publish the itinerary. The customer has it on WhatsApp.
The agent builds the trip in the CRM and presses Publish. That one press sends an approved WhatsApp message with the destination, nights, hotels, activities, travellers and price filled in, plus a button that opens the itinerary. The email goes out at the same moment. The agent sees the ticks turn blue when it is read, in the same chat thread they reply from.
For your developer
itinerary.published → outbox → rule → DoubleTick template send with 7 params and a dynamic-URL button · status webhooks SENT → DELIVERED → READ keyed on the message id we minted · same event also renders the email - Journey 02 · Calling
Press Call. The phone rings, the customer is bridged, the recording files itself.
No number to dial, no personal phone. The CRM asks the phone system to ring the agent first, then connect the customer, who sees the business line. When the call ends, its duration, outcome and recording attach themselves to the lead, so “did anyone actually call this lead” is a fact, not a claim.
For your developer
POST /leads/:id/call → CallerDesk click_to_call, agent matched by email · call webhook stored verbatim, then upserted into lead_calls by CallSid · recordings listed on the lead · WhatsApp voice calls run on a WebRTC softphone in the browser with a licence pool - Journey 03 · AI call review
Every call is listened to, scored and summarised. Overnight.
Managers used to sample a few recordings. Now each recording goes to Gemini, which writes the transcript in the language spoken, an English translation, a summary, the customer’s travel requirements, and scores the agent on eleven points from greeting to closing. Red flags and coaching notes are on a dashboard by morning.
For your developer
Python pipeline: pull recordings (telephony + WhatsApp calls) → Gemini File API → one structured call to gemini-2.5-pro → JSON validated against a schema → upsert call_insights → /callsense dashboard · idempotent per call, retries, cost tracked - Journey 04 · E-signature
The first payment triggers the contract. It chases itself until it is signed.
When the first instalment is paid, the CRM builds the contract from the itinerary, customer and payment plan and sends it for e-signature: customer first, then the company. The signing link goes out on WhatsApp. Every day it stays unsigned, a reminder goes out on WhatsApp and email. The signed copy lands on the booking the moment both have signed.
For your developer
payment settled → contract PDF (pdfkit) → Documenso envelope, two sequential signers · contract.sent publishes WhatsApp + email · daily signature-reminder cron, one per contract per day · webhook events captured before state changes · signed PDF mirrored to S3 - Journey 05 · Payments
Instalments remind themselves. The gateway is a setting, not a rebuild.
A booking can be paid in full or in three instalments, each with its own payment link. Three days before it is due, on the day, and at three and seven days late, the customer gets a reminder with the link. Which gateway makes the link, PayU or Razorpay, is one setting in the admin; old links keep working on the gateway that made them.
For your developer
payment plans I1 / I2 / I3 · reminder ladder T-3, T0, T+3, T+7 via the notification engine · gateway chosen by one admin setting, each link records its own · webhooks signature-verified, idempotent on status · 72 h lapse and grace handling
Tell us which tools you already pay for. We will show you what connecting them would look like, in a week, with no deck.
Three people feel it differently.
The customer notices speed. The agent notices what they no longer have to do. The owner notices what they can finally see.
- The itinerary lands on WhatsApp the moment it is ready, with one tap to open it.
- Calls come from the office number, and the person calling already knows their trip.
- A contract to sign on the phone, and a payment reminder before anything is late.
- No copying numbers between apps. Publish, Call and Send are buttons on the lead.
- Every message, call and signature sits on the lead’s timeline with ticks and times.
- The follow-ups they would have forgotten are sent for them.
- Proof: which leads were called, when, by whom, and what was said.
- Every call reviewed, not a sample, with red flags on the screen by morning.
- Cash chased on a schedule and contracts signed before travel, without anyone remembering.
Automation is only useful if it is boring on a bad day.
A provider goes down, a message arrives twice, a key expires, a template is rejected. Four habits in the code mean none of those reach the customer or the agent. They are also why the WhatsApp provider could be swapped in a month and why a new gateway is a setting.
Every message is written down first
Whatever WhatsApp, the phone system, the e-signature service or a payment gateway sends is saved exactly as it arrived, before the CRM reads it. If a rule is wrong today, yesterday’s events can be run again tomorrow.
Retries that never send twice
If a provider is slow or down, the message waits and tries again, a little later each time. A message a provider rejects is marked failed and left alone. Every send carries an id the CRM made, so a repeated status update cannot count twice.
A switch for every channel
WhatsApp, email, each queue, each scheduled job and the payment gateway can be turned off or swapped from the admin, with no release. The product keeps running on the channels that are on.
Keys that change without a release
API keys, webhook tokens and gateway secrets live in an encrypted table edited from the admin and read at the moment of use. Rotating a key is a paste, and the next request uses it.
How much desk time would this hand back to you?
Set your own volumes. The result is worked out from the per-step minutes listed underneath, shown as a range, so you can size the idea for your business before we talk.
Set your volumes on the left, or try the example. Nothing is assumed about your desk until you do.
An estimate from the minutes below, shown as a range of a quarter either way. Not a measurement at the client. Twenty-six working days a month.
The minutes behind the estimate
| Per item | By hand | Connected | What the minutes cover |
|---|---|---|---|
| New leads | 6 min | 0 min | copying a lead from the ad platform or a sheet into the CRM, assigning it, sending a first message |
| Itineraries sent | 5 min | 0 min | sending one itinerary on WhatsApp and by email, by hand |
| Customer calls | 3 min | 0.5 min | dialling, then writing up the call from memory |
| Contracts signed | 25 min | 3 min | preparing, sending, chasing and filing one contract |
| Instalments due | 4 min | 0 min | one by-hand reminder per instalment: check the sheet, find the number, message |
Nine tools, one customer record.
What each one does for the desk. Names and marks belong to their owners; they appear here to say what was connected.
Business WhatsApp: templates, two-way chat, voice calls
Phone system: click-to-call, recordings, call logs
Listens to every recorded call, writes the summary, scores the agent

E-signature, customer first then the company, self-hosted
Payment links and the webhook that confirms them
Payment links, in-page checkout, webhooks
Lead ads in; “won” and “lost” sent back so the ads learn
Live flight and hotel prices, booking and cancellation
Contracts, e-tickets and traveller documents, stored once and served fast
Built so that these become normal.
What the five journeys are designed to make possible for a travel desk. The client has not published measured results, so none are claimed here; the evidence for everything above is the code itself.
- A first reply to every new lead within a minute, at any hour
- Fewer follow-ups forgotten, because the reminder is not a person’s memory
- Coaching from every call, with evidence, not from the one call a manager overheard
- Cash collected closer to the due date, with less chasing
- Contracts signed before travel, every time, with the signed copy on the booking
- A new channel or provider plugged in without rebuilding the CRM
Every flow, count and month on this page was read from the CRM’s repository and its commit history in October 2026. The client is described by sector, not named. The time figures are estimates, with their assumptions printed beside them.
One desk, drawn in detail. The same wiring fits yours.
This page follows one CRM so you can see every joint. None of the parts are special to it. These are the connections already running in products we build and look after, for travel, education, hospitality and HR teams.
WhatsApp (DoubleTick, AiSensy) · email · push alerts to staff phones
CallerDesk click-to-call and inbound · Twilio · calling from the browser
Razorpay links, checkout, subscriptions, wallets, payouts · PayU
Documenso · Leegality · generated PDFs for contracts, quotes and tickets
Meta lead ads, Conversions API, ad spend · GA4, Tag Manager, Clarity
TBO flights and hotels · live exchange rates · news feeds
Call review (Gemini) · lead parsing from email and WhatsApp · résumé parsing (Claude)
Google and Facebook login · single sign-on · IDfy KYC · bot checks
Amazon S3 · Cloudflare R2 · MinIO · ImageKit
The big travel sites have an engineering team for this. You don’t need one.
Every call reviewed, a contract that chases itself, an itinerary that reaches the customer the moment it is ready. Not long ago that was in-house software at the large players. It now fits inside the CRM a ten-person desk already uses, on the tools it already pays for, one journey at a time, each in weeks rather than quarters.
Thirty minutes. You leave with a map of what would connect to what on your desk, and what it would take. No deck, no pitch.
Questions about this work.
A CRM where the tools a travel desk already uses, WhatsApp, a phone system, a payment gateway, e-signature and the ad platform, are wired into the customer record so that one action in the CRM, or one event from a tool, triggers the next step on its own. Publishing an itinerary sends it; a payment sends the contract; a recording gets reviewed. Codevibe built these connections inside a holiday travel company’s CRM between July and October 2026.
Nine tools sit on the customer record: WhatsApp through DoubleTick (templates, two-way chat, voice calls), a cloud phone system through CallerDesk (click-to-call, recordings, call logs), Google Gemini for call transcription and scoring, Documenso for e-signature, PayU and Razorpay for payment links and checkout, Meta for lead ads in and results back out, TBO for live flights and hotels, and Amazon S3 with ImageKit for files. Email and push alerts to agents’ phones ride on the same rules.
No, and that is deliberate. The WhatsApp message carries the trip summary and a button that opens the itinerary as a web page, which is always the latest version and renders on any phone. Documents that need to be files, such as flight e-tickets, are generated as PDFs and attached through a document template.
No. Calls are reviewed after they end. Recordings from the phone system and from WhatsApp calls are collected, transcribed, summarised and scored in a batch, and the results appear on a dashboard. Nothing changes the conversation while it is happening.
Messages wait and are retried with growing gaps; a provider outage delays a message, it does not lose it. Payment confirmations are verified and cannot be counted twice, so a repeated or late confirmation cannot credit a payment again. Each channel has an off switch in the admin, and the gateway can be swapped with one setting while old links keep working on the gateway that made them.
Yes. Each provider sits behind its own small adapter with a shared interface, which is how the WhatsApp provider was swapped in September 2026 without touching the chat or the rules. Because features publish events and rules decide what to send, a new channel is configuration, not a rebuild. We have built the same pattern inside two other travel platforms, and the section “Beyond this project” lists the connections already running elsewhere.
No. They are estimates built from the by-hand steps each journey replaces, with the per-step minutes printed next to the calculator so you can disagree with them, and the calculator starts empty so the page never opens on a claim. The client has not published measured figures, so none are claimed. Counts such as eleven scoring points or four reminders per instalment are read from the code; the months are commit dates.
Still copying numbers between tabs?
WhatsApp, calls, payments, contracts and ads can all report to one customer record and trigger each other. Tell us which tools you already pay for; we will show you what connecting them would look like.