Cards cardspricingtierplancommerce
Pricing Compare Mini Card
A compact pricing tier card with gradient spotlight highlight, feature checkmarks, and CTA.
Preview
Pro Developer
For growing teams and fast production workflows.
$29 /month
- Unlimited UI components
- Full source code access
- Commercial license
- Community Discord support
Usage
Copy the full block below to use this component with its imports.
astro
---
import { PricingCompareMiniCard } from 'astro-component-kit';
---
<PricingCompareMiniCard title="Pro Plan" price="$29" period="/month" description="For scaling teams" features={['Unlimited components', 'Priority support', 'Commercial license']} isPopular={true} ctaText="Upgrade to Pro" /> ---
import { PricingCompareMiniCard } from 'astro-component-kit';
---
<PricingCompareMiniCard title="Pro Plan" price="$29" period="/month" description="For scaling teams" features={['Unlimited components', 'Priority support', 'Commercial license']} isPopular={true} ctaText="Upgrade to Pro" /> Manual Installation
If you are not using the npm package, create a new file src/components/lib/PricingCompareMiniCard.astro and paste the following code:
astro
---
/**
* PricingCompareMiniCard — High-conversion mini pricing card with plan perks, price tier, and action button.
*
* @param {string} planName - Plan name (e.g. 'Pro Developer').
* @param {string} price - Price figure (e.g. '$29').
* @param {string} period - Frequency string (e.g. '/month').
* @param {string} description - Plan highlight subtitle.
* @param {string[]} features - List of plan feature bullet points.
* @param {boolean} featured - Whether the card is visually emphasized.
* @param {string} ctaText - Label for the call to action button. Default is 'Get Started'.
* @param {string} ctaHref - Link URL for the button.
*/
interface Props {
planName: string;
price: string;
period?: string;
description?: string;
features?: string[];
featured?: boolean;
ctaText?: string;
ctaHref?: string;
}
const {
planName,
price,
period = '/month',
description = 'For growing teams and fast production workflows.',
features = [
'Unlimited UI components',
'Full source code access',
'Commercial license',
'Community Discord support',
],
featured = false,
ctaText = 'Get Started',
ctaHref = '#',
} = Astro.props;
---
<div class:list={['mini-price-card', { 'mini-price-card--featured': featured }]}>
{featured && <span class="mini-price-card__badge">Most Popular</span>}
<div class="mini-price-card__header">
<h3 class="mini-price-card__plan">{planName}</h3>
<p class="mini-price-card__desc">{description}</p>
<div class="mini-price-card__amount">
<span class="val">{price}</span>
<span class="period">{period}</span>
</div>
</div>
<ul class="mini-price-card__features">
{features.map((feat) => (
<li class="mini-price-card__feature">
<svg class="check-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<polyline points="20 6 9 17 4 12" />
</svg>
<span>{feat}</span>
</li>
))}
</ul>
<a href={ctaHref} class="mini-price-card__btn">
{ctaText}
<span aria-hidden="true">→</span>
</a>
</div>
<style>
.mini-price-card {
position: relative;
display: flex;
flex-direction: column;
padding: var(--sp-6, 1.5rem);
background: rgba(255, 255, 255, 0.02);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: var(--r-xl, 24px);
width: 100%;
max-width: 320px;
font-family: var(--font-sans, system-ui, sans-serif);
transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), border-color 0.3s ease, box-shadow 0.3s ease;
}
.mini-price-card:hover {
transform: translateY(-4px);
border-color: rgba(184, 134, 11, 0.3);
box-shadow: 0 16px 40px rgba(0, 0, 0, 0.4);
}
.mini-price-card--featured {
border-color: rgba(184, 134, 11, 0.5);
background: radial-gradient(circle at top, rgba(184, 134, 11, 0.12), rgba(255, 255, 255, 0.02) 60%);
box-shadow: 0 12px 36px rgba(184, 134, 11, 0.15);
}
.mini-price-card__badge {
position: absolute;
top: -12px;
right: 20px;
background: linear-gradient(135deg, #d4a017, #b8860b);
color: #050505;
font-size: 0.72rem;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.06em;
padding: 0.25rem 0.75rem;
border-radius: var(--r-full, 9999px);
box-shadow: 0 4px 12px rgba(184, 134, 11, 0.4);
}
.mini-price-card__plan {
font-size: 1.15rem;
font-weight: 800;
color: var(--c-text-1, #ffffff);
margin: 0;
}
.mini-price-card__desc {
font-size: 0.8rem;
color: var(--c-text-2, #a3a3a3);
margin: 4px 0 16px 0;
line-height: 1.45;
}
.mini-price-card__amount {
display: flex;
align-items: baseline;
gap: 4px;
margin-bottom: var(--sp-4, 1rem);
padding-bottom: var(--sp-4, 1rem);
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
}
.mini-price-card__amount .val {
font-size: 2.2rem;
font-weight: 900;
color: var(--c-text-1, #ffffff);
letter-spacing: -0.03em;
}
.mini-price-card__amount .period {
font-size: 0.82rem;
color: var(--c-text-3, #737373);
}
.mini-price-card__features {
list-style: none;
display: flex;
flex-direction: column;
gap: 10px;
margin: 0 0 24px 0;
padding: 0;
flex: 1;
}
.mini-price-card__feature {
display: flex;
align-items: center;
gap: 10px;
font-size: 0.82rem;
color: var(--c-text-2, #a3a3a3);
}
.check-icon {
color: var(--c-primary-light, #d4a017);
flex-shrink: 0;
}
.mini-price-card__btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
width: 100%;
padding: 0.75rem;
background: rgba(255, 255, 255, 0.06);
color: var(--c-text-1, #ffffff);
font-size: 0.88rem;
font-weight: 700;
text-decoration: none;
border-radius: var(--r-md, 12px);
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.25s ease;
}
.mini-price-card--featured .mini-price-card__btn,
.mini-price-card__btn:hover {
background: linear-gradient(135deg, #d4a017, #b8860b);
color: #050505;
border-color: transparent;
box-shadow: 0 6px 20px rgba(184, 134, 11, 0.35);
}
</style> ---
/**
* PricingCompareMiniCard — High-conversion mini pricing card with plan perks, price tier, and action button.
*
* @param {string} planName - Plan name (e.g. 'Pro Developer').
* @param {string} price - Price figure (e.g. '$29').
* @param {string} period - Frequency string (e.g. '/month').
* @param {string} description - Plan highlight subtitle.
* @param {string[]} features - List of plan feature bullet points.
* @param {boolean} featured - Whether the card is visually emphasized.
* @param {string} ctaText - Label for the call to action button. Default is 'Get Started'.
* @param {string} ctaHref - Link URL for the button.
*/
interface Props {
planName: string;
price: string;
period?: string;
description?: string;
features?: string[];
featured?: boolean;
ctaText?: string;
ctaHref?: string;
}
const {
planName,
price,
period = '/month',
description = 'For growing teams and fast production workflows.',
features = [
'Unlimited UI components',
'Full source code access',
'Commercial license',
'Community Discord support',
],
featured = false,
ctaText = 'Get Started',
ctaHref = '#',
} = Astro.props;
---
<div class:list={['mini-price-card', { 'mini-price-card--featured': featured }]}>
{featured && <span class="mini-price-card__badge">Most Popular</span>}
<div class="mini-price-card__header">
<h3 class="mini-price-card__plan">{planName}</h3>
<p class="mini-price-card__desc">{description}</p>
<div class="mini-price-card__amount">
<span class="val">{price}</span>
<span class="period">{period}</span>
</div>
</div>
<ul class="mini-price-card__features">
{features.map((feat) => (
<li class="mini-price-card__feature">
<svg class="check-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<polyline points="20 6 9 17 4 12" />
</svg>
<span>{feat}</span>
</li>
))}
</ul>
<a href={ctaHref} class="mini-price-card__btn">
{ctaText}
<span aria-hidden="true">→</span>
</a>
</div>
<style>
.mini-price-card {
position: relative;
display: flex;
flex-direction: column;
padding: var(--sp-6, 1.5rem);
background: rgba(255, 255, 255, 0.02);
backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: var(--r-xl, 24px);
width: 100%;
max-width: 320px;
font-family: var(--font-sans, system-ui, sans-serif);
transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), border-color 0.3s ease, box-shadow 0.3s ease;
}
.mini-price-card:hover {
transform: translateY(-4px);
border-color: rgba(184, 134, 11, 0.3);
box-shadow: 0 16px 40px rgba(0, 0, 0, 0.4);
}
.mini-price-card--featured {
border-color: rgba(184, 134, 11, 0.5);
background: radial-gradient(circle at top, rgba(184, 134, 11, 0.12), rgba(255, 255, 255, 0.02) 60%);
box-shadow: 0 12px 36px rgba(184, 134, 11, 0.15);
}
.mini-price-card__badge {
position: absolute;
top: -12px;
right: 20px;
background: linear-gradient(135deg, #d4a017, #b8860b);
color: #050505;
font-size: 0.72rem;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.06em;
padding: 0.25rem 0.75rem;
border-radius: var(--r-full, 9999px);
box-shadow: 0 4px 12px rgba(184, 134, 11, 0.4);
}
.mini-price-card__plan {
font-size: 1.15rem;
font-weight: 800;
color: var(--c-text-1, #ffffff);
margin: 0;
}
.mini-price-card__desc {
font-size: 0.8rem;
color: var(--c-text-2, #a3a3a3);
margin: 4px 0 16px 0;
line-height: 1.45;
}
.mini-price-card__amount {
display: flex;
align-items: baseline;
gap: 4px;
margin-bottom: var(--sp-4, 1rem);
padding-bottom: var(--sp-4, 1rem);
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
}
.mini-price-card__amount .val {
font-size: 2.2rem;
font-weight: 900;
color: var(--c-text-1, #ffffff);
letter-spacing: -0.03em;
}
.mini-price-card__amount .period {
font-size: 0.82rem;
color: var(--c-text-3, #737373);
}
.mini-price-card__features {
list-style: none;
display: flex;
flex-direction: column;
gap: 10px;
margin: 0 0 24px 0;
padding: 0;
flex: 1;
}
.mini-price-card__feature {
display: flex;
align-items: center;
gap: 10px;
font-size: 0.82rem;
color: var(--c-text-2, #a3a3a3);
}
.check-icon {
color: var(--c-primary-light, #d4a017);
flex-shrink: 0;
}
.mini-price-card__btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
width: 100%;
padding: 0.75rem;
background: rgba(255, 255, 255, 0.06);
color: var(--c-text-1, #ffffff);
font-size: 0.88rem;
font-weight: 700;
text-decoration: none;
border-radius: var(--r-md, 12px);
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.25s ease;
}
.mini-price-card--featured .mini-price-card__btn,
.mini-price-card__btn:hover {
background: linear-gradient(135deg, #d4a017, #b8860b);
color: #050505;
border-color: transparent;
box-shadow: 0 6px 20px rgba(184, 134, 11, 0.35);
}
</style>
Quick Info
- Category
- Cards
- Filename
PricingCompareMiniCard.astro- Dependencies
- None — pure Astro + CSS
- Tags
- cardspricingtierplancommerce