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
01
Visit
Marked in the booking system
02
Invite
Two weeks later, in a messenger
03
Dates
A reply in their own words
04
Discount code
3 days before the date
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
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 wrote | Occasion | Result |
|---|---|---|
| “14.02 anniversary, 21.06 mom’s bday” | 2 dates | Saved |
| “hubby’s bday is September 3” | Birthday | Saved |
| “for New Year and March 8” | Holidays | Saved |
| “how much is a booking?” | Not about dates | To a person |
| “12.05 son’s bday, can we both come?” | Has a question | For review |
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.