A clinic network replaced its phone desk with online booking. Call-centre load dropped threefold.
Across six clinics every appointment went through the phone. At peak hours it was impossible to get through, and receptionists kept the schedule in a shared spreadsheet.
We built online booking against the doctors' real schedules, with Telegram reminders and one-click cancellation.
The hard part wasn't the site — it was migrating five years of spreadsheet records into one consistent format.
Three months after launch, 62% of all appointments came through the site.
How it's built
A fragment of the project's real code — so you can see what's inside.
TypeScript
type Bucket = { count: number; resetAt: number };const buckets = new Map<string, Bucket>();/** * Ограничение частоты запросов. * Защищает формы от перебора и спама. */export function rateLimit( key: string, limit = 8, windowMs = 60_000,): RateLimitResult { const now = Date.now(); const bucket = buckets.get(key); // Окно истекло или его не было — начинаем заново. if (!bucket || bucket.resetAt < now) { buckets.set(key, { count: 1, resetAt: now + windowMs }); return { ok: true, remaining: limit - 1, retryAfter: 0 }; } if (bucket.count >= limit) { return { ok: false, remaining: 0, retryAfter: Math.ceil((bucket.resetAt - now) / 1000), }; } bucket.count += 1; return { ok: true, remaining: limit - bucket.count, retryAfter: 0 };}Get in touch
Project request
Fill in the form — we'll discuss scope and timing.
Next project
Nur — a delivery app