diff --git a/packages/website/src/components/landing-page.tsx b/packages/website/src/components/landing-page.tsx index 79382e64e8..312320ad3d 100644 --- a/packages/website/src/components/landing-page.tsx +++ b/packages/website/src/components/landing-page.tsx @@ -132,10 +132,10 @@ export function LandingPage({ title, subtitle }: LandingPageProps) { - - + + @@ -468,46 +468,35 @@ function TurnkeySection() { title="Run it anywhere" description="Use Paseo locally, from another machine, or with a team" > -
-
-
-
- -
-
-

Desktop app

-

- The one click experience, download the app and it just works, no server required -

-
-
-
- -
-
- - - -
+
+ +
+ + +
@@ -530,20 +519,8 @@ function TurnkeyExtensionCard({ showIntegrationIcons?: boolean; }) { return ( -
-
- - {showIntegrationIcons ? ( - <> - - - - - ) : null} -
-

{title}

-

{description}

-
+ +
+ {showIntegrationIcons ? INTEGRATION_ICONS : null}
+
+ ); +} + +const INTEGRATION_ICONS = ( + + + + + +); + +/** The lead product of a section: an icon tile and title on the page background. */ +function ProductLead({ + icon: Icon, + title, + description, + actions, +}: { + icon: LucideIcon; + title: string; + description?: string; + actions?: React.ReactNode; +}) { + return ( +
+
+
+ +
+
+

{title}

+ {description ? ( +

{description}

+ ) : null} +
+
+ {actions ?
{actions}
: null} +
+ ); +} + +/** A small card: icon and title on one line, the blurb below, an optional action last. */ +function FeatureCard({ + icon: Icon, + title, + description, + children, +}: { + icon: LucideIcon; + title: string; + description: string; + children?: React.ReactNode; +}) { + return ( +
+
+ +

{title}

+
+

{description}

+ {children ?
{children}
: null}
); } @@ -797,41 +837,14 @@ function ExtensibleSection() { title="Extend it with plugins" description="Add new panels and functionality that work in desktop, web and mobile" > -
-
-
-
- -
-

Plugins

-
- +
+ +
+ {PLUGIN_CAPABILITIES.map((capability) => ( + + ))}
- -
-
- {PLUGIN_CAPABILITIES.map((capability) => ( - - ))} -
-
- -
+

Paseo is Apache 2.0.

+ + Browse plugins + + + + Plugin docs + + +); + const PLUGIN_CAPABILITIES: ReadonlyArray<{ icon: LucideIcon; title: string; @@ -876,26 +908,6 @@ const PLUGIN_CAPABILITIES: ReadonlyArray<{ }, ]; -function PluginCapabilityCard({ - icon: Icon, - title, - description, -}: { - icon: LucideIcon; - title: string; - description: string; -}) { - return ( -
-
- -
-

{title}

-

{description}

-
- ); -} - const PRINCIPLES: ReadonlyArray<{ icon: LucideIcon; title: string; description: string }> = [ { icon: Lock, @@ -937,16 +949,7 @@ function PhilosophySection() { >
{PRINCIPLES.map((principle) => ( -
-
- -

{principle.title}

-
-

{principle.description}

-
+ ))}
diff --git a/packages/website/src/components/sponsorship.tsx b/packages/website/src/components/sponsorship.tsx index 0693f1877b..9d42b1e95d 100644 --- a/packages/website/src/components/sponsorship.tsx +++ b/packages/website/src/components/sponsorship.tsx @@ -285,7 +285,7 @@ export function SponsorsSection({ placement }: SponsorsSectionProps) {