diff --git a/apps/public/public/twitter-thomas.jpg b/apps/public/public/twitter-thomas.jpg new file mode 100644 index 00000000..c3adbf26 Binary files /dev/null and b/apps/public/public/twitter-thomas.jpg differ diff --git a/apps/public/src/app/(home)/_sections/testimonials.tsx b/apps/public/src/app/(home)/_sections/testimonials.tsx index b7c240c2..32a4bd35 100644 --- a/apps/public/src/app/(home)/_sections/testimonials.tsx +++ b/apps/public/src/app/(home)/_sections/testimonials.tsx @@ -82,6 +82,20 @@ const testimonials = [ retweets: 68, likes: 648, }, + { + verified: true, + avatarUrl: '/twitter-thomas.jpg', + name: 'Thomas Sanlis', + handle: 'T_Zahil', + content: [ + `We're now sponsoring @OpenPanelDev with Uneed 🥳`, + `If you're looking for open source analytics, OpenPanel is BY FAR the best I've ever seen`, + 'Bonus: 1-click install on Coolify 🥰', + ], + replies: 8, + retweets: 3, + likes: 23, + }, ]; export function Testimonials() { diff --git a/apps/public/src/app/(home)/_sections/why-openpanel.tsx b/apps/public/src/app/(home)/_sections/why-openpanel.tsx index 5ce8bce5..43c79987 100644 --- a/apps/public/src/app/(home)/_sections/why-openpanel.tsx +++ b/apps/public/src/app/(home)/_sections/why-openpanel.tsx @@ -1,9 +1,13 @@ +'use client'; + import { FeatureCardBackground } from '@/components/feature-card'; import { Section, SectionHeader, SectionLabel } from '@/components/section'; -import { Tag } from '@/components/tag'; +import { Button } from '@/components/ui/button'; import { cn } from '@/lib/utils'; -import { ArrowDownIcon } from 'lucide-react'; +import { QuoteIcon } from 'lucide-react'; import Image from 'next/image'; +import { useState } from 'react'; +import Markdown from 'react-markdown'; const images = [ { @@ -38,13 +42,33 @@ const images = [ }, ]; +const quotes: { + quote: string; + author: string; + site?: string; +}[] = [ + { + quote: + 'After testing several product analytics tools for Strackr, **we chose OpenPanel and we are very satisfied with the product**. We have been using it since the beta, and there are constant updates. Profiles and Conversion Events are our favorite features.', + author: 'Julien Hany', + site: 'https://strackr.com', + }, + { + quote: `Before OpenPanel, I was using Plausible, and it was ok. **But OpenPanel is like 10 leagues ahead!!** Better UX/UI, many more features, and incredible support from the founder. Bonus point: it's 1 click install on Coolify!! I won't switch to anything else 😎`, + author: 'Thomas Sanlis', + site: 'https://uneed.best', + }, + { + quote: `We've been using OpenPanel for almost three months and we're extremely happy with it. After paying a lot to PostHog for years, OpenPanel gives us the same, in many ways better, analytics while keeping full ownership of our data. It's truly self-hosted but surprisingly low maintenance: setup and ongoing upkeep are straightforward, so we spend less time managing tooling and more time acting on insights.\n\nOpenPanel delivers the metrics we need to understand our website and app performance and how users actually interact with them. The dashboards are clear, the data is reliable, and the feature set covers everything we relied on before. The support is absolutely fantastic: responsive, helpful, and knowledgeable, and that made the switch effortless. We honestly don’t want to run any business without OpenPanel anymore.`, + author: 'Self-hosting users', + }, +]; + export function WhyOpenPanel() { + const [showMore, setShowMore] = useState(false); return (
- +
USED BY @@ -72,6 +96,41 @@ export function WhyOpenPanel() {
))} +
+ {quotes.slice(0, showMore ? quotes.length : 2).map((quote) => ( +
+ +
+ {quote.quote} +
+
+ {quote.author} + {quote.site && ( + + + {quote.site.replace('https://', '')} + + + )} +
+
+ ))} +
+
);