From Instagram DMs to a studio that runs itself
A floral design studio's complete digital storefront: a luxury portfolio, a live availability calendar that reads the owner's real Google Calendar, a merch store, and a flower subscription — built to run without a technical owner touching it.
Visit the live siteClients self-serve
Portfolio & gallery
filterable · mobile auto-scroll
Live availability
reads her real Google Calendar
Inquiry form
event, date, venue, budget
Revenue without event labor
Merch store
Stripe Checkout · local pickup
Flower subscriptions
monthly tiers · self-managed billing
The owner's side
Admin dashboard
contacts · sources · CSV export
Zero maintenance
her calendar is the source of truth
System map — how the pieces connect







Flores de Alina serves weddings, corporate events, and installations across the Philadelphia area — with a real client base and no digital infrastructure. Every inquiry arrived through Instagram DMs. A couple couldn't see whether their wedding date was free without messaging and waiting, there was nothing to buy, and nothing for Google to index.
The owner is not technical, so whatever got built had to run without her maintaining it. And service work is capped by how many events one designer can take — the business needed revenue that doesn't scale with her hours.
The marketing site carries the brand with deliberate restraint — this needs to read as a luxury service, not a template. The gallery is categorized and filterable with lazy-loaded images; on mobile it auto-scrolls horizontally, pauses the moment a finger touches it, and loops, because a vertical wall of thirty floral photos is a scroll nobody finishes.
The single highest-leverage feature is the live availability calendar. It reads the owner's actual Google Calendar and marks booked dates unavailable, correctly resolved to Eastern time. Visitors self-serve the “are you free on June 14th?” question — previously her most common message — and she maintains nothing: she books an event in the calendar she already uses, and the website updates.
The inquiry form collects event type, date, venue, and budget, notifies the owner, and silently adds each email to a subscriber list tagged by source — so the mailing list builds itself from real inquiries instead of a popup. Two product lines open revenue that doesn't consume event-day labor: a branded apparel store with cart and local-pickup option, and a monthly flower subscription in two tiers whose subscribers manage their own billing through Stripe's portal.
A password-gated admin dashboard gives the owner every captured contact with source breakdowns, search, filtering, and CSV export — she pulls her own list for a campaign without asking anyone. The build continues: a client portal and automated reminder and update emails are next.
Couples & customers
- Check date availability instantly — no DM, no waiting
- Send a qualified inquiry with event type, date, venue, and budget
- Buy branded apparel with card checkout and free local pickup
- Subscribe to monthly arrangements and manage billing themselves
The owner
- Books events in the Google Calendar she already uses — the site updates itself
- Every contact captured and tagged by source automatically
- Searches, filters, and exports her list from the admin dashboard
- Earns recurring subscription revenue independent of event bookings
Server-authoritative pricing
Checkout never accepts prices from the browser. The client sends a product, size, and quantity; the server validates each against its own catalog and constructs the Stripe line items itself — eliminating the classic hobbyist-store bug where a tampered request buys a $35 sweatshirt for a dollar.
Stripe webhooks that keep working
Stripe signs webhooks against the raw request body, and any JSON parser that runs first silently breaks every signature. The webhook route is registered ahead of the body parser and reads the raw payload — closing off a failure that presents in production as “webhooks mysteriously stopped” and is painful to trace.
SEO pre-rendering without an SSR rewrite
A React SPA ships an empty shell that crawlers can't read — bad for a business found by searching “wedding florist Philadelphia.” Instead of restructuring the app for server-side rendering, a production middleware injects hand-authored metadata and hidden semantic HTML per route. Crawlers get real content on first byte; users get the unchanged app. A sensible trade at eight routes that we'd revisit at fifty.
Honest 404s
The SPA catch-all originally answered every path with HTTP 200, which Google treats as a soft 404 — and which masked a missing favicon so well that search results showed a generic globe. Unknown paths now return a genuine 404, and response content types get checked, not just status codes.
The sale outranks the mailing list
Email capture during checkout is deliberately non-blocking: idempotent inserts, conflicts handled, errors caught and dropped. A mailing-list write must never be able to fail a customer's payment.
Built with
What changed
- From Instagram-DM-only to a site that qualifies leads before they reach the owner
- Her most repetitive question — date availability — now answers itself
- Two product lines generate revenue independent of event bookings
- Subscriptions turn a project-based business into one with recurring income
Related service · Workflow & Integration Systems
Need something like this?
Synthos · Custom software & AI automation · Philadelphia