660
Total Products
429
Available
231
Out of Stock
13
Collections
10
Color Tags
$12
Avg. Price
01 Smart Product Discovery High Priority

The Problem

660 products in the catalog β€” 82% are Tall Bearded Iris. The old site made it hard to scan through the catalog and find specific varieties. Customers browsing "Tall Bearded" are still looking at 500+ products with no way to narrow down.

The Solution: Multi-Filter Sidebar + Visual Grid

A persistent filter panel (sidebar on desktop, bottom sheet on mobile) that lets customers combine multiple filter criteria at once:

Filter Panel Wireframe

🎨 Color

Purple (171) Yellow (84) Pink (72) Blue (57) White (57) Peach (40) Red (39) Orange (37) Black (33) Brown (10)

🌸 Bloom Season

Early (33) Early–Mid (138) Mid (189) Mid–Late (154) Late (25) Reblooming (82)

πŸ“ Height

Range slider: 10" – 38" (most are 32"–38")

✨ Special

πŸ† Award Winners (145) 🌺 Fragrant (276) ♻️ Reblooming (82) πŸ“œ Historic (12) πŸš€ Space Age (11)

πŸ’° Price

Under $10 (272) $10–15 (242) $15–20 (114) $20+ (26)

πŸ“¦ Availability

In Stock Only Include Out of Stock

Sort Options

  • Best Selling β€” social proof, great default
  • Price: Low β†’ High / High β†’ Low
  • Newest β€” for returning customers
  • Alphabetical β€” iris growers often know variety names
  • Award Winners First β€” surface quality

Search

Prominent search bar at the top of the shop page. Iris enthusiasts often know exact variety names (e.g., "Immortality", "Batik", "Beverly Sills"). Typeahead autocomplete with product image thumbnails in dropdown results.

πŸ’‘ Key Insight: Bonnie's customers are a mix of (1) iris collectors who know exactly what they want by name, and (2) casual gardeners browsing by color/look. The filter system serves both β€” search for collectors, visual color filters for browsers.

Technical Approach

  • All filtering is tag-based (Shopify tags are rich and consistent)
  • Client-side filtering using Preact island β€” load all products once, filter locally for instant response
  • URL params sync with filters (shareable links like /shop?color=purple&bloom=reblooming)
  • Intersection Observer for infinite scroll or "Load More" button
02 Visual Collection Landing Pages High Priority

Current State

13 Shopify collections exist but the homepage currently shows 6 generic placeholder cards. The real collections have rich descriptions that tell a story.

Proposed Collections Hierarchy

CollectionProductsType
🌸 Tall Bearded Iris539Primary β€” needs sub-filtering
♻️ Reblooming Iris82Primary β€” unique selling point
🌺 Fragrant Iris276Primary β€” cross-cuts TB
πŸ† Award Winners145+Primary β€” trust/quality signal
🌿 Standard Dwarf Iris36Secondary
🎌 Japanese/Ensata Iris33Secondary
πŸ“ Border Bearded Iris7Secondary
🧬 Intermediate Bearded11Secondary (empty in Shopify β€” needs products added)
🌷 Lily Bulbs~15Non-iris β€” separate section
πŸ‘• Apparel~5Non-iris β€” separate section
🎁 Gift Cards & Deals~5Utility
Recommendation: Feature 4 primary collections on homepage (Tall Bearded, Reblooming, Fragrant, Award Winners). Secondary types live inside the "Shop All" page with the filter system. Non-iris products (lilies, apparel) get their own small section below.

Each Collection Page Gets:

  • Hero image + collection description (Shopify has great descriptions already)
  • Product count + filter panel (same as proposal #1)
  • "Related Collections" suggestions at bottom
  • Growing tips specific to that iris type (SEO + helpful)
03 Wishlist / Favorites Medium Priority

Current State

Cookie-only favorites on the existing site. No cross-device persistence. Bonnie wants this improved.

Three Options (Increasing Complexity)

OptionHow It WorksProsCons
A. LocalStorage + Optional Email Sync Favorites saved locally. Optional: "Save your list" β†’ enter email β†’ we store their list server-side (Cloudflare KV or D1). No login required. Simple. Covers 80% of use case. Not truly cross-device without the email step.
B. Shopify Customer Metafields If customer has a Shopify account, store favorites in customer metafields via Storefront API. True cross-device. Leverages existing Shopify accounts. Requires login. Many casual browsers won't create accounts.
C. Hybrid (Recommended) LocalStorage for anonymous users + auto-sync to Shopify metafields when they log in. "Email your wishlist" for sharing. Best of both worlds. Works for casual browsers AND account holders. More complex to build, but not dramatically so.
πŸ’‘ Our Recommendation: Option C (Hybrid)
Start with LocalStorage (instant, no friction). Add the Shopify metafield sync once Sahara builds the customer API layer. The UI stays the same either way β€” a β™₯ heart icon on every product card.

UI Concept

  • β™₯ heart toggle on every product card (top-right corner)
  • Header badge showing favorites count (next to cart)
  • Dedicated "/favorites" page showing all saved items with "Add All to Cart" option
  • "Share Wishlist" button β€” generates a link or emails the list
  • Prompt: "Want to save this across devices? Create a free account" (gentle upsell to Shopify accounts)
04 Back-in-Stock Notifications Medium Priority

Why This Matters

231 products (35% of catalog) are currently out of stock. That's 231 potential "Notify Me" signups β€” each one a warm lead for when Bonnie restocks for shipping season.

This is basically free marketing. Every "Notify Me" is an email Bonnie collects without having to run ads or promotions. Iris season is cyclical β€” items that are out of stock now will come back July–September.

Three Approaches

OptionCostComplexityBest For
A. Klaviyo Back-in-Stock Free (up to 250 contacts) / $20+/mo Low β€” Shopify app + API If Bonnie plans to do email marketing anyway
B. Custom Build (Cloudflare D1 + Workers) Free (within CF free tier) Medium β€” we build it Full control, no monthly cost, fits our stack
C. Shopify Flow + Webhooks Free (included in Shopify plan) Medium β€” Shopify automation If Bonnie wants to manage it from Shopify admin
πŸ’‘ Our Recommendation: Option B (Custom Build)
We're already on Cloudflare. Build a simple system: collect email + product ID β†’ store in D1 β†’ Shopify inventory webhook fires when product restocks β†’ Cloudflare Worker sends email via Resend/SendGrid. Zero monthly cost. Sahara handles the webhook plumbing, Vegas builds the UI.

UI Concept

  • Out-of-stock products show "Notify Me When Available" button instead of "Add to Cart"
  • Click β†’ email input modal (pre-filled if they have a Shopify account)
  • Confirmation: "We'll email you when [Variety Name] is back in stock!"
  • Optional: "Also notify me about similar varieties" checkbox
05 Enhanced Product Cards High Priority

Every Product Card Shows:

  • Photo β€” large, fills card (Shopify images are good quality)
  • Variety name β€” large, Lora serif
  • Type badge β€” "TB" / "SDB" / "RE" / etc. (color-coded pill)
  • Key attributes β€” height + bloom season in small text
  • Price β€” prominent
  • Availability β€” green dot "In Stock" or "Notify Me" badge
  • β™₯ Favorite toggle β€” top-right corner
  • πŸ† Award badge β€” if product has "Award Winner" tag
  • 🌺 Fragrant badge β€” if product has "fragrant" tag

Quick View

Click/tap a product card β†’ slide-out panel or modal with:

  • Image gallery (swipeable)
  • Full description
  • All attributes (type, height, bloom time, awards, fragrance)
  • Add to cart or Notify Me
  • "View Full Details" link to product page
Why this matters for 660 products: Customers need to evaluate varieties fast without loading a new page every time. Quick View lets them scan 10-20 varieties in the time it used to take to look at 3.
06 Data-Driven Homepage Sections Medium Priority

Replace Placeholder Content with Real Shopify Data

Once the Astro build is wired up, these homepage sections pull live from Shopify:

SectionData SourceLogic
Best SellersShopify best-selling sortTop 8 products by sales volume
New ArrivalsShopify created_atMost recently added products
Award Winners"Award Winner" tagRandom 4-6 from 145+ tagged products
Fragrant Favorites"fragrant" tagCurated or random from 276 tagged products
Collections GridCollections APIReal collection images + product counts
Back in SeasonInventory webhookRecently restocked items (seasonal excitement)