shellphone.app/app/public-area/pages/pricing.tsx

134 lines
4.1 KiB
TypeScript
Raw Normal View History

2021-09-01 15:44:15 +00:00
import type { BlitzPage } from "blitz";
2021-09-21 20:02:27 +00:00
import { Link, Routes } from "blitz";
import { HiCheck } from "react-icons/hi";
2021-09-21 20:02:27 +00:00
import clsx from "clsx";
2021-09-24 23:08:29 +00:00
import * as Panelbear from "@panelbear/panelbear-js";
2021-09-01 15:44:15 +00:00
2021-09-21 20:02:27 +00:00
import BaseLayout from "../components/base-layout";
const paidFeatures = [
"SMS",
"MMS (coming soon)",
"Calls",
"SMS forwarding (coming soon)",
"Call forwarding (coming soon)",
"Voicemail (coming soon)",
"Call recording (coming soon)",
];
const pricing = {
tiers: [
{
title: "Free",
price: 0,
frequency: "",
description: "The essentials to let you try Shellphone.",
features: ["SMS (send only)"],
unavailableFeatures: paidFeatures.slice(1),
cta: "Join waitlist",
yearly: false,
},
{
title: "Yearly",
2021-09-24 23:08:29 +00:00
price: 12.5,
2021-09-21 20:02:27 +00:00
frequency: "/month",
description: "Text and call anyone, anywhere in the world, all year long.",
features: paidFeatures,
unavailableFeatures: [],
cta: "Join waitlist",
yearly: true,
},
{
title: "Monthly",
price: 15,
frequency: "/month",
description: "Text and call anyone, anywhere in the world.",
features: paidFeatures,
unavailableFeatures: [],
cta: "Join waitlist",
yearly: false,
},
],
};
2021-09-01 15:44:15 +00:00
const Pricing: BlitzPage = () => {
2021-09-21 20:02:27 +00:00
return (
<section className="pt-32 pb-10 px-4 sm:px-6 md:pt-34 md:pb-16">
<div className="bg-white">
2021-09-24 23:08:29 +00:00
<h2 className="text-3xl font-mackinac font-extrabold text-navy sm:text-5xl sm:leading-none sm:tracking-tight">
2021-09-21 20:02:27 +00:00
Simple no-tricks pricing
</h2>
<p className="mt-6 max-w-2xl text-xl text-gray-500">
One affordable and transparent plan that includes everything you need.
</p>
<div className="mt-24 space-y-12 lg:space-y-0 lg:grid lg:grid-cols-3 lg:gap-x-8">
{pricing.tiers.map((tier) => (
<div
key={tier.title}
className="relative p-8 bg-white border border-gray-200 rounded-2xl shadow-sm flex flex-col"
>
<div className="flex-1">
2021-09-24 23:08:29 +00:00
<h3 className="text-2xl font-mackinac font-semibold text-gray-900">{tier.title}</h3>
2021-09-21 20:02:27 +00:00
{tier.yearly ? (
<p className="absolute top-0 py-1.5 px-4 bg-rebeccapurple-500 rounded-full text-xs font-semibold uppercase tracking-wide text-white transform -translate-y-1/2">
2021-09-21 20:02:27 +00:00
Get 2 months free!
</p>
) : null}
<p className="mt-4 flex items-baseline text-gray-900">
2021-09-24 23:08:29 +00:00
<span className="text-4xl font-extrabold tracking-tight">{tier.price}</span>
2021-09-21 20:02:27 +00:00
<span className="ml-1 text-xl font-semibold">{tier.frequency}</span>
</p>
{tier.yearly ? (
2021-09-24 23:08:29 +00:00
<p className="text-gray-500 text-sm">Billed yearly ({tier.price * 12})</p>
2021-09-21 20:02:27 +00:00
) : null}
<p className="mt-6 text-gray-500">{tier.description}</p>
<ul role="list" className="mt-6 space-y-6">
{tier.features.map((feature) => (
<li key={feature} className="flex">
<HiCheck
className="flex-shrink-0 w-6 h-6 text-[#0eb56f]"
aria-hidden="true"
/>
<span className="ml-3 text-gray-500">{feature}</span>
</li>
))}
{tier.unavailableFeatures.map((feature) => (
<li key={feature} className="flex">
<span className="ml-9 text-gray-400">
2021-09-21 20:02:27 +00:00
{~feature.indexOf("(coming soon)")
? feature.slice(0, feature.indexOf("(coming soon)"))
: feature}
</span>
</li>
))}
</ul>
</div>
<Link href={Routes.LandingPage({ join_waitlist: "" })}>
<a
2021-09-24 23:08:29 +00:00
onClick={() => Panelbear.track("redirect-to-join-waitlist")}
2021-09-21 20:02:27 +00:00
className={clsx(
tier.yearly
? "bg-rebeccapurple-500 text-white hover:bg-rebeccapurple-600"
: "bg-rebeccapurple-50 text-rebeccapurple-700 hover:bg-rebeccapurple-100",
2021-09-21 20:02:27 +00:00
"mt-8 block w-full py-3 px-6 border border-transparent rounded-md text-center font-medium",
)}
>
{tier.cta}
</a>
</Link>
</div>
))}
</div>
</div>
</section>
);
2021-09-01 15:44:15 +00:00
};
2021-09-21 20:02:27 +00:00
Pricing.getLayout = (page) => <BaseLayout>{page}</BaseLayout>;
2021-09-01 15:44:15 +00:00
Pricing.suppressFirstRenderFlicker = true;
export default Pricing;