{
  "comment": "Store catalog read by the checkout function and the front-end. Amounts are in cents (2026-07-08: Brad set $29.90 guides, $149 membership, 50% promo = $74.50). The promo block is the launch offer: shown on the home + landing pages and auto-applied at checkout. Delete the promo block to end the promo. stripeCoupon must exist in the SAME Stripe mode (test/live) as STRIPE_SECRET_KEY. open:false = every buy button reads 'Coming soon' and checkout refuses (Andrea's pre-launch hold, 2026-07-12); flip to true to open the store.",
  "open": true,
  "billingComment": "Stripe's no-code customer-portal login link (LIVE, activated by Brad 2026-09-11). The app normally sends a signed-in member straight into a portal SESSION via /api/portal, which is one tap. This static link is the fallback for someone who cannot get into the app at all, she types her email and Stripe emails her a way in. Safe to publish: only the real account holder receives that email. Leave it out and /account falls back to emailing admin@.",
  "billing": {
    "portalLoginUrl": "https://billing.stripe.com/p/login/5kQ7sLeSbf4wecg3FM0kE00"
  },
  "waiverComment": "Approved by Brad 2026-09-11. Shown beside a REQUIRED, unticked checkbox on the Stripe Checkout page; without it a no-refund policy does not bind EU/UK buyers of digital content. DELIBERATELY carries no \"14 days\": that figure is EU/UK-only and every buyer worldwide reads this one sentence. Each ends on a reason to tick it, not on the forfeiture, keep it that way. The markdown link is the ONLY way the terms are reachable from checkout: supplying custom_text replaces Stripe's default text, which is what normally carries the link (verified 2026-09-11).",
  "waiver": {
    "membership": "Yes, unlock everything now. I understand that because all the guides open immediately, this purchase isn’t refundable, and that I’m giving up any cooling-off period I’d otherwise have where I live (see the [Terms of Service](https://andandrea.com/terms)). I can cancel before my next yearly payment at any time.",
    "guide": "Yes, unlock it now. I understand that because the guide opens immediately, this purchase isn’t refundable, and that I’m giving up any cooling-off period I’d otherwise have where I live (see the [Terms of Service](https://andandrea.com/terms)). It’s mine to keep, forever."
  },
  "currency": "usd",
  "products": {
    "membership": {
      "name": "Joyyy Seeker Annual Membership",
      "amount": 14900,
      "interval": "year",
      "tagline": "Every Do-an-andAndrea Guide as it's published, the members' chat rooms, plus 12 months of live sessions with Andrea",
      "benefitsComment": "Bullets on the membership card. Copy lives here, not in the page, so what membership promises can change without a code edit. The 'Let's Joyyy Together' bullet rests on Andrea's ROLLING 12-month commitment (Brad, 2026-08-09): anyone joining today is guaranteed 12 months of sessions. If she ever wants to stop, DELETE THE BULLET FIRST and she then runs sessions for a further 12 months, so the last person who joined while it was advertised still gets their full year. Never rewrite it to a fixed end date, 'your 12 months start the day you join' is what makes it true for every member whenever they join, and it's the urgency to join now rather than later.",
      "benefits": [
        "Every guide, all of them today, plus each new one the day it drops",
        "Member chat: plan your next getaway with Joyyy Seekers worldwide",
        "12-MONTH BONUS: ‘Let’s Joyyy Together’ Sessions, every now and then Andrea goes live for a proper chat-fest about the new destinations dropping. Join today and your 12 month bonus is locked in, even if this bonus comes off the page tomorrow.",
        "‘Let’s Joyyy Together’ recordings: can’t make it live? Sessions are recorded so you can catch up whenever suits you."
      ]
    },
    "guide": {
      "name": "Do-an-andAndrea Travel Guide",
      "amount": 2990,
      "tagline": "One guide, yours forever"
    }
  },
  "promoComment": "The offer as Brad set it 2026-08-20. label + labelUrgency make the one badge (‘50% OFF Forever, LIMITED TIME’); they are two fields because label alone is also dropped into the sentence on the guide-rail card, where a second ‘limited time’ would read twice. monthlyNote is the small-number frame, the monthly figure itself is always calculated from the discounted price, never typed, so it can never drift out of step with it. quote is Andrea speaking in her own voice about why waiting costs the reader; it replaced the old ‘…and you keep the 50% off every single year you renew!’ line, and carries the urgency that the badge only asserts.",
  "promo": {
    "label": "50% OFF Forever",
    "labelUrgency": "LIMITED TIME",
    "offerName": "Joyyy Seeker Founding Membership",
    "percentOff": 50,
    "monthlyNote": "paid annually",
    "quote": "Joyyy Seekers who join the andAndrea community now, keep their 50% off for as long as they stay, while the community grows and the aA guides keep piling up. Leave it too long and the half price is gone.",
    "quoteBy": "Andrea",
    "note": "limited time offer, cancel anytime",
    "stripeCoupon": "aa-founding-50"
  },
  "upcomingComment": "Future guide cities (Brad, 2026-07-12; from Andrea's Mighty spaces, all already traveled, content ready). Shown dot-separated under the membership offer on the landing page + guides page. NO dates/order on purpose: releases are paced so guides don't cannibalize each other, and no date = no reason for a buyer to wait. When a guide ships, delete its city from this list.",
  "upcoming": [
    "Alicante",
    "Asunción",
    "Athens",
    "Bali",
    "Barcelona",
    "Bariloche",
    "Beaulieu-sur-Mer",
    "Bodrum",
    "Cairo & Giza",
    "Cortina d'Ampezzo",
    "Dubai",
    "Florence",
    "Granada",
    "Herceg Novi",
    "Istanbul",
    "Jakarta",
    "José Ignacio",
    "Kalgoorlie / Gwalia",
    "Kotor",
    "La Barra",
    "Lecce",
    "Lisbon",
    "Los Angeles",
    "Luxor, Aswan & the Nile",
    "Menton",
    "Monaco",
    "Montevideo",
    "Naples",
    "Nice",
    "Noto",
    "Ortigia",
    "Orvieto",
    "Paros / Little Paros",
    "Perast",
    "Perth",
    "Positano",
    "Puglia",
    "Punta del Este",
    "Saint-Jean-Cap-Ferrat",
    "Singapore",
    "Sintra",
    "Siros",
    "Tivat",
    "Toledo",
    "Villefranche-sur-Mer"
  ],
  "upcomingShelves": [
    {
      "region": "Egypt",
      "next": true,
      "cities": [
        "Cairo & Giza",
        "Luxor, Aswan & the Nile"
      ]
    },
    {
      "region": "Italy",
      "cities": [
        "Florence",
        "Naples",
        "Positano",
        "Orvieto",
        "Cortina d'Ampezzo",
        "Puglia",
        "Noto",
        "Ortigia",
        "Lecce"
      ]
    },
    {
      "region": "Spain & Portugal",
      "cities": [
        "Barcelona",
        "Granada",
        "Toledo",
        "Alicante",
        "Lisbon",
        "Sintra"
      ]
    },
    {
      "region": "French Riviera & Monaco",
      "cities": [
        "Nice",
        "Monaco",
        "Menton",
        "Villefranche-sur-Mer",
        "Beaulieu-sur-Mer",
        "Saint-Jean-Cap-Ferrat"
      ]
    },
    {
      "region": "Greece & Turkey",
      "cities": [
        "Athens",
        "Paros / Little Paros",
        "Siros",
        "Istanbul",
        "Bodrum"
      ]
    },
    {
      "region": "Montenegro",
      "cities": [
        "Kotor",
        "Perast",
        "Herceg Novi",
        "Tivat"
      ]
    },
    {
      "region": "South America",
      "cities": [
        "Montevideo",
        "Punta del Este",
        "José Ignacio",
        "La Barra",
        "Bariloche",
        "Asunción"
      ]
    },
    {
      "region": "Asia",
      "cities": [
        "Bali",
        "Singapore",
        "Jakarta"
      ]
    },
    {
      "region": "Middle East",
      "cities": [
        "Dubai"
      ]
    },
    {
      "region": "Australia",
      "cities": [
        "Kalgoorlie / Gwalia",
        "Perth"
      ]
    },
    {
      "region": "USA",
      "cities": [
        "Los Angeles"
      ]
    }
  ]
}
