diff --git a/src/components/SasquatchGuide.tsx b/src/components/SasquatchGuide.tsx index 45ba9f8..0649cd5 100644 --- a/src/components/SasquatchGuide.tsx +++ b/src/components/SasquatchGuide.tsx @@ -159,6 +159,7 @@ Example: {"tool":"find_events","args":{"city":"Bangkok"}} ### find_coaches Args: role?("coach"|"filmer"|"editor"|"any"), skills?(string[]), location?(string), limit?(number) +- Covers all The Lab service providers: coaches, filmers, photographers, editors, and ramp/park builders - location searches name, bio, city tag — use the CITY name not country name for best results - "coaches in Thailand" → use location:"Bangkok" (main city) - "coaches in Bangkok" → use location:"Bangkok" @@ -182,19 +183,32 @@ Example: {"tool":"get_weather","args":{"city":"Barcelona"}} ## Rules 1. Data questions (spots/events/coaches/gear/stats) → ALWAYS use a tool, never guess 2. Tool call = ONE JSON object on its own line, nothing else before or after -3. App/protocol questions → answer directly +3. App/protocol/how-to questions → answer directly (no tool). Crews, Stash, Wallet, Tours, Shops, Supporters have NO live search tool — answer these from the App facts below and point users to the right page. 4. Be concise, skater-friendly 5. Never invent spot names, event dates, or user data 6. 0 results = honest "none listed yet" + encourage adding content -## App facts -- Nostr = decentralized, cryptographic keys = your identity -- Zaps = instant Bitcoin Lightning tips -- NWC = Nostr Wallet Connect for Lightning wallets -- Cashu = offline ecash wallet built in -- The Lab = find coaches, filmers, video editors +## App facts (features & how they connect) +- Nostr = decentralized protocol; your cryptographic keys ARE your identity — one login works everywhere, nobody can ban you +- Map (the homepage) = discover spots, shops, gear, tours, events and crews worldwide. Toggle layers via the Layers control. Add a spot with the + button. +- The Lab = hire skate-scene pros: Coaches, Filmers, Photographers, Video Editors, and ramp/park/DIY Builders. Providers can be an individual OR a collective (crew/studio) — collective members confirm with their own key (green = confirmed, amber = pending). +- Crews = your map-anchored skate family (who you skate with, NOT for hire). A crew has home turf on the map (teal pins), home spots, members, vibes and a manifesto. Create one at /crews → "Start a Crew". Crews reuse the same member-confirmation trust as Lab collectives. +- Events = find/join skate events & comps (map layer + Events page) +- Tours = guided local/national/world skate tours +- Skate Shops = local shops on the map +- Gear Swap / Marketplace = buy & sell used gear (NIP-99 listings), can be pinned to a spot on the map +- My Stash = your PRIVATE, encrypted gear inventory (NIP-44). Track decks/trucks/wheels/shoes, storage location, condition, rarity, price. Only you can read it unless you mark items public. +- Rider Card = your skate ID / park access card +- Trust scores (0-100, powered by Relatr) filter bots/spam across the app + +## Money & wallet (all interconnected) +- Wallet page = one place for it all. Three rails, auto-detected: Cashu (built-in ecash), NWC (connect Alby/Minibits/Zeus/Coinos), and WebLN (browser extension). +- Zaps = instant Bitcoin Lightning tips on any content (⚡). Zapping auto-picks your best rail: NWC → WebLN → Cashu balance → manual QR. Works from spots, profiles, crews, Lab profiles, events. +- Cashu = built-in ecash wallet, private and works offline at the skatepark. Pay zaps straight from your Cashu balance. +- Nutzaps (NIP-61) = ecash tips sent over Nostr; you can set up nutzap RECEIVING in the wallet (sending full nutzaps is rolling out — use Lightning zaps for now). +- CLINK (noffer) = an optional reusable Nostr-native payment code a shop/crew/Lab pro can add so you can pay them without a Lightning address. Shows a "Pay via CLINK" button. - goskatespots.nostr1.com = primary community relay -- 100% free, no ads, no tracking 🛹`; +- 100% free, no ads, no tracking, community-funded via Geyser (see Supporters). 🛹`; // ─── Detect if a question needs live CVM data ───────────────────────────────── @@ -222,9 +236,22 @@ const STATIC_FAQ: Record = { 'how to login': "Two ways:\n1. **Browser extension** (Desktop): Install Alby or nos2x, then click 'Log in'\n2. **New user**: Click 'Sign up' to generate keys. Download your nsec (secret key) and SAVE IT — this is your account forever!", 'what is cashu': "Built-in Bitcoin wallet! Cashu ecash tokens backed by Lightning — works offline at skate spots, privacy-focused (mints can't track payments). Go to Wallet in Settings to use it. 🥜", 'what is nwc': "Nostr Wallet Connect — like USB-C for Lightning wallets. Connect Alby, Minibits, Zeus, or Coinos once, and zap with one click forever. Encrypted, you control spending limits. 🔌⚡", - 'is it free': "100% free. No ads, no subscriptions, no corporate BS. Built by skaters for skaters. You can earn Bitcoin through community zaps for contributing quality spots. 🛹", - 'what can i do': "Discover spots worldwide, connect with coaches & filmers in The Lab, join events, sell/buy gear, earn sats for contributions, zap creators, check spot weather, and build the decentralized skate community!", - 'what is the lab': "The Lab is where skaters level up! Marketplace for coaching and filming services. Find coaches to learn tricks, filmers to capture sessions, video editors. All on Nostr — real skaters, no fake accounts. 🎓", + 'is it free': "100% free. No ads, no subscriptions, no corporate BS. Built by skaters for skaters. Community-funded via Geyser — check the Supporters page. You can also earn Bitcoin through community zaps for contributing quality spots. 🛹", + 'what can i do': "Discover spots worldwide on the map, hire pros in The Lab (coaches, filmers, photographers, editors, ramp builders), roll with a crew, join events, take tours, buy/sell gear, track your private Stash, zap creators, check spot weather, and build the decentralized skate community!", + 'what is the lab': "The Lab is where you hire skate-scene pros: Coaches, Filmers, Photographers, Video Editors, and ramp/park/DIY Builders. Each can be a solo person or a collective (crew/studio) — members confirm with their own keys so it's legit. All on Nostr, no fake accounts. 🎓", + 'what is a crew': "Crews are your map-anchored skate family — who you skate WITH, not who you hire. Each crew has home turf on the map (teal pins), home spots, members, vibes and a manifesto. Members confirm from their own key. Start one at Crews → 'Start a Crew'. 🤘", + 'what are crews': "Crews are your map-anchored skate family — who you skate WITH, not who you hire. Each crew has home turf on the map (teal pins), home spots, members and a manifesto. Members confirm from their own key. Head to the Crews tab to start or join one! 🤘", + 'how to start a crew': "Go to the Crews tab → 'Start a Crew'. Name it, drop your home turf on the map, add vibes (or your own custom #hashtag), link your home spots, and add members by npub. Each member confirms from their own key so the roster is legit. 🤘", + 'what is my stash': "My Stash is your PRIVATE, encrypted gear locker (NIP-44 encryption). Track your decks, trucks, wheels, shoes — with storage location, condition, rarity and price. Only YOU can read it unless you mark items public. Great for insurance or planning a swap. 🎒", + 'what is stash': "My Stash is your PRIVATE, encrypted gear inventory. Log everything you own — condition, where it's stored, value — all encrypted so only you can see it. Mark items public if you want to sell or show them off. 🎒", + 'what is a builder': "Builders are ramp/park/DIY crews in The Lab you can hire to build transitions, bowls, rails, or a whole park. They list what they build, materials, project scale, and can be licensed/insured. Often collectives — and they can link the spots they've built to the map. 🏗️", + 'what is a nutzap': "Nutzaps (NIP-61) are ecash tips sent over Nostr — private Cashu tokens zapped straight to someone. You can set up nutzap RECEIVING in the Wallet. (Sending full nutzaps is rolling out — for now use Lightning zaps.) 🥜⚡", + 'what is clink': "CLINK is a Nostr-native payment code (an 'noffer'). Shops, crews, and Lab pros can add one so you can pay them without needing a Lightning address — you'll see a 'Pay via CLINK' button with a QR. Scan it with a CLINK wallet like ShockWallet. 🔗⚡", + 'what is noffer': "An noffer is a CLINK payment code — a reusable, Nostr-native way to get paid without a web server or Lightning address. Add yours on your shop/crew/Lab profile and people can pay you directly. 🔗", + 'what are tours': "Tours are guided skate trips — local sessions, national road trips, or world destruction tours. Find them on the map or the Tours section, meet up, and skate new terrain with locals. 🗺️🛹", + 'what is a shop': "Skate Shops are local shops listed on the map. Discover and support real brick-and-mortar (or online) skate shops in your area — some even accept Bitcoin. 🏪", + 'how to sell gear': "Head to Gear Swap / Marketplace and create a listing (NIP-99). Add photos, price in sats, condition, and optionally pin it to a spot so it shows on the map. Buyers zap or message you directly. 🛹💸", + 'supporters': "SkateSpots is community-funded via Geyser (Bitcoin Lightning crowdfunding) — no ads, no investors, no data selling. Check the Supporters page to chip in and keep the streets free. ❤️⚡", 'trust score': "Trust scores (0-100) powered by Relatr. Analyzes your Nostr network: followers, activity, engagement, zaps. Higher = more trusted. Helps filter bots and spam. Check any profile to see their score. 🛡️", 'what relay': "SkateSpots uses: 🛹 goskatespots.nostr1.com (primary, allowlisted for quality) + relay.ditto.pub (global) + purplepag.es (profile aggregator). Your data is replicated across all of them for redundancy.", }; @@ -605,10 +632,10 @@ Instructions: suggestedQuestions: [ 'Find spots near me', 'Any upcoming events?', - 'What is Nostr?', + 'What are crews?', 'How do zaps work?', 'What is My Stash?', - 'How to add a spot?', + 'What is the Lab?', ], enableChat: true, }; diff --git a/src/components/ZapDialog.tsx b/src/components/ZapDialog.tsx index c2388d3..b0198e3 100644 --- a/src/components/ZapDialog.tsx +++ b/src/components/ZapDialog.tsx @@ -428,7 +428,7 @@ export function ZapDialog({ target, children, className }: ZapDialogProps) { useEffect(() => { if (target) { - setComment('Zapped with Engorile!'); + setComment('Zapped on SkateSpots! 🛹'); } }, [target]); diff --git a/src/hooks/useSasquatchGuide.ts b/src/hooks/useSasquatchGuide.ts index 151a70b..391655f 100644 --- a/src/hooks/useSasquatchGuide.ts +++ b/src/hooks/useSasquatchGuide.ts @@ -33,6 +33,16 @@ const MAP_JOKES = [ "Why do sasquatches love maps? Because X marks the spot... and we ALWAYS find it! ❌" ]; +// Crew jokes — for the Crews page +const CREW_JOKES = [ + "Why did the crew skate together? Because a board shared is a board doubled! 🤘", + "What do you call a sasquatch's skate crew? The Bigfoot Brigade — we leave big tracks! 🦧", + "A crew is like grip tape — sticks together and keeps everyone from slipping. 🛹", + "Why did the crew claim a home spot? So the locals always know where to drop in! 📍", + "What's better than landing a trick? Landing it with your crew watching. 🎥", + "Crews don't gatekeep spots — they open gates. Come roll with one! 🤘", +]; + // Get a random joke from a specific category function getRandomJoke(jokes: string[]): string { return jokes[Math.floor(Math.random() * jokes.length)]; @@ -135,12 +145,12 @@ export function useSasquatchGuide() { suggestedQuestions: [ 'Find coaches', 'Find filmers', + 'Find photographers', 'Find video editors', - 'Find street coaches', + 'Find a ramp builder', 'What is The Lab?', + 'What is a builder?', 'How to offer coaching?', - 'How much does coaching cost?', - 'Can I message coaches?', ], action: user ? undefined : { label: 'Login to Offer Services', @@ -154,6 +164,33 @@ export function useSasquatchGuide() { }; } + // Show on the Crews page + else if (location.pathname === '/crews') { + const joke = getRandomJoke(CREW_JOKES); + message = { + id: 'crews-guide', + title: 'Crews 🤘', + message: `Crews are your map-anchored skate family — the people you skate WITH, not who you hire. Every crew has home turf on the map, home spots, members and a manifesto. Members confirm from their own keys, so the roster's legit. Start your own or find your people!\n\n${joke}`, + context: undefined, + suggestedQuestions: [ + 'What are crews?', + 'How to start a crew?', + 'How is a crew different from The Lab?', + 'How do members confirm?', + 'What is Nostr?', + 'How do zaps work?', + ], + action: user ? undefined : { + label: 'Login to Start a Crew', + onClick: () => { + window.location.href = '/onboarding'; + }, + }, + enableChat: true, + autoShow: false, + }; + } + // /map: never auto-show — user opens Sasquatch by tapping the floating bubble // The map guide context + jokes are still available in the generic fallback inside SasquatchGuide else if (location.pathname === '/map') {