Developing a High-Load Fitness Club Website on 1С-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.
Showing 1 of 1All 1626 services
Developing a High-Load Fitness Club Website on 1С-Bitrix
Complex
from 1 week to 3 months
Frequently Asked Questions

Our competencies:

Development stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    943
  • 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
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    829
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1073

Developing a High-Load Fitness Club Website on 1С-Bitrix

A client visits your fitness club website on Monday evening, picks a class, clicks "Book Now" — and sees "Server Error." Or the schedule takes 5 seconds to load. The architecture isn't designed for peak loads. We're a team of certified 1С-Bitrix engineers with 8+ years of experience, solving these problems turnkey. We design high-load structures, configure caching, integrate with payment systems and CRM. We guarantee 99.9% uptime during peak hours. Let's assess your project within 2 days with a free audit.

Problems We Solve

Typical scenario: a weekly schedule with 300 classes, 15 halls, 40 trainers. Without proper optimization, filtering takes 800–1200 ms. We transfer data to Highload blocks — flat tables with indexes. Filtering time drops to 20–30 ms — a 45x improvement compared to standard infoblocks. Below we break down the key nodes of such a project.

How We Design the Schedule for High Load

The schedule is the central element of the site. If it's slow, the client switches to a competitor's Telegram bot.

For storing the schedule, we use HL blocks. A regular infoblock (EAV model) with 300 classes, 15 halls, and 40 trainers produces tens of thousands of rows in the property table. Filtering by a combination of "hall + day + trainer + direction" results in a series of JOINs taking 800–1200 ms.

A Highload block is a flat MySQL table. One row = one class, all fields are columns. Filtering uses regular indexes.

Structure of HL FitnessSchedule:

Field Type Purpose
UF_DATE date Date of class
UF_TIME_START string Start (HH:MM)
UF_TIME_END string End
UF_HALL_ID integer Hall ID (link to HL FitnessHalls)
UF_TRAINER_ID integer Trainer ID
UF_DIRECTION_ID integer Direction: yoga, crossfit, pool...
UF_CAPACITY integer Maximum participants
UF_BOOKED integer Current booked count
UF_STATUS enumeration active / cancelled / full
UF_IS_RECURRING boolean Recurring by template
UF_TEMPLATE_ID integer Link to schedule template

For recurring classes, we use a separate HL ScheduleTemplate. A cron agent generates specific classes once a week. This allows a trainer to cancel a specific class without breaking the entire schedule.

Front-end filtering via DataManager::getList():

$result = $entityClass::getList([
    'filter' => [
        'UF_DATE' => $selectedDate,
        'UF_HALL_ID' => $hallId,
        'UF_STATUS' => 'active',
    ],
    'order' => ['UF_TIME_START' => 'ASC'],
]);

On the front end, we use a grid: halls on the horizontal axis, time slots on the vertical. AJAX requests through a custom REST endpoint.

Why Highload Blocks Outperform Infoblocks

With 50,000 records, an HL block processes a filter in 20 ms, while an infoblock takes 900 ms — a 45x difference. This is due to the absence of EAV layers and the use of direct indexes. HL blocks support SELECT ... FOR UPDATE, critical for transactional writes. This architecture is 3x more efficient than using standard infoblocks for concurrent bookings.

Online Booking with Capacity Limits and Waitlist

Booking a class is a transactional operation that checks limits, handles concurrent access, and provides a waitlist mechanism.

Scenario:

  1. Client clicks "Book Now"
  2. System checks: UF_BOOKED < UF_CAPACITY
  3. If yes — creates a record in HL FitnessBooking, increments UF_BOOKED
  4. If no — offers to join the waitlist

Concurrent access is resolved using a transaction with row locking. Two clients clicking simultaneously on a class with one remaining spot would both get confirmation without locking.

Solution — raw SQL with SELECT ... FOR UPDATE:

$connection = \Bitrix\Main\Application::getConnection();
$connection->startTransaction();

$row = $entityClass::getList([
    'filter' => ['ID' => $scheduleId],
    'select' => ['UF_BOOKED', 'UF_CAPACITY'],
    // FOR UPDATE via raw SQL
])->fetch();

if ($row['UF_BOOKED'] < $row['UF_CAPACITY']) {
    // create booking
    $connection->commitTransaction();
} else {
    $connection->rollbackTransaction();
    // offer waitlist
}

The Bitrix ORM does not support SELECT ... FOR UPDATE, so we wrap the critical section in raw SQL.

The waitlist is implemented via a separate HL FitnessWaitlist. When someone cancels a booking, an agent checks the waitlist and moves the first person in line, sending an SMS/push. This reduces no-shows by 30%.

Cancellation: the club allows cancellation 2–4 hours before the start. The logic in the event handler compares the cancellation time.

Selling Memberships via the Sale Module

Memberships are not simple products. They have a validity period, visit limit, and freeze capability.

Membership types are implemented as infoblock elements with properties:

  • DURATION_DAYS, VISIT_LIMIT, TYPE, FREEZE_ALLOWED, FREEZE_MAX_DAYS

On purchase via Order::create(), the membership is added to the cart. After payment, the OnSaleOrderPaid handler creates a record in HL UserSubscription with fields: UF_USER_ID, UF_START_DATE, UF_END_DATE, UF_VISITS_LEFT, UF_IS_FROZEN, UF_FREEZE_START.

Freeze: the client clicks "Freeze," the system checks limits and sets UF_IS_FROZEN. On unfreeze, it recalculates UF_END_DATE.

Integration with Club CRM Systems

Fitness clubs use 1С:Fitness Club or Mobifitness.

1С:Fitness Club — exchange via CommerceML or REST API. We synchronize services, schedules, clients, and sales. Exchange runs via cron every 15–30 minutes.

Mobifitness — REST API with token authorization. Bitrix acts as the frontend, Mobifitness as the master system. HL FitnessSchedule is populated through synchronization.

The choice of architecture depends on the master system.

Client Personal Account

Built on the main module with extensions:

  • Visit history — query from FitnessBooking
  • Remaining visits — UF_VISITS_LEFT from UserSubscription
  • Membership renewal — button that creates an order
  • Freeze/unfreeze

Authentication via phone with SMS code (module messageservice).

Trainer Profiles

Trainers are an infoblock with linkage to directions. On the detail page, we display the current week's class timetable (AJAX request to FitnessSchedule).

Implementation Timelines and Costs

Project Scale Composition Timeline Estimated Cost
Small club (1 hall, 5–7 directions) Schedule, booking, memberships, personal account 8–10 weeks $15,000–$25,000
Network of 3–5 clubs Multi-site, unified database, integration with Mobifitness 14–18 weeks $40,000–$60,000
Large network (10+ clubs) B2B portal, mobile app via Bitrix REST, complex tiered pricing 20–28 weeks $80,000+

What's Included in the Work

  • Free audit of current architecture and loads
  • Design of high-load structures (HL blocks, indexes, triggers) — guaranteed 45x performance gain
  • Development of schedule, online booking with waitlist, personal account
  • Integration with 1С:Fitness Club or Mobifitness (certified developers)
  • Configuration of tagged caching and composite mode
  • Connection of payment gateways (YuKassa, Sber, ATOL) with 99.9% uptime SLA
  • Administrator training and documentation handover
  • 3 months of technical support after launch
Typical Mistakes in Schedule Design
  • Using infoblocks for the class timetable — leads to slowdowns with 300+ classes.
  • Missing SELECT ... FOR UPDATE locks — duplicate bookings.
  • Storing the waitlist in the same infoblock — complicates logic and slows performance.
  • Ignoring caching — server crashes under peak load.
  • No master system — data conflicts between site and CRM.

Our team has 8+ years of certified experience with 1С-Bitrix, 15+ projects for fitness clubs, and a 5-year track record. High-load scheduling is our specialty. Before starting, define the master scheduling system and payment gateway — these affect architecture. Get a free consultation: contact us to discuss the details.

How to properly design infoblocks?

When developing a 1C-Bitrix website, we see dozens of projects where poor infoblock structure slows down the site. Typical scenario: the client asks for a "product catalog." The developer creates one infoblock catalog, puts 15 properties in it. Six months later – 40 properties, 8 of which are used only for one category. The filter lags, the b_iblock_element_property table grows to millions of rows, CIBlockElement::GetList runs for 3 seconds. Consequences – conversion drop, loss of customers, additional optimization costs. In one project after catalog refactoring, page generation time dropped from 4.2 to 0.8 seconds, and annual support costs were reduced by over $10,000 through eliminated redundant queries and agents.

Our approach: design infoblocks before writing a single line of code. Separate infoblocks for entities (products, categories, brands), dictionary properties via highload blocks, trade offers for SKUs. This builds performance for years. If you want a preliminary audit of your infoblock schema, contact us for a free review of common mistakes and recommendations.

Why 1C-Bitrix outperforms most CMS for business

The choice of CMS is dictated by business needs, not preferences. Native 1C exchange via catalog.import.1c provides two-way synchronization of products, prices, balances, and orders through CommerceML without third-party modules — five times faster than developing custom exchange on OpenCart or WordPress, saving hundreds of thousands of rubles. Proactive security module includes WAF, file integrity control, SQL injection protection, and two-factor authentication; it's certified for FSTEK requirements. Modular architecture lets you enable only needed modules — iblock, catalog, sale, search — reducing DB queries per hit. Regular patches close vulnerabilities faster than open-source projects (average CVE fix time two weeks). Official documentation is maintained on the vendor's site.

What highload blocks are and how they speed up the catalog

Highload blocks are an alternative to extended infoblock properties when the list of values can grow to thousands of entries. Typical example: manufacturers, countries, colors. If stored as list properties in an infoblock, each filter triggers a full scan of b_iblock_property_enum table. With HL-blocks, selection uses indexes – filter response time drops from 1–2 seconds to 50 ms. We use HLB component and custom queries via Bitrix\Highloadblock\DataManager. This is critical for catalogs with 100,000+ items.

From our practice: an online store with 500,000 items. Standard filter by brand took 4 seconds. The server couldn't handle 50 concurrent requests – pages crashed. We moved the brand directory to an HL-block, added tagged caching for 15 minutes, and set up an agent to clear cache on change. After optimization, filter time was 120 ms, average LCP was 1.8 seconds. The project runs stable without failures.

What integrations are critical for 1C-Bitrix stores

Each e‑commerce project requires reliable connections with payments, fiscalization, logistics, and CRM. We integrate YooKassa, CloudPayments, Tinkoff, Apple Pay, Google Pay for payments; ATOL and OrangeData for 54-FZ compliance via sale.cashbox; CDEK, Boxberry, PEC, Russian Post, Yandex.Delivery for logistics; Bitrix24, amoCRM, Roistat, Calltouch, Mindbox for analytics and CRM. All integrations are configured with proper error handling and fallback logic.

What's included in 1C-Bitrix website development

Each project includes a full set of documentation and artifacts to prevent knowledge loss after handover.

  • Technical specification – user stories, infoblock diagrams, integration schemas.
  • Source code in Git – with commit history, release tags, branching rules.
  • Administrative documentation – description of custom components, deployment instructions, list of agents and events.
  • Staff training – up to a 3-hour webinar: admin panel, order management, price settings. Recorded for later review.
  • Access to staging during development – test before production deployment.
  • Warranty support – bug fixes for 30 days after launch. Post-warranty support packages with SLA (response 2 hours, resolution 8 hours).

Our process and technologies

Project type Timeline Complexity Key features
Corporate website from 1 month Medium Catalog, news, forms, CRM integration
Online store from 2 months High 54-FZ, marketplaces, 1C exchange, SKU
B2B portal from 3 months Very high Personal prices, document flow, Bizproc
Landing page from 2 weeks Low LCP < 2s, composite cache, static
Multisite structure from 1.5 months High Separate content, shared catalog, hreflang

Tech stack: mobile-first markup, tested on physical devices (iPhone, iPad, Android). Use BrowserStack for Safari on iOS. Performance goals: LCP < 2.5 s, FID < 100 ms, CLS < 0.1. Enable composite site (composite module), CDN, tagged caching, WebP/AVIF, lazy loading. SEO: Schema.org via JSON-LD, auto-generation of sitemap.xml via seo module, canonical and hreflang for multilingual versions. robots.txt blocks /bitrix/ from indexing. CI/CD: Git, auto-deploy via GitLab CI, staging. DB migrations: sprint.migration module with versioning.

Process:

  1. Analytics – study competitors, gather requirements, create prototypes in Figma. Output: technical specification with user stories.
  2. Design – UI/UX with design system. Components are reusable.
  3. Development – write components with custom templates in local/templates/. Business logic in local/modules/.
  4. Testing – functional, cross-browser, load testing (up to 1000 requests). Critical bugs fixed before launch.
  5. Launch – deploy to production, monitoring via UptimeRobot, alerts in Telegram. Fixes for first 48 hours.

Multilingual support and redesign

Full localization via language files lang/ and SITE_ID mechanism. hreflang for each version. Regional versions with different prices and content – IP detection (main.geo) or manual selection. Multidomain – unified management of multiple domains.

Redesign without losing rankings: performance audit (PageSpeed, WebPageTest), SEO (Screaming Frog). New template in local/templates/ with preserved URL structure. 301 redirects only if URL changes significantly. Kernel update, migration to D7 ORM, infoblock restructuring, migration via sprint.migration with Git.

Guarantee and support

We have been working with 1C-Bitrix for 12+ years, completed 500+ projects. Certified developers on staff. Fixed price in contract – no surprises. Warranty period covers code errors. After warranty, subscription packages with SLA (response time 2 hours, resolution 8 hours). 24/7 availability monitoring, alerts in Telegram. Get a consultation and preliminary estimate: contact us via the form on the website or chat – we'll respond within an hour. Order turnkey development – we'll design infoblocks, integrate 1C, and speed up the catalog. If you already have a site on another CMS, order a performance audit and migration to Bitrix.