redisign hero

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-02-15 09:45:03 +01:00
parent f6c6a403b4
commit 0381d60d90
6 changed files with 27 additions and 14 deletions

View File

@@ -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}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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(

View File

@@ -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;

View File

@@ -1,19 +1,24 @@
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">
<div className="relative -top-20">
<PreviewCarousel /> <PreviewCarousel />
</div> </div>
</div>
<div className="container"> <div className="container">
<div className="mb-24"> <div className="mb-24">
<Heading2 className="md:text-5xl mb-2 leading-none"> <Heading2 className="md:text-5xl mb-2 leading-none">