Development of a language school website 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

Language School Website Development on 1C-Bitrix

A language school sells a result, not a product: "speak English in 3 months." The website should not just list courses but help a potential student determine their level, find a suitable group, and enroll — without a phone call. On 1C-Bitrix, this is implemented through information blocks with multidimensional filtering, a custom testing component, and integration with online learning platforms.

Course Catalog: Three-Dimensional Structure

The main challenge of a language school catalog is three filtering axes: language, level, format. A student needs to quickly find "English, B1, group class, evening time."

The "Courses" information block contains first-level sections by languages (English, German, French, Spanish, Chinese), second-level sections by programs (General, Business, Exam Prep, Conversational). Element properties:

  • Level (multiselect list): A1, A2, B1, B2, C1, C2 according to CEFR
  • Format (list): group class, mini-group (3-5 people), individual, online group, online individual
  • Intensity (list): standard (2x/week), intensive (4-5x/week), weekend
  • Duration (number): number of academic hours
  • Age Group (list): children 7-10, teens 11-15, adults 16+
  • Learning Outcome (text): what the student will be able to do after the course

Filtering is implemented via bitrix:catalog.smart.filter with AJAX. Three dropdown lists (language → level → format) work in cascade: selecting a language loads only available levels.

Online Enrollment with Group Selection

The "Groups" Highload block is similar in structure to the driving school catalog but with additions:

  • UF_TEACHER_ID — binding to the "Teachers" information block
  • UF_LEVEL — group level
  • UF_WEEKDAYS — class days (bitmask: MON=1, TUE=2, WED=4...)
  • UF_TIME_START — class start time
  • UF_CLASSROOM — classroom / Zoom link

The enrollment form suggests suitable groups based on the level test result. If the test is completed and the result saved in the profile — the "Level" field is filled automatically, and the student only needs to choose a convenient schedule.

Integration with LMS and Zoom

For online format, integration with LMS (Moodle, iSpring) and Zoom/Google Meet is necessary. Integration works via REST API:

  • When creating a group with "online" format, a recurring meeting is automatically created in Zoom via API and the link is recorded in the group property
  • Access to the link opens in the personal account only for enrolled students after payment
  • Lesson materials (presentations, audio, homework) are stored in the "Materials" information block with binding to course and lesson

Student Personal Account

The account is built on a custom bitrix:main.profile template with tabs:

  • My Courses — active, completed, upcoming
  • Schedule — calendar view with color coding by languages
  • Homework — list with deadlines and statuses (new / submitted / checked)
  • Payment — payment history, debts, link to online payment via sale module
  • Test Results — level dynamics, recommendations for advancing to the next level

Level Determination Test: Deep-Dive

The level test is a critical conversion point. A visitor arrives with the request "I want to learn English" but doesn't know their level. If you suggest a phone call — conversion drops. If you let them take a 15-minute test and immediately show suitable groups — they enroll.

Test Architecture

The "Test Questions" information block with sections by languages. Each language contains subsections by levels (A1–C2). Question properties:

  • Type (list): grammar, vocabulary, reading, listening
  • Level (list): A1–C2 — actual question level
  • Question Text — detailed description
  • Media — audio file for listening questions
  • Answer Options — 3-4 string properties
  • Correct Answer — option number
  • Weight — numeric value for scoring algorithm

Adaptive Algorithm

The standard approach "50 questions from A1 to C2 in order" is long and boring. We implement an adaptive algorithm (simplified CAT — Computerized Adaptive Testing):

  1. Test starts with 5 B1-level questions (median level)
  2. If student answers 4-5 out of 5 correctly — next block is one level higher (B2)
  3. If fewer than 2 correct — one level lower (A2)
  4. If 2-3 correct — 5 more questions of the same level for refinement
  5. Test completes when algorithm determines stable level (two consecutive blocks with 60-80% result) or maximum 30 questions passed

Server-side part is a D7 controller (/api/placement-test/). Client sends answer to current question, server determines next question based on accumulated statistics. Correct answer numbers are not sent to client. Test state is stored in $_SESSION with backup save to Highload block (in case of tab closure — test can be resumed).

Result Routing

After test completion, the controller:

  1. Determines overall level by weighted average formula (grammar-type questions have weight 1.0, vocabulary — 0.8, reading — 1.2)
  2. Saves result in user profile (property UF_LANGUAGE_LEVEL_{LANG})
  3. Retrieves from "Groups" Highload block with filter by language, level, and "Enrollment open" status
  4. Returns result page with blocks:
    • Determined level with description ("B1 — Intermediate: you understand main ideas of texts, can communicate in most travel situations...")
    • Recommended courses — cards from information block filtered by level
    • Nearest groups — specific start dates, schedule, teacher
    • Enrollment button — leads to form with pre-filled fields (language, level)

For unauthorized users, results are saved in cookie for 30 days. On registration, data is transferred to profile.

Retesting

Students who completed a course are offered to retake the test after 3 months. Trigger is automatic email notification via sale.personal.section and business process. "Before and after" comparison is displayed in personal account as a progress bar with two marks.

Promotions and Referral Program

The "Promotions" information block with validity dates (ACTIVE_FROM, ACTIVE_TO) and types:

  • Refer a Friend — referral link is generated in personal account, when new student enrolls via link both get discount (coupons from sale module)
  • Corporate Training — separate landing with application form, calculation by number of employees
  • Seasonal — summer intensive, IELTS preparation before deadlines

Corporate applications are processed separately: data enters Bitrix24 CRM via REST API webhook.

Stages and Timeline

Stage What We Do Timeline
Analysis Course map, "language × level × format" matrix, test requirements 5–7 days
Design Wireframes, information block structure, adaptive test algorithm 7–10 days
UI Design Mockups, UI-kit, mobile responsive 10–14 days
Catalog Development Information blocks, filtering, course cards, group pages 10–14 days
Level Test Component, adaptive algorithm, result page 10–12 days
Personal Account & Integrations Student cabinet, Zoom API, payment 10–14 days
Content & Testing Question database population, QA 7–10 days

Total Timeline — 9–12 weeks. Question database population for test (minimum 120 questions per language, 20 per level) can run parallel with development.