Flower shop 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

Flower Shop Website Development on 1C-Bitrix

An online flower shop is not just a catalog with a cart. A customer doesn't choose a product — they choose emotion. Half of orders are gifts where exact delivery timing, a personalized card, and presentation matter. The other half are customers wanting to assemble a bouquet themselves, mixing flowers to their taste. A bouquet builder is a competitive advantage that transforms the site from a showcase into a tool.

On 1C-Bitrix the project is built on trade catalog with SKU for ready bouquets, custom builder on Highload-blocks, sale module with extended delivery services, and CRM integration for repeat sales.

Bouquet and Arrangement Catalog

Ready bouquets are trade catalog products. Key feature — trade offers by size. One "Spring Mood" bouquet exists in three variants: S (5 tulips), M (11 tulips), L (21 tulips). Each SKU has its own price, photo, composition.

Bouquets infoblock element properties:

  • Category — infoblock section: bouquets, box arrangements, baskets, mono bouquets, bridal
  • Occasion — multiple reference property: birthday, wedding, anniversary, no occasion, March 8, February 14
  • Main flowers — multiple reference: roses, tulips, peonies, chrysanthemums (for filtering)
  • Color palette — multiple: red, white, pink, mix, pastels
  • Durability — numeric property (days), displays as "lasts from X days"
  • Availability — updated daily because flowers are perishable

For trade offers (S/M/L sizes) specify:

  • Price
  • Detailed photo (different size — visually different)
  • Composition — text description ("7 red roses, 3 eucalyptus branches, felt, ribbon")

Filtering via CIBlockSmartFilter: by occasion, flower type, color palette, price range. Sorting: popular (by order count — field updated via agent), new, cheap/expensive.

Bouquet Builder

Central site element. Customer selects flowers, specifies quantity for each, chooses presentation — and sees visualization with final cost. This isn't Bitrix template functionality — custom development on Highload-blocks and JS component.

HL-block "Flowers for Builder":

Field Type Purpose
UF_NAME String Red rose, White tulip, Pink peony
UF_PRICE Number Price per 1 piece
UF_IMAGE File Flower photo for builder catalog
UF_RENDER_IMAGE File Image for visualization (cutout flower on transparent background)
UF_CATEGORY List roses / tulips / peonies / chrysanthemums / greens / exotic
UF_AVAILABLE Boolean In stock today
UF_MIN_QTY Integer Minimum quantity (usually 1)
UF_STEP Integer Step (for roses often 1, for greens — 1 branch)
UF_SEASON List (multiple) Seasonality: spring / summer / autumn / winter / all

HL-block "Presentation":

Field Type Purpose
UF_TYPE List wrapping / ribbon / basket / box
UF_NAME String Kraft paper, Felt, Satin ribbon, Hat box
UF_PRICE Number Cost
UF_IMAGE File Preview
UF_RENDER_IMAGE File Visualization image
UF_COMPATIBLE String JSON — compatibility (hat box not for 51-rose bouquet)

Builder Logic:

  1. Select flowers. Two-column interface: left — available flowers catalog with category and season filter, right — builder cart. Customer clicks "+" / "−" or enters number. Minimum stem count for arrangement — 3 (client and server validation).

  2. Select presentation. Cards with photos: wrapping type (kraft, felt, mesh, no wrap) and tie type (ribbon, twine, none). For boxes and baskets — separate section with stem count limits (UF_COMPATIBLE contains max_stems).

  3. Visualization. Two approaches depending on project budget:

    Option A (optimal): Pre-prepared visualization templates. For each "bouquet size × presentation type" combination there's a base image. Selected flowers display as preview icons beside visualization, not inside. Sufficient for 90% of customers — they care about composition and overall style.

    Option B (extended): Canvas render. Flower images (UF_RENDER_IMAGE) with transparent background placed on canvas by algorithm: central flowers — larger, side flowers — angled, greens — background. Presentation draws as bottom layer. Result — unique visualization for each combination. Requires quality renders of all flowers in unified style.

  4. Card. Text field up to 200 characters. Customer enters text, sees preview on card template (choice of 4–5 designs). Card text saved as sale order property.

  5. Cost calculation:

Total = Σ(flower_price × quantity) + presentation_cost + card (fixed) + delivery_cost

Calculation is server-side via AJAX controller. Client JS shows approximate sum for instant feedback, but final price always comes from server.

  1. Order placement. Bouquet configuration saves to JSON and added to sale cart as product with custom price (using CSaleBasket::Add with PRICE and CUSTOM_PRICE = Y parameters). Cart item properties include configuration — displays in confirmation email and admin panel when processing order.

Online Order with Delivery

Flower delivery is time-critical. Standard sale.delivery handler is extended with custom logic.

Delivery services:

  • Standard — 2-hour window selection (10:00–12:00, 12:00–14:00, ..., 20:00–22:00). Available when ordered minimum 4 hours before window start
  • Urgent — delivery within 90 minutes. Surcharge set in service settings. Available 09:00 to 20:00
  • Exact time — higher surcharge, ±15 minute accuracy. For VIP orders (anniversaries, proposals)
  • Pickup — from store, no surcharge

Date selection via custom calendar. Delivery available "today" (if windows exist) and 14 days forward. Holiday dates (March 8, February 14) marked in interface — "high demand, order in advance". On these days urgent delivery surcharge auto-increases via OnSaleDeliveryServiceCalculate handler, which checks date against holiday reference in HL-block.

Anonymous order. Flowers often ordered as surprise. Checkbox "Don't reveal sender" — delivery data shows only recipient.

CRM Integration and Reminders

Flower business lives on repeat sales. Customer ordering bouquet for wife's birthday likely repeats in a year. CRM Bitrix24 records each order as deal with fields: recipient, occasion, date.

7 days before order anniversary customer gets email reminder: "A year ago you ordered bouquet for [recipient name]. Want to repeat?" Mechanism — agent running daily, selecting deals with UF_DATE = current date + 7 days − 1 year, initiating send via messageservice.

To implement reminders, order card adds properties: recipient name, occasion, event date. Data filled by customer at checkout ("Deliver to" and "Occasion" fields already exist — just save them to CRM).

Technical Details

Stage Tasks Timeline
Analytics Catalog structure, builder logic, integrations 3–4 days
Design Builder UI, catalog, cart, mobile 7–10 days
Markup Responsive, canvas render (Option B) 7–10 days
Backend HL-blocks, controllers, delivery, CRM 10–14 days
Content Bouquet photos, flower renders for builder 5–7 days
Testing Calculations, delivery, payment, CRM chains 4–5 days

Composite cache for ready bouquet catalog and static pages. Builder, cart, delivery — AJAX. Product and AggregateOffer microdata for search engine product results. Integration with Yandex.Market / Google Merchant via standard Bitrix trade catalog export to YML/XML.