Skip to content

Product

Flowery is a multi-tenant SaaS for small and mid-size flower shops. A florist signs up, gets a workspace on their own subdomain, and receives two things out of the box:

  1. A back office (the control panel at /control) for running the shop: catalogue, procurement, perishable inventory, orders and delivery details.
  2. A customer-facing storefront on the same subdomain where shoppers browse bouquets, compose their own and fill a cart.

The first market is Ukrainian and Eastern-European florists: the interface ships in Ukrainian (the default everywhere: control panel, server messages, storefronts) and English, the default currency is UAH and the flower dictionary is Ukrainian. Currency is configurable per workspace (USD, EUR, GBP, UAH, PLN, CAD, AUD, JPY, CNY, INR).

  • Flowers are perishable. Stock is tracked as dated supply batches with shelf life and expiry, and consumed first-expiring-first-out. A generic e-commerce template counts units; Flowery knows which stems die on Thursday.
  • AI-assisted merchandising. With the platform’s keys, or their own OpenAI and Magnific (formerly Freepik) keys, shops generate product descriptions and studio-style bouquet images, including images composed from reference photos, directly from the product forms.
  • Tenant isolation is structural. Every request resolves the shop from the hostname before anything else, every business record carries the workspace, and cross-tenant identifiers return 404 rather than leaking.
Actor Where they work What they do
Shop owner root domain (sign-up, the shop step), then the control panel Signs up with email or Google, names the shop and its web address, gives the shop details, starts with the demo shop or empty, follows Getting started, invites the team, reads Finance
Shop team (admin, manager, staff, viewer) control panel Join by invitation; maintain the catalogue, record supplies, create and progress orders. Roles are enforced server-side; see Roles and permissions
Customer the shop’s website on its own address Browse bouquets and flowers, build a custom bouquet, check out as a guest (pickup, the shop’s delivery or a Uklon courier; payment on receipt or by bank transfer) and follow the order on a private status page
Platform operator command line, Forge Seeds the AI providers and the flower dictionary, provides platform AI and Google keys, runs the storefront agent, reads onboarding:funnel, resets passwords; the scheduler purges carts, syncs Uklon and sends onboarding reminders

Onboarding (onboarding):

  • The visitor arrives on the landing page (Ukrainian, or English at /en/) and signs up with email and password, or with Google.
  • The email is confirmed; the confirm page continues by itself.
  • One step names the shop and its web address.
  • On the shop’s own address the owner gives the phone, address and opening hours, and starts with the removable demo shop or empty.
  • “Getting started” leads through the rest: quick-add for flowers, quick bouquets, the first delivery, then one click to publish the website and one to turn on pickup ordering.

Owners who stall get one reminder email per step.

Team. The owner and managers invite people by email with a role below their own; admins and the owner change roles and remove members (roles).

Catalogue:

  • Flower and bouquet categories.
  • Flowers with price, cost, colour, SKU, seasonality window, shelf life and low-stock threshold.
  • Bouquets composed of flowers with quantities and several images.
  • Packaging options with their own price.

Descriptions and photos can be generated with AI from the same forms. Flowers can be added from the built-in list, and bouquets from ready recipes.

Procurement to inventory. Suppliers; a supply is one delivery containing batches, each of one flower with quantity, unit cost, batch number and expiry. Stock changes only through the inventory ledger; write-offs and supplier returns are recorded with a reason.

Orders. Staff create orders for walk-in, phone or messenger customers. Each order has:

  • the sender and the recipient;
  • a structured delivery address, a delivery date and a slot;
  • card text, an occasion and consent to substitutions;
  • the payment and a delivery fee.

Lines are flowers, catalogue bouquets or a custom bouquet; names and prices are snapshotted. Confirming reserves the stems from batches, first-expiring-first-out; assembly consumes them; every change is a recorded revision (order lifecycle).

Website. Astro themes (Bloom and Noir) on the public Storefront API:

  • home sections;
  • the catalogue, with categories and occasions;
  • detail pages;
  • a build-your-own bouquet page with a live price;
  • a server-side cart;
  • guest checkout with a private status page;
  • the shop’s own domain (yourshop.ua, with or without www), connected from Settings → Domain with one DNS record per address, added for the shop in one click when its DNS is on Cloudflare; the flowery.com.ua address keeps working and sends visitors there (custom domains).

A shop with nothing to sell shows “opening soon” with its contacts.

Finance. Sales, costs and profit for any period, with the profit and loss statement, purchases and stock value, payments and what customers owe, and operating expenses (finance).

What exists now. The changelog says when each arrived.

Area Status
Sign-up and sign-in Done: email and password with confirmation, sign in with Google (ADR-019), two-factor, password reset; emails in Ukrainian or English
Onboarding Done: three steps, Getting started checklist with one-click website and ordering, quick-add flowers, quick bouquets, reminder emails (ADR-020), onboarding:funnel
Demo shop Done: loaded and removed in one click, takes test orders (ADR-016)
Team Done: invitations by email, roles below one’s own, change role, remove (ADR-021). Ownership transfer is not built
Flowers, bouquets, categories, packaging Done, with AI descriptions and images, quick-add and ready recipes
Suppliers, supplies, batches Done: batches with expiry and freshness, write-offs and supplier returns, a supplier named on the delivery form
Stock Done: inventory ledger, reservations on confirmation, consumption at assembly, reconciliation and the Attention page
Orders Done: create and edit with revisions, custom bouquets, filters, status changes with their stock effects, offline payments with reversals
Costing Done: estimated and actual material cost, margin and markup, unknown never zero
Finance Done: period reports, profit and loss, purchases, stock value, payments, receivables, couriers, operating expenses, CSV (ADR-018)
Website (storefront) Live on Astro: Bloom and Noir themes, versioned settings, an internal AI agent, catalogue, builder, side cart, checkout and status pages, “opening soon”
Checkout and payment 3A complete (25 October 2026): guest checkout, pickup, delivery or a Uklon courier, offline payment, a runbook for switching it on and the golden scenarios as a CI gate. 3B (online payment) not built
Languages and look Ukrainian by default, English selectable; the brand palette in light and dark
AI Descriptions and bouquet photos on platform keys or the shop’s own (Magnific, OpenAI). Only the Seedream models collect results, and nothing records usage per shop yet
Dashboard The Getting started checklist and the demo shop. Business widgets are not built; Finance has the figures
Billing and trial Not enforced: the trial field exists and nothing restricts an expired shop