The development of an online flower shop is first of all logistics, entered into the data, and only then the catalog: the bouquet must arrive on a specific day and at a specific interval, otherwise the order loses its meaning. Therefore, we build the frame around the delivery calendar, zones around the city, and the rules for replacing the seasonal position, and not around the number of cards. The catalog in the niche is small - in the stores of this scale we measured, it is from 76 to 300 items. Two stores with the same assortment differ in the amount of work by half, and they separate their zones, slots and the limit of reception time for today.
zones, intervals and the limit of reception time for today, not the number of cards
What determines the scope of work
from 126.3 to 1,544.5 ms among 24 measured stores on OpenCart
The first response from the server
50%
Conditions
down payment, two rounds of design edits, 30 day warranty
after a free audit, with an estimate by stages
Price
What's included
Complete list of work and what you get as a result
Catalog by occasion and type of bouquet with filter by flower, color and price range
A card with the composition of the bouquet by piece, the size and a warning about the permissible replacement of the seasonal position
Delivery calendar with hourly intervals: past slots are extinguished by themselves, each has its own reception limit
Delivery zones with a separate cost and a separate rule for delivery on the day of the order
The recipient is separate from the customer: different name, different phone number, anonymous delivery mode
The text of the postcard is a separate field with a character limit — it reaches the florist as written
Add-ons — postcard, vase, sweets, ball — are sold as an add-on in the basket, not catalog cards
Missing item scenario: Substitution of an equivalent flower with the consent of the buyer instead of a blank card
Registration in one screen on a mobile phone without mandatory registration: phone, date, interval, address, payment
Payment by card online, Apple Pay and Google Pay, transfer, payment by recipient
Technical SEO: CNC, canonical, unique title and sitemap, which is accepted by the number of bytes in the answer
Transfer: accesses, written instructions for your processes, going through the administration with the person who will maintain the catalog
When this service isn't right
What's not included — so there are no surprises at delivery
Subject shooting of bouquets
Courier service and routing as an operational process
Warehouse accounting of freshly cut flowers with expiration dates
Post-launch advertising
Hosting, domain, acquiring
Who it's for
Situations where this service delivers results
Scenario 1 of 4
You accept orders in direct mail, transport by your own courier
The manager punches out the date, address, name of the recipient and the text of the postcard each time. The store transfers this to the checkout: the date and interval are selected in the calendar, the recipient is filled in separately from the customer, the postcard comes with a field, not a voice. It is hand-made and less likely to be delivered to the wrong place - demand is created by your bouquet and your advertisement, not the order form.
We'll review your situation in a free audit
Scenario 2 of 4
You sort out the peak dates manually and exceed your promises every time
February 14 and March 8 give a flow that no notebook can hold. A calendar with slots dilutes this flow: the buyer sees only those intervals that you still have time to fulfill, and cuts off unrealistic ones. A fair limit: the site allocates orders, but does not add couriers - when the slots are physically finished, it should show this, and not sell another one.
Scenario 3 of 4
You sell not only a live bouquet
Dried flowers, vases, candles and gift sets go by carrier and do not depend on one day a year. In the catalog, they stand next to the bouquets, in the checkout — in a separate branch with a choice of department. Branches must be planted immediately: while it is alone, sooner or later the buyer will specify the department for a living bouquet, and such an order ends with a return.
Scenario 4 of 4
The city is divided into zones with different delivery costs
Center, residential areas, suburbs and separate same-day delivery are four prices and four different pickup time limits. Entered into the data, they are calculated themselves during registration. It works only when the zones are described before development: if the boundaries of the districts exist only in the head of the owner, there is no reason to set a delivery calendar.
Instead of a price fork — a free audit of a flower shop
In flowers, the site sells a promise: the bouquet will look like this, will arrive on such a day and at such an interval. The audit checks whether your store is able to keep this promise and shows what exactly breaks on the peak date. Without these answers, any given amount will be a guess.
What we measure
Delivery logistics in dataHow many zones do you have, is the day divided into intervals, is there delivery on the day of the order, and until what time is it accepted. This is the main multiplier of the volume of work in the niche.
Page behavior under loadThe first response of the server and the weight of the markup, separately on the main and separately on the category. The spread among the 24 measured stores on OpenCart is from 126.3 to 1,544.5 ms; in the irrigation store, a category for 100 items weighs 554 KB, compared to 143.6 KB on the main one.
What happens to the missing positionIs there a replacement flower scenario or does the buyer just see a blank card. Without a script, the manager calls each such order manually.
Photo and matching bouquetDoes the description include individual components and is there a warning about admissible replacement. This is the most common reason for niche returns.
Accepting orders by phoneHow many steps are there from the card to mobile payment and how many of them are mandatory. In flowers, most of the orders are impulse and from the phone.
Payment and recipientIs it possible to pay by card online and specify another person as the recipient with a separate phone. Without this, anonymous delivery does not work at all.
What you get
Document for the store: speed, page weight, behavior of the order form, completeness of delivery data.
The scheme of zones and intervals as it should be created on the website.
List of missing scenarios: position replacement, anonymous recipient, postcard, delivery time.
Conversation for 30–40 minutes on the document.
Timeline: 2-4 working days
Why is it free
Because the volume of work in flowers depends on logistics, and it is not visible from the description of the task. Counting the zones and intervals is a matter of several days, after that the amount is called once and does not float.
What's next
Next - the amount and term by stages with dates, contract, bill, act. If it becomes clear from the numbers that it is enough for you to complete the existing store, we will say so.
Short form: your contact and site URL
Contract, act and 30-day warranty
Every project gets a written contract: scope, deadlines, amount, acceptance procedure. After delivery — act and invoice, then 30 calendar days of warranty.
Sole proprietor & bank transfer
The contractor is a registered sole proprietor. Payment by invoice with closing documents.
Rights & access — yours
Code, design and materials transfer to you after full payment. Domain, hosting, repository and analytics are registered to you.
Client portal instead of email chains
During the project you get access to a portal: contracts, invoices, acts and project status in one place.
European clients
Among our work — projects for Norway, Bulgaria, Moldova and Spain.
Verifiable numbers
Every case in the portfolio comes with a link to a live site and a technical measurement.
Audit first, then pricing
There is no price list on the site intentionally: the scope of the same work differs multiples between clients.
We say "no" when unsure
If the task isn't ours or the deadline is unrealistic — we tell you upfront.
What affects the price
Why two seemingly identical tasks are priced differently
Number of delivery zonesOne zone and one tariff — setup for half a day. Four zones with different prices, a separate tariff for the suburbs and a rule for delivery on the day of the order - this is data that needs to be described, compiled and checked at the borders of the districts.
Reception intervals and time limitThe day is divided into slots, each of which has its own reception limit and its own cost. Hours are not consumed by goods, but by exceptions: weekends, holidays, night delivery, a shortened day before the peak date.
Substitution script depthThe warning in the card is worth an hour. A table of equal replacements with a tick "I agree" and a separate notification to the florist - a separate line of the estimate, but the manager stops calling.
Status of photos and descriptionsPictures on a uniform background with the composition of the bouquet individually save weeks. Photos from the phone in different angles have to be brought to the same view manually, and this is counted separately.
Preparation for the peak dateCache, compression, category weight, and server load testing are separate jobs, not side effects of development. The difference between the fastest and the slowest of the measured stores is entirely in the setting.
A set of payment methodsEach gateway is a contract, a fee, and a separate item in the reconciliation. Two methods are applied quickly; seven footer logos don't sell by themselves—it's the ones your buyer pays for that matter.
Cases
Tasks and results in numbers — all metrics measured by us
a store of automatic irrigation systems with landscape services - seasonal demand, a catalog of several hundred items
Task
Collect a catalog where the items are visually almost the same and differ only a little, and do not lose the rate of return in the season. The nature of the task is the same as with bouquets: the choice is made with the eyes, and the difference between the options is in the details.
Solution
OpenCart 3 under nginx with HTTP/2 and brotli compression. Catalog with four levels of nesting, OCFilter in categories, quick card viewing and one-click ordering. There are two carriers with six delivery methods and three payment methods in the checkout.
Result
Measurement 08/01/2026: 300 products in 40 categories, the figure is confirmed by two independent methods with a 0% discrepancy. The first response from the server is 235 ms (median of five measurements), the weight of the main HTML is 143.6 KB, in brotli - 22.5 KB; a category page with 100 items weighs 554 KB. Defects found: no JSON-LD block, no analytics installed at all, two of the five root categories are empty.
online store of garden tools for private buyers
Task
Keep the page light with mostly product photos on the screen rather than text and give the buyer a choice of multiple carriers.
Solution
OpenCart 3.x under nginx with HTTP/2. Delayed loading of almost all images, five payment methods and four carriers on the shipping page.
Result
Measurement 07/31/2026: 66 out of 69 image tags (96%) are slow to load - lightest HTML among batch stores, 252.6KB with first response of 547.2ms. Defects found: /sitemap.xml gives HTTP 200 with a body of zero bytes, so it is impossible to calculate the volume of the directory from the outside; there is no h1 tag on the main page; names of carriers are presented in pictures without alt; PHP 7.3.33 is unsupported as of December 2021.
a furniture store for the Spanish market with a large gallery for each position
Task
Sell in a small catalog, where decisions are made based on the photo, not the characteristics.
Solution
OpenCart 3 on LiteSpeed, high-quality gallery in each card, filters by type, material and color, online card payment and bank transfer.
Result
Measured on 07/31/2026: 76 goods - the number coincided in two independent sources, the discrepancy is 0; the site map has 88 addresses in total. First response 348.2ms, full HTML load 515.6ms, but markup weight 374KB: Galleries are paid by weight. Defect found: there is no JSON-LD block and no microdata on the main.
Did not find your case?
Describe how it works on your side — we will tell you whether “Development of an online flower shop” fits and what it means in your situation. No brief and no call: one question, one answer.
Process steps
Transparent stages with approval at every step
Total duration:20–40 days
1
Brief and terms of reference
3-5 working days
We analyze the zones, intervals, the reception time limit, the replacement rule, and the recipient scenario. The output is a TK, based on which the estimate is calculated and the work is accepted.
2
Prototype: catalog, card, checkout
3-5 working days
Tree of categories by occasion and type of bouquet, fields of cards with individual composition, steps of registration in one screen. We agree with the design — redoing the checkout after layout is expensive.
3
Design
4-8 working days
Main, category, bouquet card, basket with additional sale, checkout. Here we fix the target weight of the page separately for the main page and separately for the category.
4
Assembly of the store
6-11 business days
Topic layout, calendar with slots and reception limits, delivery zones, recipient and postcard fields, position replacement script, roles in admin.
5
Catalog and photo
2-5 working days
Starting an assortment with the composition of a bouquet by pieces and sizes, processing images in WebP, delayed loading, checking cards on a mobile phone.
6
Integrations, loading, transmission
2-6 working days
Checkout, messengers, GTM and GA4 with cart and purchase events, check under load to peak date, end-to-end order run and admin walkthrough with your person.
Technologies & integrations
What we build on and what it connects to
Stack
OpenCart 4.x is set by default, this is a branch that is being developed
OpenCart 3.x — when the critical module does not yet have a build for 4.x; we fix the version in the TK
Current branch PHP: 7.3.33 in four measured stores without support since 2021
MySQL — the directory here is small, the bottleneck is not the database, but the weight of the page
nginx or LiteSpeed, HTTP/2, HTTPS
WebP and Lazy Loading: Images are more colorful than text
OCFilter — filter by flower and color; on a small catalog it is secondary to clear categories
The slot calendar is its own logic on top of the box: no box module knows your reception time limits
Integrations
LiqPay
WayForPay
monobank
Apple Pay
Google Pay
own courier delivery around the city
Nova Poshta for dried flowers and gifts
Google Tag Manager
GA4
Meta Pixel
Instagram
Telegram
Viber
Your own flower shop versus a showcase in a social network and a SaaS builder
How this option differs from the alternative
Showcase in the social network / SaaS-designerOur approach
Delivery date and intervalShowcase: agree in correspondence. SaaS: the calendar is not available everywhere, intervals are often without reception limitsorder field with validation: past slots are extinguished, everyone has their own acceptance limit
Zones and cost of deliveryShowcase: the manager names manually. SaaS: Usually one bid per cityare calculated at the time of registration at the buyer's address
The recipient is separate from the customerShowcase: in correspondence. SaaS: Often one point of contact for everythingseparate fields, separate phone, anonymous mode
Peak dateShowcase: limits the manager's typing speed. SaaS: tariff resources, you have no influencecache, category weight and server are measured until February 14th
Platform feeShowcase: none. SaaS: subscription fee every month regardless of the seasonno, just hosting and domain
What we need from you
We can't start without this — best to prepare in advance
1Assortment with composition of bouquets by piece and sizes.
2Photos of bouquets — in flowers, the buyer buys just by the photo.
3Delivery zones with cost and time limit for accepting orders for today.
4Substitution rule: what flowers do you consider equivalent when the desired one is not available.
5Access to hosting and domain — or consent to have hosting selected by us.
6One person with the right to approve the directory structure and layouts.
If something is missing — let us know, we'll help you gather it or do it as a separate task.
FAQ
Most frequently asked questions — with concrete answers
How to make the bouquet arrive at a specific time?
A calendar with intervals, not a "wish to order" field. The day is divided into slots, each slot has its own reception limit and its own cost, past slots are extinguished automatically. The buyer sees only what you actually manage to do, and the manager does not negotiate over the phone. The mechanism has a limit: it distributes the demand by slots, but does not add couriers - when all the slots on February 14 are occupied, it is fairer to show this than to take an order and disrupt it.
What to do if the desired flower is not available?
Establish a replacement rule at the TK stage, and not negotiate by phone every time. The card says that the seasonal item can be replaced with an equivalent item, the order has a choice of "accept the replacement" or "call first", the florist receives this with the order. Without such a rule, you either refuse the buyer, or confront him with the fact - both of which end in a return and feedback.
Will the site survive February 14?
This is a matter of server configuration and page weight, not platform. Among the 24 OpenCart stores we measured, the first server response ranged from 126.3ms to 1,544.5ms, a difference all on the same engine. It is not only the main page that needs to be measured: in the watering shop, the main page weighs 143.6 KB, and the category page with 100 items is 554 KB, and it is this page that is opened by the majority. Before the peak date, we separately check the cache, compression and weight of the category.
Need anonymous delivery - is it difficult?
The fields themselves are simple: the recipient is separate from the customer, a separate phone number, and a tick "do not name the sender". It is more difficult not to show the customer's name where it goes automatically - in the carrier's SMS, in the check, in the order status letter. This should be agreed upon before development: it is more expensive to redo notifications after launch than to get them right right away.
How to sell accessories - a vase, a postcard, sweets?
Upsell in the basket, not with separate cards in the catalog. The buyer has already chosen a bouquet, and it is appropriate to offer a card with text, a vase or a ball there. Taken out in the catalog separately, they simply do not get there: they do not come separately for the postcard. This is our recommendation from practice, not a rule of the platform - technically it is possible either way.
How long does development take?
20–40 working days from the approval of the TK. These are six stages: brief and TK 3–5 days, prototype 3–5, design 4–8, assembly 6–11, catalog and photo 2–5, integration with transfer 2–6. Time is spent not on products - the catalog in the niche is small - but on logistics: the calendar, slots, zones, replacement rules and the recipient's scenario. If you have already described the zones and intervals, the term is kept to the lower limit.
Can I sell dried flowers and gifts by mail?
Yes, and this is a smart way not to depend on one day a year. Succulent flowers, vases and gift sets live in the same catalog, but with a different delivery method - a carrier instead of our own courier. At the checkout, these are different branches, and they must be separated immediately, otherwise the buyer will sooner or later choose a branch for a living bouquet.
Why is there no price on the page?
Because in flowers, the amount is determined not by the size of the catalog - it is small here - but by logistics: the number of zones, the availability of intervals, delivery on the day of the order, the depth of the replacement scenario. Two shops with the same assortment can differ in the amount of work twice because of this, and any fork on the page would be fiction. Therefore, first, a free audit for 2–4 working days, then the amount and term by stages.
Will the store get on Google?
No one guarantees a position, and we will not. We close the technical part: CNC, canonical, unique title, site map, JSON-LD. The hole is most often here - in the measured garden tool store /sitemap.xml returns an HTTP 200 with a body of zero bytes, and in the watering store there is no JSON-LD block. A fair margin: the sitemap does not increase the position and does not guarantee indexation, it only removes the technical reason for which pages are not included in the index.
Describe the delivery zones and the reception time limit - then we calculate.
In 2-4 working days, we will return with the document: the speed and weight of the pages, the scheme of zones and intervals as it should be set up on the site, and the list of scripts that are missing. Next - the amount and term by stages with dates.
There is no price list on the site on purpose: the same work differs several times over between two clients, and a “from” figure explains nothing in that case. First a free audit — we count your pages, duplicates and speed — then we name the sum and the deadline and fix both in the contract.