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: 'App Shop — SkateSpots', description: 'SkateSpots merch, paid in sats over Lightning or Cashu. Nothing in stock yet — here is what is coming.', }); return (
{t('walletUi.appShop.heroDesc1')}{' '} {t('walletUi.appShop.locally')}{t('walletUi.appShop.heroDesc2')}{' '} sats{t('walletUi.appShop.heroDesc3')}
{t(labelKey)}
{t('walletUi.appShop.stickerPacks')}
{t('walletUi.appShop.stickerPacksDesc')}
{t(item.titleKey)}
{item.size}
{t('walletUi.appShop.printNote1')} {t('walletUi.appShop.actualSize')} {t('walletUi.appShop.printNote2')}
{t(labelKey)}
{t(s.tk)}
{t(s.dk)}