import { useSeoMeta } from '@unhead/react'; import { Link } from 'react-router-dom'; import { nip19 } from 'nostr-tools'; import { ShoppingBag, Zap, Coins, Shirt, Sticker, Package, Hammer, Sparkles, MapPin, MessageCircle, Printer, Download, Scissors, } from 'lucide-react'; import { PageHeader } from '@/components/PageHeader'; import { Button } from '@/components/ui/button'; import { useTranslation } from '@/contexts/language'; import { PLATFORM_OWNER_PUBKEYS } from '@/hooks/useListingRestrictions'; /** Where "request an item" goes: an encrypted DM straight to the shop owner. */ const SHOP_OWNER_NPUB = nip19.npubEncode(PLATFORM_OWNER_PUBKEYS[0]); const REQUEST_HREF = `/messages/${SHOP_OWNER_NPUB}`; /** * App Shop — SkateSpots merch. * * Deliberately a STOREFRONT WITH NOTHING IN IT: there is no stock, no * pre-order, no price and nothing to buy. It exists so the section, the design * language and the payment story (sats only — Lightning or Cashu) are in place * before the first drop. When items land we can model them as listings and take * Lightning/Cashu payment; until then this page must never imply a sale. */ /** * Free, printable artwork. Physical size is baked into the files (mm units), so * "Actual size" printing gives an exact 55 × 86 mm sticker / A3 poster, and the * QR in each one resolves to https://skate-spots.org. */ const FREE_PRINT = [ { titleKey: 'walletUi.appShop.sticker', size: '55 × 86 mm', tipKey: 'walletUi.appShop.stickerTip', file: '/images/print/skatespots-sticker.svg', }, { titleKey: 'walletUi.appShop.poster', size: 'A3 · 297 × 420 mm', tipKey: 'walletUi.appShop.posterTip', file: '/images/print/skatespots-poster.svg', }, ]; /** What we're working on. Not products, not prices — just intent. */ const PLANNED = [ { icon: Shirt, labelKey: 'walletUi.appShop.tees' }, { icon: Package, labelKey: 'walletUi.appShop.decks' }, // 'Sticker packs' is rendered separately in the grid, because it is the one // entry that already contains something real: the free printables. { icon: Hammer, labelKey: 'walletUi.appShop.shopTools' }, ]; const PAY_CHIPS = [ { icon: Zap, labelKey: 'walletUi.appShop.lightning' }, { icon: Coins, labelKey: 'walletUi.appShop.cashu' }, { icon: MapPin, labelKey: 'walletUi.appShop.localHandover' }, ]; export default function AppShopPage() { const { t } = useTranslation(); useSeoMeta({ title: t('seoUi.appShopTitle'), description: 'SkateSpots merch, paid in sats over Lightning or Cashu. Nothing in stock yet — here is what is coming.', }); return (
{/* ── Hero ─────────────────────────────────────────────────────────── */}
{t('walletUi.appShop.comingSoon')}

{t('walletUi.appShop.wearThe')}
{t('walletUi.appShop.scene')}

{t('walletUi.appShop.heroDesc1')}{' '} {t('walletUi.appShop.locally')}{t('walletUi.appShop.heroDesc2')}{' '} sats{t('walletUi.appShop.heroDesc3')}

{t('walletUi.appShop.dmHint')}
{PAY_CHIPS.map(({ icon: Icon, labelKey }) => ( {t(labelKey)} ))}
{/* ── What's in the works ──────────────────────────────────────────── */}

{t('walletUi.appShop.inTheWorks')}

{t('walletUi.appShop.notForSale')}
{PLANNED.slice(0, 2).map(({ icon: Icon, labelKey }) => (

{t(labelKey)}

{t('walletUi.appShop.soon')}
))} {/* Sticker packs — the only thing you can actually GET today: the free printables. Kept inside its category (not a separate section) so the shop reads as one list of merch, free stuff included. */}

{t('walletUi.appShop.stickerPacks')}

{t('walletUi.appShop.stickerPacksDesc')}

{t('common.free')}
{FREE_PRINT.map((item) => (
{t('walletUi.appShop.printableAlt',

{t(item.titleKey)}

{item.size}

{t(item.tipKey)}

))}

{t('walletUi.appShop.printNote1')} {t('walletUi.appShop.actualSize')} {t('walletUi.appShop.printNote2')}

{PLANNED.slice(2).map(({ icon: Icon, labelKey }) => (

{t(labelKey)}

{t('walletUi.appShop.soon')}
))}
{/* ── How it'll work ───────────────────────────────────────────────── */}

{t('walletUi.appShop.howBuying')}

{t('walletUi.appShop.dmNotCart')}
    {[ { n: '1', tk: 'walletUi.appShop.step1Title', dk: 'walletUi.appShop.step1Desc', }, { n: '2', tk: 'walletUi.appShop.step2Title', dk: 'walletUi.appShop.step2Desc', }, { n: '3', tk: 'walletUi.appShop.step3Title', dk: 'walletUi.appShop.step3Desc', }, ].map((s) => (
  1. {s.n}

    {t(s.tk)}

    {t(s.dk)}

  2. ))}
); }