SERGEY REVIN

Custom service · repeat visits

Important dates: a service that learns your clients’ occasions and invites them back with a personal discount

Clients book online, come in — and nobody talks to them until their next booking. I built a service that, two weeks after a visit, writes to the client in their messenger from the business’s own number, asks about the dates that matter to them, understands a free-form reply and, 3 days before each date, sends a personal discount code. Admins get their own panel.

What it looks like

Mock-ups with demo data, no real data

  1. 01

    Visit

    Marked in the booking system

  2. 02

    Invite

    Two weeks later, in a messenger

  3. 03

    Dates

    A reply in their own words

  4. 04

    Discount code

    3 days before the date

The client’s path

Morning

Anna, in 3 days, June 21, it’s your mom’s birthday.

Treat her to a visit: 15% off with code DEMO-7K2QX until July 2.

· Demo data

11:00

The offer 3 days before the date

At a glance

Client
Under NDA
Task
Repeat visits from clients who book online
Status
Launched and running
Role
Design, development and launch of the service

Results

  • up to 10

    important dates per client

  • 3 messengers

    WhatsApp, Telegram and MAX — from the business’s number

  • 3 days

    before the date the client gets a personal code

Before

  • After a visit nobody talks to the client until their next booking — if there is one.
  • Nobody has time to ask every client about birthdays and anniversaries, write the dates down and remind them on time.
  • Generic discount blasts aren’t tied to the client’s own occasions and easily end up ignored.

What was built

Sync with the booking system

Every 5 minutes the service pulls visits marked “client attended” from YCLIENTS (a booking system popular in Russia) and queues an invite. The delay is configurable, including per service.

Messages from the business’s number

The service writes in the messenger the client already uses with the business: WhatsApp, Telegram or MAX. Scheduled messages go out only between 10am and 8pm.

Understands free-form replies

Rules for Russian read dates in numbers and words and holidays without a date (“for New Year”), and tell the occasion: birthday, anniversary, holiday. A question about booking or prices isn’t taken for a date, and a reply with a question or a broken date goes to a person for review.

Personal codes for the occasion

3 days before the date — a unique code: 15% off for birthdays and anniversaries, 10% for holidays, valid for 14 days. One offer per date per year.

An admin panel

Summary, upcoming dates, clients, reply review, promo codes and a message log. Texts, discounts and the send window change without a developer. Three modes: no sending, test numbers only, live.

💬Client’s reply → what is saved

Client wroteOccasionResult
“14.02 anniversary, 21.06 mom’s bday”2 datesSaved
“hubby’s bday is September 3”BirthdaySaved
“for New Year and March 8”HolidaysSaved
“how much is a booking?”Not about datesTo a person
“12.05 son’s bday, can we both come?”Has a questionFor review
Demo data
How the service reads replies (translated from Russian)

Stack

  • Node.js
  • TypeScript
  • PostgreSQL
  • React
  • YCLIENTS API
  • WhatsApp · Telegram · MAX
  • Docker

Questions

Why no AI?

Replies about dates are short and alike — rules parse them instantly, for free and predictably. Anything the service isn’t sure about is checked by a person, so a client never gets a wrong confirmation.

Does the client need to install anything?

No. The chat happens in the messenger they already use with the business, from the same number.

What if a client doesn’t want messages?

They write “stop” — the service unsubscribes them right away and confirms. The client consents to their dates being processed when they reply to the invite.

Does it work without YCLIENTS?

The mechanics are the same for any booking system you can pull visits from: only the connection changes.