UNPKG

admesh-ui-sdk

Version:

Beautiful, modern React components for displaying AI-powered product recommendations with citation-based conversation ads, auto-triggered widgets, floating chat, conversational interfaces, persistent sidebar, and built-in tracking

312 lines (292 loc) 12.4 kB
import React, { useState, useEffect } from 'react'; import { AdMeshFloatingChat, AdMeshAutoRecommendationWidget } from 'admesh-ui-sdk'; // Sample recommendations for different contexts const crmRecommendations = [ { title: "HubSpot CRM", reason: "Perfect for growing businesses with excellent free tier and automation", intent_match_score: 0.94, admesh_link: "https://useadmesh.com/track?ad_id=hubspot-crm", ad_id: "hubspot-crm", product_id: "hubspot", has_free_tier: true, trial_days: 14, keywords: ["CRM", "Sales", "Free"], categories: ["Sales Tools"], features: ["Contact Management", "Deal Pipeline", "Email Integration"], pricing: "Free tier available" }, { title: "Salesforce Sales Cloud", reason: "Enterprise-grade CRM with advanced analytics and AI features", intent_match_score: 0.89, admesh_link: "https://useadmesh.com/track?ad_id=salesforce-sales", ad_id: "salesforce-sales", product_id: "salesforce", has_free_tier: false, trial_days: 30, keywords: ["CRM", "Enterprise", "AI"], categories: ["Sales Tools", "Enterprise"], features: ["Advanced Analytics", "AI Einstein", "Custom Objects"], pricing: "Starting from $25/user/month" } ]; const projectManagementRecommendations = [ { title: "Asana", reason: "Intuitive project management with excellent team collaboration", intent_match_score: 0.91, admesh_link: "https://useadmesh.com/track?ad_id=asana", ad_id: "asana", product_id: "asana", has_free_tier: true, trial_days: 0, keywords: ["Project Management", "Team", "Tasks"], categories: ["Project Management"], features: ["Task Management", "Timeline View", "Team Collaboration"], pricing: "Free for teams up to 15 members" } ]; export default function AutoRecommendationIntegration() { const [currentQuery, setCurrentQuery] = useState(''); const [autoRecommendations, setAutoRecommendations] = useState([]); const [autoTrigger, setAutoTrigger] = useState(''); const [showAutoWidget, setShowAutoWidget] = useState(false); const [integrationMode, setIntegrationMode] = useState('floating-auto'); // Simulate external application queries (like from your main app) const simulateExternalQuery = (query) => { setCurrentQuery(query); // Simulate AI processing delay setTimeout(() => { let recommendations = []; let trigger = query; if (query.toLowerCase().includes('crm') || query.toLowerCase().includes('sales')) { recommendations = crmRecommendations; } else if (query.toLowerCase().includes('project') || query.toLowerCase().includes('management')) { recommendations = projectManagementRecommendations; } else if (query.toLowerCase().includes('help') || query.toLowerCase().includes('software')) { recommendations = [...crmRecommendations.slice(0, 1), ...projectManagementRecommendations.slice(0, 1)]; } if (recommendations.length > 0) { setAutoRecommendations(recommendations); setAutoTrigger(trigger); setShowAutoWidget(true); } }, 1000); }; const handleRecommendationClick = (adId, admeshLink) => { console.log('Recommendation clicked:', { adId, admeshLink }); alert(`🎉 Recommendation clicked!\n\nProduct: ${adId}\nTracked link: ${admeshLink}\n\nThis would normally open the product page and track the conversion.`); }; const handleDismissRecommendations = () => { setAutoRecommendations([]); setAutoTrigger(''); setShowAutoWidget(false); }; const theme = { mode: 'light', accentColor: '#3b82f6' }; return ( <div className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100"> <div className="max-w-6xl mx-auto p-8"> {/* Header */} <div className="text-center mb-8"> <h1 className="text-4xl font-bold text-gray-900 mb-4"> AdMesh Auto-Recommendation Integration </h1> <p className="text-lg text-gray-600 mb-6"> Automatically show recommendations when users ask questions in your application </p> <div className="bg-blue-100 border border-blue-300 rounded-lg p-4 mb-6"> <p className="text-blue-800 font-medium"> 💡 This simulates how AdMesh integrates with AI applications like ChatGPT, Claude, etc. </p> </div> </div> {/* Integration Mode Selector */} <div className="bg-white rounded-lg shadow-lg p-6 mb-8"> <h2 className="text-2xl font-semibold mb-4">Integration Modes</h2> <div className="grid grid-cols-1 md:grid-cols-2 gap-4 mb-6"> <button onClick={() => setIntegrationMode('floating-auto')} className={`p-4 rounded-lg border-2 transition-colors text-left ${ integrationMode === 'floating-auto' ? 'border-blue-600 bg-blue-50' : 'border-gray-200 hover:border-gray-300' }`} > <h3 className="font-semibold text-gray-900 mb-2">Floating Chat (Auto-Recommendations)</h3> <p className="text-sm text-gray-600"> Automatically shows recommendations in floating chat without requiring user input </p> </button> <button onClick={() => setIntegrationMode('auto-widget')} className={`p-4 rounded-lg border-2 transition-colors text-left ${ integrationMode === 'auto-widget' ? 'border-blue-600 bg-blue-50' : 'border-gray-200 hover:border-gray-300' }`} > <h3 className="font-semibold text-gray-900 mb-2">Auto-Recommendation Widget</h3> <p className="text-sm text-gray-600"> Standalone widget that appears automatically with recommendations </p> </button> </div> </div> {/* Simulated Application Interface */} <div className="bg-white rounded-lg shadow-lg p-6 mb-8"> <h2 className="text-2xl font-semibold mb-4">Your Application Interface</h2> <p className="text-gray-600 mb-6"> This simulates your main application where users ask questions. When they ask about software or tools, AdMesh automatically shows relevant recommendations. </p> {/* Simulated Query Input */} <div className="bg-gray-50 rounded-lg p-4 mb-4"> <h3 className="font-medium text-gray-900 mb-3">Simulate User Query</h3> <div className="grid grid-cols-1 md:grid-cols-3 gap-3"> <button onClick={() => simulateExternalQuery("I need a CRM system for my sales team")} className="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors text-sm" > "I need a CRM system" </button> <button onClick={() => simulateExternalQuery("What's the best project management tool?")} className="px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 transition-colors text-sm" > "Project management tool" </button> <button onClick={() => simulateExternalQuery("Help me find business software")} className="px-4 py-2 bg-purple-600 text-white rounded-lg hover:bg-purple-700 transition-colors text-sm" > "Business software help" </button> </div> </div> {/* Current Query Display */} {currentQuery && ( <div className="bg-blue-50 border border-blue-200 rounded-lg p-4 mb-4"> <h4 className="font-medium text-blue-900 mb-2">Current User Query:</h4> <p className="text-blue-800">"{currentQuery}"</p> {autoRecommendations.length > 0 && ( <p className="text-sm text-blue-600 mt-2"> ✅ {autoRecommendations.length} recommendations found and displayed automatically! </p> )} </div> )} {/* Integration Code Example */} <div className="bg-gray-100 rounded-lg p-4"> <h4 className="font-medium text-gray-900 mb-2">Integration Code:</h4> <pre className="text-sm text-gray-700 overflow-x-auto"> {integrationMode === 'floating-auto' ? `// Floating Chat with Auto-Recommendations <AdMeshFloatingChat autoRecommendations={recommendations} autoRecommendationTrigger={userQuery} autoShowRecommendations={true} showInputField={false} config={{ position: 'bottom-right', size: 'md', autoOpen: true }} onRecommendationClick={(adId, link) => { trackClick(adId); window.open(link, '_blank'); }} onAutoRecommendationDismiss={() => { clearRecommendations(); }} />` : `// Auto-Recommendation Widget <AdMeshAutoRecommendationWidget recommendations={recommendations} trigger={userQuery} autoShow={true} showDelay={1000} position="bottom-right" size="md" onRecommendationClick={(adId, link) => { trackClick(adId); window.open(link, '_blank'); }} onDismiss={() => { clearRecommendations(); }} />`} </pre> </div> </div> {/* How It Works */} <div className="bg-white rounded-lg shadow-lg p-6"> <h2 className="text-2xl font-semibold mb-4">How It Works</h2> <div className="grid grid-cols-1 md:grid-cols-3 gap-6"> <div className="text-center"> <div className="w-12 h-12 bg-blue-100 rounded-lg flex items-center justify-center mx-auto mb-3"> <span className="text-blue-600 font-bold">1</span> </div> <h3 className="font-semibold text-gray-900 mb-2">User Asks Question</h3> <p className="text-sm text-gray-600"> User asks about software, tools, or services in your application </p> </div> <div className="text-center"> <div className="w-12 h-12 bg-green-100 rounded-lg flex items-center justify-center mx-auto mb-3"> <span className="text-green-600 font-bold">2</span> </div> <h3 className="font-semibold text-gray-900 mb-2">AI Processes Query</h3> <p className="text-sm text-gray-600"> Your AI processes the query and identifies relevant product categories </p> </div> <div className="text-center"> <div className="w-12 h-12 bg-purple-100 rounded-lg flex items-center justify-center mx-auto mb-3"> <span className="text-purple-600 font-bold">3</span> </div> <h3 className="font-semibold text-gray-900 mb-2">Auto-Show Recommendations</h3> <p className="text-sm text-gray-600"> AdMesh automatically displays relevant recommendations without user input </p> </div> </div> </div> </div> {/* AdMesh Components */} {integrationMode === 'floating-auto' && autoRecommendations.length > 0 && ( <AdMeshFloatingChat autoRecommendations={autoRecommendations} autoRecommendationTrigger={autoTrigger} autoShowRecommendations={true} showInputField={false} config={{ position: 'bottom-right', size: 'md', displayMode: 'widget', autoOpen: true }} theme={theme} title="AI Recommendations" subtitle="Based on your query" onRecommendationClick={handleRecommendationClick} onAutoRecommendationDismiss={handleDismissRecommendations} /> )} {integrationMode === 'auto-widget' && showAutoWidget && ( <AdMeshAutoRecommendationWidget recommendations={autoRecommendations} trigger={autoTrigger} theme={theme} autoShow={true} showDelay={1000} position="bottom-right" size="md" onRecommendationClick={handleRecommendationClick} onDismiss={handleDismissRecommendations} /> )} </div> ); }