From f9c0f3c5ac2b064e674dfa1cbc403b5a6cc5be3a Mon Sep 17 00:00:00 2001 From: "shakespeare.diy" Date: Wed, 17 Jun 2026 12:50:41 +0700 Subject: [PATCH] feat: redesign Sasquatch UI - dark jungle aesthetic, mobile-first - Dark forest green + neon lime (#ccff00) theme matching app's THUG2 aesthetic - Mobile: compact strip above bottom nav, no more full-width overlay - Minimized: small round button with neon pulse, lives at bottom-left - Jungle texture strips top/bottom, dark gradient background - Chat bubbles: neon red for user, neon lime for Sasquatch - Input styled to match dark app theme - Neon glow effects, live dot indicator - Works cleanly on all screen sizes Co-authored-by: shakespeare.diy --- src/components/SasquatchGuide.tsx | 226 +++++++++++++++++------------- 1 file changed, 125 insertions(+), 101 deletions(-) diff --git a/src/components/SasquatchGuide.tsx b/src/components/SasquatchGuide.tsx index a9d053c..f26f11d 100644 --- a/src/components/SasquatchGuide.tsx +++ b/src/components/SasquatchGuide.tsx @@ -200,15 +200,15 @@ function CVMStatus({ connected }: { connected: boolean | null }) { if (connected === null) return null; return (
{connected ? ( - <> Live + <> live ) : ( - <> Offline + <> offline )}
); @@ -403,148 +403,168 @@ Instructions: return ( <> - {/* Minimized bubble */} - {isMinimized ? ( -
- + {/* Neon pulse ring */} + + {/* Live dot */} + +
- ) : ( - /* Full guide panel */ + )} + + {/* ── Full panel ── */} + {!isMinimized && (
-
+ {/* Jungle/dark card */} +
+ {/* Jungle texture strip at top */} +
{/* Header */} -
+
The Sasquatch - - - - +
-
- {message.title} - 🛹 +
+ + 🦧 Sasquatch +
-
- The Sasquatch - AI +
+ {message.title}
-
- - +
- {/* Greeting message */} -
-

+ {/* Body */} +

+ {/* Greeting */} +

{message.message}

{/* Action button */} {message.action && ( - + )} {/* Chat section */} {message.enableChat && ( -
+
{!showChat ? ( - + {!message.context && 'Ask me anything 🛹'} + ) : ( -
+
- {/* Suggested questions (before any chat) */} + {/* Suggested questions */} {chatMessages.length === 0 && message.suggestedQuestions && ( -
-
- Quick Questions: +
+
+ Quick questions:
{message.suggestedQuestions.map((q) => ( - + ))}
)} {/* Chat history */} {(chatMessages.length > 0 || streamingText) && ( - +
{chatMessages.map((msg, idx) => (
-
+
{msg.role === 'user' ? '🧑 You' : '🦧 Sasquatch'} {msg.isLive && ( - + live )} @@ -553,16 +573,16 @@ Instructions:
))} - {/* Streaming / thinking indicator */} + {/* Thinking indicator */} {(isThinking || streamingText) && ( -
-
🦧 Sasquatch
+
+
🦧 Sasquatch
{streamingText ? ( - {streamingText} + {streamingText} ) : ( - - - thinking... + + + thinking... )}
@@ -572,50 +592,54 @@ Instructions: )} {/* Input row */} -
+
setUserInput(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && !inputDisabled && handleSendMessage()} - placeholder="Ask anything about skating..." + placeholder="Ask about spots, events, coaches..." disabled={inputDisabled} - className="text-sm border-amber-300 focus-visible:ring-amber-400" + className="text-xs h-8 bg-black/40 border-[#ccff00]/20 text-white placeholder:text-gray-600 focus-visible:ring-[#ccff00]/40 focus-visible:border-[#ccff00]/40" /> - +
- {/* AI badge */} -

- Powered by AI — free for everyone 🛹 -

+ {/* Footer */} +
+

+ Powered by AI · live Nostr data 🛹 +

+ {chatMessages.length > 0 && ( + + )} +
- {/* Reset */} - {chatMessages.length > 0 && ( - - )}
)}
)}
+ + {/* Bottom jungle strip */} +
)}