Bakery Website Development on 1C-Bitrix
A bakery website operates in two modes simultaneously. First — product showcase with delivery order capability for bread and pastry. Second — custom cake configurator where customers assemble a cake from components and get cost calculation. These are fundamentally different scenarios, and site architecture must serve both without conflicts.
On 1C-Bitrix the first scenario is covered by trade catalog with sale module. The second requires custom mechanics on Highload-blocks and components. We'll cover both, focusing on the configurator.
Product Catalog
Bakery assortment is divided into infoblock sections: bread, sweet pastry, puff pastry, confectionery, seasonal menu. Each element is a trade catalog product with expanded property set.
Element properties:
- Composition — text field with complete ingredient list (legal requirement)
- Allergens — multiple reference property: gluten, milk, eggs, nuts, soy (displayed with icons and tooltips)
- KBZU — four numeric properties: calories, protein, fat, carbs per 100g
- Weight — numeric property in grams
- Shelf life — string ("24 hours", "72 hours", "5 days")
- Availability — list property: in stock / by order / out of stock. Updated manually or via accounting system integration
For variable products (sliced and whole bread, croissants with different fillings) trade offers (SKU) are used. Each offer — own price, weight, photo.
Catalog filtering: by section, allergens (exclude gluten-containing), calorie range. CIBlockSmartFilter smart index provides instant filtering. For bakery with 50-150 positions this is more than sufficient.
Custom Cake Configurator
Customer assembles cake by parameters, sees visualization and final price, places order with desired ready date. This is the site's most complex component.
Configurator data architecture — three Highload-blocks:
HL-block "Cake Components":
| Field | Type | Example Values |
|---|---|---|
| UF_TYPE | List | base / filling / cream / decor |
| UF_NAME | String | Vanilla sponge, Chocolate ganache, Fondant |
| UF_PRICE_PER_KG | Number | Cost per kg (for base, filling, cream) |
| UF_PRICE_FIXED | Number | Fixed cost (for decor) |
| UF_IMAGE | File | Preview image |
| UF_LAYER_IMAGE | File | Layer image for visualization |
| UF_COMPATIBLE | String | JSON array of compatible IDs (not all creams suit all bases) |
| UF_ALLERGENS | List (multiple) | Component allergens |
| UF_SORT | Number | Sorting in interface |
HL-block "Shapes and Sizes":
| Field | Type | Examples |
|---|---|---|
| UF_SHAPE | List | round / square / rectangle / heart |
| UF_TIERS | Integer | Number of tiers (1, 2, 3) |
| UF_WEIGHT_MIN | Number | Minimum weight in kg |
| UF_WEIGHT_MAX | Number | Maximum weight in kg |
| UF_WEIGHT_STEP | Number | Step (0.5 kg) |
| UF_MULTIPLIER | Number | Coefficient to base price (two-tier = 1.3) |
HL-block "Cake Orders":
| Field | Type | Purpose |
|---|---|---|
| UF_CONFIG_JSON | Text | Complete cake configuration in JSON |
| UF_WEIGHT | Number | Final weight |
| UF_PRICE | Number | Calculated cost |
| UF_ORDER_ID | Integer | Link to sale order |
| UF_DESIRED_DATE | Date | Desired ready date |
| UF_STATUS | List | new / confirmed / in_production / ready / delivered |
| UF_COMMENT | Text | Customer wishes (inscription, special requirements) |
Configurator step-by-step interface:
-
Shape and size — customer selects shape (round, square, heart), tier count, weight via slider. For multi-tier cakes weight is auto-distributed (lower — 60%, upper — 40% for two-tier)
-
Base — selecting cake layer for each tier separately. Cards with photo, name, allergens. On selection, visualization updates — cake layer changes color/texture
-
Filling — selecting from options compatible with base (filtered by
UF_COMPATIBLE). Chocolate ganache compatible with sponge and brownie, but not honey cakes — API returns only allowed combinations -
Cream — similar to filling, with compatibility check
-
Decor — multiple choice: fondant, berries, chocolate decor, edible print, fresh flowers. Each decor item has fixed cost. Inscription on cake — text field with 50 character limit, adds fixed amount
-
Total — visualization of assembled cake (layer overlay via CSS
position: absolute), full composition, allergens (combined from selected components), KBZU, final price
Cost calculation formula:
Price = (Σ cost_per_kg_component × weight) × tier_multiplier + Σ fixed_decor + rush_surcharge
Rush surcharge: less than 48 hours ready date — +30%, less than 24 hours — order unavailable (minimum production time). This limitation is enforced at form validation level — UF_DESIRED_DATE checked against current date considering bakery's days off.
All calculation is server-side via AJAX controller. Client JS sends configuration, controller calculates price and returns result. This prevents browser-side price manipulation.
After confirmation, configuration saves in "Cake Orders" HL-block, order created in sale with special payer type "Custom Cake". Administrator gets notification, confirms order (status → confirmed), then payment link sent to customer.
Online Pastry Order with Delivery
Standard e-commerce implementation on sale: cart, checkout with delivery selection (courier / pickup), online or COD payment. Special feature — delivery time windows. Fresh pastry can't wait all day. Delivery service configured with intervals: 08:00–10:00, 10:00–12:00, 12:00–14:00. Customer selects convenient window on checkout.
Minimum order sum for free delivery set in delivery service properties. Below threshold — paid delivery, cost calculated by sale.delivery handler.
Photo Gallery and Recipes
Gallery — infoblock with sections: baking process, custom cakes, bakery interior. Each element — photo with description. Homepage shows rotator of baker's latest works.
Recipe blog — infoblock with SEO-optimized articles. Format: ingredient list (checklist), step-by-step instruction with photos, KBZU result. Link to catalog products — "our whole wheat flour perfect for this recipe" with cart add button. Works for SEO traffic and increases average order.
Technical Implementation
| Stage | What's done | Timeline |
|---|---|---|
| Prototype | Configurator wireframes, infoblock structure | 3–5 days |
| Design | Configurator UI, catalog, product card | 5–7 days |
| Markup | Responsive markup, configurator animations | 5–7 days |
| Backend | HL-blocks, calculation controllers, sale integration | 7–10 days |
| Content | Catalog population, photo shoot | 3–5 days |
| Testing | Calculation check, load, mobile devices | 3–4 days |
Composite cache enabled for catalog and blog. Cake configurator fully AJAX — not cached. Product cards contain Schema.org Product microdata with nutrition information (NutritionInformation).







