File size: 31,773 Bytes
f69e608
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16b9e90
 
 
 
 
 
 
 
 
 
 
 
 
 
f69e608
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16b9e90
f69e608
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
"""
Synthetic product catalog generator for RetailMind.

Generates a curated catalog of ~200 realistic e-commerce products with rich
descriptions, material specs, star ratings, and semantic tags β€” designed to
produce high-quality embeddings for dense retrieval.
"""

import random
from typing import TypedDict

random.seed(42)  # Reproducible catalog across sessions


class Product(TypedDict):
    id: int
    title: str
    category: str
    price: float
    desc: str
    tags: list[str]
    rating: float
    reviews: int
    materials: str


# ---------------------------------------------------------------------------
# Hand-authored product templates β€” each with unique, embedding-rich content
# ---------------------------------------------------------------------------

_TEMPLATES: list[dict] = [
    # ── Winter ──────────────────────────────────────────────────────────────
    {"title": "Alpine Pro Insulated Parka", "category": "winter", "price": 189.99,
     "desc": "Engineered for sub-zero temperatures with 700-fill goose down insulation and a waterproof shell. Features an adjustable storm hood, internal media pocket, and reflective accents for low-light visibility. Wind-rated to -30Β°F.",
     "tags": ["waterproof", "insulated", "cold-weather", "outdoor"], "materials": "Nylon ripstop shell, goose down fill"},
    {"title": "Fireside Merino Wool Sweater", "category": "winter", "price": 79.99,
     "desc": "A classic crewneck knit from ultra-soft 100% merino wool. Breathable yet warm, perfect for layering or wearing solo by the fire. Naturally odor-resistant and temperature-regulating.",
     "tags": ["wool", "layering", "classic", "cozy"], "materials": "100% Merino wool"},
    {"title": "Glacier Grip Thermal Gloves", "category": "winter", "price": 34.99,
     "desc": "Touchscreen-compatible thermal gloves with silicone grip palms. Fleece-lined interior keeps hands warm while conductive fingertips let you use your phone without exposing skin to the cold.",
     "tags": ["touchscreen", "thermal", "cold-weather", "tech-friendly"], "materials": "Polyester fleece, silicone grip, conductive thread"},
    {"title": "Blizzard Shield Snow Boots", "category": "winter", "price": 149.99,
     "desc": "Heavy-duty winter boots with Thinsulate insulation and Vibram Arctic Grip outsoles. Sealed seams and a gusseted tongue keep snow and slush out. Comfort-rated to -40Β°F.",
     "tags": ["waterproof", "insulated", "snow", "hiking"], "materials": "Full-grain leather, Thinsulate, Vibram sole"},
    {"title": "Nordic Knit Beanie", "category": "winter", "price": 24.99,
     "desc": "Double-layer acrylic knit beanie with a fleece headband liner. Classic Nordic pattern adds style while the snug fit traps heat. One size fits most.",
     "tags": ["knit", "warm", "casual", "unisex"], "materials": "Acrylic knit, polyester fleece liner"},
    {"title": "Summit Fleece Pullover", "category": "winter", "price": 64.99,
     "desc": "Mid-weight microfleece pullover ideal for layering under a shell or wearing on cool autumn mornings. Quarter-zip design, chin guard, and zippered chest pocket.",
     "tags": ["fleece", "layering", "outdoor", "mid-weight"], "materials": "100% recycled polyester microfleece"},
    {"title": "Thermal Base Layer Set", "category": "winter", "price": 54.99,
     "desc": "Moisture-wicking thermal top and leggings designed as a first layer for skiing, snowboarding, or cold commutes. Flatlock seams prevent chafing during all-day wear.",
     "tags": ["base-layer", "moisture-wicking", "skiing", "thermal"], "materials": "Merino-synthetic blend"},
    {"title": "Expedition Down Vest", "category": "winter", "price": 109.99,
     "desc": "Packable 650-fill down vest that compresses into its own pocket. Provides core warmth without restricting arm movement β€” perfect for active winter pursuits or travel.",
     "tags": ["packable", "down", "layering", "travel"], "materials": "Water-resistant nylon, 650-fill duck down"},

    # ── Summer ──────────────────────────────────────────────────────────────
    {"title": "Breeze Runner Mesh Sneakers", "category": "summer", "price": 89.99,
     "desc": "Ultra-breathable mesh upper with a responsive foam midsole. Weighs just 7.2 oz per shoe, making them ideal for hot-weather runs, gym sessions, or all-day wear in the heat.",
     "tags": ["breathable", "lightweight", "running", "mesh"], "materials": "Engineered mesh upper, EVA foam midsole"},
    {"title": "Pacific Coast Board Shorts", "category": "summer", "price": 39.99,
     "desc": "Quick-dry board shorts with a 4-way stretch waistband and secure zip pocket. UPF 50+ sun protection fabric keeps you safe from UV rays during long beach days.",
     "tags": ["quick-dry", "UPF", "beach", "swim"], "materials": "Recycled polyester, elastane blend"},
    {"title": "Solaris UV Shield Sunglasses", "category": "summer", "price": 59.99,
     "desc": "Polarized lenses with 100% UV400 protection in a lightweight titanium frame. Anti-glare coating reduces eye strain on bright days. Comes with a hard-shell carrying case.",
     "tags": ["polarized", "UV-protection", "lightweight", "outdoor"], "materials": "Titanium frame, polarized polycarbonate lenses"},
    {"title": "Coastal Breeze Linen Shirt", "category": "summer", "price": 49.99,
     "desc": "Relaxed-fit linen button-down that stays cool in 90Β°F+ heat. Garment-dyed for a lived-in look. Perfect from boardwalk brunch to sunset cocktails.",
     "tags": ["linen", "breathable", "casual", "warm-weather"], "materials": "100% French linen"},
    {"title": "Reef Walker Sandals", "category": "summer", "price": 44.99,
     "desc": "Contoured footbed sandals with arch support and a rugged outsole. Synthetic nubuck straps adjust for a custom fit. Great for beach walks, pool decks, and casual summer outings.",
     "tags": ["sandals", "arch-support", "beach", "casual"], "materials": "Synthetic nubuck, molded EVA footbed"},
    {"title": "Tropic Mesh Tank Top", "category": "summer", "price": 22.99,
     "desc": "Lightweight mesh-back tank with moisture-wicking fabric that keeps you dry during hot workouts or humid commutes. Flatlock seams and a relaxed hem for all-day comfort.",
     "tags": ["moisture-wicking", "gym", "breathable", "lightweight"], "materials": "Polyester-spandex blend"},
    {"title": "Sun Shield Wide Brim Hat", "category": "summer", "price": 34.99,
     "desc": "UPF 50+ wide-brim sun hat with an adjustable chin cord and mesh ventilation panels. Floats in water and packs flat for travel. Essential protection for hiking, fishing, and gardening.",
     "tags": ["UPF", "sun-protection", "outdoor", "packable"], "materials": "Nylon with mesh vents"},
    {"title": "Aqua Sport Water Shoes", "category": "summer", "price": 29.99,
     "desc": "Drainage-port water shoes with a grippy rubber sole for rocky beaches and river crossings. Neoprene collar prevents sand entry. Dries in under an hour.",
     "tags": ["water-shoes", "quick-dry", "beach", "outdoor"], "materials": "Mesh, neoprene, rubber outsole"},

    # ── Eco-Friendly ────────────────────────────────────────────────────────
    {"title": "EcoLoop Recycled Backpack", "category": "eco-friendly", "price": 74.99,
     "desc": "Made from 20 recycled ocean-bound plastic bottles. Features a padded laptop sleeve, water-resistant coating, and ergonomic shoulder straps. Every purchase funds 1 lb of ocean cleanup.",
     "tags": ["recycled", "ocean-plastic", "sustainable", "laptop"], "materials": "Recycled RPET fabric, plant-based waterproof coating"},
    {"title": "Bamboo Hydration Bottle", "category": "eco-friendly", "price": 28.99,
     "desc": "Double-wall vacuum insulated bottle with a natural bamboo cap and silicone seal. Keeps drinks cold for 24 hours or hot for 12. BPA-free, plastic-free, and designed to last a lifetime.",
     "tags": ["bamboo", "BPA-free", "insulated", "reusable"], "materials": "18/8 stainless steel, bamboo lid"},
    {"title": "Organic Cotton Classic Tee", "category": "eco-friendly", "price": 32.99,
     "desc": "GOTS-certified organic cotton tee dyed with low-impact, water-saving dyes. Pre-shrunk ring-spun cotton feels buttery soft from the first wear. Fair Trade certified production.",
     "tags": ["organic", "fair-trade", "GOTS-certified", "cotton"], "materials": "100% GOTS organic cotton"},
    {"title": "Hemp Canvas Tote Bag", "category": "eco-friendly", "price": 19.99,
     "desc": "Durable hemp canvas tote that replaces 700 single-use plastic bags in its lifetime. Reinforced seams, interior pocket, and long handles for comfortable shoulder carry.",
     "tags": ["hemp", "reusable", "sustainable", "zero-waste"], "materials": "Organic hemp canvas"},
    {"title": "Plant-Based Running Shoes", "category": "eco-friendly", "price": 119.99,
     "desc": "The upper is woven from eucalyptus fiber, the midsole from sugarcane-based EVA, and the outsole from natural rubber. Carbon-negative manufacturing. Feels like running on clouds.",
     "tags": ["plant-based", "carbon-negative", "running", "vegan"], "materials": "Eucalyptus fiber, sugarcane EVA, natural rubber"},
    {"title": "Recycled Denim Jacket", "category": "eco-friendly", "price": 89.99,
     "desc": "Classic trucker jacket made from 100% post-consumer recycled denim. Each jacket diverts 1.5 lbs of textile waste from landfills. Stone-washed finish with brass buttons.",
     "tags": ["recycled", "denim", "upcycled", "sustainable"], "materials": "100% recycled post-consumer denim"},
    {"title": "Solar-Powered Watch", "category": "eco-friendly", "price": 159.99,
     "desc": "Never needs a battery β€” charges via any light source. Sapphire crystal face, titanium case, and a strap made from recycled ocean plastic. Water-resistant to 100 meters.",
     "tags": ["solar", "recycled", "titanium", "water-resistant"], "materials": "Titanium, sapphire crystal, recycled ocean-plastic strap"},
    {"title": "Cork Yoga Mat", "category": "eco-friendly", "price": 64.99,
     "desc": "Harvested from sustainable cork oak forests without harming the tree. Non-slip surface improves grip when wet. Antimicrobial naturally. Backed with natural rubber for cushioning.",
     "tags": ["cork", "sustainable", "yoga", "non-toxic"], "materials": "Natural cork, natural rubber backing"},

    # ── Sports & Fitness ────────────────────────────────────────────────────
    {"title": "ProPulse Running Shoes", "category": "sports", "price": 129.99,
     "desc": "Carbon-plate racing shoes with a nitrogen-infused midsole for maximum energy return. Engineered mesh upper weighs just 6.5 oz. Designed for 5K to marathon distances.",
     "tags": ["carbon-plate", "racing", "lightweight", "marathon"], "materials": "Engineered mesh, carbon fiber plate, nitrogen foam"},
    {"title": "FlexCore Training Shorts", "category": "sports", "price": 44.99,
     "desc": "4-way stretch training shorts with a built-in compression liner and three secure pockets. Sweat-wicking DryFit fabric keeps you cool through HIIT, lifting, and sprints.",
     "tags": ["training", "compression", "moisture-wicking", "gym"], "materials": "Polyester-elastane with DryFit technology"},
    {"title": "IronGrip Fitness Watch", "category": "sports", "price": 199.99,
     "desc": "GPS-enabled multisport watch with heart rate monitoring, VO2 max estimation, and 14-day battery life. Tracks 30+ activities including swimming (waterproof to 50m). Syncs with Strava.",
     "tags": ["GPS", "heart-rate", "waterproof", "multisport"], "materials": "Fiber-reinforced polymer case, silicone band"},
    {"title": "Thunder Strike Basketball", "category": "sports", "price": 34.99,
     "desc": "Official size and weight composite leather basketball with deep channel design for superior grip. Indoor/outdoor rated with a butyl bladder for consistent air retention.",
     "tags": ["basketball", "indoor-outdoor", "official-size", "grip"], "materials": "Composite leather, butyl rubber bladder"},
    {"title": "Velocity Compression Tights", "category": "sports", "price": 59.99,
     "desc": "Graduated compression tights that boost blood circulation and reduce muscle fatigue during long runs. Reflective logos for night visibility. Flatlock seams prevent chafing.",
     "tags": ["compression", "running", "reflective", "recovery"], "materials": "Nylon-spandex compression fabric"},
    {"title": "PowerLift Training Gloves", "category": "sports", "price": 27.99,
     "desc": "Ventilated weightlifting gloves with padded leather palms and adjustable wrist wraps. Reduces calluses while maintaining bar feel. Pull-tab for easy removal between sets.",
     "tags": ["weightlifting", "gym", "padded", "grip"], "materials": "Genuine leather palm, mesh back, neoprene wrist wrap"},
    {"title": "AeroFlow Cycling Jersey", "category": "sports", "price": 74.99,
     "desc": "Full-zip cycling jersey with three rear pockets and a silicone gripper hem. Italian mesh side panels maximize airflow on climbs. Sublimation-printed β€” colors won't fade or peel.",
     "tags": ["cycling", "breathable", "lightweight", "performance"], "materials": "Italian polyester mesh blend"},
    {"title": "Endurance Hydration Pack", "category": "sports", "price": 49.99,
     "desc": "Lightweight 2L hydration vest designed for trail running. Bite valve with on/off switch, front stash pockets for gels, and a bounce-free fit that adjusts with dual sternum straps.",
     "tags": ["hydration", "trail-running", "lightweight", "outdoor"], "materials": "Ripstop nylon, BPA-free reservoir"},

    # ── Electronics & Tech ──────────────────────────────────────────────────
    {"title": "AuraBeats Studio Headphones", "category": "electronics", "price": 249.99,
     "desc": "Active noise cancelling over-ear headphones with 40mm custom drivers and 30-hour battery life. Adaptive EQ auto-tunes to your ear shape. Features multipoint Bluetooth for switching between laptop and phone.",
     "tags": ["ANC", "wireless", "bluetooth", "noise-cancelling"], "materials": "Memory foam cushions, anodized aluminum, protein leather"},
    {"title": "NovaBand Fitness Tracker", "category": "electronics", "price": 49.99,
     "desc": "Slim fitness band with AMOLED display, continuous heart rate monitoring, sleep tracking, and SpO2 sensor. 10-day battery life and swim-proof to 50 meters. Weighs just 22 grams.",
     "tags": ["fitness-tracker", "AMOLED", "heart-rate", "waterproof"], "materials": "Polycarbonate case, silicone band"},
    {"title": "TrueWireless Pro Earbuds", "category": "electronics", "price": 129.99,
     "desc": "In-ear ANC earbuds with transparency mode and spatial audio support. 6-hour playtime per charge, 24 hours total with the wireless charging case. IPX5 sweat-resistant for workouts.",
     "tags": ["ANC", "earbuds", "wireless", "spatial-audio"], "materials": "Medical-grade silicone tips, matte plastic shell"},
    {"title": "Portable Solar Charger Panel", "category": "electronics", "price": 69.99,
     "desc": "Foldable 21W solar panel with dual USB-A and USB-C outputs. Charges a phone in ~2.5 hours of direct sunlight. Carabiner attachment for backpack mounting during hikes.",
     "tags": ["solar", "portable", "USB-C", "outdoor"], "materials": "Monocrystalline silicon, PET laminate, polyester canvas"},
    {"title": "SmartTherm Travel Mug", "category": "electronics", "price": 39.99,
     "desc": "App-connected travel mug with an LED temperature display on the lid. Set your preferred drinking temperature and the mug maintains it for up to 3 hours via battery-powered heating element.",
     "tags": ["smart", "temperature-control", "travel", "app-connected"], "materials": "304 stainless steel, ceramic coating interior"},
    {"title": "UltraSlim Power Bank 10K", "category": "electronics", "price": 34.99,
     "desc": "10,000mAh portable charger thinner than most phones. Dual output (USB-C PD + USB-A QC3.0) charges two devices simultaneously. Fully recharges in 2.5 hours.",
     "tags": ["power-bank", "USB-C", "portable", "fast-charging"], "materials": "Aluminum alloy shell, lithium-polymer cells"},
    {"title": "Compact Bluetooth Speaker", "category": "electronics", "price": 44.99,
     "desc": "IP67 waterproof and dustproof mini speaker with surprisingly rich 360Β° sound. 12-hour battery, built-in mic for calls, and a carabiner loop. Floats in water.",
     "tags": ["bluetooth", "waterproof", "portable", "speaker"], "materials": "Rubberized exterior, passive bass radiator"},
    {"title": "Night Owl LED Desk Lamp", "category": "electronics", "price": 54.99,
     "desc": "Dimmable LED desk lamp with 5 color temperature presets and a wireless Qi charging pad in the base. Adjustable gooseneck, memory function, and a 1-hour auto-off timer.",
     "tags": ["LED", "desk-lamp", "wireless-charging", "dimmable"], "materials": "Aluminum arm, ABS base with Qi coil"},

    # ── Premium / Luxury ────────────────────────────────────────────────────
    {"title": "Artisan Leather Weekender", "category": "premium", "price": 349.99,
     "desc": "Hand-stitched full-grain vegetable-tanned leather duffle with brass YKK zippers. Develops a rich patina with age. Separate shoe compartment and detachable shoulder strap.",
     "tags": ["leather", "handmade", "luxury", "travel"], "materials": "Full-grain vegetable-tanned leather, brass hardware"},
    {"title": "Heritage Automatic Watch", "category": "premium", "price": 499.99,
     "desc": "Swiss-movement automatic watch with a sapphire crystal dial and exhibition caseback. 42mm stainless steel case with a genuine alligator strap. 50-meter water resistance.",
     "tags": ["automatic", "swiss-movement", "sapphire", "luxury"], "materials": "316L stainless steel, sapphire crystal, alligator leather strap"},
    {"title": "Cashmere Blend Overcoat", "category": "premium", "price": 389.99,
     "desc": "Italian-milled cashmere-wool blend overcoat with a notch lapel and half-canvas construction. Fully lined in Bemberg silk. Timeless silhouette for dressed-up or smart-casual looks.",
     "tags": ["cashmere", "Italian", "luxury", "formal"], "materials": "70% wool, 30% cashmere, Bemberg lining"},
    {"title": "Handcrafted Walnut Sunglasses", "category": "premium", "price": 179.99,
     "desc": "Frames carved from sustainably sourced American black walnut with Carl Zeiss polarized lenses. Each pair has unique wood grain patterns. Spring hinges for a comfortable universal fit.",
     "tags": ["handcrafted", "walnut", "polarized", "sustainable"], "materials": "Black walnut wood, Carl Zeiss polarized lenses"},
    {"title": "Titanium Card Wallet", "category": "premium", "price": 89.99,
     "desc": "Minimalist RFID-blocking wallet machined from grade-5 titanium. Holds 6 cards and features a quick-access pull tab. Weighs just 2.1 oz and will outlast any leather wallet.",
     "tags": ["titanium", "RFID-blocking", "minimalist", "EDC"], "materials": "Grade-5 titanium, Dyneema pull tab"},
    {"title": "Silk Pocket Square Collection", "category": "premium", "price": 59.99,
     "desc": "Set of 3 hand-rolled Italian silk pocket squares in complementary patterns. Each square is individually wrapped in tissue β€” perfect as a gift or to elevate your suit game.",
     "tags": ["silk", "Italian", "gift", "formal"], "materials": "100% Italian silk, hand-rolled edges"},
    {"title": "Executive Leather Belt", "category": "premium", "price": 119.99,
     "desc": "Single-piece full-grain bridle leather belt with a solid brass buckle. No stitching β€” the leather is thick enough to hold its shape for decades. Ages beautifully with wear.",
     "tags": ["leather", "brass", "luxury", "classic"], "materials": "Full-grain English bridle leather, solid brass buckle"},
    {"title": "Carbon Fiber Money Clip", "category": "premium", "price": 44.99,
     "desc": "Aerospace-grade carbon fiber money clip with a satin finish. Ultra-lightweight and strong enough to hold 15+ folded bills without losing spring tension over time.",
     "tags": ["carbon-fiber", "minimalist", "EDC", "lightweight"], "materials": "3K twill carbon fiber"},

    # ── Home & Lifestyle ────────────────────────────────────────────────────
    {"title": "Aromatherapy Soy Candle Set", "category": "home", "price": 36.99,
     "desc": "Set of 3 hand-poured soy candles in amber glass jars: Lavender Fields, Cedar & Sage, and Vanilla Bean. 45-hour burn time each. Cotton wicks, no synthetic fragrances.",
     "tags": ["soy", "aromatherapy", "handmade", "non-toxic"], "materials": "100% soy wax, cotton wicks, essential oils"},
    {"title": "Japanese Ceramic Pour-Over Set", "category": "home", "price": 54.99,
     "desc": "Minimalist pour-over coffee dripper with a double-wall ceramic server. The cone's spiral ribs allow optimal coffee bloom. Makes 2-4 cups of clean, nuanced brew.",
     "tags": ["ceramic", "coffee", "Japanese", "minimalist"], "materials": "Hasami porcelain, borosilicate server"},
    {"title": "Weighted Linen Throw Blanket", "category": "home", "price": 79.99,
     "desc": "Stonewashed Belgian linen throw with a comfortable 3 lb weight. Gets softer with every wash. Perfect draped over a sofa or at the foot of the bed. OEKO-TEX certified.",
     "tags": ["linen", "stonewashed", "cozy", "OEKO-TEX"], "materials": "100% Belgian flax linen"},
    {"title": "Walnut & Brass Desk Organizer", "category": "home", "price": 44.99,
     "desc": "Handcrafted desk organizer with solid walnut compartments and brass dividers. Holds pens, cards, phone, and small accessories. Felt-lined base protects desktop surfaces.",
     "tags": ["walnut", "brass", "handcrafted", "office"], "materials": "American black walnut, brushed brass accents"},
    {"title": "Terracotta Herb Planter Trio", "category": "home", "price": 29.99,
     "desc": "Set of 3 terracotta planters with drainage holes and bamboo saucers. Perfect for kitchen windowsill herbs like basil, rosemary, and mint. Hand-finished with a matte glaze.",
     "tags": ["terracotta", "gardening", "kitchen", "handmade"], "materials": "Terracotta clay, bamboo saucers"},
    {"title": "Memory Foam Seat Cushion", "category": "home", "price": 39.99,
     "desc": "Ergonomic U-shaped seat cushion with cooling gel-infused memory foam. Reduces tailbone pressure during long work sessions. Machine-washable velour cover with anti-slip bottom.",
     "tags": ["ergonomic", "memory-foam", "office", "comfort"], "materials": "Gel-infused memory foam, velour cover"},
    {"title": "Minimalist Wall Clock", "category": "home", "price": 49.99,
     "desc": "12-inch silent-sweep wall clock with a birch plywood face and brass hands. No ticking sound β€” uses a precision quartz movement. Mounts flush with a single nail.",
     "tags": ["minimalist", "silent", "birch", "Scandinavian"], "materials": "Baltic birch plywood, brass hands, quartz movement"},
    {"title": "Turkish Cotton Bath Towel Set", "category": "home", "price": 64.99,
     "desc": "Set of 4 Turkish cotton towels β€” 2 bath, 2 hand. Long-staple cotton loops absorb 3x their weight in water. Gets fluffier with each wash. OEKO-TEX Standard 100.",
     "tags": ["Turkish-cotton", "absorbent", "OEKO-TEX", "bath"], "materials": "100% long-staple Turkish cotton"},

    # ── Casual / Streetwear ─────────────────────────────────────────────────
    {"title": "Urban Canvas Sneakers", "category": "casual", "price": 59.99,
     "desc": "Classic low-top canvas sneakers with a vulcanized rubber sole for all-day comfort. Metal eyelets, cotton laces, and a removable cushioned insole. Comes in 8 colorways.",
     "tags": ["canvas", "classic", "casual", "street"], "materials": "Organic cotton canvas, vulcanized rubber sole"},
    {"title": "Oversized Graphic Hoodie", "category": "casual", "price": 54.99,
     "desc": "Heavyweight 14 oz French terry hoodie with a relaxed oversized fit. Abstract graphic screen-printed with water-based inks. Ribbed cuffs, kangaroo pocket, and a double-lined hood.",
     "tags": ["hoodie", "oversized", "streetwear", "graphic"], "materials": "80% cotton, 20% polyester French terry"},
    {"title": "Slim Fit Chino Pants", "category": "casual", "price": 49.99,
     "desc": "Tailored slim-fit chinos in a stretch twill that moves with you. Sits at the natural waist with a tapered leg. Works equally well with sneakers or loafers.",
     "tags": ["chinos", "slim-fit", "stretch", "versatile"], "materials": "98% cotton, 2% elastane twill"},
    {"title": "Vintage Wash Denim Jacket", "category": "casual", "price": 79.99,
     "desc": "Classic trucker jacket in a medium-wash selvedge denim. Chest flap pockets, adjustable waist tabs, and copper-tone buttons. The perfect layering piece for spring and fall.",
     "tags": ["denim", "trucker", "vintage", "layering"], "materials": "100% selvedge cotton denim"},
    {"title": "Everyday Crossbody Bag", "category": "casual", "price": 34.99,
     "desc": "Compact crossbody bag with an adjustable strap, front zip pocket, and RFID-protected main compartment. Fits phone, wallet, keys, and a small water bottle. Weighs 8 oz.",
     "tags": ["crossbody", "RFID", "compact", "everyday"], "materials": "Water-resistant nylon, YKK zippers"},
    {"title": "Bamboo Fiber Crew Socks 6-Pack", "category": "casual", "price": 24.99,
     "desc": "Ultra-soft bamboo fiber socks with natural antibacterial and moisture-wicking properties. Reinforced heel and toe, seamless toe closure, and a mid-calf height. Fits sizes 6–12.",
     "tags": ["bamboo", "antibacterial", "moisture-wicking", "comfort"], "materials": "70% bamboo viscose, 25% cotton, 5% elastane"},
    {"title": "Relaxed Linen Drawstring Pants", "category": "casual", "price": 44.99,
     "desc": "Breezy linen pants with an elastic drawstring waist and side pockets. Perfect for beach vacations, weekend errands, or just lounging at home. Gets softer with every wash.",
     "tags": ["linen", "relaxed", "breathable", "vacation"], "materials": "100% pre-washed linen"},
    {"title": "Retro Aviator Sunglasses", "category": "casual", "price": 29.99,
     "desc": "Classic aviator frames in brushed gold metal with gradient smoke lenses. UV400 protection, adjustable nose pads, and spring-loaded temples for a comfortable fit.",
     "tags": ["aviator", "UV400", "retro", "metal-frame"], "materials": "Brushed metal alloy, gradient polycarbonate lenses"},

    # ── Health & Beauty ─────────────────────────────────────────────────────
    {"title": "SPF 50 Mineral Sunscreen", "category": "health", "price": 24.99,
     "desc": "Broad-spectrum mineral sunscreen that protects against UV rays without harmful chemicals. Reef-safe, non-greasy formula that absorbs quickly. Leaves no white cast.",
     "tags": ["sunscreen", "skincare", "SPF", "reef-safe"], "materials": "Zinc oxide, aloe vera"},
    {"title": "Hydrating Matte Lipstick", "category": "health", "price": 18.99,
     "desc": "Long-lasting matte lipstick infused with hyaluronic acid and shea butter for all-day comfort. Highly pigmented shade that doesn't feather or dry out your lips.",
     "tags": ["lipstick", "makeup", "beauty", "hydrating"], "materials": "Hyaluronic acid, shea butter, vegan pigments"},
    {"title": "Vitamin C Glow Serum", "category": "health", "price": 34.99,
     "desc": "Brightening facial serum with 15% Vitamin C and hyaluronic acid. Reduces dark spots, evens skin tone, and boosts collagen production. Safe for sensitive skin.",
     "tags": ["serum", "skincare", "vitamin-c", "anti-aging"], "materials": "Ascorbic acid, hyaluronic acid, vitamin E"},
    {"title": "Organic Lip Balm Trio", "category": "health", "price": 12.99,
     "desc": "Sustainably sourced beeswax lip balm set. Includes peppermint, vanilla, and unscented. Deeply moisturizes chapped lips during harsh weather.",
     "tags": ["lip-balm", "skincare", "organic", "moisturizing"], "materials": "Organic beeswax, coconut oil, essential oils"},
]


def _expand_catalog(templates: list[dict], target_count: int = 200) -> list[Product]:
    """
    Expand hand-authored templates into a full catalog by adding tasteful
    variations (color/version suffixes) while preserving description richness.
    """
    catalog: list[Product] = []
    color_variants = [
        "Charcoal", "Midnight Blue", "Forest Green", "Stone Grey",
        "Rust Orange", "Ivory", "Slate", "Obsidian",
    ]
    idx = 1
    variant_idx = 0

    while len(catalog) < target_count:
        for tmpl in templates:
            if len(catalog) >= target_count:
                break

            if variant_idx == 0:
                title = tmpl["title"]
            else:
                color = color_variants[variant_idx % len(color_variants)]
                title = f"{tmpl['title']} β€” {color}"

            catalog.append(Product(
                id=idx,
                title=title,
                category=tmpl["category"],
                price=round(tmpl["price"] * (1 + random.uniform(-0.08, 0.08)), 2),
                desc=tmpl["desc"],
                tags=list(tmpl["tags"]),
                rating=round(random.uniform(3.8, 5.0), 1),
                reviews=random.randint(12, 2400),
                materials=tmpl["materials"],
            ))
            idx += 1
        variant_idx += 1

    return catalog


def generate_catalog() -> list[Product]:
    """Generate the full product catalog."""
    return _expand_catalog(_TEMPLATES, target_count=len(_TEMPLATES))


def get_scenarios() -> dict[str, list[str]]:
    """
    Pre-built query sequences that demonstrate drift detection and
    self-healing adaptation in a recruiter demo.
    """
    return {
        "🟒 Phase 1 · Normal": [
            "I need a good water bottle for hiking.",
            "Looking for comfortable running shoes.",
            "Can you recommend a fitness watch with GPS?",
            "What kind of bags do you have for travel?",
        ],
        "πŸ”΄ Phase 2 Β· Black Friday": [
            "What's the absolute cheapest winter hat you have?",
            "Any bags under $25?",
            "Show me the most budget-friendly options.",
            "I only have $30 to spend, what can I get?",
        ],
        "β˜€οΈ Phase 3 Β· Summer Shift": [
            "Do you have lightweight sandals for the beach?",
            "I need breathable clothes for hot weather.",
            "Looking for UV protection sunglasses.",
            "Recommend summer vacation essentials.",
        ],
        "🌿 Phase 4 · Eco Trend": [
            "Show me products made from recycled materials.",
            "I only want sustainable, eco-friendly options.",
            "Do you have anything organic or plant-based?",
            "What's your most environmentally responsible product?",
        ],
    }