BloomDesk.

New listing

Snap or pick a photo. BloomDesk identifies the flower, judges quality, writes the caption, and prices it from the 2024 regional survey. Everything can be edited before it posts.

Shooting something new to you? first and the photo can be matched and priced against it.

When & how many

Both optional. A fresh count puts this cut on the fresh list (shop, portal, fresh sheet) for a week. A stem count different from the catalog's bunch size becomes its own product with its own price.

Grade & season

Review queue

Tap a listing to edit anything: name, caption, price, where it posts. Approving publishes it to the channels you leave on.

Published & past

Orders

Pick list

Pick a day to see the cut list.

Order queue

Payment links

Tap a QR to fill the screen for a customer to scan at market or delivery. Edit the links in Settings.

Retail customers order at /shop (no login); link it from the website or a market-table QR. Florists order in their portal.

Log a sale

Loading…

Open balances (money owed to the farm)

Unpaid portal orders and on-account route sales, per account. Take payment records money handed over in person by any method (cash, check, card, a Venmo ping) against whichever items it covers.

Loading…

Take a request

"Can you bring 20 dahlia bunches next Tuesday?" Log it on the spot. It lands in the farm's request queue, checked against season windows and lead times, and the account sees it under My requests.

Asking for something that isn't on the list?

Scan a photo

A customer shows you a flower: snap it and ask. BloomDesk names it, or picks blooms from your own catalog that pair with it, priced for the channel you're selling on and flagged when they're cut-ready today.

Catalog & prices

Every item you can sell (survey staples, mixed bouquets, and your own additions) with the price the shop, portal, invoices, and CSA subscriptions actually charge. Type over a price and save to set your own (it beats the survey everywhere); clear it to fall back to the survey estimate shown in gray.

Loading…
Calibration: your averages vs. the survey

Computed from your logged sales (wholesale-channel sales calibrate wholesale, all others retail). Tap “adopt” to copy your averages into the price book.

Log sales with prices and this fills in.

Recent sales

This week's cuttings

What the shop, portal, and fresh sheet may sell today, for the crops in play this week. The computed number comes from plantings and field-fresh cuts, which slip to pest and weather, so a count you walked beats it: type the number and how long it holds. Zero pulls a crop from sale, and stays listed so you can undo it. A count covers only its own period, so anything already promised for later dates is flagged separately.

Put something new on offer

For anything that isn't in the catalog yet: a foraged branch, a volunteer, a new variety, or something you sell that never grew in a bed. It goes on offer straight away for the period you pick, exactly like a count below. A wholesale price puts it on the portal and fresh sheet, a retail price puts it on the shop, and it needs at least one to sell anywhere. Growing details for projections and planning live under Catalog & prices on the Sales tab.

A wreath, dried bunches, honey, a vase. It sells everywhere a crop does, and stays out of the planting plan, the harvest calendar, the seed library, and the pairing suggestions, because none of those have anything to say about it.

Loading…

Customer feedback & requests

Requests count 3x in next season's planting plan.

Harvest calendar

Log what you actually planted and when; BloomDesk projects when cutting starts and how long the window runs.

Planting from a seed packet? Snap it and let BloomDesk fill this in.
Cutting dates (woody/evergreen crops, or to override the projection)
Add a crop the catalog doesn't have

The survey catalog covers the common cuts; add anything you grow that isn't in it. Growing details are optional, but with them the item shows up in harvest projections, the planting plan, and the florist portal like any other crop. To put something on sale this week without all that, use the Stock tab.

Growing details (for scheduling & the florist portal)

Seed library (every packet you've read or logged: lots, germination, photos)

Loading…

This season

No sales logged yet.

Next season's planting plan

Built from what actually sold plus what customers asked for, keyed to your last-frost date. Dates are sowing / planting-out targets for the coming season.

Account

Checking…

Switching signs this account out on this device first, so the next person can't act as you. Your own sessions elsewhere are untouched.

Staff accounts

Admins run everything. Sales work orders and record sales. Pickers work orders only. A permission on one account is the exception to its role: tick one to hand that person a job their role does not carry, or untick one to take it away.

Loading…

Farm settings

Everything below is optional and every one of them can be left blank: the copy reads cleanly without them. This is where the farm's own name and address come from, in emails, statements, the shop, the florist portal and the page titles. Nothing here needs a file on the server.

The entity signs statements, invoices and the copyright line on every page; the town goes in email signatures and tells a florist which growing season their request is checked against.

Names a florist sees on "who approves each account" and on a declined request. Blank reads as "the farm", which is a fine answer.

The line under the farm's name on the retail shop, and the description a shared link shows. Blank falls back to the entity and town.

Used to build the links in emails: password resets, the portal, statements. Get it wrong and those links go nowhere.

Woody, evergreen and winter crops with their cut windows, shipped for one region. Off keeps the pickers to the survey varieties and your own items; a pack crop already on a sale or a planting keeps its name.

What you add for stems ordered to eat, because they are cut, stored and carried for a kitchen rather than for a vase. Zero is a fine answer. Which crops you will sell to eat is set per crop under Catalog & prices on the Sales tab, and until you mark one nobody is offered the choice.

Sales tax

Charged to retail customers and to nobody else. Wholesale, route deliveries, florists and any other reseller are never taxed, so this rate is only ever applied to a market, farm stand or online sale.

Two different mechanisms, because the two kinds of retail sale price differently. Card sales through the shop and CSA signup are worked out and added by Stripe Tax, from the address the customer gives at checkout. Cash sales you ring up here already have the tax inside the price on the bucket, and the rate above is what backs it out for your return. The postal code is what lets the hourly job ask Stripe for that rate, so you do not have to keep it up to date by hand. Leave the rate blank to collect nothing.

Stripe only returns tax once Stripe Tax is switched on in your Stripe dashboard and you have added the places you are registered to collect. Until then it returns zero rather than an error, and no tax is added to a card sale.

Your winter, as a zone from 1 to 13. It is what decides whether a customer can ask you to grow something you don't carry: a plant that cannot live through your winter is refused where it is asked for. Leave it blank and nothing is refused.

Payment links

Shown to customers at checkout and as QR codes in the Orders tab. https links only (e.g. paypal.me/…, venmo.com/u/…, cash.app/$…, your Zelle enrollment link).

Recent errors (this session)

API errors with their full text: toasts stay until tapped, and land here so you can re-read them. Sign-in problems show on the lock screen instead. The server keeps its own copy: docker compose logs.

No errors this session.

System health

The things that fail quietly: the nightly backup, and the hourly jobs that turn standing orders and subscriptions into real orders and check Stripe for payments we never heard about. A red line here is worth acting on.

Checking…

Backup

Downloads a consistent snapshot of the whole database (listings, sales, florists, orders; photos live in the data volume separately). Restore replaces the live database; the previous one is kept in the volume just in case.

Connections

Each connection is the farm's own account. Connect it here and it is stored encrypted; nothing on the server has to be edited or restarted.

Checking…

Import

Checking…