shadimage

Pricing Section

A pricing section with three plan cards.

registry/brook/blocks/pricing-section/components/pricing-section.tsx

"use client";

import { Check } from "lucide-react";
import { Badge } from "../../ui/badge/badge";
import { Button } from "../../ui/button/button";
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "../../ui/card/card";
import data from "./data.json";
import styles from "./pricing-section.module.css";

const { plans } = data;

export default function PricingSection() {
  return (
    <section className={styles.section}>
      <div className={styles.header}>
        <h2 className={styles.title}>Simple, transparent pricing</h2>
        <p className={styles.subtitle}>
          Choose the plan that works best for you. All plans include a 14-day free trial.
        </p>
      </div>

      <div className={styles.grid}>
        {plans.map((plan) => (
          <Card className={`${styles.card} ${plan.highlighted ? styles.highlighted : ""}`} key={plan.name}>
            {plan.badge && (
              <Badge className={styles.badge} variant="default">
                {plan.badge}
              </Badge>
            )}
            <CardHeader className={styles.cardHeader}>
              <CardTitle className={styles.planName}>{plan.name}</CardTitle>
              <CardDescription className={styles.planDescription}>{plan.description}</CardDescription>
            </CardHeader>

            <CardContent className={styles.cardContent}>
              <div className={styles.priceContainer}>
                <span className={styles.currency}>$</span>
                <span className={styles.price}>{plan.monthlyPrice}</span>
                <span className={styles.period}>/month</span>
              </div>

              <ul className={styles.features}>
                {plan.features.map((feature) => (
                  <li className={styles.feature} key={feature}>
                    <div className={styles.checkIcon}>
                      <Check size={10} strokeWidth={3} />
                    </div>
                    <span>{feature}</span>
                  </li>
                ))}
              </ul>
            </CardContent>

            <CardFooter className={styles.cardFooter}>
              <Button className={styles.button} variant={plan.highlighted ? "primary" : "secondary"}>
                {plan.cta}
              </Button>
            </CardFooter>
          </Card>
        ))}
      </div>
    </section>
  );
}
Where it goes
pricing
Visual style
3d
Use cases
saas-landing

DependenciesBundle weight · light

icons
lucide-react