diff --git a/landing-pages/site-generator.js b/landing-pages/site-generator.js index 398a0b7..6be9448 100644 --- a/landing-pages/site-generator.js +++ b/landing-pages/site-generator.js @@ -552,9 +552,717 @@ const siteConfigs = { } }; +// Chat demo data — platform-specific conversations with embedded data widgets +const chatDemoData = { + calendly: { + initials: 'CL', + messages: [ + { type: 'user', text: 'What does my schedule look like this week? Any double-bookings?' }, + { type: 'ai', text: 'Here\'s your week at a glance:', widget: 'scheduling', + widgetData: { + type: 'schedule', + rows: [ + { day: 'Mon', count: 4, status: 'green', label: 'Light' }, + { day: 'Tue', count: 7, status: 'amber', label: 'Busy' }, + { day: 'Wed', count: 9, status: 'red', label: 'Full' }, + { day: 'Thu', count: 3, status: 'green', label: 'Light' }, + { day: 'Fri', count: 6, status: 'amber', label: 'Busy' } + ], + alert: '⚠ 1 conflict: Tue 2-3pm overlap' + } + }, + { type: 'user', text: 'Fix the Tuesday conflict and block Friday afternoon for deep work' }, + { type: 'ai', text: 'Done! Rescheduled the 2pm to 3:30pm and blocked Fri 1-5pm. The invitee has been notified automatically.', action: '✓ Conflict resolved · 1 rescheduled · 1 block created' } + ] + }, + zendesk: { + initials: 'ZD', + messages: [ + { type: 'user', text: 'Show me the current ticket backlog. Anything about to breach SLA?' }, + { type: 'ai', text: 'Here\'s your real-time queue:', widget: 'support', + widgetData: { + type: 'tickets', + rows: [ + { id: '#4281', subject: 'Login failures - Enterprise', priority: 'red', label: 'Urgent', time: '12m left' }, + { id: '#4279', subject: 'Billing discrepancy Q4', priority: 'amber', label: 'High', time: '2h left' }, + { id: '#4277', subject: 'API rate limit questions', priority: 'green', label: 'Normal', time: '6h left' }, + { id: '#4275', subject: 'Feature request: SSO', priority: 'green', label: 'Low', time: '1d left' } + ], + summary: '34 open · 3 breaching · Avg response: 1.4h' + } + }, + { type: 'user', text: 'Auto-respond to #4281 with our login troubleshooting guide and escalate to Tier 2' }, + { type: 'ai', text: 'Done! Sent the KB article "Login Troubleshooting (Enterprise)" to the customer and escalated to Tier 2 with full context attached.', action: '✓ Auto-reply sent · Escalated to Tier 2 · SLA preserved' } + ] + }, + trello: { + initials: 'TR', + messages: [ + { type: 'user', text: 'What\'s the status of our Q1 launch board? Any blockers?' }, + { type: 'ai', text: 'Here\'s your sprint board:', widget: 'project', + widgetData: { + type: 'board', + columns: [ + { name: 'To Do', count: 5, color: '#6B7280' }, + { name: 'In Progress', count: 8, color: '#F59E0B' }, + { name: 'Review', count: 3, color: '#8B5CF6' }, + { name: 'Done', count: 14, color: '#10B981' } + ], + alert: '⚠ 2 cards overdue · 1 blocked on design approval' + } + }, + { type: 'user', text: 'Move the 3 review cards to done and assign next sprint\'s top priority to Sarah' }, + { type: 'ai', text: 'All 3 review cards moved to Done. Assigned "API Integration v2" to Sarah with a Monday deadline. Board completion is now at 57%.', action: '✓ 3 cards moved · 1 assigned · Sprint updated' } + ] + }, + gusto: { + initials: 'GU', + messages: [ + { type: 'user', text: 'Payroll is due Friday. What\'s the status and are there any issues?' }, + { type: 'ai', text: 'Here\'s your payroll summary:', widget: 'payroll', + widgetData: { + type: 'metrics', + cards: [ + { label: 'Gross Payroll', value: '$184,230', change: '+3.2%' }, + { label: 'Employees', value: '47', change: '0' }, + { label: 'Pending Items', value: '3', change: 'action' } + ], + alert: '⚠ 3 items need attention: 2 missing timesheets, 1 address change' + } + }, + { type: 'user', text: 'Send reminders to the 2 missing timesheets and approve the address change' }, + { type: 'ai', text: 'Reminders sent to Jake M. and Lisa T. for timesheet submission. Address change for Marcus W. approved and updated in tax records.', action: '✓ 2 reminders sent · 1 address change approved · Payroll on track' } + ] + }, + mailchimp: { + initials: 'MC', + messages: [ + { type: 'user', text: 'How did last week\'s campaign perform? Compare to our averages.' }, + { type: 'ai', text: 'Here\'s your campaign breakdown:', widget: 'marketing', + widgetData: { + type: 'metrics', + cards: [ + { label: 'Open Rate', value: '34.2%', change: '+8.1%' }, + { label: 'Click Rate', value: '4.7%', change: '+2.3%' }, + { label: 'Revenue', value: '$12,840', change: '+41%' } + ], + alert: '🏆 Best performing campaign this quarter' + } + }, + { type: 'user', text: 'Create a follow-up campaign for people who opened but didn\'t click' }, + { type: 'ai', text: 'Created "Re-engagement - Product Focus" targeting 1,847 subscribers who opened without clicking. Subject line A/B test ready with send time optimized for Thursday 10am.', action: '✓ Campaign created · 1,847 recipients · A/B test ready' } + ] + }, + clickup: { + initials: 'CU', + messages: [ + { type: 'user', text: 'Show me our sprint progress and who\'s overloaded this week' }, + { type: 'ai', text: 'Here\'s your sprint overview:', widget: 'project', + widgetData: { + type: 'board', + columns: [ + { name: 'Backlog', count: 12, color: '#6B7280' }, + { name: 'Active', count: 9, color: '#3B82F6' }, + { name: 'Review', count: 4, color: '#F59E0B' }, + { name: 'Complete', count: 18, color: '#10B981' } + ], + alert: '⚠ Alex: 14 tasks (over capacity) · Sprint: 62% done' + } + }, + { type: 'user', text: 'Redistribute Alex\'s lower-priority tasks to team members with capacity' }, + { type: 'ai', text: 'Moved 5 tasks from Alex: 2 to Jordan, 2 to Sam, 1 to Maya. All assignees notified. Alex is now at 9 tasks (within capacity).', action: '✓ 5 tasks redistributed · Team rebalanced · Notifications sent' } + ] + }, + acuity: { + initials: 'AC', + messages: [ + { type: 'user', text: 'How\'s booking volume looking for this month? Any patterns?' }, + { type: 'ai', text: 'Here\'s your booking dashboard:', widget: 'scheduling', + widgetData: { + type: 'schedule', + rows: [ + { day: 'Week 1', count: 34, status: 'green', label: '34 appts' }, + { day: 'Week 2', count: 41, status: 'green', label: '41 appts' }, + { day: 'Week 3', count: 28, status: 'amber', label: '28 appts' }, + { day: 'Week 4', count: 18, status: 'red', label: '18 appts' } + ], + alert: '📉 Booking drop-off in Weeks 3-4 · 4 no-shows this month' + } + }, + { type: 'user', text: 'Send reminder emails for all upcoming appointments and offer discounts to fill slow days' }, + { type: 'ai', text: 'Sent 24-hour reminders to all 46 upcoming appointments. Created a 15% off promotion for Week 4 slots and emailed to 230 past clients.', action: '✓ 46 reminders queued · Promo campaign sent to 230 clients' } + ] + }, + squarespace: { + initials: 'SQ', + messages: [ + { type: 'user', text: 'How\'s the store performing? What are our top products this week?' }, + { type: 'ai', text: 'Here\'s your store dashboard:', widget: 'ecommerce', + widgetData: { + type: 'metrics', + cards: [ + { label: 'Revenue', value: '$8,420', change: '+12%' }, + { label: 'Orders', value: '127', change: '+8%' }, + { label: 'Avg Order', value: '$66.30', change: '+3.5%' } + ], + alert: '🔥 Top seller: "Minimalist Desk Lamp" — 43 units this week' + } + }, + { type: 'user', text: 'The desk lamp is almost out of stock. Mark it limited edition and update the homepage banner' }, + { type: 'ai', text: 'Updated "Minimalist Desk Lamp" with "Limited Edition - Only 12 Left" badge. Homepage banner now features it with urgency messaging. SEO meta updated too.', action: '✓ Product badge added · Homepage updated · SEO refreshed' } + ] + }, + brevo: { + initials: 'BV', + messages: [ + { type: 'user', text: 'Show me our email + SMS performance this month. Which channel converts better?' }, + { type: 'ai', text: 'Here\'s your multi-channel breakdown:', widget: 'marketing', + widgetData: { + type: 'metrics', + cards: [ + { label: 'Email Conv.', value: '3.2%', change: '+0.4%' }, + { label: 'SMS Conv.', value: '7.8%', change: '+1.2%' }, + { label: 'Total Rev.', value: '$24,150', change: '+18%' } + ], + alert: '📱 SMS outperforms email 2.4x on conversion rate' + } + }, + { type: 'user', text: 'Shift 30% of next campaign budget to SMS and create a flash sale sequence' }, + { type: 'ai', text: 'Created "Flash Friday" campaign: 3-SMS sequence over 6 hours with email backup for non-openers. Budget reallocated: 70/30 email-to-SMS split.', action: '✓ Campaign built · Budget split 70/30 · Launches Friday 9am' } + ] + }, + wrike: { + initials: 'WR', + messages: [ + { type: 'user', text: 'We have a client deliverable Thursday. Where are we on the project?' }, + { type: 'ai', text: 'Here\'s the project status:', widget: 'project', + widgetData: { + type: 'board', + columns: [ + { name: 'Not Started', count: 2, color: '#EF4444' }, + { name: 'In Progress', count: 5, color: '#F59E0B' }, + { name: 'In Review', count: 3, color: '#8B5CF6' }, + { name: 'Approved', count: 11, color: '#10B981' } + ], + alert: '⚠ 2 tasks not started · Deadline: 48 hours · At risk' + } + }, + { type: 'user', text: 'Assign the 2 unstarted tasks to available team members and fast-track the reviews' }, + { type: 'ai', text: 'Assigned "Asset Export" to Chris (available) and "QA Checklist" to Dana. Sent review nudges to 3 approvers with Thursday deadline flagged.', action: '✓ 2 tasks assigned · 3 review reminders sent · Deadline tracked' } + ] + }, + bamboohr: { + initials: 'BH', + messages: [ + { type: 'user', text: 'We have 3 new hires starting Monday. What\'s their onboarding status?' }, + { type: 'ai', text: 'Here\'s the onboarding tracker:', widget: 'hr', + widgetData: { + type: 'tickets', + rows: [ + { id: 'Sarah K.', subject: 'Engineering - 8/12 tasks done', priority: 'amber', label: '67%', time: 'Laptop pending' }, + { id: 'Marcus L.', subject: 'Sales - 11/12 tasks done', priority: 'green', label: '92%', time: 'Ready' }, + { id: 'Priya R.', subject: 'Design - 5/12 tasks done', priority: 'red', label: '42%', time: '7 items left' } + ], + summary: 'Mon start date · 2 of 3 on track' + } + }, + { type: 'user', text: 'Rush Priya\'s remaining items and order Sarah\'s laptop' }, + { type: 'ai', text: 'Sent IT ticket for Sarah\'s MacBook Pro (expedited). Notified Priya\'s 4 task owners with urgent flags. Benefits enrollment link sent to all 3.', action: '✓ Laptop ordered · 4 urgent reminders · Benefits links sent' } + ] + }, + freshbooks: { + initials: 'FB', + messages: [ + { type: 'user', text: 'How\'s cash flow looking? Any overdue invoices I should worry about?' }, + { type: 'ai', text: 'Here\'s your financial snapshot:', widget: 'accounting', + widgetData: { + type: 'pnl', + rows: [ + { label: 'Revenue (MTD)', value: '$42,800', trend: 'up' }, + { label: 'Outstanding', value: '$18,350', trend: 'neutral' }, + { label: 'Overdue (>30d)', value: '$7,200', trend: 'down' }, + { label: 'Expenses (MTD)', value: '$24,100', trend: 'neutral' } + ], + alert: '⚠ 3 invoices overdue >30 days totaling $7,200' + } + }, + { type: 'user', text: 'Send follow-ups on the 3 overdue invoices. Firm but professional tone.' }, + { type: 'ai', text: 'Sent personalized follow-ups to all 3: Acme Corp ($3,200), TechFlow ($2,800), and Bright Solutions ($1,200). Each includes a direct payment link and 5-day grace period.', action: '✓ 3 follow-ups sent · Payment links included · 5-day deadline set' } + ] + }, + clover: { + initials: 'CV', + messages: [ + { type: 'user', text: 'How did lunch service go today? Any items running low?' }, + { type: 'ai', text: 'Here\'s your lunch service report:', widget: 'restaurant', + widgetData: { + type: 'metrics', + cards: [ + { label: 'Lunch Rev.', value: '$2,840', change: '+11%' }, + { label: 'Transactions', value: '94', change: '+7%' }, + { label: 'Avg Ticket', value: '$30.21', change: '+3.8%' } + ], + alert: '⚠ Low stock: Chicken Parm (4 left), Caesar Wrap (6 left)' + } + }, + { type: 'user', text: 'Mark Chicken Parm as 86\'d when it hits 2 and reorder wraps for tomorrow' }, + { type: 'ai', text: 'Set auto-86 trigger on Chicken Parm at 2 remaining. Submitted reorder for Caesar Wrap ingredients — delivery confirmed for 7am tomorrow.', action: '✓ Auto-86 set · Reorder placed · Delivery: tomorrow 7am' } + ] + }, + servicetitan: { + initials: 'ST', + messages: [ + { type: 'user', text: 'How\'s the dispatch board looking for tomorrow? Any gaps or overloads?' }, + { type: 'ai', text: 'Here\'s tomorrow\'s dispatch overview:', widget: 'fieldservice', + widgetData: { + type: 'tickets', + rows: [ + { id: 'Mike T.', subject: '6 jobs · HVAC installs', priority: 'red', label: 'Over', time: '10h scheduled' }, + { id: 'Sarah K.', subject: '4 jobs · Maintenance', priority: 'green', label: 'Good', time: '7h scheduled' }, + { id: 'Dave R.', subject: '2 jobs · Plumbing', priority: 'amber', label: 'Light', time: '4h scheduled' } + ], + summary: '12 jobs total · 1 tech overloaded · $14,200 est. revenue' + } + }, + { type: 'user', text: 'Move Mike\'s afternoon install to Dave and optimize all routes' }, + { type: 'ai', text: 'Reassigned the 2pm install to Dave (now 3 jobs, 6.5h). Routes optimized for all techs — saving 47 minutes total drive time. Customers notified of updated ETAs.', action: '✓ Job reassigned · Routes optimized · 47 min saved · Customers notified' } + ] + }, + rippling: { + initials: 'RP', + messages: [ + { type: 'user', text: 'We\'re offboarding Tom from engineering. What needs to happen?' }, + { type: 'ai', text: 'Here\'s Tom\'s access footprint:', widget: 'hr', + widgetData: { + type: 'tickets', + rows: [ + { id: 'SaaS Apps', subject: '14 apps: Slack, GitHub, AWS, Jira...', priority: 'red', label: 'Active', time: 'Revoke' }, + { id: 'Devices', subject: 'MacBook Pro M3 + Monitor', priority: 'amber', label: 'Return', time: 'Ship label' }, + { id: 'Payroll', subject: 'Final paycheck + PTO payout: $4,820', priority: 'green', label: 'Calc\'d', time: 'Ready' } + ], + summary: '14 app licenses · 2 devices · Last day: Friday' + } + }, + { type: 'user', text: 'Revoke all access at 5pm Friday and process the final paycheck' }, + { type: 'ai', text: 'Scheduled access revocation for all 14 apps at 5:00 PM Friday. Return shipping label generated for devices. Final paycheck of $4,820 queued for next pay cycle.', action: '✓ 14 apps scheduled for revocation · Shipping label sent · Payroll queued' } + ] + }, + freshdesk: { + initials: 'FD', + messages: [ + { type: 'user', text: 'What\'s the support queue looking like? Any recurring issues this week?' }, + { type: 'ai', text: 'Here\'s your support dashboard:', widget: 'support', + widgetData: { + type: 'tickets', + rows: [ + { id: '#8842', subject: 'Password reset loop (x12)', priority: 'red', label: 'Critical', time: '12 reports' }, + { id: '#8838', subject: 'Slow dashboard loading', priority: 'amber', label: 'High', time: '7 reports' }, + { id: '#8835', subject: 'Invoice PDF formatting', priority: 'green', label: 'Medium', time: '3 reports' }, + { id: '#8831', subject: 'Mobile app crash on iOS 18', priority: 'amber', label: 'High', time: '5 reports' } + ], + summary: '42 open · 12 trending issues · CSAT: 87%' + } + }, + { type: 'user', text: 'Merge the duplicate password reset tickets and send a known-issue update to affected users' }, + { type: 'ai', text: 'Merged 12 tickets into parent #8842. Sent status update to all 12 customers with workaround steps. Flagged to engineering with priority escalation.', action: '✓ 12 tickets merged · Customers notified · Engineering escalated' } + ] + }, + keap: { + initials: 'KP', + messages: [ + { type: 'user', text: 'Show me the sales pipeline. Where are my hottest leads?' }, + { type: 'ai', text: 'Here\'s your pipeline snapshot:', widget: 'crm', + widgetData: { + type: 'deals', + rows: [ + { name: 'Acme Corp', stage: 'Proposal', value: '$24,000', status: 'green', prob: '80%' }, + { name: 'TechVentures', stage: 'Demo', value: '$18,500', status: 'amber', prob: '50%' }, + { name: 'GreenLeaf Co', stage: 'Qualified', value: '$31,000', status: 'amber', prob: '35%' }, + { name: 'Spark Digital', stage: 'Negotiation', value: '$12,800', status: 'green', prob: '90%' } + ], + summary: '$86,300 pipeline · $36,800 likely to close this month' + } + }, + { type: 'user', text: 'Send a follow-up sequence to TechVentures and a contract to Spark Digital' }, + { type: 'ai', text: 'Started 3-email nurture sequence for TechVentures (Demo follow-up). Generated and sent contract to Spark Digital for $12,800. E-signature link included.', action: '✓ Nurture sequence started · Contract sent · E-sign ready' } + ] + }, + constantcontact: { + initials: 'CC', + messages: [ + { type: 'user', text: 'How are our email lists growing? Which signup source converts best?' }, + { type: 'ai', text: 'Here\'s your list health:', widget: 'marketing', + widgetData: { + type: 'metrics', + cards: [ + { label: 'Total Subs', value: '14,280', change: '+340 this mo' }, + { label: 'Best Source', value: 'Webinar', change: '42% conv.' }, + { label: 'Churn Rate', value: '1.8%', change: '-0.3%' } + ], + alert: '📈 Webinar signups convert 3x better than popup forms' + } + }, + { type: 'user', text: 'Create a segment of webinar attendees and send them our premium content offer' }, + { type: 'ai', text: 'Created segment "Webinar Attendees (Last 90 Days)" with 892 contacts. Drafted premium content email with personalized subject lines. Ready to send.', action: '✓ Segment created (892) · Email drafted · Ready for review' } + ] + }, + lightspeed: { + initials: 'LS', + messages: [ + { type: 'user', text: 'Compare sales across our 3 locations this week. Who\'s winning?' }, + { type: 'ai', text: 'Here\'s your multi-location breakdown:', widget: 'retail', + widgetData: { + type: 'metrics', + cards: [ + { label: 'Downtown', value: '$18,420', change: '+14%' }, + { label: 'Mall', value: '$24,100', change: '+6%' }, + { label: 'Airport', value: '$11,300', change: '-3%' } + ], + alert: '📍 Downtown growing fastest · Airport needs attention' + } + }, + { type: 'user', text: 'Transfer slow-moving Airport inventory to Downtown where it\'s selling' }, + { type: 'ai', text: 'Generated transfer order: 34 items from Airport to Downtown based on velocity analysis. Estimated revenue uplift: $2,400/week. Transfer manifest ready for printing.', action: '✓ Transfer order created · 34 items · Est. +$2,400/wk revenue' } + ] + }, + bigcommerce: { + initials: 'BC', + messages: [ + { type: 'user', text: 'Show me abandoned cart stats. How much revenue are we leaving on the table?' }, + { type: 'ai', text: 'Here\'s your cart recovery dashboard:', widget: 'ecommerce', + widgetData: { + type: 'metrics', + cards: [ + { label: 'Abandoned', value: '$34,200', change: '68 carts' }, + { label: 'Recovered', value: '$8,100', change: '23.7%' }, + { label: 'Still Open', value: '$26,100', change: 'recoverable' } + ], + alert: '💰 $26,100 recoverable · 12 carts have items >$500' + } + }, + { type: 'user', text: 'Send a 10% discount to the high-value abandoned carts (over $500)' }, + { type: 'ai', text: 'Sent personalized recovery emails to 12 high-value carts with unique 10% discount codes. Expiry set to 48 hours for urgency. Expected recovery: $3,800.', action: '✓ 12 recovery emails sent · 10% codes generated · 48hr expiry' } + ] + }, + toast: { + initials: 'TT', + messages: [ + { type: 'user', text: 'How\'s service going tonight? Table status and any kitchen bottlenecks?' }, + { type: 'ai', text: 'Here\'s your floor status:', widget: 'restaurant', + widgetData: { + type: 'metrics', + cards: [ + { label: 'Seated', value: '18/24', change: '75% full' }, + { label: 'Avg Turn', value: '48 min', change: '-4 min' }, + { label: 'Kitchen Q', value: '12 items', change: '~18 min' } + ], + alert: '⚠ Table 7: waiting 22min for entrees · 4 tables on dessert' + } + }, + { type: 'user', text: 'Flag Table 7 as priority in kitchen and prep the 4 dessert tables for turnover' }, + { type: 'ai', text: 'Table 7 bumped to priority — kitchen ETA now 8 min. Dessert tables 3, 9, 14, 21 flagged for check drop. Waitlist notified: 4 parties ready to seat.', action: '✓ Kitchen priority set · 4 tables prepped for turn · Waitlist alerted' } + ] + }, + jobber: { + initials: 'JB', + messages: [ + { type: 'user', text: 'What quotes are pending? Any that are about to go cold?' }, + { type: 'ai', text: 'Here\'s your quote pipeline:', widget: 'fieldservice', + widgetData: { + type: 'tickets', + rows: [ + { id: 'Q-284', subject: 'Johnson - Full reno ($8,400)', priority: 'red', label: '14 days', time: 'Going cold' }, + { id: 'Q-291', subject: 'Park Residence - Repair ($1,200)', priority: 'amber', label: '7 days', time: 'Follow up' }, + { id: 'Q-298', subject: 'Maple St - Maintenance ($450)', priority: 'green', label: '2 days', time: 'Fresh' }, + { id: 'Q-301', subject: 'Oakwood - Install ($3,200)', priority: 'green', label: '1 day', time: 'Fresh' } + ], + summary: '$13,250 in pending quotes · 1 going cold · 67% avg close rate' + } + }, + { type: 'user', text: 'Call Johnson about the reno quote and send a reminder to Park Residence' }, + { type: 'ai', text: 'Logged callback for Johnson at 2pm with quote details pre-loaded. Sent Park Residence an email reminder with an updated availability calendar for scheduling.', action: '✓ Callback scheduled · Email reminder sent · Calendar link included' } + ] + }, + wave: { + initials: 'WV', + messages: [ + { type: 'user', text: 'Pull up my P&L for this quarter. How are we tracking against budget?' }, + { type: 'ai', text: 'Here\'s your Q2 P&L summary:', widget: 'accounting', + widgetData: { + type: 'pnl', + rows: [ + { label: 'Revenue', value: '$128,400', trend: 'up' }, + { label: 'COGS', value: '$38,520', trend: 'neutral' }, + { label: 'Gross Profit', value: '$89,880', trend: 'up' }, + { label: 'Net Income', value: '$34,200', trend: 'up' } + ], + alert: '📈 12% above budget · Net margin: 26.6%' + } + }, + { type: 'user', text: 'Export this as PDF for our investor meeting and flag any unusual expenses' }, + { type: 'ai', text: 'Generated Q2 P&L report (PDF). Flagged 2 anomalies: Software subscriptions up 34% ($2,100 over budget) and travel up 28%. Both itemized in the appendix.', action: '✓ PDF exported · 2 anomalies flagged · Investor-ready format' } + ] + }, + closecrm: { + initials: 'CL', + messages: [ + { type: 'user', text: 'Show me my pipeline. What deals are closing this month?' }, + { type: 'ai', text: 'Here\'s your sales pipeline:', widget: 'crm', + widgetData: { + type: 'deals', + rows: [ + { name: 'DataSync Inc', stage: 'Negotiation', value: '$42,000', status: 'green', prob: '85%' }, + { name: 'FlowLogic', stage: 'Proposal', value: '$28,500', status: 'green', prob: '70%' }, + { name: 'NexGen Solutions', stage: 'Demo', value: '$35,000', status: 'amber', prob: '40%' }, + { name: 'Meridian Corp', stage: 'Qualified', value: '$52,000', status: 'amber', prob: '25%' } + ], + summary: '$157,500 pipeline · $70,500 weighted · 2 likely this month' + } + }, + { type: 'user', text: 'Draft a contract for DataSync and schedule a follow-up call with NexGen' }, + { type: 'ai', text: 'Generated contract for DataSync ($42,000, annual terms) with e-sign link. Booked NexGen call for Thursday 3pm — agenda includes ROI analysis and case studies.', action: '✓ Contract drafted · Call booked Thu 3pm · Materials prepped' } + ] + }, + pipedrive: { + initials: 'PD', + messages: [ + { type: 'user', text: 'What does our pipeline look like? Any deals stuck in a stage too long?' }, + { type: 'ai', text: 'Here\'s your deal pipeline:', widget: 'crm', + widgetData: { + type: 'deals', + rows: [ + { name: 'Horizon Tech', stage: 'Proposal', value: '$38,000', status: 'red', prob: '60%' }, + { name: 'BluePeak', stage: 'Negotiation', value: '$22,400', status: 'green', prob: '80%' }, + { name: 'Vertex Group', stage: 'Demo', value: '$56,000', status: 'amber', prob: '45%' }, + { name: 'Catalyst AI', stage: 'Won', value: '$18,200', status: 'green', prob: '100%' } + ], + summary: '$134,600 total · Horizon stuck 18 days in Proposal' + } + }, + { type: 'user', text: 'Nudge Horizon with a value-add case study and mark Catalyst as closed-won' }, + { type: 'ai', text: 'Sent Horizon the enterprise case study with ROI breakdown. Catalyst marked won — revenue recorded at $18,200. Win notification sent to team Slack.', action: '✓ Case study sent · Deal won ($18,200) · Team notified' } + ] + }, + helpscout: { + initials: 'HS', + messages: [ + { type: 'user', text: 'What\'s the conversation queue looking like? Any unhappy customers?' }, + { type: 'ai', text: 'Here\'s your support overview:', widget: 'support', + widgetData: { + type: 'tickets', + rows: [ + { id: '#2041', subject: 'Migration data loss concern', priority: 'red', label: 'Upset', time: '3 replies' }, + { id: '#2038', subject: 'Can\'t export reports', priority: 'amber', label: 'Waiting', time: '4h ago' }, + { id: '#2035', subject: 'Feature question: webhooks', priority: 'green', label: 'Easy', time: '1h ago' }, + { id: '#2033', subject: 'Billing cycle change request', priority: 'green', label: 'Simple', time: '30m ago' } + ], + summary: '18 active · 1 unhappy customer · Avg response: 52min' + } + }, + { type: 'user', text: 'Draft a recovery response for the migration issue and auto-reply to the easy ones' }, + { type: 'ai', text: 'Drafted empathetic response for #2041 with data recovery steps and a direct meeting link with engineering. Auto-replied to #2035 (docs link) and #2033 (billing portal link).', action: '✓ Recovery response drafted · 2 auto-replies sent · Meeting link included' } + ] + }, + basecamp: { + initials: 'BC', + messages: [ + { type: 'user', text: 'Give me a status update on all active projects. Any deadlines coming up?' }, + { type: 'ai', text: 'Here\'s your project overview:', widget: 'project', + widgetData: { + type: 'board', + columns: [ + { name: 'Website v2', count: 8, color: '#10B981' }, + { name: 'Q3 Campaign', count: 14, color: '#F59E0B' }, + { name: 'API Docs', count: 5, color: '#10B981' }, + { name: 'Mobile App', count: 22, color: '#EF4444' } + ], + alert: '⚠ Mobile App: 22 open to-dos · Deadline in 5 days' + } + }, + { type: 'user', text: 'Post a status update to the Mobile App project and flag overdue items' }, + { type: 'ai', text: 'Posted status update to Mobile App message board with progress summary. Flagged 6 overdue to-dos and notified assignees. Added a milestone check-in for Wednesday.', action: '✓ Status posted · 6 overdue items flagged · Check-in scheduled Wed' } + ] + }, + housecallpro: { + initials: 'HC', + messages: [ + { type: 'user', text: 'How many estimates are pending? What\'s our conversion rate this month?' }, + { type: 'ai', text: 'Here\'s your estimate dashboard:', widget: 'fieldservice', + widgetData: { + type: 'tickets', + rows: [ + { id: 'E-442', subject: 'Wilson - HVAC replacement ($6,200)', priority: 'red', label: '12 days', time: 'Stale' }, + { id: 'E-451', subject: 'Roberts - Plumbing fix ($890)', priority: 'green', label: '3 days', time: 'Warm' }, + { id: 'E-455', subject: 'Chen - Full service ($2,400)', priority: 'green', label: '1 day', time: 'Hot' } + ], + summary: '$9,490 pending · 58% conversion rate (↑ from 52%)' + } + }, + { type: 'user', text: 'Follow up with Wilson, and convert Chen\'s estimate to a job for next week' }, + { type: 'ai', text: 'Sent Wilson a follow-up with financing options for the $6,200 HVAC job. Converted Chen\'s estimate to a scheduled job — Tuesday 9am. Confirmation text sent to the customer.', action: '✓ Follow-up sent · Job created (Tue 9am) · Customer confirmed' } + ] + }, + fieldedge: { + initials: 'FE', + messages: [ + { type: 'user', text: 'Show me today\'s dispatch board. Any service agreements up for renewal?' }, + { type: 'ai', text: 'Here\'s your operations dashboard:', widget: 'fieldservice', + widgetData: { + type: 'tickets', + rows: [ + { id: 'WO-881', subject: 'Emergency - AC unit down (Commercial)', priority: 'red', label: 'Emergency', time: 'Unassigned' }, + { id: 'WO-879', subject: 'Quarterly maintenance - Suite 400', priority: 'green', label: 'Scheduled', time: '10:30am' }, + { id: 'WO-877', subject: 'Water heater install', priority: 'green', label: 'In Progress', time: 'ETA 2pm' } + ], + summary: '8 work orders today · 1 emergency · 5 agreements expiring this month' + } + }, + { type: 'user', text: 'Assign the emergency to our closest available tech and send renewal offers to the 5 expiring agreements' }, + { type: 'ai', text: 'Dispatched Tom B. (4 miles away, next available at 11am) to the emergency call. Sent renewal offers to all 5 agreements with a 10% early-renewal discount.', action: '✓ Emergency dispatched · 5 renewal offers sent · 10% discount applied' } + ] + }, + touchbistro: { + initials: 'TB', + messages: [ + { type: 'user', text: 'How was the dinner rush? Give me the numbers and any issues.' }, + { type: 'ai', text: 'Here\'s your dinner service report:', widget: 'restaurant', + widgetData: { + type: 'metrics', + cards: [ + { label: 'Dinner Rev.', value: '$6,840', change: '+18%' }, + { label: 'Covers', value: '142', change: '+12%' }, + { label: 'Avg Check', value: '$48.17', change: '+5.3%' } + ], + alert: '🔥 Record Friday dinner · Ribeye special sold out in 90 min' + } + }, + { type: 'user', text: 'Double the ribeye order for next Friday and comp Table 12\'s dessert — they waited too long' }, + { type: 'ai', text: 'Updated next Friday\'s ribeye prep to 60 portions (from 30). Applied comp to Table 12\'s dessert ($24) with manager note. Apology card flagged for server.', action: '✓ Prep updated · Comp applied ($24) · Apology noted' } + ] + }, + stripe: { + initials: 'SP', + messages: [ + { type: 'user', text: 'Show me this month\'s revenue and any failed payments I should know about.' }, + { type: 'ai', text: 'Here\'s your payment dashboard:', widget: 'payments', + widgetData: { + type: 'metrics', + cards: [ + { label: 'MRR', value: '$84,200', change: '+6.2%' }, + { label: 'Failed', value: '23', change: '$4,180' }, + { label: 'Net Revenue', value: '$80,020', change: '+5.8%' } + ], + alert: '⚠ 23 failed charges ($4,180) · 18 are retry-eligible' + } + }, + { type: 'user', text: 'Retry the 18 eligible failed payments and email the other 5 to update their card' }, + { type: 'ai', text: 'Initiated retry on 18 payments ($3,420 total). Sent card update emails to 5 customers with secure payment link. 3 retries already succeeded ($840 recovered).', action: '✓ 18 retries started · 5 update emails sent · $840 already recovered' } + ] + } +}; + +function getChatMessages(platformId) { + return chatDemoData[platformId] || chatDemoData['zendesk']; +} + +function renderWidget(wd) { + if (!wd) return ''; + + if (wd.type === 'tickets') { + const rows = wd.rows.map(r => + '
Watch AI work with your ${name} data in real-time
+