Online booking and CRM integration for a clinic network
WClinic is an evidence-based medicine clinic in Saint Petersburg, with a children's clinic under its own site, wdeti.pro. Patients book visits online, and clinic staff work in a CRM. Our job was to connect the two with a multi-clinic appointment booking system that works through the CRM, plus reminders that reach patients on Telegram, WhatsApp or SMS.
The engagement ran for six months of active development, followed by ongoing support. We led it as a five-person team: a team lead and four full-stack developers.
Key features
- Multi-clinic online booking: appointments for every clinic in the network go through one booking system instead of a separate setup per clinic.
- CRM integration layer: a middleware API sits between the public site and the clinic CRM, so the website never depends on CRM internals directly.
- Conflict handling across branches: booking rules the CRM did not provide live in the middleware, including resolving scheduling conflicts between branches.
- Booking dashboard: one interface for patients and clinic administrators to manage appointments across clinics.
- Multi-channel appointment reminders: Telegram first, then WhatsApp, then SMS, so a reminder still arrives when a patient doesn't use a given messenger.
- SEO and accessibility work: improvements on the patient-facing pages people reach from search.
- Reproducible deployments: a containerized environment and Git-based CI in place of hand-made releases.
Stabilizing a legacy clinic website first
When we joined, the existing site was unstable and effectively undeployable, because nobody could say exactly how production was put together. Building booking features on top of that would only have added risk, so stabilization came first.
We restored a working environment and containerized it with Docker, which gave every developer and every server the same runtime. The codebase moved into Git with a CI pipeline, and releases stopped depending on manual steps. Feature work started only once a release could be reproduced.
Architecture and tech stack
Middleware API over the clinic CRM
The clinic CRM stays the system of record for schedules and patients, but it did not cover all the business logic online booking needs. Patching that logic into the CRM or burying it in the website would have made both harder to change. We put it in a dedicated middleware API instead. The website and dashboard call the middleware, which applies the booking rules and exchanges data with the CRM. That boundary keeps CRM-specific details in one integration point.
Backend and frontend
The platform is split into services built on Laravel 8 and Yii2 with MySQL. The patient-facing and admin interfaces use Vue.js 2 and Nuxt.js. Everything runs in Docker containers, so what passes CI is what gets deployed.
Reminder delivery with fallback
A missed appointment leaves an empty slot another patient could have used. Reminders are how a clinic fights no-shows, but only if they reach the patient. Our reminder logic works as a fallback chain: it tries Telegram, falls back to WhatsApp when Telegram can't deliver, and uses SMS as the last resort. The clinic doesn't have to pick one channel for every patient.
Our role
We filled the team lead role on a five-person team for the initial six-month modernization. That covered stabilizing and containerizing the environment, setting up Git and CI, designing the middleware API over the CRM, and shipping the booking dashboard and reminder logic. After that, the engagement continued as ongoing support. The clinic's website is wclinic.pro.
Related work
For another appointment booking product, see Bronjoy, our booking marketplace for Uzbekistan. For another team-lead engagement, see Moydom, a smart-city platform. We build systems like this through our web app development service, and messenger-based booking and reminder flows through Telegram bot development.



