Skip to content

Commit daa8cca

Browse files
committed
public: new page and copy improvements
1 parent 0ebe276 commit daa8cca

20 files changed

Lines changed: 998 additions & 339 deletions

File tree

apps/public/src/app/(content)/features/_components/feature-card.tsx

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,34 @@
1-
import { FeatureCardContainer } from '@/components/feature-card';
2-
import { ArrowRightIcon } from 'lucide-react';
1+
import { ArrowRightIcon, type LucideIcon } from 'lucide-react';
32
import Link from 'next/link';
3+
import { FeatureCardContainer } from '@/components/feature-card';
44

55
interface FeatureCardLinkProps {
66
url: string;
77
title: string;
88
description: string;
9+
icon?: LucideIcon;
910
}
1011

1112
export function FeatureCardLink({
1213
url,
1314
title,
1415
description,
16+
icon: Icon,
1517
}: FeatureCardLinkProps) {
1618
return (
1719
<Link href={url}>
1820
<FeatureCardContainer>
19-
<div className="row gap-3 items-center">
20-
<div className="col gap-1 flex-1 min-w-0">
21-
<h3 className="text-lg font-semibold group-hover:text-primary transition-colors">
21+
<div className="row items-center gap-3">
22+
<div className="col min-w-0 flex-1 gap-1">
23+
{Icon && <Icon className="mb-2 size-6 shrink-0" />}
24+
<h3 className="font-semibold text-lg transition-colors group-hover:text-primary">
2225
{title}
2326
</h3>
24-
<p className="text-sm text-muted-foreground line-clamp-2">
27+
<p className="line-clamp-2 text-muted-foreground text-sm">
2528
{description}
2629
</p>
2730
</div>
28-
<ArrowRightIcon className="opacity-0 group-hover:opacity-100 size-5 shrink-0 text-muted-foreground group-hover:text-primary group-hover:translate-x-1 transition-all duration-300" />
31+
<ArrowRightIcon className="size-5 shrink-0 text-muted-foreground opacity-0 transition-all duration-300 group-hover:translate-x-1 group-hover:text-primary group-hover:opacity-100" />
2932
</div>
3033
</FeatureCardContainer>
3134
</Link>

apps/public/src/app/(content)/features/page.tsx

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,42 @@
1+
import type { LucideIcon } from 'lucide-react';
2+
import {
3+
BellIcon,
4+
ConeIcon,
5+
DollarSignIcon,
6+
FilterIcon,
7+
GlobeIcon,
8+
MonitorIcon,
9+
MousePointerClickIcon,
10+
PieChartIcon,
11+
RefreshCwIcon,
12+
ShareIcon,
13+
UserIcon,
14+
WorkflowIcon,
15+
} from 'lucide-react';
16+
import type { Metadata } from 'next';
17+
import { FeatureCardLink } from './_components/feature-card';
118
import { FeatureHero } from '@/app/(content)/features/[slug]/_components/feature-hero';
219
import { CtaBanner } from '@/app/(home)/_sections/cta-banner';
320
import { Section, SectionHeader } from '@/components/section';
421
import { WindowImage } from '@/components/window-image';
522
import { url } from '@/lib/layout.shared';
623
import { getOgImageUrl, getPageMetadata } from '@/lib/metadata';
724
import { featureSource } from '@/lib/source';
8-
import type { Metadata } from 'next';
9-
import { FeatureCardLink } from './_components/feature-card';
25+
26+
const featureIcons: Record<string, LucideIcon> = {
27+
conversion: FilterIcon,
28+
'data-visualization': PieChartIcon,
29+
'event-tracking': MousePointerClickIcon,
30+
funnels: ConeIcon,
31+
'identify-users': UserIcon,
32+
integrations: WorkflowIcon,
33+
notifications: BellIcon,
34+
retention: RefreshCwIcon,
35+
'revenue-tracking': DollarSignIcon,
36+
'session-tracking': MonitorIcon,
37+
'share-and-collaborate': ShareIcon,
38+
'web-analytics': GlobeIcon,
39+
};
1040

1141
export const metadata: Metadata = getPageMetadata({
1242
title: 'Product analytics features',
@@ -32,36 +62,37 @@ export default async function FeaturesIndexPage() {
3262

3363
<div className="container my-16">
3464
<WindowImage
35-
srcDark="/screenshots/overview-dark.webp"
36-
srcLight="/screenshots/overview-light.webp"
3765
alt="OpenPanel Dashboard Overview"
3866
caption="Get a clear view of your product analytics with real-time insights and customizable dashboards."
67+
srcDark="/screenshots/overview-dark.webp"
68+
srcLight="/screenshots/overview-light.webp"
3969
/>
4070
</div>
4171

4272
<Section className="container">
4373
<SectionHeader
44-
title="All features"
4574
description="Browse our capabilities. Each feature is designed to answer specific questions about your product and users."
75+
title="All features"
4676
variant="sm"
4777
/>
48-
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 mt-12">
78+
<div className="mt-12 grid grid-cols-1 gap-4 sm:grid-cols-2 2xl:grid-cols-3">
4979
{features.map((feature) => (
5080
<FeatureCardLink
81+
description={feature.hero.subheading}
82+
icon={featureIcons[feature.slug]}
5183
key={feature.slug}
52-
url={feature.url}
5384
title={feature.hero.heading}
54-
description={feature.hero.subheading}
85+
url={feature.url}
5586
/>
5687
))}
5788
</div>
5889
</Section>
5990

6091
<CtaBanner
61-
title="Ready to get started?"
62-
description="Join thousands of teams using OpenPanel for their analytics needs."
63-
ctaText="Get Started Free"
6492
ctaLink="https://dashboard.openpanel.dev/onboarding"
93+
ctaText="Get Started Free"
94+
description="Join thousands of teams using OpenPanel for their analytics needs."
95+
title="Ready to get started?"
6596
/>
6697
</div>
6798
);

0 commit comments

Comments
 (0)