Car wash website development using 1C-Bitrix

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    747
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

Car Wash Website Development on 1C-Bitrix

A car wash website solves one specific problem — maximize bay usage. The customer must find the needed service in 40 seconds, see the cost for their car class, and book available time. Everything else is secondary.

On 1C-Bitrix, this task is closed by a combination of service catalog infoblocks, Highload blocks for scheduling, and the sale module for subscriptions. Let's examine the architecture in detail.

Service Catalog with Pricing by Car Class

Car wash services are not a flat list. Washing a sedan body and washing an SUV body cost differently. Therefore, a standard infoblock with just a single "Price" property doesn't work.

Structure of the "Services" infoblock:

  • Title — body wash, interior cleaning, polishing, detailing, nano-ceramic coating
  • Category — express, standard, premium (reference property)
  • Duration — execution time in minutes (numeric property)
  • Process description — what exactly is included, which materials are used

Pricing is implemented through trade offers (SKU). Each offer is a car class: small (B-class sedan), medium (crossover), large (SUV/minibus). Each SKU has its own price. The customer selects their car class once on the site — the filter is remembered in the session and substitutes the correct prices throughout the catalog.

For complex services (detailing, pre-sale preparation), a "Composition" property is added — reference to other infoblock elements of type E. This allows showing that the detailing package includes body polishing, interior cleaning, and plastic treatment, with automatic total duration calculation.

Online Booking: Bay Schedule via Highload Blocks

This is the core of the car wash website. Implementation through standard infoblocks is too slow — with 6 bays and 30-minute slots per day, over ~180 records accumulate. In a month — over 5000. A Highload block handles this volume without degradation.

"Schedule" Highload block:

Field Type Purpose
UF_BOX_ID Integer Bay ID (1-6)
UF_DATE Date Booking date
UF_TIME_START String Slot start (08:00, 08:30...)
UF_TIME_END String Slot end
UF_SERVICE_ID Integer Link to service infoblock element
UF_STATUS List free / booked / in_progress / done
UF_CLIENT_PHONE String Client phone
UF_CAR_CLASS List Car class
UF_ORDER_ID Integer Link to sale order (for subscriptions)

Grid formation logic. When opening the booking page, the component receives the current date, makes a query from the Highload block by UF_DATE and UF_BOX_ID, builds a grid "bay × time". Free slots are clickable, occupied ones are gray. Service duration determines how many consecutive slots are blocked: if polishing takes 90 minutes, selecting the 10:00 slot automatically reserves 10:00, 10:30, and 11:00.

Slot generation occurs via cron agent (CAgent), which every night creates slots for 14 days ahead. The agent considers the car wash schedule (infoblock properties "Settings") and excludes weekends/holidays.

Double-booking protection — when confirming a booking, the UF_STATUS of selected slots is checked in a transaction. If between the grid display and the "Book" click the slot was taken — the client gets a message and an updated grid.

After successful booking, an event handler is triggered, which sends SMS through messageservice and adds a deal to Bitrix24 CRM (if integration is configured).

Subscriptions and Loyalty Program

Subscriptions are implemented through the sale module as service-type products. A 5-wash subscription — a product with an additional UF_REMAINING property (remaining visits) in the "Client Subscriptions" Highload block.

With each booking using a subscription, the UF_REMAINING value decreases by 1. When the balance reaches 2 — the client receives a renewal reminder.

The loyalty program is built on built-in cumulative discounts of the sale module. User groups (Silver, Gold, Platinum) are assigned automatically based on order amounts through the OnSaleOrderSaved handler. The discount is applied when placing the next booking.

Technical Aspects

  • Responsiveness — 70%+ clients book from their phone, stuck in traffic. The schedule grid on mobile is displayed as horizontal swiping across bays
  • Speed — composite caching is enabled for the catalog, schedule loads via AJAX request to the controller (not cached)
  • Notifications — SMS on booking, reminder 2 hours before, review request 1 hour after visit