redisign hero
This commit is contained in:
@@ -49,7 +49,7 @@ export function PreviewCarousel() {
|
|||||||
{images.map((item) => (
|
{images.map((item) => (
|
||||||
<CarouselItem key={item.url} className="flex-[0_0_80%] pl-8">
|
<CarouselItem key={item.url} className="flex-[0_0_80%] pl-8">
|
||||||
<div className="aspect-video">
|
<div className="aspect-video">
|
||||||
<div className="p-3 bg-white/20 rounded-xl overflow-hidden">
|
<div className="p-3 rounded-xl overflow-hidden bg-gradient-to-b from-blue-100/50 to-white/50">
|
||||||
<Image
|
<Image
|
||||||
className="w-full h-full object-cover rounded-lg"
|
className="w-full h-full object-cover rounded-lg"
|
||||||
src={item.url}
|
src={item.url}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export function Paragraph({ children, className }: Props) {
|
|||||||
export function Heading1({ children, className }: Props) {
|
export function Heading1({ children, className }: Props) {
|
||||||
return (
|
return (
|
||||||
<h1
|
<h1
|
||||||
className={cn('text-5xl md:text-6xl font-bold text-slate-800', className)}
|
className={cn('text-4xl md:text-5xl font-bold text-slate-800', className)}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</h1>
|
</h1>
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ const features = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export function Hero() {
|
export function Hero({ waitlistCount }: { waitlistCount: number }) {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div className="absolute top-0 left-0 right-0 py-6">
|
<div className="absolute top-0 left-0 right-0 py-6">
|
||||||
@@ -53,25 +53,33 @@ export function Hero() {
|
|||||||
backgroundSize: '70px 70px',
|
backgroundSize: '70px 70px',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="py-20 pt-32 p-4 flex flex-col items-center max-w-3xl bg-[radial-gradient(circle,rgba(255,255,255,0.7)_0%,rgba(255,255,255,0.7)_50%,rgba(255,255,255,0)_100%)]">
|
<div className="py-32 p-4 flex flex-col items-center max-w-3xl bg-[radial-gradient(circle,rgba(255,255,255,0.7)_0%,rgba(255,255,255,0.7)_50%,rgba(255,255,255,0)_100%)]">
|
||||||
<Heading1 className="mb-4">
|
<Heading1 className="mb-4">
|
||||||
An open-source
|
An open-source
|
||||||
<br />
|
<br />
|
||||||
alternative to Mixpanel
|
alternative to Mixpanel
|
||||||
</Heading1>
|
</Heading1>
|
||||||
<p className="mb-8">
|
<p className="mb-8">
|
||||||
Combine Mixpanel and Plausible and you get Openpanel. A simple
|
Mixpanel + Plausible ={' '}
|
||||||
analytics tool that respects privacy.
|
<strong className="text-blue-600">Openpanel!</strong> A simple
|
||||||
|
analytics tool that your wallet can afford.
|
||||||
</p>
|
</p>
|
||||||
<JoinWaitlist />
|
<JoinWaitlist />
|
||||||
<div className="flex flex-wrap gap-10 mt-8 max-w-xl justify-center">
|
<div className="mt-4 text-sm">
|
||||||
|
<p>Get ahead of the curve and join our waiting list{' - '}</p>
|
||||||
|
<p>
|
||||||
|
there are already{' '}
|
||||||
|
<strong>{waitlistCount} savvy individuals on board!</strong> 🎉
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{/* <div className="flex flex-wrap gap-10 mt-8 max-w-xl justify-center">
|
||||||
{features.map(({ icon: Icon, title }) => (
|
{features.map(({ icon: Icon, title }) => (
|
||||||
<div className="flex gap-2 items-center justify-center">
|
<div className="flex gap-2 items-center justify-center">
|
||||||
<Icon className="text-blue-light " />
|
<Icon className="text-blue-light " />
|
||||||
{title}
|
{title}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div> */}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ export function JoinWaitlist({ className }: JoinWaitlistProps) {
|
|||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="relative w-full mb-8">
|
<div className="relative w-full">
|
||||||
<input
|
<input
|
||||||
placeholder="Enter your email"
|
placeholder="Enter your email"
|
||||||
className={cn(
|
className={cn(
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ const font = Bricolage_Grotesque({
|
|||||||
weights: [400, 700],
|
weights: [400, 700],
|
||||||
});
|
});
|
||||||
|
|
||||||
export default async function RootLayout({
|
export default function RootLayout({
|
||||||
children,
|
children,
|
||||||
}: {
|
}: {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -1,18 +1,23 @@
|
|||||||
import { Logo } from '@/components/Logo';
|
import { Logo } from '@/components/Logo';
|
||||||
import Image from 'next/image';
|
import Image from 'next/image';
|
||||||
|
|
||||||
|
import { db } from '@mixan/db';
|
||||||
|
|
||||||
import { PreviewCarousel } from './carousel';
|
import { PreviewCarousel } from './carousel';
|
||||||
import { Heading2, Lead2, Paragraph } from './copy';
|
import { Heading2, Lead2, Paragraph } from './copy';
|
||||||
import { Hero } from './hero';
|
import { Hero } from './hero';
|
||||||
import { JoinWaitlist } from './join-waitlist';
|
import { JoinWaitlist } from './join-waitlist';
|
||||||
import { Sections } from './section';
|
import { Sections } from './section';
|
||||||
|
|
||||||
export default function Page() {
|
export default async function Page() {
|
||||||
|
const waitlistCount = await db.waitlist.count();
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Hero />
|
<Hero waitlistCount={waitlistCount} />
|
||||||
<div className="bg-gradient-to-b from-blue-light to-[#FFFFFF] py-16 md:py-40 text-center">
|
<div className="bg-gradient-to-b from-blue-light to-[#FFFFFF] pb-16 text-center">
|
||||||
<PreviewCarousel />
|
<div className="relative -top-20">
|
||||||
|
<PreviewCarousel />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="mb-24">
|
<div className="mb-24">
|
||||||
|
|||||||
Reference in New Issue
Block a user