diff --git a/apps/public/public/demo-3/img-1.png b/apps/public/public/demo-3/img-1.png new file mode 100644 index 00000000..398fb36c Binary files /dev/null and b/apps/public/public/demo-3/img-1.png differ diff --git a/apps/public/public/demo-3/img-2.png b/apps/public/public/demo-3/img-2.png new file mode 100644 index 00000000..5046d1c1 Binary files /dev/null and b/apps/public/public/demo-3/img-2.png differ diff --git a/apps/public/public/demo-3/img-3.png b/apps/public/public/demo-3/img-3.png new file mode 100644 index 00000000..c5891e7c Binary files /dev/null and b/apps/public/public/demo-3/img-3.png differ diff --git a/apps/public/public/demo-3/img-4.png b/apps/public/public/demo-3/img-4.png new file mode 100644 index 00000000..0c5669ca Binary files /dev/null and b/apps/public/public/demo-3/img-4.png differ diff --git a/apps/public/public/demo-3/img-5.png b/apps/public/public/demo-3/img-5.png new file mode 100644 index 00000000..ae982523 Binary files /dev/null and b/apps/public/public/demo-3/img-5.png differ diff --git a/apps/public/public/react-native.svg b/apps/public/public/react-native.svg index d4a571d1..02d19699 100644 --- a/apps/public/public/react-native.svg +++ b/apps/public/public/react-native.svg @@ -1,2 +1,2 @@ -React icon \ No newline at end of file +React icon \ No newline at end of file diff --git a/apps/public/src/app/(static)/privacy/page.tsx b/apps/public/src/app/(static)/privacy/page.tsx index c23157de..1eeb9966 100644 --- a/apps/public/src/app/(static)/privacy/page.tsx +++ b/apps/public/src/app/(static)/privacy/page.tsx @@ -5,7 +5,7 @@ export const revalidate = 3600; export default function Page() { return ( -
+
Privacy Policy

Last updated: February 22, 2024

diff --git a/apps/public/src/app/(static)/terms/page.tsx b/apps/public/src/app/(static)/terms/page.tsx index aa592a38..bc4fb008 100644 --- a/apps/public/src/app/(static)/terms/page.tsx +++ b/apps/public/src/app/(static)/terms/page.tsx @@ -5,7 +5,7 @@ export const revalidate = 3600; export default function Page() { return ( -
+
Terms and Conditions

Last updated: February 22, 2024

diff --git a/apps/public/src/app/blob.tsx b/apps/public/src/app/blob.tsx deleted file mode 100644 index 3b115ea2..00000000 --- a/apps/public/src/app/blob.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import * as React from 'react'; -import type { SVGProps } from 'react'; - -export const Blob1 = (props: SVGProps) => ( - - - -); - -export const Blob2 = (props: SVGProps) => ( - - - -); - -export const Blob3 = (props: SVGProps) => ( - - - -); - -export const Blob4 = (props: SVGProps) => ( - - - -); - -export const Blob5 = (props: SVGProps) => ( - - - -); - -export const Blob6 = (props: SVGProps) => ( - - - -); - -export const Blob7 = (props: SVGProps) => ( - - - -); - -export const Blob8 = (props: SVGProps) => ( - - - -); - -export const Blob9 = (props: SVGProps) => ( - - - -); - -export const Blob10 = (props: SVGProps) => ( - - - -); - -export const Blob11 = (props: SVGProps) => ( - - - -); - -export const Blob12 = (props: SVGProps) => ( - - - -); diff --git a/apps/public/src/app/carousel.tsx b/apps/public/src/app/carousel.tsx deleted file mode 100644 index 630c8f9d..00000000 --- a/apps/public/src/app/carousel.tsx +++ /dev/null @@ -1,75 +0,0 @@ -'use client'; - -import { - Carousel, - CarouselContent, - CarouselItem, - CarouselNext, - CarouselPrevious, -} from '@/components/ui/carousel'; -import Autoplay from 'embla-carousel-autoplay'; -import Image from 'next/image'; - -const images = [ - { - title: 'Beautiful overview, everything is clickable to get more details', - url: '/demo-2/1.png', - }, - { - title: 'Histogram, perfect for showing active users', - url: '/demo-2/2.png', - }, - { title: 'Make your overview public', url: '/demo-2/3.png' }, - { - title: 'See real time events from your users', - url: '/demo-2/4.png', - }, - { title: 'The classic line chart', url: '/demo-2/5.png' }, - { - title: 'Bar charts to see your most popular content', - url: '/demo-2/6.png', - }, - { title: 'Get nice metric cards with graphs', url: '/demo-2/7.png' }, -]; - -export function PreviewCarousel() { - return ( - - - {images.map((item) => ( - -
-
- {item.title} -
-
-
- ))} -
- - -
- ); -} diff --git a/apps/public/src/app/copy.tsx b/apps/public/src/app/copy.tsx index 61274589..2a7eb39d 100644 --- a/apps/public/src/app/copy.tsx +++ b/apps/public/src/app/copy.tsx @@ -27,7 +27,7 @@ export function Heading1({ children, className }: Props) { return (

@@ -39,7 +39,10 @@ export function Heading1({ children, className }: Props) { export function Heading2({ children, className }: Props) { return (

{children}

@@ -49,7 +52,23 @@ export function Heading2({ children, className }: Props) { export function Heading3({ children, className }: Props) { return (

+ {children} +

+ ); +} + +export function Heading4({ children, className }: Props) { + return ( +

{children}

diff --git a/apps/public/src/app/features.tsx b/apps/public/src/app/features.tsx new file mode 100644 index 00000000..e9a90c22 --- /dev/null +++ b/apps/public/src/app/features.tsx @@ -0,0 +1,145 @@ +'use client'; + +import { cn } from '@/utils/cn'; +import Image from 'next/image'; + +import { Heading3 } from './copy'; + +interface FeatureItem { + title: string; + description: string | React.ReactNode; + className: string; + image: string; +} + +const features: FeatureItem[] = [ + { + title: 'Visualize Your Data', + description: ( +

+ Gain a deep understanding of your data with our visualization tools. +

+ ), + className: '', + image: '/demo-3/img-1.png', + }, + { + title: 'Get a good overview', + description: ( +

+ Even though we want to provide advanced charts and graphs, we also want + you to understand your data at a glance. +

+ ), + className: 'bg-slate-100', + image: '/demo-3/img-2.png', + }, + { + title: 'Real-Time Data Access', + description: ( + <> +

+ Access all your events in real-time. No delays or waiting for data to + be accessible. +

+

+ Mark events as conversions to highlight and soon notifications with + out iOS/Android app. +

+ + ), + className: '', + image: '/demo-3/img-3.png', + }, + { + title: 'Unlimited dashboards with charts', + description: ( + <> +

+ Create beautiful charts and graphs to visualize your data and share + them with your team. +

+
+
+ ✅ Linear +
+
✅ Area
+
✅ Bar
+
✅ Map
+
✅ Pie
+
+ ✅ Funnels +
+
+ ✅ Histogram +
+
+ ✅ Metrics +
+
+ + ), + className: 'bg-slate-100', + image: '/demo-3/img-4.png', + }, + { + title: 'Understand your users', + description: ( + <> +

+ Deep dive into your user's behavior and understand how they interact + with your app/website. +

+ + ), + className: '', + image: '/demo-3/img-5.png', + }, +]; + +export function Features() { + return ( +
+ {features.map((feature, i) => { + return ( + + {feature.description} + + ); + })} +
+ ); +} + +export function Feature({ + title, + children, + className, + image, + even, +}: FeatureItem & { even: boolean; children: React.ReactNode }) { + return ( +
+
+
+ {title} +
{children}
+
+
+ {title} +
+
+
+ ); +} diff --git a/apps/public/src/app/hero.tsx b/apps/public/src/app/hero.tsx index 0d17eabc..9cfdcd86 100644 --- a/apps/public/src/app/hero.tsx +++ b/apps/public/src/app/hero.tsx @@ -1,56 +1,36 @@ -import { Tooltip, TooltipContent } from '@/components/ui/tooltip'; -import { TooltipTrigger } from '@radix-ui/react-tooltip'; -import Image from 'next/image'; - -import { PreviewCarousel } from './carousel'; import { Heading1, Lead2 } from './copy'; import { JoinWaitlistHero } from './join-waitlist-hero'; import { SocialProofServer } from './social-proof'; -import { SocialProof } from './social-proof/social-proof'; - -const avatars = [ - 'https://api.dicebear.com/7.x/adventurer/svg?seed=Chester&backgroundColor=b6e3f4', - 'https://api.dicebear.com/7.x/adventurer/svg?seed=Casper&backgroundColor=c0aede', - 'https://api.dicebear.com/7.x/adventurer/svg?seed=Boo&backgroundColor=ffdfbf', -]; export function Hero() { return ( -
- {/*
*/} -
-
-
-
-
-
-
-
-
-
- Openpanel Logo - - An open-source -
- alternative to Mixpanel -
- - The power of Mixpanel, the ease of Plausible
- and nothing from Google Analytics 😉 -
-
+
+ {/*
*/} +
+
+ + An open-source +
+ alternative to Mixpanel +
+ + The power of Mixpanel, the ease of Plausible and nothing from Google + Analytics 😉 +
+
+
+