package persona // Lifestyle contains the persona's interests, fashion sense, and vacation style. // Generated in Stage 3 of the specgen pipeline using identity and psychology as inputs. type Lifestyle struct { // Interests captures the persona's hobbies and passions. Interests Interests `json:"interests" yaml:"interests"` // FashionSense describes the persona's clothing style preferences. FashionSense FashionSense `json:"fashion_sense" yaml:"fashion_sense"` // VacationStyle describes travel preferences. VacationStyle VacationStyle `json:"vacation_style" yaml:"vacation_style"` } // Interests captures a persona's hobbies and passions across 5 categories. type Interests struct { // Creative interests: art, music, writing, photography, etc. Creative []string `json:"creative" yaml:"creative"` // Active interests: sports, fitness, dance, hiking, etc. Active []string `json:"active" yaml:"active"` // Social interests: dining, travel, nightlife, community, etc. Social []string `json:"social" yaml:"social"` // Intellectual interests: books, philosophy, science, tech, etc. Intellectual []string `json:"intellectual" yaml:"intellectual"` // Lifestyle interests: cooking, gardening, home decor, wellness, etc. Lifestyle []string `json:"lifestyle" yaml:"lifestyle"` } // FashionSense describes a persona's clothing style. type FashionSense struct { // Primary is the dominant fashion context name. Primary FashionContextName `json:"primary" yaml:"primary"` // Secondary is a secondary style influence (optional). Secondary FashionContextName `json:"secondary,omitempty" yaml:"secondary,omitempty"` // SignatureDetails are specific personal styling touches (e.g., "always wears gold hoops"). SignatureDetails []string `json:"signature_details,omitempty" yaml:"signature_details,omitempty"` } // VacationStyle describes a persona's travel preferences. type VacationStyle struct { // Primary is the dominant vacation type: "beach", "city", "adventure", "luxury", "cultural". Primary string `json:"primary" yaml:"primary"` // Activities are preferred vacation activities. Activities []string `json:"activities,omitempty" yaml:"activities,omitempty"` // DreamDestinations are top travel destinations. DreamDestinations []string `json:"dream_destinations,omitempty" yaml:"dream_destinations,omitempty"` } // FashionContextName identifies one of the 15 defined fashion contexts. type FashionContextName string const ( FashionClassicMinimalist FashionContextName = "classic_minimalist" FashionStreetwearChic FashionContextName = "streetwear_chic" FashionBohemianSpirit FashionContextName = "bohemian_free_spirit" FashionAthleisurePro FashionContextName = "athleisure_pro" FashionBusinessCasual FashionContextName = "business_casual" FashionRomanticFeminine FashionContextName = "romantic_feminine" FashionEdgyAlternative FashionContextName = "edgy_alternative" FashionCoastalCasual FashionContextName = "coastal_casual" FashionUrbanProfessional FashionContextName = "urban_professional" FashionFestivalGlam FashionContextName = "festival_glam" FashionPreppyClassic FashionContextName = "preppy_classic" FashionDarkAcademia FashionContextName = "dark_academia" FashionCottagecore FashionContextName = "cottagecore" FashionY2KRevival FashionContextName = "y2k_revival" FashionLuxeLoungewear FashionContextName = "luxe_loungewear" ) // FashionContext describes a named fashion style with styling details. type FashionContext struct { // Name is the canonical identifier. Name FashionContextName `json:"name" yaml:"name"` // Description is a one-line style summary. Description string `json:"description" yaml:"description"` // KeyPieces are the defining wardrobe items. KeyPieces []string `json:"key_pieces" yaml:"key_pieces"` // Brands are representative brands for this aesthetic. Brands []string `json:"brands" yaml:"brands"` // Silhouette describes the overall shape/fit profile. Silhouette string `json:"silhouette" yaml:"silhouette"` } // AllFashionContexts returns the catalog of all 15 defined fashion contexts. func AllFashionContexts() []FashionContext { return []FashionContext{ { Name: FashionClassicMinimalist, Description: "Clean lines, neutral palette, and timeless silhouettes", KeyPieces: []string{"crisp white shirt", "tailored trousers", "structured blazer", "minimal gold jewelry"}, Brands: []string{"COS", "Everlane", "The Row", "A.P.C."}, Silhouette: "slim, structured, minimal layering", }, { Name: FashionStreetwearChic, Description: "Urban-influenced with oversized fits, sneakers, and bold logos", KeyPieces: []string{"oversized hoodie", "cargo pants", "chunky sneakers", "bucket hat"}, Brands: []string{"Off-White", "Supreme", "Stüssy", "PANGAIA"}, Silhouette: "oversized tops, tapered or wide bottoms", }, { Name: FashionBohemianSpirit, Description: "Free-flowing fabrics, earthy tones, and global-inspired prints", KeyPieces: []string{"flowy maxi dress", "embroidered blouse", "woven bag", "layered necklaces"}, Brands: []string{"Free People", "Spell", "Anthropologie", "Zimmermann"}, Silhouette: "loose, flowing, layered", }, { Name: FashionAthleisurePro, Description: "Performance fabrics worn stylishly beyond the gym", KeyPieces: []string{"seamless leggings", "sports bra", "zip-up hoodie", "white sneakers"}, Brands: []string{"Lululemon", "Alo Yoga", "Gymshark", "Vuori"}, Silhouette: "form-fitting, streamlined", }, { Name: FashionBusinessCasual, Description: "Polished and professional with approachable comfort", KeyPieces: []string{"fitted blazer", "straight-leg trousers", "silk blouse", "loafers"}, Brands: []string{"Banana Republic", "Theory", "J.Crew", "& Other Stories"}, Silhouette: "tailored, clean lines, moderate coverage", }, { Name: FashionRomanticFeminine, Description: "Soft, delicate pieces with florals, lace, and pastel tones", KeyPieces: []string{"floral midi dress", "lace cami", "ballet flats", "pearl accessories"}, Brands: []string{"Reformation", "Loveshackfancy", "Hill House Home", "Rixo"}, Silhouette: "fitted bodice with full or flowy skirts", }, { Name: FashionEdgyAlternative, Description: "Dark palette, punk and rock influences, leather and hardware", KeyPieces: []string{"leather jacket", "black skinny jeans", "combat boots", "silver chain jewelry"}, Brands: []string{"AllSaints", "Saint Laurent", "Helmut Lang", "Rick Owens"}, Silhouette: "slim, angular, layered with hardware", }, { Name: FashionCoastalCasual, Description: "Relaxed, sun-kissed looks inspired by beach and ocean lifestyles", KeyPieces: []string{"linen shorts", "striped tee", "espadrilles", "canvas tote"}, Brands: []string{"Outerknown", "Marine Layer", "Vilebrequin", "Solid & Striped"}, Silhouette: "relaxed, breezy, effortless", }, { Name: FashionUrbanProfessional, Description: "Sharp city-dweller style blending fashion and function", KeyPieces: []string{"tailored coat", "ankle boots", "structured handbag", "monochrome sets"}, Brands: []string{"Toteme", "Cos", "Sandro", "BOSS"}, Silhouette: "sleek, polished, statement outerwear", }, { Name: FashionFestivalGlam, Description: "Bold prints, glitter, and maximalist looks built for events", KeyPieces: []string{"crop top with sequins", "fringe jacket", "platform sandals", "body chains"}, Brands: []string{"House of CB", "PrettyLittleThing", "Fashion Nova", "Nasty Gal"}, Silhouette: "skin-baring, layered accessories, high visual impact", }, { Name: FashionPreppyClassic, Description: "Collegiate-inspired clean aesthetics with a polished finish", KeyPieces: []string{"polo shirt", "chino trousers", "boat shoes", "cable-knit sweater"}, Brands: []string{"Ralph Lauren", "Brooks Brothers", "Tommy Hilfiger", "Lacoste"}, Silhouette: "classic proportions, clean and put-together", }, { Name: FashionDarkAcademia, Description: "Literary and scholarly aesthetic with earth tones and vintage pieces", KeyPieces: []string{"tweed blazer", "turtleneck", "pleated skirt", "oxford shoes"}, Brands: []string{"Cordera", "Mango", "H&M Studio", "Massimo Dutti"}, Silhouette: "layered, traditional, intellectual", }, { Name: FashionCottagecore, Description: "Pastoral romanticism with floral prints, ruffles, and natural textures", KeyPieces: []string{"prairie dress", "puff-sleeve blouse", "wicker bag", "mary jane shoes"}, Brands: []string{"Doen", "For Love & Lemons", "Batsheva", "Emilia Wickstead"}, Silhouette: "loose, romantic, tiered or smocked", }, { Name: FashionY2KRevival, Description: "Early 2000s nostalgia with low-rise, butterfly prints, and metallics", KeyPieces: []string{"low-rise jeans", "halter top", "platform boots", "mini bag"}, Brands: []string{"Blumarine", "Diesel", "Juicy Couture", "Paris Hilton Collection"}, Silhouette: "crop tops with low-rise bottoms, skin-baring midriff", }, { Name: FashionLuxeLoungewear, Description: "Elevated comfort dressing in premium fabrics and tonal sets", KeyPieces: []string{"cashmere loungewear set", "silk slip", "fuzzy slides", "oversized cashmere cardigan"}, Brands: []string{"Skims", "Eberjey", "Brunello Cucinelli", "Leset"}, Silhouette: "relaxed but polished, tonal and monochromatic", }, } } // FashionContextFor returns the FashionContext definition for the given name. // Returns a zero-value FashionContext if the name is not found. func FashionContextFor(name FashionContextName) FashionContext { for _, fc := range AllFashionContexts() { if fc.Name == name { return fc } } return FashionContext{} } // AllFashionContextNames returns all 15 fashion context names. func AllFashionContextNames() []FashionContextName { all := AllFashionContexts() names := make([]FashionContextName, len(all)) for i, fc := range all { names[i] = fc.Name } return names }