From aa8a8ebdda8a7f8c8438a73cb5ce29a2e8031c43 Mon Sep 17 00:00:00 2001 From: Steve Simonson <144349219+SteveSimonson@users.noreply.github.com> Date: Thu, 30 Jul 2026 17:35:52 -0500 Subject: [PATCH 1/2] feat: Ada Zoppi founding legend + Chanel-voice storefront copy Canon origin story (Why page + docs/brand-origin.md + brand.ts), series labels without Campaign/Edit/Gen jargon, lux destination positioning for gift and self-treat, single footer affiliate disclosure. --- docs/brand-origin.md | 49 +++++++++ src/components/Layout.tsx | 32 +++--- src/components/MagazineFlip.tsx | 15 ++- src/components/ReelInsertCard.tsx | 15 ++- src/data/brand.ts | 33 ++++++ src/data/bsr-snapshot.json | 4 +- src/data/catalog.ts | 16 +-- src/data/categoryHeroes.ts | 2 +- src/data/magazine.ts | 22 ++-- src/data/products.bsr.generated.ts | 4 +- src/data/products.ts | 14 +-- src/data/quiz.ts | 4 +- src/data/vibes.ts | 114 ++++++++++---------- src/data/videoWatch.ts | 2 +- src/lib/seo.ts | 4 +- src/lib/seoData.ts | 30 +++--- src/pages/Home.tsx | 29 +++-- src/pages/Product.tsx | 19 ++-- src/pages/Quiz.tsx | 35 +++--- src/pages/Reels.tsx | 56 ++++------ src/pages/Shop.tsx | 6 +- src/pages/Vibe.tsx | 83 ++++++--------- src/pages/Watch.tsx | 35 +++--- src/pages/Why.tsx | 165 +++++++++++++++++++++-------- 24 files changed, 449 insertions(+), 339 deletions(-) create mode 100644 docs/brand-origin.md create mode 100644 src/data/brand.ts diff --git a/docs/brand-origin.md b/docs/brand-origin.md new file mode 100644 index 0000000..e7f1fab --- /dev/null +++ b/docs/brand-origin.md @@ -0,0 +1,49 @@ +# The Founding Legend of Adazo + +### Canon — Chapter One: The Alchemist's Atelier + +*As it has been told, in the Brianza hills north of Milan, for three hundred years.* + +--- + +In the summer of 1726, in a stone house at the edge of a hill town between Milan and the lake, a young woman named **Ada Zoppi** kept a small room off her family's kitchen where she mixed oils. + +The town knew her as a maker of remedies — lavender for sleepless children, calendula for a husband's burned hand, rosewater for the parish priest's headaches. This was ordinary work for a woman of her station. What made the room behind the kitchen different was that Ada did not mix for cure. She mixed for beauty, and she did it in secret, because in 1726 there was no respectable word yet for what she was doing. + +The legend says it began the night before her cousin Elisabetta's wedding. + +Elisabetta had spent the day weeping — not from joy, but from the particular grief of a plain girl watching herself in a borrowed mirror, certain the morning would arrive and find her unchanged. Ada took her cousin's face in her hands the way she'd seen her own grandmother do, and told her something that would outlive both of them: *"La bellezza non si insegna. Si tramanda."* — **Beauty is not taught. It is passed down.** + +Then she went to her room off the kitchen and, by lamplight, built a balm meant for exactly one purpose: to make a nervous girl believe, for one morning, that she had always been beautiful. Olive oil pressed from her own family's trees. Orris root, dried since spring. Bergamot rind, bitter and bright. A crushed thread of rose that had bloomed against the church wall. She warmed it slowly, the way you'd coax something shy into the open, and she gave it to Elisabetta before dawn. + +What happened at that wedding is the part the family still argues about. What's certain is that within the year, women were arriving at Ada's door who had no remedy to seek — only a face they wanted to meet differently. She began keeping a ledger, not of sales, but of formulas: what she'd used, for whom, and why. Bound in dark leather, it became known simply as **il libro** — the book — and it would be added to by daughters and grand-daughters for the next three centuries. Nothing in it was ever published. Everything in it was eventually inherited. + +It was Ada's own name, shortened by neighbors the way small towns shorten everything, that gave the house its mark. *Ada-zo* — "Ada's," in the clipped dialect of the hills — became, over generations, simply **Adazo**. The family adopted a small emblem for the book's cover not long after: a sun resting low over an olive branch, the two shapes together forming the rough outline of an **A**. It has marked every formula since. + +By the time Ada was an old woman, she had stopped mixing balms for weddings and started mixing them for something closer to inheritance — a mother would come not for herself, but to learn, so that one day she could stand where Ada stood and hand something down instead of merely applying it. This was the true founding act of the house: not a product, but a transmission. Adazo was never meant to be bought once. It was meant to be *passed on*. + +--- + +**Three hundred years later**, the room off the kitchen is gone, the hill town has grown into something closer to a suburb of Milan, and Ada Zoppi exists mostly as a name in a book no camera has ever photographed in full. But the sun-and-olive mark still opens every formula. The motto is still whispered, if only in the copy. And somewhere in every Adazo product is the same original instruction Ada gave her cousin before a wedding three centuries ago: *not* to look different — to finally recognize the face that was always there. + +--- + +## Canon Reference + +| Element | Canon Detail | +|---------|----------------| +| Founding matriarch | Ada Zoppi | +| Founding year | 1726 | +| Location | A hill town in the Brianza hills, between Milan and the lake | +| Origin object | *Il libro* — the leather-bound formula book | +| Naming myth | "Ada-zo" (dialect for "Ada's") → Adazo | +| House motto | *"La bellezza non si insegna. Si tramanda."* | +| Emblem | Sun over an olive branch, forming the shape of an "A" | +| Founding act | The wedding balm for cousin Elisabetta | +| Core brand idea | Beauty as inheritance/transmission, not correction | + +## Voice (Chanel energy) + +Write as if certainty were fashion: short, cool, decisive. Prefer inheritance over hype. No technical product-pipeline language on the storefront (*Edit series*, *gen 2*, *Amazon insert*, *BSR*, *Campaign*). One affiliate disclosure lives in the footer only. + +The house is luxury for treating yourself — or for the woman you love. diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 908b5e5..aa751c0 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -3,6 +3,7 @@ import { Menu, X } from 'lucide-react' import { useState } from 'react' import { formatExpiry, limitedTimeCopy } from '../data/catalog' import { VIBE_LIST, vibePath } from '../data/vibes' +import { BRAND } from '../data/brand' import { GlobalSeo } from './Seo' /** Lean primary nav — categories live on /shop, not the header. */ @@ -34,12 +35,12 @@ export function Layout() { to="/shop?limited=1" className="hover:underline underline-offset-2" > - Limited-time options - {limited.count > 0 ? ` · ${limited.count} this week` : ''} - {until ? ` · Refresh ${until}` : ''} + This week’s selection + {limited.count > 0 ? ` · ${limited.count} pieces` : ''} + {until ? ` · Until ${until}` : ''} {' '} - · Shop on Adazo · Buy on Amazon + · {BRAND.mottoEn} @@ -118,7 +119,7 @@ export function Layout() { className="block px-3 py-2.5 rounded-xl font-semibold text-ink hover:bg-paper-2" onClick={() => setOpen(false)} > - Product reels + Films

Adazo

- Curated Amazon Best Sellers and concern-first routines for women’s - health and beauty. Discover here. Buy on Amazon. + {BRAND.footerBlurb} +

+

+ {BRAND.mark}

-

Explore

+

The house

-

Vibes

+

Personas

- As an Amazon Associate, Adazo earns from qualifying purchases. - Prices and availability are set by Amazon and may change. + {BRAND.affiliateDisclosure}

- © {new Date().getFullYear()} Adazo · adazo.com + © {new Date().getFullYear()} Adazo · Since {BRAND.founded} · adazo.com
diff --git a/src/components/MagazineFlip.tsx b/src/components/MagazineFlip.tsx index 4e98bfe..52cc84f 100644 --- a/src/components/MagazineFlip.tsx +++ b/src/components/MagazineFlip.tsx @@ -171,12 +171,11 @@ export function MagazineFlip({ The House Book

- Flip the fashion edit + The house book

- House campaigns, world travel, wild on-location, and red-carpet - glamour — every Adazo model, one magazine. Use the arrows or - swipe. + The atelier, abroad, the wild, the carpet — every house face, one + volume. Use the arrows or swipe.

@@ -381,13 +380,13 @@ function PageFace({ page }: { page: MagazinePage }) {

{page.series === 'house' && - 'Primary fashion campaigns of the Adazo house models.'} + 'The faces you return to — the house, season after season.'} {page.series === 'world' && - 'Travel editorials — destinations that finish the look.'} + 'New cities. The same quiet authority.'} {page.series === 'wild' && - 'On location with exotic animals. Pure fashion energy.'} + 'Beauty that holds when the ground is uneven.'} {page.series === 'carpet' && - 'Oscars & Cannes energy — red-carpet glamour, flash, and finish.'} + 'Night light, jewels free, the room already hers.'}

) diff --git a/src/components/ReelInsertCard.tsx b/src/components/ReelInsertCard.tsx index 6e4a47f..7659f32 100644 --- a/src/components/ReelInsertCard.tsx +++ b/src/components/ReelInsertCard.tsx @@ -5,8 +5,8 @@ import type { CategoryReel } from '../data/reels' import { trackEvent } from '../lib/analytics' /** - * Amazon-insert-sized fashion tile (same 4:5 well as ProductCard). - * Muted autoplay when in view; links to the cross-promoted shop category. + * Fashion film tile in product grids (same 4:5 well as ProductCard). + * Muted autoplay when in view; links to the related shop category. */ export function ReelInsertCard({ reel, @@ -62,7 +62,7 @@ export function ReelInsertCard({ loop playsInline preload="metadata" - aria-label={`${reel.title} fashion reel: ${reel.motionLabel}`} + aria-label={`${reel.title} film: ${reel.motionLabel}`} />
@@ -70,9 +70,6 @@ export function ReelInsertCard({ Discover - - G{reel.generation} - @@ -90,7 +87,7 @@ export function ReelInsertCard({ className={`flex flex-col flex-1 ${compact ? 'p-3.5 gap-1' : 'p-4 gap-1.5'}`} >

- Cross the edit + From the house

- Browse category + Open the room - Open + Shop

diff --git a/src/data/brand.ts b/src/data/brand.ts new file mode 100644 index 0000000..86fab50 --- /dev/null +++ b/src/data/brand.ts @@ -0,0 +1,33 @@ +/** + * Adazo brand canon — founding legend & voice. + * Full narrative: docs/brand-origin.md + */ + +export const BRAND = { + name: 'Adazo', + founder: 'Ada Zoppi', + founded: 1726, + place: 'the Brianza hills north of Milan', + mottoIt: 'La bellezza non si insegna. Si tramanda.', + mottoEn: 'Beauty is not taught. It is passed down.', + /** Short mark line for UI */ + mark: 'Since 1726', + tagline: 'Beauty is not taught. It is passed down.', + /** One-line site positioning */ + promise: + 'Luxury for treating yourself — or for the woman you love.', + /** Footer / about blurb */ + footerBlurb: + 'Since 1726, beauty as inheritance. Discover the house here; complete your purchase on Amazon.', + affiliateDisclosure: + 'As an Amazon Associate, Adazo earns from qualifying purchases. Prices and availability are set by Amazon and may change.', +} as const + +/** Elegant series names — never show technical “Edit / Campaign / Gen” labels. */ +export const SERIES_LABELS = { + house: { title: 'The Atelier', kicker: 'Volume I · The house' }, + world: { title: 'Abroad', kicker: 'Volume II · Travel' }, + wild: { title: 'The Wild', kicker: 'Volume III · On location' }, + carpet: { title: 'The Carpet', kicker: 'Volume IV · Night light' }, + cafe: { title: 'The Café', kicker: 'Volume V · Daylight' }, +} as const diff --git a/src/data/bsr-snapshot.json b/src/data/bsr-snapshot.json index 6d74f0a..8e88a0f 100644 --- a/src/data/bsr-snapshot.json +++ b/src/data/bsr-snapshot.json @@ -3,8 +3,8 @@ "fetchedAt": "", "expiresAt": "", "marketing": { - "headline": "OPTIONS ONLY AVAILABLE FOR A LIMITED TIME", - "subhead": "This week's women's beauty edit — Amazon Best Sellers curated for Adazo. Lists refresh weekly.", + "headline": "FOR A LIMITED TIME ONLY", + "subhead": "A short selection of what the house is wearing now. It will not last.", "refreshCadence": "weekly" }, "products": [] diff --git a/src/data/catalog.ts b/src/data/catalog.ts index cc63cc7..2b8ebca 100644 --- a/src/data/catalog.ts +++ b/src/data/catalog.ts @@ -153,27 +153,27 @@ export const collections = Array.from( function collectionBlurb(label: string): string { const map: Record = { 'Luxury Beauty': - 'Prestige skincare and makeup — highest Associates commission tier (~10%).', - Fragrance: 'Perfume and fine fragrance with gift-ready AOV.', + 'Prestige skincare and makeup — weighty jars, considered formulas, the top shelf.', + Fragrance: 'Perfume and fine fragrance — the trail that arrives first.', Skincare: 'Cleansers, serums, moisturizers, and barrier care.', Hair: 'Treatments, oils, and refresh essentials.', Makeup: 'Everyday color and finish staples.', Body: 'Lotions, mists, and body care rituals.', - Tools: 'Stylers, dryers, and high-utility devices.', + Tools: 'Stylers, dryers, and devices that earn their place.', SPF: 'Daily sun protection that wears well under makeup.', Wellness: 'Collagen and beauty-adjacent wellness picks.', Lips: 'Masks, balms, and soft-finish lip care.', Jewelry: 'Fine jewelry $1,000+ — diamonds, designer, pre-loved polish.', - Handbags: 'Designer luxury handbags — big-ticket fashion finish.', + Handbags: 'Designer handbags — the piece that finishes the exit.', 'Luxury Handbags': - 'Designer luxury handbags from Amazon ($900+ focus) — LV, Gucci, Prada, and more.', + 'Designer handbags — LV, Gucci, Prada, and more. Big-ticket fashion finish.', 'Luxury Jewelry': - 'Fine and designer jewelry $1,000+ — Cartier, Tiffany, diamonds, and more.', + 'Fine and designer jewelry $1,000+ — diamonds, polish, quiet authority.', 'Luxury Watches': 'Luxury watches $1,000+ — Swiss and designer timepieces.', - Gold: 'Solid gold jewelry $500+ — chains, bands, and fine gold polish.', + Gold: 'Solid gold jewelry $500+ — chains, bands, and weight you can feel.', } - return map[label] ?? 'Curated women\'s health and beauty for real routines.' + return map[label] ?? 'Curated for the vanity and the gift box.' } export function getProduct(slug: string): Product | undefined { diff --git a/src/data/categoryHeroes.ts b/src/data/categoryHeroes.ts index c2c1bce..82e7d62 100644 --- a/src/data/categoryHeroes.ts +++ b/src/data/categoryHeroes.ts @@ -75,7 +75,7 @@ export const HEROES: Record = { luxury: { title: 'Luxury Beauty', blurb: - 'Prestige skincare and makeup — the highest Amazon Associates commission tier (~10%).', + 'Prestige on the vanity — weighty jars, considered formulas, the quiet of the top shelf.', image: '/brand/categories/luxury.jpg', objectPosition: 'center 40%', alt: 'Prestige cream jars on a champagne marble vanity', diff --git a/src/data/magazine.ts b/src/data/magazine.ts index 020c455..b01b7e2 100644 --- a/src/data/magazine.ts +++ b/src/data/magazine.ts @@ -20,26 +20,26 @@ export type MagazinePage = { function seriesOf(campaign: VibeCampaign): MagazineSeries | null { const s = campaign.season.toLowerCase() - // Café Edit is 16:9 lifestyle film — not a still magazine spread + // Café films are 16:9 lifestyle — not still magazine spreads if (s.includes('café') || s.includes('cafe')) return null if (s.includes('carpet') || s.includes('oscar') || s.includes('cannes')) { return 'carpet' } if (s.includes('wild')) return 'wild' - if (s.includes('world')) return 'world' + if (s.includes('world') || s.includes('abroad')) return 'world' return 'house' } function seriesLabel(series: MagazineSeries): { title: string; kicker: string } { switch (series) { case 'house': - return { title: 'House Campaign', kicker: 'Volume One · Fashion finish' } + return { title: 'The Atelier', kicker: 'Volume I · The house' } case 'world': - return { title: 'World Edit', kicker: 'Volume Two · Travel' } + return { title: 'Abroad', kicker: 'Volume II · Travel' } case 'wild': - return { title: 'Wild Edit', kicker: 'Volume Three · On location' } + return { title: 'The Wild', kicker: 'Volume III · On location' } case 'carpet': - return { title: 'Carpet Edit', kicker: 'Volume Four · Red carpet' } + return { title: 'The Carpet', kicker: 'Volume IV · Night light' } } } @@ -50,7 +50,7 @@ export function buildMagazinePages(): MagazinePage[] { id: 'cover', kind: 'cover', title: 'ADAZO', - kicker: 'The House Book · Fashion Destination', + kicker: 'The House Book · Since 1726', }, ] @@ -113,8 +113,8 @@ export const MAGAZINE_SERIES_FILTERS: { label: string }[] = [ { id: 'all', label: 'Full issue' }, - { id: 'house', label: 'House' }, - { id: 'world', label: 'World' }, - { id: 'wild', label: 'Wild' }, - { id: 'carpet', label: 'Carpet' }, + { id: 'house', label: 'The Atelier' }, + { id: 'world', label: 'Abroad' }, + { id: 'wild', label: 'The Wild' }, + { id: 'carpet', label: 'The Carpet' }, ] diff --git a/src/data/products.bsr.generated.ts b/src/data/products.bsr.generated.ts index 88815d2..d16b927 100644 --- a/src/data/products.bsr.generated.ts +++ b/src/data/products.bsr.generated.ts @@ -9,9 +9,9 @@ export const bsrWeekOf = '' as const export const bsrFetchedAt = '' as const export const bsrExpiresAt = '' as const export const bsrMarketing = { - headline: 'OPTIONS ONLY AVAILABLE FOR A LIMITED TIME', + headline: 'FOR A LIMITED TIME ONLY', subhead: - "This week's women's beauty edit — Amazon Best Sellers curated for Adazo. Lists refresh weekly.", + "A short selection of what the house is wearing now. It will not last.", refreshCadence: 'weekly', } as const diff --git a/src/data/products.ts b/src/data/products.ts index bbfc625..f4ae881 100644 --- a/src/data/products.ts +++ b/src/data/products.ts @@ -574,7 +574,7 @@ export const products: Product[] = [ features: [ 'Dryer + volumizer in one', 'Everyday styling tool', - 'Strong Amazon demand category', + 'High-demand house pick', ], specs: [ { label: 'Type', value: 'Hot air brush' }, @@ -753,7 +753,7 @@ export const products: Product[] = [ features: [ 'Rich cream texture', 'Dewy finish', - 'Luxury Beauty commission tier (~10%)', + 'Prestige beauty — top-shelf selection', ], specs: [ { label: 'Skin type', value: 'Dry / dehydrated' }, @@ -790,7 +790,7 @@ export const products: Product[] = [ features: [ 'Prestige treatment essence', 'High-AOV luxury skincare', - 'Luxury Beauty commission tier (~10%)', + 'Prestige beauty — top-shelf selection', ], specs: [ { label: 'Step', value: 'Essence / treatment' }, @@ -826,7 +826,7 @@ export const products: Product[] = [ features: [ 'Prestige moisturizer', 'Peptide-focused formula story', - 'Luxury Beauty commission tier (~10%)', + 'Prestige beauty — top-shelf selection', ], specs: [ { label: 'Type', value: 'Face cream' }, @@ -862,7 +862,7 @@ export const products: Product[] = [ features: [ 'Prestige lipstick', 'High-demand shade story', - 'Luxury Beauty commission tier (~10%)', + 'Prestige beauty — top-shelf selection', ], specs: [ { label: 'Finish', value: 'Matte' }, @@ -898,7 +898,7 @@ export const products: Product[] = [ features: [ 'Ultra-prestige moisturizer', 'Very high AOV', - 'Luxury Beauty commission tier (~10%)', + 'Prestige beauty — top-shelf selection', ], specs: [ { label: 'Tier', value: 'Prestige / Luxury Beauty' }, @@ -934,7 +934,7 @@ export const products: Product[] = [ features: [ 'Prestige women\'s fragrance', 'High gift AOV', - 'Often Luxury Beauty commission adjacency', + 'Prestige fragrance selection', ], specs: [ { label: 'Concentration', value: 'Eau de Parfum' }, diff --git a/src/data/quiz.ts b/src/data/quiz.ts index a534ed6..05fea27 100644 --- a/src/data/quiz.ts +++ b/src/data/quiz.ts @@ -435,7 +435,7 @@ export const PERSONAS: Record = { title: 'The Soft Glam Muse', tagline: 'Color, light, and confidence in the mirror.', story: - 'Getting ready is a ritual worth dressing for. You want lips, flush, and finish that photograph expensive — polished, never costume. Adazo curates the soft glam edit; Amazon completes the cart.', + 'Getting ready is a ritual worth dressing for. You want lips, flush, and finish that photograph expensive — polished, never costume. Discover the soft glam selection here; complete your purchase on Amazon.', categories: ['makeup', 'lips', 'luxury'], accent: '#b76e79', }, @@ -453,7 +453,7 @@ export const PERSONAS: Record = { title: 'The Fashion Finisher', tagline: 'Bags, gold, the last perfect piece.', story: - 'Beauty alone isn’t the look — the finish is. You shop Adazo for handbags and jewelry that complete the glow: structure, light, silhouette. Fashion energy with beauty-editor taste.', + 'Beauty alone isn’t the look — the finish is. Handbags and jewelry that complete the glow: structure, light, silhouette. Fashion energy with a collector’s eye.', categories: ['handbags', 'jewelry', 'fragrance'], accent: '#5c3a2e', }, diff --git a/src/data/vibes.ts b/src/data/vibes.ts index 5be0965..b248220 100644 --- a/src/data/vibes.ts +++ b/src/data/vibes.ts @@ -98,7 +98,7 @@ export const VIBES: Record = { 'You spot the piece that photographs expensive before it leaves the shelf — cream, serum, or set.', }, { - name: 'Gallery Edit', + name: 'Gallery Light', detail: 'Fewer products, higher stakes. Every bottle earns permanent vanity real estate.', }, @@ -141,7 +141,7 @@ export const VIBES: Record = { campaigns: [ { title: 'Soft Power', - season: 'House Campaign · Prestige', + season: 'The Atelier · Prestige', concept: 'Full-length quiet-luxury editorial — ivory silk column gown and champagne cape on a grand marble hotel staircase at dusk. Pose: standing, hand on rail.', direction: @@ -151,48 +151,48 @@ export const VIBES: Record = { }, { title: 'Paris at Dusk', - season: 'World Edit · Travel', + season: 'Abroad', destination: 'Paris', concept: 'Travel editorial — charcoal wool coat, crimson gloves, looking back while walking the Seine quay at blue hour. Not cream; not a static frontal coat portrait.', direction: 'World Edit. Face locked to Vivienne. Distinct from Soft Power gown (color, silhouette, motion).', image: '/brand/vibes/portfolio/luxe-paris-v2.jpg', - alt: 'ADAZO World Edit — Vivienne in a charcoal coat with red gloves on the Seine', + alt: 'ADAZO Abroad — Vivienne in a charcoal coat with red gloves on the Seine', }, { title: 'Savanna Light', - season: 'Wild Edit · On Location', + season: 'The Wild', destination: 'Botswana', concept: 'Luxury safari editorial — seated on an open vehicle in ochre silk jumpsuit, gold jewelry, elephants in the golden savanna beyond.', direction: 'Wild Edit. Face locked to Vivienne. Pose seated-on-vehicle (not stairs stand, not Seine walk); wardrobe ochre jumpsuit (not ivory gown, not charcoal coat).', image: '/brand/vibes/portfolio/luxe-wild-safari.jpg', - alt: 'ADAZO Wild Edit — Vivienne on safari with elephants in Botswana', + alt: 'ADAZO The Wild — Vivienne on safari with elephants in Botswana', }, { title: 'Black Diamond Night', - season: 'Carpet Edit · Red carpet', + season: 'The Carpet', destination: 'Oscar Night', concept: 'Red-carpet wave — midnight black crystal column gown, paparazzi flash, premiere energy outside the theater.', direction: 'Carpet Edit. Face locked to Vivienne. Hip-weight wave (not stairs gown, Seine walk, or safari seat); black crystal gown (not ivory/ochre/charcoal).', image: '/brand/vibes/portfolio/vivienne-oscars.jpg', - alt: 'ADAZO Carpet Edit — Vivienne waving on the Oscars red carpet in black crystal', + alt: 'ADAZO The Carpet — Vivienne waving on the Oscars red carpet in black crystal', video: '/brand/videos/luxe-carpet-premiere.mp4', }, { title: 'Saint-Germain Morning', - season: 'Café Edit · Lifestyle film', + season: 'The Café', destination: 'Paris', concept: 'Upscale café terrace ritual — cream cashmere, cappuccino, prestige jar and perfume on marble. Quiet luxe in soft morning light.', direction: 'Café Edit lifestyle film. Face locked to Vivienne. Seated terrace three-quarter (not stairs gown, Seine walk, safari seat, or carpet wave); cream cashmere (not ivory gown / charcoal / ochre / black crystal).', image: '/brand/videos/cafe/posters/luxe-paris-cafe.jpg', - alt: 'ADAZO Café Edit — Vivienne at a Paris café terrace with cappuccino and prestige beauty', + alt: 'ADAZO The Café — Vivienne at a Paris café terrace with cappuccino and prestige beauty', video: '/brand/videos/cafe/luxe-paris-cafe.mp4', }, ], @@ -282,7 +282,7 @@ export const VIBES: Record = { campaigns: [ { title: 'Mirror First', - season: 'House Campaign · Soft Glam', + season: 'The Atelier · Soft Glam', concept: 'Bold beauty fashion studio — rose satin cocktail dress on seamless cherry-red paper, hero lip and hand-in-hair cover pose.', direction: @@ -292,48 +292,48 @@ export const VIBES: Record = { }, { title: 'Tokyo Nights', - season: 'World Edit · Travel', + season: 'Abroad', destination: 'Tokyo', concept: 'Night-city travel editorial — fuchsia trench over black satin mini, neon Shinjuku alley, cosmopolitan soft glam on the move.', direction: 'Fashionista-inspired world-travel campaign. Face locked to Camille — destination nightlife energy.', image: '/brand/vibes/portfolio/muse-travel-tokyo.jpg', - alt: 'ADAZO World Edit — Camille in Tokyo nights fashion street style', + alt: 'ADAZO Abroad — Camille in Tokyo nights fashion street style', }, { title: 'Palace Peacocks', - season: 'Wild Edit · On Location', + season: 'The Wild', destination: 'Rajasthan', concept: 'Kneeling palace-courtyard editorial — emerald silk with gold border, loose waves, peacocks in a sandstone Rajasthan courtyard.', direction: 'Wild Edit. Face locked to Camille. Kneeling (not vanity, studio hand-in-hair, or Tokyo walk); emerald sari-inspired gown (not rose/fuchsia/black mini).', image: '/brand/vibes/portfolio/camille-peacocks.jpg', - alt: 'ADAZO Wild Edit — Camille kneeling in emerald silk with peacocks in Rajasthan', + alt: 'ADAZO The Wild — Camille kneeling in emerald silk with peacocks in Rajasthan', }, { title: 'Silver Palais', - season: 'Carpet Edit · Red carpet', + season: 'The Carpet', destination: 'Cannes', concept: 'Cannes red-carpet stairs — liquid silver mermaid gown, crystal clutch, looking up into festival flash.', direction: 'Carpet Edit. Face locked to Camille. Stair three-quarter look-up (not vanity, studio hand-in-hair, Tokyo walk, or peacock kneel); silver gown (not rose/fuchsia/emerald).', image: '/brand/vibes/portfolio/camille-cannes.jpg', - alt: 'ADAZO Carpet Edit — Camille in silver on the Cannes red carpet stairs', + alt: 'ADAZO The Carpet — Camille in silver on the Cannes red carpet stairs', video: '/brand/videos/muse-carpet-premiere.mp4', }, { title: 'Lantern Matcha', - season: 'Café Edit · Lifestyle film', + season: 'The Café', destination: 'Tokyo', concept: 'Modern Tokyo café — soft glam, warm lanterns, matcha latte, lipstick and compact on the wood table. Mirror energy after dark.', direction: 'Café Edit lifestyle film. Face locked to Camille. Seated café portrait (not vanity, Tokyo street walk, peacock kneel, or Cannes stairs); blush satin (not silver gown).', image: '/brand/videos/cafe/posters/muse-tokyo-cafe.jpg', - alt: 'ADAZO Café Edit — Camille in a Tokyo café with matcha and soft glam makeup', + alt: 'ADAZO The Café — Camille in a Tokyo café with matcha and soft glam makeup', video: '/brand/videos/cafe/muse-tokyo-cafe.mp4', }, ], @@ -423,7 +423,7 @@ export const VIBES: Record = { campaigns: [ { title: 'The Trail', - season: 'House Campaign · Fragrance', + season: 'The Atelier · Fragrance', concept: 'Night rooftop fashion editorial — black evening jumpsuit, sheer violet organza coat, city skyline bokeh. No product — pure atmosphere.', direction: @@ -433,48 +433,48 @@ export const VIBES: Record = { }, { title: 'Marrakech Gold', - season: 'World Edit · Travel', + season: 'Abroad', destination: 'Marrakech', concept: 'Riad courtyard at golden hour — flowing black-and-violet silk with gold embroidery, lantern light, scent-of-place without a bottle.', direction: 'Fashionista-inspired world-travel campaign. Face locked to Noor — trail that travels.', image: '/brand/vibes/portfolio/noor-marrakech.jpg', - alt: 'ADAZO World Edit — Noor in a Marrakech riad at golden hour', + alt: 'ADAZO Abroad — Noor in a Marrakech riad at golden hour', }, { title: 'Desert Falcon', - season: 'Wild Edit · On Location', + season: 'The Wild', destination: 'Empty Quarter', concept: 'Desert falconry editorial — ruby coat in dune wind, falcon on glove under dramatic sky. Trail as atmosphere and power.', direction: 'Wild Edit. Face locked to Noor. Profile-with-falcon (not perfume mist, rooftop walk, or Marrakech standing kaftan); ruby coat (not black/violet).', image: '/brand/vibes/portfolio/sillage-wild-falcon.jpg', - alt: 'ADAZO Wild Edit — Noor with a falcon in the desert dunes', + alt: 'ADAZO The Wild — Noor with a falcon in the desert dunes', }, { title: 'Sapphire Arrival', - season: 'Carpet Edit · Red carpet', + season: 'The Carpet', destination: 'Premiere', concept: 'Arrivals moment — seated in an open limousine door on the red carpet, royal sapphire satin and diamond-sapphire jewels.', direction: 'Carpet Edit. Face locked to Noor. Car-door seated arrival (not perfume mist, rooftop walk, Marrakech stand, or falcon profile); sapphire gown (not black/violet/ruby).', image: '/brand/vibes/portfolio/sillage-carpet-arrival.jpg', - alt: 'ADAZO Carpet Edit — Noor arriving in sapphire satin from a black car', + alt: 'ADAZO The Carpet — Noor arriving in sapphire satin from a black car', video: '/brand/videos/sillage-carpet-premiere.mp4', }, { title: 'Riad Courtyard Scent', - season: 'Café Edit · Lifestyle film', + season: 'The Café', destination: 'Marrakech', concept: 'Riad courtyard café — citrus trees, zellige, mint tea, crystal perfume bottle. Signature trail in amber light.', direction: 'Café Edit lifestyle film. Face locked to Noor. Seated courtyard table (not perfume mist house, Marrakech stand, falcon profile, or car-door arrival); black silk (not sapphire gown).', image: '/brand/videos/cafe/posters/sillage-marrakech-cafe.jpg', - alt: 'ADAZO Café Edit — Noor at a Marrakech riad café with perfume and mint tea', + alt: 'ADAZO The Café — Noor at a Marrakech riad café with perfume and mint tea', video: '/brand/videos/cafe/sillage-marrakech-cafe.mp4', }, ], @@ -503,7 +503,7 @@ export const VIBES: Record = { atelier: { ...PERSONAS.atelier, typeLabel: 'Fashion · Finish', - rarity: 'Runway Edit', + rarity: 'Runway Presence', emoji: '👜', flavor: 'Beauty alone isn’t the look — the finish is. Bags, gold, silhouette: the last piece that makes everything land.', @@ -564,7 +564,7 @@ export const VIBES: Record = { campaigns: [ { title: 'The Finish', - season: 'House Campaign · Fashion', + season: 'The Atelier · Fashion', concept: 'Museum power editorial — black sculptural one-shoulder gown, standing profile looking over shoulder, gold architecture cuff. Not a walking suit.', direction: @@ -574,48 +574,48 @@ export const VIBES: Record = { }, { title: 'Milan Caffè', - season: 'World Edit · Travel', + season: 'Abroad', destination: 'Milan', concept: 'Seated café editorial at the Duomo — ivory trench, crossed legs, espresso and sunglasses, looking off-camera. Not walking, not a pantsuit.', direction: 'World Edit. Face locked to Margot. Completely different pose and wardrobe from house gown and control closet blazer.', image: '/brand/vibes/portfolio/atelier-milan-v2.jpg', - alt: 'ADAZO World Edit — Margot seated at a Milan café in an ivory trench', + alt: 'ADAZO Abroad — Margot seated at a Milan café in an ivory trench', }, { title: 'White Horse', - season: 'Wild Edit · On Location', + season: 'The Wild', destination: 'Andalucía', concept: 'Andalusian ranch editorial — standing with a white horse, hand on its neck, burgundy velvet riding jacket and tall boots.', direction: 'Wild Edit. Face locked to Margot. Horse-side stand (not closet blazer, museum look-back gown, or café seat); burgundy riding (not black gown or ivory trench).', image: '/brand/vibes/portfolio/atelier-wild-andalucia.jpg', - alt: 'ADAZO Wild Edit — Margot with a white Andalusian horse', + alt: 'ADAZO The Wild — Margot with a white Andalusian horse', }, { title: 'Gold Train', - season: 'Carpet Edit · Red carpet', + season: 'The Carpet', destination: 'Oscar Night', concept: 'Full red-carpet walk toward camera — champagne-gold sequin gown with dramatic train and diamond earrings.', direction: 'Carpet Edit. Face locked to Margot. Train walk into lens (not closet blazer, museum look-back, café seat, or horse stand); gold sequin gown (not black/ivory/burgundy).', image: '/brand/vibes/portfolio/atelier-carpet-walk.jpg', - alt: 'ADAZO Carpet Edit — Margot walking the Oscars carpet in gold sequins', + alt: 'ADAZO The Carpet — Margot walking the Oscars carpet in gold sequins', video: '/brand/videos/atelier-carpet-premiere.mp4', }, { title: 'Galleria Espresso', - season: 'Café Edit · Lifestyle film', + season: 'The Café', destination: 'Milan', concept: 'Design-district café — structured blazer, gold hoops, espresso, architecture bag on the chair. The finish, mid-edit.', direction: 'Café Edit lifestyle film. Face locked to Margot. Seated leather chair with bag (not closet blazer control, museum look-back, horse stand, or carpet train walk); chocolate suit (not gold sequin gown).', image: '/brand/videos/cafe/posters/atelier-milan-cafe.jpg', - alt: 'ADAZO Café Edit — Margot in a Milan café with espresso and structured bag', + alt: 'ADAZO The Café — Margot in a Milan café with espresso and structured bag', video: '/brand/videos/cafe/atelier-milan-cafe.mp4', }, ], @@ -705,7 +705,7 @@ export const VIBES: Record = { campaigns: [ { title: 'Barrier First', - season: 'House Campaign · Glow', + season: 'The Atelier · Glow', concept: 'Seated greenhouse editorial — sage silk slip dress, hair fully down, low among tropical plants. Not white linen; not standing tourist three-quarter.', direction: @@ -715,48 +715,48 @@ export const VIBES: Record = { }, { title: 'Santorini Light', - season: 'World Edit · Travel', + season: 'Abroad', destination: 'Santorini', concept: 'Standing caldera travel editorial — white linen dress, straw hat in hand, blue domes and sea. Standing vs house seated; white vs sage.', direction: 'World Edit. Face locked to Isla. Must stay opposite house (standing + white vs seated + sage).', image: '/brand/vibes/portfolio/dew-travel-santorini.jpg', - alt: 'ADAZO World Edit — Isla in Santorini white linen overlooking the caldera', + alt: 'ADAZO Abroad — Isla in Santorini white linen overlooking the caldera', }, { title: 'Lagoon Flock', - season: 'Wild Edit · On Location', + season: 'The Wild', destination: 'Yucatán', concept: 'Standing knee-deep in a turquoise lagoon at sunrise — coral maxi dress, windblown hair, pink flamingos behind her.', direction: 'Wild Edit. Face locked to Isla. In-water look-back (not spa close-up, seated sage slip, or Santorini white stand); coral maxi (not white/sage).', image: '/brand/vibes/portfolio/dew-wild-flamingos.jpg', - alt: 'ADAZO Wild Edit — Isla in a coral dress among flamingos in the Yucatán', + alt: 'ADAZO The Wild — Isla in a coral dress among flamingos in the Yucatán', }, { title: 'Blush Organza', - season: 'Carpet Edit · Red carpet', + season: 'The Carpet', destination: 'Premiere', concept: 'Seated on red-carpet steps — blush organza ball gown, polished updo, soft over-shoulder glamour.', direction: 'Carpet Edit. Face locked to Isla. Seated step over-shoulder (not spa, greenhouse sage, Santorini stand, or lagoon coral); blush organza (not white/sage/coral).', image: '/brand/vibes/portfolio/dew-carpet-blush.jpg', - alt: 'ADAZO Carpet Edit — Isla in blush organza on red carpet steps', + alt: 'ADAZO The Carpet — Isla in blush organza on red carpet steps', video: '/brand/videos/dew-carpet-premiere.mp4', }, { title: 'Nordic Glow Hour', - season: 'Café Edit · Lifestyle film', + season: 'The Café', destination: 'Copenhagen', concept: 'Bright Scandinavian café — cashmere, herbal tea, jade roller and barrier care on pale oak. Glow as a calm public ritual.', direction: 'Café Edit lifestyle film. Face locked to Isla. Seated café with roller (not spa control, Santorini stand, lagoon coral, or carpet step seat); oatmeal knit (not blush organza).', image: '/brand/videos/cafe/posters/dew-copenhagen-cafe.jpg', - alt: 'ADAZO Café Edit — Isla in a Copenhagen café with skincare and jade roller', + alt: 'ADAZO The Café — Isla in a Copenhagen café with skincare and jade roller', video: '/brand/videos/cafe/dew-copenhagen-cafe.mp4', }, ], @@ -808,7 +808,7 @@ export const VIBES: Record = { 'You know how to stack a present that feels like a private showroom visit.', }, { - name: 'Spectrum Edit', + name: 'Spectrum Light', detail: 'Luxury beauty, fragrance, handbags, jewelry — you let curation do the hard work.', }, @@ -846,7 +846,7 @@ export const VIBES: Record = { campaigns: [ { title: 'Private Showroom', - season: 'House Campaign · Collector', + season: 'The Atelier · Collector', concept: 'Opera staircase editorial — sleeveless liquid bronze gown, opera gloves, hand on gold rail, looking up. Static grandeur.', direction: @@ -856,48 +856,48 @@ export const VIBES: Record = { }, { title: 'Venice Grand Tour', - season: 'World Edit · Travel', + season: 'Abroad', destination: 'Venice', concept: 'Walking a foggy Venice calle at blue hour — black velvet coat, gold buttons, champagne blouse, clutch. Not bronze gown; not static stairs.', direction: 'World Edit. Face locked to Aurelia. Black velvet motion vs house bronze static gown.', image: '/brand/vibes/portfolio/gilded-venice-v2.jpg', - alt: 'ADAZO World Edit — Aurelia walking a Venice alley in a black velvet coat', + alt: 'ADAZO Abroad — Aurelia walking a Venice alley in a black velvet coat', }, { title: 'White Peacock', - season: 'Wild Edit · On Location', + season: 'The Wild', destination: 'Jaipur', concept: 'Seated palace-terrace editorial — emerald velvet jacket, gold trousers, dramatic emerald jewelry, white peacock beside her.', direction: 'Wild Edit. Face locked to Aurelia. Seated terrace with peacock (not jewelry-table seat, opera bronze stand, or Venice walk); emerald/gold (not bronze gown or black velvet coat).', image: '/brand/vibes/portfolio/gilded-wild-jaipur.jpg', - alt: 'ADAZO Wild Edit — Aurelia with a white peacock on a Jaipur palace terrace', + alt: 'ADAZO The Wild — Aurelia with a white peacock on a Jaipur palace terrace', }, { title: 'Crystal Power', - season: 'Carpet Edit · Red carpet', + season: 'The Carpet', destination: 'Cannes', concept: 'Front-facing red-carpet power stance — ivory crystal couture, architectural shoulders, diamond armor and clutch.', direction: 'Carpet Edit. Face locked to Aurelia. Hand-on-hip frontal (not jewelry table, opera bronze look-up, Venice walk, or Jaipur peacock seat); ivory crystal (not bronze/black/emerald).', image: '/brand/vibes/portfolio/gilded-carpet-power.jpg', - alt: 'ADAZO Carpet Edit — Aurelia in ivory crystal couture on the Cannes carpet', + alt: 'ADAZO The Carpet — Aurelia in ivory crystal couture on the Cannes carpet', video: '/brand/videos/gilded-carpet-premiere.mp4', }, { title: 'Gilded Espresso', - season: 'Café Edit · Lifestyle film', + season: 'The Café', destination: 'Venice', concept: 'Grand historic café — gilded mirrors, velvet, marble, espresso and gold-capped cream. Collector energy, unhurried.', direction: 'Café Edit lifestyle film. Face locked to Aurelia. Seated grand-café three-quarter (not jewelry table control, Venice walk, Jaipur peacock, or carpet power stance); bronze silk (not ivory crystal).', image: '/brand/videos/cafe/posters/gilded-venice-cafe.jpg', - alt: 'ADAZO Café Edit — Aurelia in a Venice grand café with gold cream and espresso', + alt: 'ADAZO The Café — Aurelia in a Venice grand café with gold cream and espresso', video: '/brand/videos/cafe/gilded-venice-cafe.mp4', }, ], diff --git a/src/data/videoWatch.ts b/src/data/videoWatch.ts index 73a42f0..caa685c 100644 --- a/src/data/videoWatch.ts +++ b/src/data/videoWatch.ts @@ -31,7 +31,7 @@ function fromReel(reel: CategoryReel): WatchClip { return { id: reel.id, title: reel.title, - subtitle: `Gen ${reel.generation} · ${reel.motionLabel}`, + subtitle: reel.motionLabel, video: reel.video, poster: reel.poster, aspect: 'portrait', diff --git a/src/lib/seo.ts b/src/lib/seo.ts index 3442188..69eab8b 100644 --- a/src/lib/seo.ts +++ b/src/lib/seo.ts @@ -2,9 +2,9 @@ export const SITE_URL = 'https://adazo.com' export const SITE_NAME = 'Adazo' -export const DEFAULT_TITLE = "Adazo — Women's health & beauty, curated" +export const DEFAULT_TITLE = 'Adazo — Beauty is passed down' export const DEFAULT_DESCRIPTION = - 'Discover curated Amazon Best Sellers and concern-first routines for women\'s skincare, hair, makeup, and body. Shop the weekly edit on Adazo; buy securely on Amazon.' + 'Since 1726. Luxury beauty, fragrance, and fashion finish for treating yourself — or the woman you love. Discover Adazo; complete your purchase on Amazon.' export const DEFAULT_OG_IMAGE = `${SITE_URL}/brand/social.png` export const TWITTER_HANDLE = '' // set if brand X account exists diff --git a/src/lib/seoData.ts b/src/lib/seoData.ts index 271d67f..adc02cc 100644 --- a/src/lib/seoData.ts +++ b/src/lib/seoData.ts @@ -60,17 +60,17 @@ export function shopSeo(opts: { const title = cat ? `${CATEGORY_LABELS[cat]}` : limited - ? 'This week’s limited options' - : 'Shop for every routine' + ? 'This week’s selection' + : 'The collection' const description = cat && categoryHero ? clipMeta( - `${categoryHero.blurb} Browse ${count} ${CATEGORY_LABELS[cat].toLowerCase()} picks on Adazo; buy on Amazon.`, + `${categoryHero.blurb} ${count} pieces on Adazo — for you, or for her. Complete your purchase on Amazon.`, ) : limited - ? 'Amazon Best Sellers edit for skincare, hair, makeup, and body. Limited-time options that refresh weekly—discover on Adazo, buy on Amazon.' - : 'Shop skincare, hair, makeup, body, SPF, and tools. Discover the collection on Adazo; complete purchase on Amazon.' + ? 'A short house selection this week. Discover on Adazo; complete your purchase on Amazon.' + : 'Luxury beauty, fragrance, gold, and fashion finish. Discover Adazo; complete your purchase on Amazon.' const crumbs = [ { name: 'Home', path: '/' }, @@ -170,9 +170,9 @@ export function vibeSeo(vibe: VibeProfile): PageSeo { export function whySeo(): PageSeo { return { - title: "Our story — women's beauty, curated", + title: 'Our story — Ada Zoppi, 1726', description: - 'Adazo is a destination for women\'s beauty—skincare, hair, makeup, and body. We curate the collection; Amazon handles fulfillment you already trust.', + 'The founding legend of Adazo: Ada Zoppi in the Brianza hills, 1726. Beauty is not taught. It is passed down. Luxury for treating yourself — or the woman you love.', path: '/why', image: '/brand/social.png', preloadImage: '/brand/social.png', @@ -182,35 +182,33 @@ export function whySeo(): PageSeo { export function quizSeo(): PageSeo { return { - title: 'Adazo Vibe Check — find your luxury persona', + title: 'Find your Adazo persona', description: - 'Take the 60-second Adazo Vibe Check. Match with Quiet Luxe, Soft Glam Muse, Signature Scent, Fashion Finisher, Glow Ritualist, or Full Edit — then shop prestige beauty, fragrance, and fashion finish.', + 'A few quiet questions. Discover which house persona you wear today — then shop the selection made for her.', path: '/quiz', } } -/** Product reels — 4:5 Amazon-insert fashion clips (multi-generation). */ export function reelsSeo(): PageSeo { return { - title: 'Product reels — fashion in the scroll', + title: 'Moving pictures', description: - 'Short fashion reels for every Adazo shop category — multiple creative generations, sized like product cards (4:5 Amazon insert). The same pool randomly inserts into shop grids to cross-promote rooms.', + 'Short fashion films from every room of the house — beauty, fragrance, gold, and the bag that finishes the exit.', path: '/reels', image: '/brand/promo/lookbook-handbags.jpg', preloadImage: '/brand/promo/lookbook-handbags.jpg', jsonLd: breadcrumbJsonLd([ { name: 'Home', path: '/' }, - { name: 'Product reels', path: '/reels' }, + { name: 'Films', path: '/reels' }, ]), } } -/** Muted short-video gallery of all brand clips. */ export function watchSeo(): PageSeo { return { - title: 'Watch — short fashion films', + title: 'Watch — the house on film', description: - 'Muted short videos from the Adazo library: category fashion reels and red-carpet premieres. Pure visual — scroll to play.', + 'Muted short films from Adazo: the atelier, the carpet, the café. Scroll to watch. Sound off by design.', path: '/watch', image: '/brand/promo/lookbook-handbags.jpg', preloadImage: '/brand/promo/lookbook-handbags.jpg', diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 44ceb4c..3299a3c 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -84,14 +84,14 @@ export function Home() {

- Prestige & fashion + The elevated shelves

- Shop the elevated shelves + For you — or for her

- Big-ticket designer handbags first, then prestige beauty, - fragrance, and jewelry to finish the look. + The bag that finishes the exit. Gold at the collarbone. + Fragrance that arrives before you do.

@@ -193,11 +193,10 @@ export function Home() { {limited.headline}

- This week’s Amazon Best Sellers + What the house is wearing now

- Ranked placements from Amazon’s public Best Sellers - lists—curated for women’s beauty on Adazo. + A short selection. It will not last. That is the point.

-

Shop by category

+

The rooms

- Find your category + Choose your shelf

@@ -270,9 +269,9 @@ export function Home() {
-

Editor picks

+

From the book

- Curated for confidence + Pieces with quiet authority

@@ -287,9 +286,9 @@ export function Home() {
-

Adazo vibe check

+

The house personas

- What’s your luxury persona? + Which woman are you today?

{VIBE_LIST.map((v) => ( @@ -306,7 +305,7 @@ export function Home() {
- Take the vibe check + Find your persona
@@ -315,7 +314,7 @@ export function Home() {

- More from Adazo + Further into the house

@@ -254,23 +254,18 @@ export function ProductPage() {

- Options only available for a limited time + This week only

- {product.source === 'amazon-bsr' - ? 'Part of this week’s Amazon Best Sellers edit' - : product.source === 'curated' - ? 'Part of this week’s Adazo beauty edit' - : 'Part of this week’s limited-time beauty edit'} + Part of this week’s house selection {product.source === 'amazon-bsr' && product.bsrRank != null && - product.bsrCategory + product.bsrCategory && + !/editor limited edit/i.test(product.bsrCategory) ? ` · #${product.bsrRank} in ${product.bsrCategory}` : ''} - {until ? ` · Rotates ${until}` : ''}. - {product.source === 'amazon-bsr' - ? ' Rankings move—shop while it’s on the list.' - : ' Options rotate weekly—shop while this placement is live.'} + {until ? ` · Until ${until}` : ''}. Shop while it holds its + place.

diff --git a/src/pages/Quiz.tsx b/src/pages/Quiz.tsx index 763fa7a..537c495 100644 --- a/src/pages/Quiz.tsx +++ b/src/pages/Quiz.tsx @@ -38,10 +38,9 @@ import { import { Seo } from '../components/Seo' import { quizSeo } from '../lib/seoData' -/** Short shop-edit label from persona id (luxe → “luxe edit”). */ -function editWordForPersona(personaId: string): string { - const known = ['luxe', 'muse', 'sillage', 'atelier', 'dew', 'gilded'] as const - return (known as readonly string[]).includes(personaId) ? personaId : 'Adazo' +/** Short shop label from persona id (luxe → “Quiet Luxe”). */ +function selectionWordForPersona(personaId: string, title: string): string { + return title || personaId || 'Adazo' } type Phase = 'intro' | 'questions' | 'result' @@ -439,18 +438,17 @@ function Intro({ onStart }: { onStart: () => void }) { return (
- 60-second Adazo vibe check + A few quiet questions

- Which Adazo persona is yours — luxury, glam, scent, or finish? + Which woman are you today?

- Quick taps only — every answer advances on click, no extra Continue steps. - Meet your house persona with named picks ready. Save to the private edit - only if you want updates. + Tap through. Meet your house persona. Leave with a selection made for + her — for you, or for the woman you love.

No account required · Results first · Email optional @@ -588,14 +586,12 @@ function SavePrivateEdit({ onOptIn: (v: boolean) => void onSubmit: (e: React.FormEvent) => void }) { - const editLabel = editWordForPersona(persona.id) - return (

-

Optional · private edit

+

Optional · for later

- Keep this persona in your private Adazo edit and get this week’s{' '} - {editLabel} drop by email. You already have full results above — this is - just for follow-up. + Keep this persona and receive the occasional house note — new pieces, + short selections, nothing that shouts.

@@ -671,7 +666,7 @@ function SavePrivateEdit({ ) : ( <> - Save private edit + Save my card )} @@ -723,7 +718,7 @@ function ResultStep({ const secondaryVibe = secondaryPersona ? getVibe(secondaryPersona.id) : null - const editWord = editWordForPersona(persona.id) + const selectionWord = selectionWordForPersona(persona.id, persona.title) const confidencePct = Math.round(confidence * 100) return ( @@ -841,7 +836,7 @@ function ResultStep({ {/* CTA hierarchy: shop primary · vibe secondary · limited/retake tertiary */}
- Shop your {editWord} edit + Shop {selectionWord} See vibe card @@ -910,7 +905,7 @@ function ResultStep({
- Shop your full {editWord} edit + Shop the full selection

diff --git a/src/pages/Reels.tsx b/src/pages/Reels.tsx index 8c401a6..d044693 100644 --- a/src/pages/Reels.tsx +++ b/src/pages/Reels.tsx @@ -2,22 +2,19 @@ import { Link } from 'react-router-dom' import { Play } from 'lucide-react' import { Seo } from '../components/Seo' import { - CATEGORY_REELS, REEL_LATEST_GENERATION, reelsForGeneration, type CategoryReel, - type ReelGeneration, } from '../data/reels' import { reelsSeo } from '../lib/seoData' import { useEffect, useRef } from 'react' /** - * Product Reels — Amazon-insert-sized (4:5) fashion clips. - * Multiple generations per category; full set feeds the grid insert pool. + * Short fashion films — portrait clips for every room of the house. */ export function ReelsPage() { - const gen1 = reelsForGeneration(1) - const gen2 = reelsForGeneration(2) + const latest = reelsForGeneration(REEL_LATEST_GENERATION) + const archive = reelsForGeneration(1) return ( <> @@ -25,53 +22,50 @@ export function ReelsPage() {

- Product reels + Films

- Fashion in the scroll + Moving pictures

- Short category clips in the same portrait size as product cards - (4:5 Amazon insert). {CATEGORY_REELS.length} clips across{' '} - {REEL_LATEST_GENERATION} generations — the same pool that randomly - inserts into shop and home product grids to cross-promote rooms. + Short fashion films from every room of the house — beauty, + fragrance, gold, and the bag that finishes the exit. Scroll to + watch. Shop when something holds your eye.

- Shop all + Enter the house - Vibe check + Find your persona
- + {REEL_LATEST_GENERATION > 1 && archive.length > 0 ? ( + + ) : null} ) } function GenerationSection({ - generation, label, blurb, reels, featured = false, }: { - generation: ReelGeneration label: string blurb: string reels: CategoryReel[] @@ -87,10 +81,9 @@ function GenerationSection({

{label} - {generation === REEL_LATEST_GENERATION ? ' · Latest' : ''}

- {reels.length} category clips + {reels.length} films

{blurb}

@@ -140,16 +133,13 @@ function ReelCard({ reel }: { reel: CategoryReel }) { loop playsInline preload="metadata" - aria-label={`${reel.title} gen ${reel.generation}: ${reel.motionLabel}`} + aria-label={`${reel.title}: ${reel.motionLabel}`} />
- Insert size - - - Gen {reel.generation} + Film
diff --git a/src/pages/Shop.tsx b/src/pages/Shop.tsx index 7fda575..d9655a1 100644 --- a/src/pages/Shop.tsx +++ b/src/pages/Shop.tsx @@ -100,12 +100,12 @@ export function Shop() { <>

Shop

- {limited ? 'This week’s limited options' : 'The collection'} + {limited ? 'This week’s selection' : 'The collection'}

{limited - ? "Amazon Best Sellers edit for women's beauty. Options only available for a limited time—lists refresh weekly and ranks move." - : 'Browse by concern and category, then buy on Amazon with secure checkout.'} + ? 'A short selection. It will not last. Discover here; complete your purchase on Amazon.' + : 'Every room of the house — for treating yourself, or for the woman you love. Discover here; complete your purchase on Amazon.'}

{limited && ( diff --git a/src/pages/Vibe.tsx b/src/pages/Vibe.tsx index 81d1ecb..ba6a75f 100644 --- a/src/pages/Vibe.tsx +++ b/src/pages/Vibe.tsx @@ -9,7 +9,6 @@ import { ShoppingBag, Sparkles, Star, - VolumeX, Zap, } from 'lucide-react' import { @@ -33,37 +32,37 @@ function campaignSeriesKind(campaign: VibeCampaign) { if (s.includes('carpet') || s.includes('oscar') || s.includes('cannes')) return 'carpet' as const if (s.includes('wild')) return 'wild' as const - if (s.includes('world')) return 'world' as const + if (s.includes('world') || s.includes('abroad')) return 'world' as const return 'house' as const } function campaignAsideBlurb(campaign: VibeCampaign, name: string) { switch (campaignSeriesKind(campaign)) { case 'cafe': - return `Café Edit — upscale lifestyle film. ${name} in a world-class café; beauty as a lived ritual.` + return `${name} at the table — daylight, porcelain, the soft discipline of being seen.` case 'carpet': - return `Carpet Edit — Oscars & Cannes glamour. Face locked; jewelry and wardrobe free.` + return `${name} under night light — jewels free, posture certain, the room already hers.` case 'wild': - return `Wild Edit — on location with exotic animals. Face locked; jewelry and wardrobe free.` + return `${name} far from the salon — beauty that holds when the ground is uneven.` case 'world': - return `World Edit — travel fashion still. New destination, same model fidelity.` + return `${name} abroad — a new city, the same quiet authority.` default: - return `House campaign with ${name}’s face locked from her reference — ADAZO branding.` + return `${name} for the house — the face you return to, season after season.` } } function campaignSeriesLabel(campaign: VibeCampaign) { switch (campaignSeriesKind(campaign)) { case 'cafe': - return 'Café Edit series' + return 'The Café' case 'carpet': - return 'Carpet Edit series' + return 'The Carpet' case 'wild': - return 'Wild Edit series' + return 'The Wild' case 'world': - return 'World Edit series' + return 'Abroad' default: - return 'House campaign' + return 'The Atelier' } } @@ -282,7 +281,7 @@ export function VibePage() {

- Adazo · fashion destination + {campaignSeriesLabel(campaign)} {campaign.destination ? ` · ${campaign.destination}` : ''}

- {campaign.season} · Model portfolio · {vibe.avatar.name} + {vibe.avatar.name} · {vibe.title}

@@ -320,24 +319,16 @@ export function VibePage() {

- Creative concept + The idea

{campaign.concept}

-
-

- Direction -

-

- {campaign.direction} -

-

- Talent + Worn by

{vibe.avatar.name} @@ -348,7 +339,7 @@ export function VibePage() {

- {campaign.destination ? 'Destination' : 'Persona'} + {campaign.destination ? 'Where' : 'Persona'}

{campaign.destination ?? vibe.title} @@ -367,7 +358,7 @@ export function VibePage() { to={`/shop?cat=${vibe.categories[0]}`} className="inline-flex items-center gap-1.5 rounded-full bg-white text-ink px-5 py-3 text-xs font-bold hover:bg-gold transition" > - Shop the campaign edit + Shop her selection

- Premiere clip · 16:9 + On film

{kind === 'carpet' - ? `${vibe.avatar.name} on the carpet` - : `${vibe.avatar.name} · living film`} + ? `${vibe.avatar.name} after dark` + : `${vibe.avatar.name}, in motion`}

{kind === 'carpet' - ? 'Paparazzi flash energy — same face, living red-carpet moment.' - : 'Same face, living motion — muted by design for scroll.'} + ? 'Night light. Quiet certainty. The room rearranges around her.' + : 'Living motion — beauty that does not pose; it simply is.'}

@@ -755,7 +746,7 @@ export function VibePage() { ) } -/** Video-first Café Edit block — 16:9 lifestyle film, muted autoplay on view */ +/** Video-first café film — muted autoplay when in view */ function CafeEditSection({ vibe, campaign, @@ -802,7 +793,7 @@ function CafeEditSection({

- Café Edit · Lifestyle film + The Café {campaign.destination ? ` · ${campaign.destination}` : ''}

- {vibe.avatar.name} · upscale café ritual · muted scroll film + {vibe.avatar.name} · daylight · porcelain · the discipline of ease

@@ -836,16 +827,6 @@ function CafeEditSection({ controls aria-label={`${vibe.avatar.name} — ${campaign.title}`} /> -

- - - 16:9 · 6s - - - - Muted - -
{!playing && (
@@ -856,8 +837,8 @@ function CafeEditSection({

- Amazon scroll energy — beauty as a café ritual. Auto-plays when in - view; sound stays off by design. + Beauty as a café ritual. It plays when you arrive; the sound stays + off — as luxury should, until invited.

@@ -865,7 +846,7 @@ function CafeEditSection({

- Creative concept + The idea

{campaign.concept} @@ -874,7 +855,7 @@ function CafeEditSection({

- Talent + Worn by

{vibe.avatar.name} @@ -885,13 +866,13 @@ function CafeEditSection({

- Destination + Where

{campaign.destination}

- Café Edit series + The Café

@@ -908,7 +889,7 @@ function CafeEditSection({ />

- Key frame · still + Still from the film

diff --git a/src/pages/Watch.tsx b/src/pages/Watch.tsx index ae6b241..e09560f 100644 --- a/src/pages/Watch.tsx +++ b/src/pages/Watch.tsx @@ -15,8 +15,7 @@ import { watchSeo } from '../lib/seoData' type Filter = 'all' | 'category' | 'carpet' | 'cafe' /** - * Visual short-video gallery — muted autoplay tiles from every brand clip - * under public/brand/videos (category reels + carpet + café films). + * Visual short-film gallery — muted autoplay from the house library. */ export function WatchPage() { const [filter, setFilter] = useState('all') @@ -38,25 +37,23 @@ export function WatchPage() { Watch

- Short films, pure visual + The house on film

- {counts.total} muted clips from the Adazo library — category fashion - reels ({counts.category}), red-carpet premieres ({counts.carpet}), - and café lifestyle films ({counts.cafe}). Scroll to play. Sound off - by design. + {counts.total} short films — the rooms, the carpet, the café. Scroll + to play. Sound stays off until you invite it.

- Always muted · visual only + Sound off by design
{( [ ['all', `All (${counts.total})`], - ['category', `Category reels (${counts.category})`], - ['carpet', `Carpet (${counts.carpet})`], - ['cafe', `Café (${counts.cafe})`], + ['category', `The rooms (${counts.category})`], + ['carpet', `The Carpet (${counts.carpet})`], + ['cafe', `The Café (${counts.cafe})`], ] as const ).map(([id, label]) => (
@@ -123,10 +120,10 @@ function WatchTile({ clip }: { clip: WatchClip }) { const groupLabel = clip.group === 'carpet' - ? 'Carpet premiere' + ? 'The Carpet' : clip.group === 'cafe' - ? 'Café Edit' - : 'Category reel' + ? 'The Café' + : 'The rooms' const body = ( <> @@ -149,11 +146,7 @@ function WatchTile({ clip }: { clip: WatchClip }) {
- {portrait ? '4:5' : '16:9'} - - - - Mute + Film

diff --git a/src/pages/Why.tsx b/src/pages/Why.tsx index d8a66d7..803306a 100644 --- a/src/pages/Why.tsx +++ b/src/pages/Why.tsx @@ -2,75 +2,154 @@ import { Link } from 'react-router-dom' import { ArrowRight } from 'lucide-react' import { Seo } from '../components/Seo' import { whySeo } from '../lib/seoData' +import { BRAND } from '../data/brand' export function Why() { return (

-
+
-
+
-

Our story

+

{BRAND.mark}

- Calm discovery for women’s beauty on Amazon. + The founding legend

+

+ {BRAND.mottoIt} +

+

+ {BRAND.mottoEn} +

-
-

- Adazo is a curated Amazon affiliate destination for women’s health and - beauty. We bring the weekly Best Sellers edit and concern-first - shortlists together; Amazon handles the checkout you already trust. +

+

+ Chapter one · The alchemist’s atelier +

+

+ As it has been told, in the Brianza hills north of Milan, for three + hundred years.

-
- {[ - { - t: 'Curation first', - d: 'We focus on products women actually research — skincare, hair, makeup, body, SPF, and tools — with clear “best for” context instead of endless undifferentiated grids.', - }, - { - t: 'Weekly Best Sellers', - d: 'Amazon Best Seller ranks move. Our limited-time beauty edit refreshes so you see what’s rising now — not a stale list from last year.', - }, - { - t: 'Shop here. Buy on Amazon.', - d: 'Explore photography, ratings, and related picks on Adazo. When you are ready, continue to Amazon as an authorized Associate purchase — familiar shipping, returns, and seller guarantees.', - }, - { - t: 'Honest language', - d: 'We avoid medical overclaims. Copy stays practical: popular, highly rated, often used for — with FTC affiliate disclosure always present.', - }, - ].map((x) => ( -
-

{x.t}

-

{x.d}

-
- ))} +
+

+ In the summer of {BRAND.founded}, in a stone house at the edge of a + hill town between Milan and the lake, a young woman named{' '} + {BRAND.founder}{' '} + kept a small room off her family’s kitchen where she mixed oils. +

+

+ The town knew her as a maker of remedies — lavender for sleepless + children, calendula for a husband’s burned hand, rosewater for the + parish priest’s headaches. This was ordinary work for a woman of her + station. What made the room behind the kitchen different was that + Ada did not mix for cure. She mixed for beauty, and she did it in + secret, because in {BRAND.founded} there was no respectable word yet + for what she was doing. +

+

+ The legend says it began the night before her cousin Elisabetta’s + wedding. +

+

+ Elisabetta had spent the day weeping — not from joy, but from the + particular grief of a plain girl watching herself in a borrowed + mirror, certain the morning would arrive and find her unchanged. Ada + took her cousin’s face in her hands the way she’d seen her own + grandmother do, and told her something that would outlive both of + them: +

+
+

+ “{BRAND.mottoIt}” +

+

+ {BRAND.mottoEn} +

+
+

+ Then she went to her room off the kitchen and, by lamplight, built a + balm meant for exactly one purpose: to make a nervous girl believe, + for one morning, that she had always been beautiful. Olive oil + pressed from her own family’s trees. Orris root, dried since spring. + Bergamot rind, bitter and bright. A crushed thread of rose that had + bloomed against the church wall. She warmed it slowly, the way you’d + coax something shy into the open, and she gave it to Elisabetta + before dawn. +

+

+ What happened at that wedding is the part the family still argues + about. What’s certain is that within the year, women were arriving + at Ada’s door who had no remedy to seek — only a face they wanted to + meet differently. She began keeping a ledger, not of sales, but of + formulas: what she’d used, for whom, and why. Bound in dark leather, + it became known simply as{' '} + il libro — the + book — and it would be added to by daughters and grand-daughters for + the next three centuries. Nothing in it was ever published. + Everything in it was eventually inherited. +

+

+ It was Ada’s own name, shortened by neighbors the way small towns + shorten everything, that gave the house its mark.{' '} + Ada-zo — “Ada’s,” in the clipped + dialect of the hills — became, over generations, simply{' '} + Adazo. The family + adopted a small emblem for the book’s cover not long after: a sun + resting low over an olive branch, the two shapes together forming + the rough outline of an A. It + has marked every formula since. +

+

+ By the time Ada was an old woman, she had stopped mixing balms for + weddings and started mixing them for something closer to inheritance + — a mother would come not for herself, but to learn, so that one day + she could stand where Ada stood and hand something down instead of + merely applying it. This was the true founding act of the house: not + a product, but a transmission. Adazo was never meant to be bought + once. It was meant to be passed on. +

+

+ Three hundred years later, the room off the kitchen is gone, the + hill town has grown into something closer to a suburb of Milan, and + Ada Zoppi exists mostly as a name in a book no camera has ever + photographed in full. But the sun-and-olive mark still opens every + formula. The motto is still whispered. And somewhere in every Adazo + selection is the same original instruction Ada gave her cousin + before a wedding three centuries ago: not to look different — to + finally recognize the face that was always there. +

-
-

- Affiliate disclosure: As an - Amazon Associate, Adazo earns from qualifying purchases. That does - not change the price you pay on Amazon. +

+

+ The house today +

+

+ {BRAND.promise} +

+

+ We curate what belongs on the vanity and in the gift box — prestige + beauty, fragrance, gold, the bag that finishes the room. Discover + here. Complete your purchase on Amazon.

-
+
- Shop the collection + Enter the house - Take the vibe check + Find your persona
-
+
) } From 54022a10b05f66a00dd3c7806ffff106fd1c436b Mon Sep 17 00:00:00 2001 From: Steve Simonson <144349219+SteveSimonson@users.noreply.github.com> Date: Thu, 30 Jul 2026 17:38:00 -0500 Subject: [PATCH 2/2] fix: strip remaining commission and AOV copy from product UI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review nits from PR #63 — prestige shelf language instead of Associates commission tiers and AOV badges. --- src/data/products.ts | 42 +++++++++++++++++++++--------------------- src/pages/Vibe.tsx | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/data/products.ts b/src/data/products.ts index f4ae881..9502227 100644 --- a/src/data/products.ts +++ b/src/data/products.ts @@ -530,7 +530,7 @@ export const products: Product[] = [ name: 'Dyson Airwrap Multi-styler', tagline: 'High-ticket styling system for curls, waves, and smooth finishes.', description: - 'Premium multi-styler tool for hair. Higher AOV luxury-adjacent pick. Discover on Adazo; buy on Amazon.', + 'Premium multi-styler tool for hair. A statement tool for the vanity. Discover on Adazo; buy on Amazon.', category: 'tools', collection: 'Tools', brand: 'Dyson', @@ -758,12 +758,12 @@ export const products: Product[] = [ specs: [ { label: 'Skin type', value: 'Dry / dehydrated' }, { label: 'Finish', value: 'Dewy' }, - { label: 'Commission tier', value: 'Luxury Beauty (~10%)' }, + { label: 'Shelf', value: 'Prestige · top shelf' }, ], priceHint: 72.0, asin: 'B0GFQ5QGP5', searchKeywords: 'Tatcha The Dewy Skin Cream', - badge: 'Luxury · ~10%', + badge: 'Prestige', images: [ 'https://m.media-amazon.com/images/I/61hBZFTi8qL._AC_SL1000_.jpg', 'https://m.media-amazon.com/images/I/71Cvbr4JY3L._AC_SL1000_.jpg', @@ -789,17 +789,17 @@ export const products: Product[] = [ material: 'Facial essence', features: [ 'Prestige treatment essence', - 'High-AOV luxury skincare', + 'Prestige skincare', 'Prestige beauty — top-shelf selection', ], specs: [ { label: 'Step', value: 'Essence / treatment' }, - { label: 'Commission tier', value: 'Luxury Beauty (~10%)' }, + { label: 'Shelf', value: 'Prestige · top shelf' }, ], priceHint: 99.0, asin: 'B0FL9S44DL', searchKeywords: 'SK-II Facial Treatment Essence', - badge: 'Luxury · ~10%', + badge: 'Prestige', images: [ 'https://m.media-amazon.com/images/I/61oNY3CSJQL._AC_SL1000_.jpg', 'https://m.media-amazon.com/images/I/71-kdayjHyL._AC_SL1000_.jpg', @@ -830,12 +830,12 @@ export const products: Product[] = [ ], specs: [ { label: 'Type', value: 'Face cream' }, - { label: 'Commission tier', value: 'Luxury Beauty (~10%)' }, + { label: 'Shelf', value: 'Prestige · top shelf' }, ], priceHint: 68.0, asin: 'B08KWRN54G', searchKeywords: 'Drunk Elephant Protini Polypeptide Cream', - badge: 'Luxury · ~10%', + badge: 'Prestige', images: [ 'https://m.media-amazon.com/images/I/51HzPP4D9KL._AC_SL1000_.jpg', 'https://m.media-amazon.com/images/I/810sD5jm8zL._AC_SL1000_.jpg', @@ -866,12 +866,12 @@ export const products: Product[] = [ ], specs: [ { label: 'Finish', value: 'Matte' }, - { label: 'Commission tier', value: 'Luxury Beauty (~10%)' }, + { label: 'Shelf', value: 'Prestige · top shelf' }, ], priceHint: 35.0, asin: 'B0848Y5D4B', searchKeywords: 'Charlotte Tilbury Pillow Talk lipstick', - badge: 'Luxury · ~10%', + badge: 'Prestige', images: [ 'https://m.media-amazon.com/images/I/61TM3BeC7iL._AC_SL1000_.jpg', 'https://m.media-amazon.com/images/I/81pnOt+8GqL._AC_SL1000_.jpg', @@ -890,24 +890,24 @@ export const products: Product[] = [ name: 'La Mer Crème de la Mer Moisturizing Cream', tagline: 'Ultra-prestige cream for the high-ticket skincare cart.', description: - 'Flagship luxury cream with top-tier AOV. Discover on Adazo; buy on Amazon.', + 'Flagship luxury cream. Discover on Adazo; buy on Amazon.', category: 'luxury', collection: 'Luxury Beauty', brand: 'La Mer', material: 'Moisturizing cream', features: [ 'Ultra-prestige moisturizer', - 'Very high AOV', + 'Collector piece', 'Prestige beauty — top-shelf selection', ], specs: [ { label: 'Tier', value: 'Prestige / Luxury Beauty' }, - { label: 'Commission tier', value: 'Luxury Beauty (~10%)' }, + { label: 'Shelf', value: 'Prestige · top shelf' }, ], priceHint: 190.0, asin: 'B0D1T4FF37', searchKeywords: 'La Mer Creme de la Mer moisturizing cream', - badge: 'Luxury · ~10%', + badge: 'Prestige', images: [ 'https://m.media-amazon.com/images/I/61YFx9myqPL._AC_SL1000_.jpg', 'https://m.media-amazon.com/images/I/618WTN5PlML._AC_SL1000_.jpg', @@ -933,7 +933,7 @@ export const products: Product[] = [ material: 'Eau de parfum', features: [ 'Prestige women\'s fragrance', - 'High gift AOV', + 'Gift-ready', 'Prestige fragrance selection', ], specs: [ @@ -943,7 +943,7 @@ export const products: Product[] = [ priceHint: 98.0, asin: 'B07X1YGWSX', searchKeywords: 'Yves Saint Laurent Libre Eau de Parfum', - badge: 'Fragrance AOV', + badge: 'Fragrance', images: [ 'https://m.media-amazon.com/images/I/51v0HbffdGL._AC_SL1000_.jpg', 'https://m.media-amazon.com/images/I/61P4VIdN9ZL._AC_SL1000_.jpg', @@ -970,7 +970,7 @@ export const products: Product[] = [ features: [ 'Floral eau de parfum', 'Gift-friendly bottle story', - 'High AOV fragrance', + 'Signature fragrance', ], specs: [ { label: 'Concentration', value: 'Eau de Parfum' }, @@ -979,7 +979,7 @@ export const products: Product[] = [ priceHint: 120.0, asin: 'B00BEG4QH2', searchKeywords: 'Viktor Rolf Flowerbomb Eau de Parfum', - badge: 'Fragrance AOV', + badge: 'Fragrance', images: [ 'https://m.media-amazon.com/images/I/61ZR3eNks5L._AC_SL1000_.jpg', 'https://m.media-amazon.com/images/I/81i39nBxCyL._AC_SL1000_.jpg', @@ -1006,7 +1006,7 @@ export const products: Product[] = [ features: [ 'Designer fragrance', 'High brand search volume', - 'Strong gift AOV', + 'Gift-ready', ], specs: [ { label: 'Concentration', value: 'Eau de Toilette' }, @@ -1015,7 +1015,7 @@ export const products: Product[] = [ priceHint: 105.0, asin: 'B00B0ZLF9Y', searchKeywords: 'Chanel Chance Eau Tendre Eau de Toilette', - badge: 'Fragrance AOV', + badge: 'Fragrance', images: [ 'https://m.media-amazon.com/images/I/713iNaGYSsL._AC_SL1000_.jpg', 'https://m.media-amazon.com/images/I/71vwTu8tFeL._AC_SL1000_.jpg', @@ -1041,7 +1041,7 @@ export const products: Product[] = [ features: [ 'Designer women\'s fragrance', 'Gift-set friendly', - 'High AOV', + 'Elevated pick', ], specs: [ { label: 'Concentration', value: 'Eau de Parfum' }, diff --git a/src/pages/Vibe.tsx b/src/pages/Vibe.tsx index ba6a75f..ae1b27e 100644 --- a/src/pages/Vibe.tsx +++ b/src/pages/Vibe.tsx @@ -661,7 +661,7 @@ export function VibePage() {

Often blends with

- Real edits mix personas + Personas blend — the house is not a single face

{blendVibes.map((v) => (