Free · slots from a live schedule
For salons, studios and private practices: the client picks a service, a specialist and a free slot right on your website. Availability comes from the Cenaly.com appointment journal — staff schedules, breaks, holidays and service buffers are already applied, so only genuine slots stay in the grid.
No card · a minute to sign up, another for the tag · settings reach your site in 5 minutes
The list comes from your service menu with duration and price. If there is only one service, the step is skipped and they go straight to times.
If only one person performs that service, they are attached automatically. “Anyone available” lets the system pick whoever is free in that slot.
A 14-day date strip and a time grid: staff schedules, breaks, holidays, service buffers and existing appointments are all accounted for. The “⚡ Earliest: today 17:30” chip leads to the first free slot in one tap.
The widget waits for the server before saying “you’re booked”: then it shows the booking number, a Telegram reminders button, a calendar file and a “manage booking” link.
A free Cenaly.com account and your site domain in the "My website" section.
One line before </body> — in your theme, in a Tilda or Wix HTML block, in Shopify's theme.liquid. It serves every widget.
Each widget is a toggle and a settings form. Changes reach your site without touching code; CDN cache is five minutes.
The tag
<script src="https://cdn.cenaly.com/site/v1.js" data-domain="your-site.com" async></script> One tag for all widgets. `data-domain` is your site; everything else lives in the admin.
A four-step wizard that skips what isn’t needed: one service goes straight to times, one eligible specialist is attached automatically. The contact step shows a summary with “change” links, and the name and phone from the previous booking are prefilled. Best for practices with one or two services.
The grid is computed by the same core as booking on our storefront: the location’s booking hours, staff schedules and one-off days, holidays and breaks, service buffers and current occupancy. Best for anyone with a live schedule rather than a “call us” page.
`data-service`, `data-master` and `data-open` open the widget on the right step — a “Book Anna for a haircut” button next to her photo. A broken id quietly falls back to the full wizard. Best for sites with staff and service pages.
A successful submission is not yet an appointment: the widget waits for server confirmation. If the slot was taken meanwhile, the client sees it, the board is re-read and they return to the grid. Without an answer it honestly says “processing”, and a double click never creates a second booking. Best where two people go for the same slot.
With a deposit policy and a live payment provider, the client sees the amount at the contact step and pays on our secure page — no card is entered on your website. Best where no-shows are the problem.
When a day is fully booked, a waitlist appears: the client leaves an email and hears when a slot frees up. The request holds nothing, and that is stated before they send it. Best for fully booked specialists.
The client picks a specialist and a slot in the evening, and in the morning you see the appointment in the journal with the rest.
`data-master` opens the widget on their schedule, so the visitor doesn’t hunt for the right person in a list.
`data-service` leads to a specific treatment: after reading about a manicure the client doesn’t have to find it again.
`data-open="true"` opens the wizard as the page loads — made for paid campaigns.
An action link opens the booking for the right service straight from printed material.
“Anyone available” covers the case of “I don’t mind who, as long as it’s today”.
Colour, position and labels adapt to your site. The widget lives in a Shadow DOM — your styles don't break it, and it doesn't break yours.
On desktop
On mobile
On your side: The widget reads only files your location already publishes: services from the menu, specialist schedules and time off, the bookings board. No second schedule to maintain for the website.
On desktop
On mobile
On your side: The appointment lands in Appointments and in Leads. Sent ≠ booked: the widget waits for the server to confirm, and until it does it honestly says “Your request is being processed”.
On desktop
On mobile
On your side: A waitlist request travels the same path with a waitlist flag and holds nothing — and the guest is told that BEFORE sending it, not after.
Exact menu names and plan requirements, taken from each platform’s own help center.
Sites built with our website builder ship with the widgets already wired — nothing to paste.
Step-by-step guides per platform — in the help center →Free
Widgets are the door into the Cenaly.com platform: requests, chats and orders from your site land in the same admin as everything else, and some owners later buy extensions. We earn from plans and from four paid add-ons rather than from the widgets — which is why we charge nothing per visitor, impression, request or domain.
| Without the widget | With the widget | |
|---|---|---|
| When people can book | ✕ Booking is possible only while someone is answering calls and messages | ✓ Clients book at night and at weekends, with no call and no sign-up |
| Where slots come from | ✕ Free time lives in the manager’s head or in a paper diary | ✓ Slots are computed from schedules, breaks, holidays and service buffers — as in your journal |
| Two people, one slot | ✕ A clash shows up after the call, and someone has to ring back | ✓ The slot goes to the first booking the server confirms; the second person returns to the grid |
| Reminders | ✕ Visits are reminded about by hand, or not at all | ✓ Clients switch on Telegram reminders and add the visit to their calendar |
| Cost | ✕ Every booking costs manager time: check the schedule, call back, write it down | ✓ The widget and the appointment journal are free, with no limit on bookings or staff |
An appointment widget is a button behind which a client picks a service, a specialist and a time themselves. What sets it apart from a contact form is that it doesn’t say “leave a request” — it shows the specific slots that are genuinely free, and ends with a confirmed appointment in the journal.
It belongs wherever bookings are made to a time and to a person: salons, barbershops, cosmetology, massage, private practices. Especially when the decision to book is made in the evening or at the weekend — when there is nobody to call, but the wish to book is there.
Here the widget is free and runs off the same appointment journal as the dashboard: availability, staff schedules, holidays and service buffers live in one place. The server confirms separately — until it does, the client is never told they are booked. To start you need the shared “My website” tag and the Appointments toggle; the schedule is then managed in the dashboard.
The appointment widget is the wrong tool where the service isn't tied to a time and a person: for "leave a request, we'll call you back" a callback button is enough and it won't ask you to keep a schedule. It differs from table booking in that it occupies a named specialist for a known duration and respects their shifts and holidays — if you seat parties in a dining room, the neighbouring widget is yours.
No: a name and a phone number on the last step, without an app or a sign-up. If they booked before from the same device, the fields are prefilled and a “not me” button clears them.
Server confirmation decides: the slot goes to the first confirmed booking. The second person sees that it is taken, the availability board is re-read (its cache is 60 seconds, plus a refresh when the tab regains focus) and they choose another time — instead of an awkward call afterwards.
In the appointment journal in your dashboard, with the service, specialist, time and the client’s contact — next to bookings taken by phone and on the storefront. Nothing has to be copied over from a form.
Yes. After booking the client can enable Telegram: confirmation, reminders 24 hours and 2 hours before the visit, and a cancel button. There is also a calendar file and a “manage booking” link.
Yes, with a deposit policy set and a payment provider live for your country and currency. The client sees the amount before sending the booking and pays on our page — no card is entered on your site.
Yes: `data-service` and `data-master` open the widget on the right step, and `data-open="true"` opens it as the page loads. QR action links do the same; a broken id opens the ordinary wizard.
The shared “My website” tag plus the Appointments toggle — one tag powers all 12 widgets. WordPress — footer.php or a plugin, Tilda — HTML code in head, Shopify — theme.liquid, Webflow — Custom code. Changes arrive within 5 minutes: widget files are served from a CDN with that cache. A tag inserted through Google Tag Manager is not seen by our installation check — look at the site yourself.
The appointment widget is about 50 KB gzipped — it carries the slot grid, the calendar and the specialist picker. It loads as a separate file with the async attribute after the page has rendered, and the labels for the visitor's language arrive in a pack of roughly 1.3 KB rather than all forty languages at once. Free slots are computed by our server; the guest's browser only renders the answer. The panel lives in a Shadow DOM.
The widget, the appointment journal and Telegram reminders are free. Only the “Appointment autopilot” extension is paid: confirmation, reschedule and cancellation emails, an email reminder before the visit and the widget funnel in the journal. Its price is in the extensions catalogue.
One loader — about 26 KB gzipped, with the async attribute: it reads which widgets you switched on and pulls only those, as separate files. A widget you left off is never downloaded, and the weight of each one you did switch on is stated on its own page.
No. Widgets render inside a Shadow DOM: your site's CSS doesn't affect them and theirs doesn't leak out.
It reads your page's `<html lang>` or a `data-lang` attribute on the tag. Built-in labels are translated into 45 languages — the guest chat covers the same list; your own texts you write in the admin in the languages you need.
In the cloud your account lives in: cenaly.com — AWS, cenaly.ru — Yandex Cloud in Russia. Requests, conversations and bookings stay within the brand's contour.
More — installation per platform, settings and troubleshooting — in the help center. Installation guide →
Let visitors request a call: your phone system handles the connection, or you receive the request by email and in your dashboard
Free
One floating button: WhatsApp, Telegram, call, chat — up to 12 channels
Free
Honest badges — “14 orders today”, “7 bookings this week” — from real data
Free
Free. One tag and a filled-in staff schedule — and clients pick their own time without calling. Signing up takes a minute, installing the tag another one.
Start for freeNo card required · one tag for all 12 widgets · Telegram reminders included