Skip to content

Commit 1efa5d3

Browse files
committed
feat: enhance widget with typing indicator and error display, beautify demo page, update landing page copywriting
- Add typing indicator with animated dots to widget chat interface - Implement error display banner with dismissible notifications - Beautify widget test page with professional client demo design - Rewrite landing page copywriting to emphasize knowledge base accuracy and escalation - Add live demo section to landing page with embedded widget - Update feature descriptions to highlight multilingual support and CRM integration - Guide users to interact with the live AI agent demo
1 parent b872759 commit 1efa5d3

3 files changed

Lines changed: 715 additions & 81 deletions

File tree

frontend/app/page.tsx

Lines changed: 155 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -13,43 +13,47 @@ import {
1313
BarChart3,
1414
Check,
1515
ArrowRight,
16-
Play
16+
Play,
17+
Brain,
18+
Globe,
19+
Database,
20+
Workflow
1721
} from "lucide-react"
1822
import Link from "next/link"
1923
import Image from "next/image"
20-
import { useRef } from "react"
24+
import { useRef, useEffect } from "react"
2125
import { motion, useScroll, useTransform } from "framer-motion"
2226

2327
const features = [
2428
{
25-
icon: MessageSquare,
26-
title: "Multi-Channel Communication",
27-
description: "Chat, voice, video, email, and SMS - all in one platform"
29+
icon: Brain,
30+
title: "Intelligent AI Agents",
31+
description: "Deploy AI agents that understand context, learn from conversations, and provide accurate answers from your knowledge base. No more guessing—agents escalate when they don't know."
2832
},
2933
{
30-
icon: Video,
31-
title: "Real-Time Voice & Video",
32-
description: "Face-to-face interactions with crystal clear quality"
34+
icon: MessageSquare,
35+
title: "Unified Communication",
36+
description: "One platform for chat, voice, and video calls. Seamlessly switch between channels while maintaining conversation context across all interactions."
3337
},
3438
{
35-
icon: Zap,
36-
title: "AI-Powered Intelligence",
37-
description: "Context-aware responses powered by GPT-4 Turbo"
39+
icon: Globe,
40+
title: "Multilingual Support",
41+
description: "Automatically detect and respond in the user's language. Support for English, French, Spanish, German, Italian, Portuguese, and more—out of the box."
3842
},
3943
{
40-
icon: Shield,
41-
title: "Enterprise Security",
42-
description: "Bank-level encryption and compliance standards"
44+
icon: Database,
45+
title: "Knowledge Base Integration",
46+
description: "Connect your documents, FAQs, and data sources. AI agents only use verified information from your knowledge base, ensuring accurate and reliable responses."
4347
},
4448
{
4549
icon: BarChart3,
46-
title: "Advanced Analytics",
47-
description: "Real-time insights and performance metrics"
50+
title: "Real-Time Analytics",
51+
description: "Track conversations, response times, user satisfaction, and costs. Make data-driven decisions with comprehensive insights and performance metrics."
4852
},
4953
{
50-
icon: Sparkles,
51-
title: "Workflow Automation",
52-
description: "Custom triggers and integrations with your tools"
54+
icon: Workflow,
55+
title: "CRM & Workflow Automation",
56+
description: "Automatically capture contact information, create deals, and trigger workflows. Integrate with your existing tools to streamline operations."
5357
}
5458
]
5559

@@ -69,6 +73,39 @@ export default function Home() {
6973
const opacity = useTransform(scrollYProgress, [0, 0.5], [1, 0])
7074
const scale = useTransform(scrollYProgress, [0, 0.5], [1, 0.95])
7175

76+
// Load Syntera Widget for demo
77+
useEffect(() => {
78+
// Check if widget is already loaded
79+
if (document.querySelector('script[src*="widget.js"]')) {
80+
return
81+
}
82+
83+
// Load widget script
84+
const script = document.createElement('script')
85+
script.src = 'https://pub-487d70fa1de84574af35bd20e7e86e60.r2.dev/widget.js'
86+
script.setAttribute('data-agent-id', '19bcabc6-1f45-4769-9cf2-7b2b69441c36')
87+
script.setAttribute('data-api-key', 'pub_key_19bcabc6-1f45-4769-9cf2-7b2b69441c36')
88+
script.setAttribute('data-api-url', 'https://syntera-tau.vercel.app')
89+
script.setAttribute('data-position', 'bottom-right')
90+
script.setAttribute('data-theme', 'light')
91+
script.async = true
92+
document.head.appendChild(script)
93+
94+
// Load widget styles
95+
const link = document.createElement('link')
96+
link.rel = 'stylesheet'
97+
link.href = 'https://pub-487d70fa1de84574af35bd20e7e86e60.r2.dev/widget.css'
98+
document.head.appendChild(link)
99+
100+
return () => {
101+
// Cleanup on unmount (optional)
102+
const widgetScript = document.querySelector('script[src*="widget.js"]')
103+
const widgetLink = document.querySelector('link[href*="widget.css"]')
104+
if (widgetScript) widgetScript.remove()
105+
if (widgetLink) widgetLink.remove()
106+
}
107+
}, [])
108+
72109
// Apply scroll-based animations to hero section
73110

74111
return (
@@ -142,7 +179,7 @@ export default function Home() {
142179
>
143180
<Sparkles className="mr-2 h-3 w-3" />
144181
</motion.div>
145-
<span>AI-Powered Universal Agent Platform</span>
182+
<span>Try Our AI Agent Live - Click the Chat Button Below</span>
146183
</Badge>
147184
</motion.div>
148185

@@ -152,7 +189,7 @@ export default function Home() {
152189
transition={{ duration: 0.6, delay: 0.1 }}
153190
className="text-4xl font-bold leading-tight tracking-tighter md:text-6xl lg:leading-[1.1]"
154191
>
155-
Transform Customer Interactions
192+
AI Agents That Actually
156193
<br />
157194
<motion.span
158195
className="bg-gradient-to-r from-primary via-purple-600 to-pink-600 bg-clip-text text-transparent"
@@ -168,7 +205,7 @@ export default function Home() {
168205
backgroundSize: "200% auto",
169206
}}
170207
>
171-
with AI Agents
208+
Know Your Business
172209
</motion.span>
173210
</motion.h1>
174211

@@ -178,8 +215,8 @@ export default function Home() {
178215
transition={{ duration: 0.6, delay: 0.2 }}
179216
className="max-w-[750px] text-lg text-muted-foreground sm:text-xl"
180217
>
181-
Deploy intelligent voice and video agents that handle customer interactions
182-
across all channels. Real-time, context-aware, and always available.
218+
Deploy intelligent AI agents powered by your knowledge base. They answer questions accurately,
219+
escalate when needed, and work 24/7 across chat, voice, and video—in multiple languages.
183220
</motion.p>
184221

185222
<motion.div
@@ -209,9 +246,9 @@ export default function Home() {
209246
whileTap={{ scale: 0.95 }}
210247
>
211248
<Button size="lg" variant="outline" asChild>
212-
<Link href="#demo">
213-
<Play className="mr-2 h-4 w-4" />
214-
Watch Demo
249+
<Link href="#try-now">
250+
<MessageSquare className="mr-2 h-4 w-4" />
251+
Try Live Demo
215252
</Link>
216253
</Button>
217254
</motion.div>
@@ -224,6 +261,8 @@ export default function Home() {
224261
className="text-sm text-muted-foreground"
225262
>
226263
No credit card required • 14-day free trial • Cancel anytime
264+
<br />
265+
<span className="text-xs opacity-75">💡 Look for the chat button in the bottom-right corner to interact with our AI agent</span>
227266
</motion.p>
228267
</div>
229268
</motion.section>
@@ -238,10 +277,11 @@ export default function Home() {
238277
className="mx-auto flex max-w-[58rem] flex-col items-center justify-center gap-4 text-center"
239278
>
240279
<h2 className="text-3xl font-bold leading-[1.1] sm:text-3xl md:text-4xl">
241-
Everything You Need to Scale
280+
Built for Accuracy and Reliability
242281
</h2>
243282
<p className="max-w-[85%] leading-normal text-muted-foreground sm:text-lg sm:leading-7">
244-
Powerful features designed to help you deliver exceptional customer experiences
283+
Our AI agents are trained to use only verified information from your knowledge base.
284+
When they don't know the answer, they escalate to a human—no guessing, no hallucinations.
245285
</p>
246286
</motion.div>
247287
<div className="mx-auto mt-16 grid max-w-5xl gap-6 sm:grid-cols-2 lg:grid-cols-3">
@@ -281,6 +321,85 @@ export default function Home() {
281321
</div>
282322
</section>
283323

324+
{/* Live Demo Section */}
325+
<section id="try-now" className="container mx-auto py-24 md:py-32">
326+
<motion.div
327+
initial={{ opacity: 0, y: 30 }}
328+
whileInView={{ opacity: 1, y: 0 }}
329+
viewport={{ once: true, margin: "-100px" }}
330+
transition={{ duration: 0.6 }}
331+
className="mx-auto flex max-w-[58rem] flex-col items-center justify-center gap-4 text-center"
332+
>
333+
<Badge variant="secondary" className="mb-4">
334+
<Sparkles className="mr-2 h-3 w-3" />
335+
Interactive Demo
336+
</Badge>
337+
<h2 className="text-3xl font-bold leading-[1.1] sm:text-3xl md:text-4xl">
338+
Experience Our AI Agent Right Now
339+
</h2>
340+
<p className="max-w-[85%] leading-normal text-muted-foreground sm:text-lg sm:leading-7">
341+
Click the chat button in the bottom-right corner to start a conversation.
342+
Ask questions, test multilingual support, or try voice mode. Our AI agent is powered by
343+
a real knowledge base and will escalate to a human when needed.
344+
</p>
345+
</motion.div>
346+
347+
<motion.div
348+
initial={{ opacity: 0, y: 30 }}
349+
whileInView={{ opacity: 1, y: 0 }}
350+
viewport={{ once: true }}
351+
transition={{ duration: 0.6, delay: 0.2 }}
352+
className="mx-auto mt-12 max-w-4xl"
353+
>
354+
<Card className="border-2 border-primary/20 bg-gradient-to-br from-primary/5 via-background to-background">
355+
<CardHeader>
356+
<CardTitle className="text-xl">What to Try</CardTitle>
357+
<CardDescription>Test these capabilities with our live AI agent</CardDescription>
358+
</CardHeader>
359+
<CardContent>
360+
<div className="grid gap-4 sm:grid-cols-2">
361+
<div className="flex items-start gap-3">
362+
<div className="h-8 w-8 rounded-lg bg-primary/10 flex items-center justify-center flex-shrink-0 mt-0.5">
363+
<MessageSquare className="h-4 w-4 text-primary" />
364+
</div>
365+
<div>
366+
<h4 className="font-semibold text-sm mb-1">Natural Conversations</h4>
367+
<p className="text-sm text-muted-foreground">Ask questions in natural language and get context-aware responses</p>
368+
</div>
369+
</div>
370+
<div className="flex items-start gap-3">
371+
<div className="h-8 w-8 rounded-lg bg-primary/10 flex items-center justify-center flex-shrink-0 mt-0.5">
372+
<Globe className="h-4 w-4 text-primary" />
373+
</div>
374+
<div>
375+
<h4 className="font-semibold text-sm mb-1">Multilingual Support</h4>
376+
<p className="text-sm text-muted-foreground">Try speaking in French, Spanish, or other languages—the agent adapts</p>
377+
</div>
378+
</div>
379+
<div className="flex items-start gap-3">
380+
<div className="h-8 w-8 rounded-lg bg-primary/10 flex items-center justify-center flex-shrink-0 mt-0.5">
381+
<Video className="h-4 w-4 text-primary" />
382+
</div>
383+
<div>
384+
<h4 className="font-semibold text-sm mb-1">Voice & Video Calls</h4>
385+
<p className="text-sm text-muted-foreground">Switch to voice mode for hands-free, real-time conversations</p>
386+
</div>
387+
</div>
388+
<div className="flex items-start gap-3">
389+
<div className="h-8 w-8 rounded-lg bg-primary/10 flex items-center justify-center flex-shrink-0 mt-0.5">
390+
<Database className="h-4 w-4 text-primary" />
391+
</div>
392+
<div>
393+
<h4 className="font-semibold text-sm mb-1">Knowledge Base</h4>
394+
<p className="text-sm text-muted-foreground">Agent uses verified information and escalates when uncertain</p>
395+
</div>
396+
</div>
397+
</div>
398+
</CardContent>
399+
</Card>
400+
</motion.div>
401+
</section>
402+
284403
{/* Social Proof / Stats */}
285404
<section className="border-t bg-muted/50">
286405
<div className="container mx-auto py-16">
@@ -323,7 +442,7 @@ export default function Home() {
323442
Simple, Transparent Pricing
324443
</h2>
325444
<p className="max-w-[85%] leading-normal text-muted-foreground sm:text-lg sm:leading-7">
326-
Start free, scale as you grow. No hidden fees.
445+
Start with a free trial. No credit card required. Scale as you grow with predictable pricing.
327446
</p>
328447
</motion.div>
329448
<div className="mx-auto mt-16 grid max-w-5xl gap-6 sm:grid-cols-2 lg:grid-cols-3">
@@ -483,10 +602,11 @@ export default function Home() {
483602
className="mx-auto flex max-w-[58rem] flex-col items-center justify-center gap-4 text-center"
484603
>
485604
<h2 className="text-3xl font-bold leading-[1.1] sm:text-3xl md:text-4xl text-foreground">
486-
Ready to Transform Your Customer Experience?
605+
Ready to Deploy Your AI Agent?
487606
</h2>
488607
<p className="max-w-[85%] leading-normal text-muted-foreground sm:text-lg sm:leading-7">
489-
Join thousands of companies using Syntera to deliver exceptional customer service.
608+
Start your free trial today. Set up your knowledge base, configure your agent, and go live in minutes.
609+
No technical expertise required—we handle the complexity.
490610
</p>
491611
<div className="flex flex-col gap-4 sm:flex-row">
492612
<motion.div
@@ -505,7 +625,7 @@ export default function Home() {
505625
whileTap={{ scale: 0.95 }}
506626
>
507627
<Button size="lg" variant="outline" className="bg-background/50 backdrop-blur-sm border-border hover:bg-background/80" asChild>
508-
<Link href="#demo">Schedule Demo</Link>
628+
<Link href="#try-now">Try Live Demo</Link>
509629
</Button>
510630
</motion.div>
511631
</div>
@@ -529,7 +649,8 @@ export default function Home() {
529649
<span className="font-bold">Syntera</span>
530650
</div>
531651
<p className="text-sm text-muted-foreground">
532-
AI-powered universal agent platform for modern businesses.
652+
AI-powered universal agent platform. Deploy intelligent agents that use your knowledge base
653+
and escalate when needed—no hallucinations, just accurate answers.
533654
</p>
534655
</div>
535656
<div>

0 commit comments

Comments
 (0)