Sasquatch: teach him all the new features + fix zap comment
- Expand AI system prompt with full feature map: Lab (coaches/filmers/ photographers/editors/builders + individual vs collective), Crews (map-anchored, how they differ from the Lab), Stash, Tours, Shops, Gear Swap, Rider Card - Document money layer interconnections: wallet rails (Cashu/NWC/WebLN), zap fallback order, nutzaps (NIP-61, receiving), CLINK/noffer, Geyser supporters - Instruct Sasquatch that Crews/Stash/Wallet/Tours/Shops have no live search tool and must be answered from knowledge (prevents bogus tool calls) - Add ~15 new STATIC_FAQ offline answers (crews, stash, builder, nutzap, clink, noffer, tours, shops, sell gear, supporters) - Add Crews page guide context + crew jokes; refresh Lab suggestions - Fix leftover "Zapped with Engorile!" default comment → SkateSpots branding Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
This commit is contained in:
parent
28f4ef8c34
commit
ed27f719fa
3 changed files with 81 additions and 17 deletions
|
|
@ -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<string, string> = {
|
|||
'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,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -428,7 +428,7 @@ export function ZapDialog({ target, children, className }: ZapDialogProps) {
|
|||
|
||||
useEffect(() => {
|
||||
if (target) {
|
||||
setComment('Zapped with Engorile!');
|
||||
setComment('Zapped on SkateSpots! 🛹');
|
||||
}
|
||||
}, [target]);
|
||||
|
||||
|
|
|
|||
|
|
@ -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') {
|
||||
|
|
|
|||
Loading…
Reference in a new issue