Back to Component Explorer
Neo-Brutalist 4-Color Block Pricing
pricingHeader neo-brutalist pricing grid featuring 4 color blocks, thick borders, hard offset shadows, and discount pills.
#pricing#brutalist#blocks#currency-toggle
Live Interactive Preview
NO BS PRICING
CHOOSE YOUR TIER
BASIC
$15/mo
Core UI components
Community Discord
Standard updates
PRO BUNDLE
HOT$45/mo
All 50+ components
Commercial license
Priority support
Lifetime updates
TEAM HUB
$85/mo
10 Developer seats
Design System Kit
Private Slack channel
Custom tokens
AGENCY
$175/mo
Unlimited clients
Dedicated code review
Custom components
1-on-1 calls
Component Source Code
Select language in the dropdownBrutalistPricing.tsx
1'use client';23import React, { useState } from 'react';4import { Check } from 'lucide-react';56export default function BrutalistPricing() {7 const [currency, setCurrency] = useState<'USD' | 'INR'>('USD');8 const [period, setPeriod] = useState<'monthly' | 'yearly'>('monthly');910 const symbol = currency === 'USD' ? '$' : '₹';11 const mult = currency === 'USD' ? 1 : 80;12 const off = period === 'yearly' ? 0.8 : 1;1314 const plans = [15 { title: 'BASIC', color: 'bg-yellow-300 dark:bg-yellow-950', price: Math.round(15 * mult * off), features: ['Core UI components', 'Community Discord', 'Standard updates'] },16 { title: 'PRO BUNDLE', color: 'bg-pink-300 dark:bg-pink-950', price: Math.round(45 * mult * off), featured: true, features: ['All 50+ components', 'Commercial license', 'Priority support', 'Lifetime updates'] },17 { title: 'TEAM HUB', color: 'bg-cyan-300 dark:bg-cyan-950', price: Math.round(85 * mult * off), features: ['10 Developer seats', 'Design System Kit', 'Private Slack channel', 'Custom tokens'] },18 { title: 'AGENCY', color: 'bg-lime-300 dark:bg-lime-950', price: Math.round(175 * mult * off), features: ['Unlimited clients', 'Dedicated code review', 'Custom components', '1-on-1 calls'] }19 ];2021 return (22 <div className="w-full max-w-7xl mx-auto p-4 sm:p-6 font-mono select-none">23 {/* Section Header */}24 <div className="flex flex-col items-center text-center mb-8">25 <span className="rounded-md border-2 border-slate-900 dark:border-slate-100 bg-amber-300 dark:bg-amber-400 px-3 py-1 text-[11px] font-black text-slate-900 uppercase">26 NO BS PRICING27 </span>28 <h2 className="text-2xl sm:text-3xl font-black text-slate-900 dark:text-slate-100 mt-3">29 CHOOSE YOUR TIER30 </h2>31 </div>3233 <div className="flex flex-col items-center gap-4 mb-8">34 <div className="flex items-center gap-2 rounded-2xl border-3 border-slate-900 dark:border-slate-100 bg-white dark:bg-slate-800 p-2 shadow-[4px_4px_0px_0px_#000] dark:shadow-[4px_4px_0px_0px_#fff]">35 <button36 onClick={() => setCurrency('USD')}37 className={`flex items-center gap-1 px-3 py-1 text-xs font-black rounded-xl border-2 border-slate-900 dark:border-slate-100 transition ${currency === 'USD' ? 'bg-amber-300 dark:bg-amber-400 text-slate-900' : 'bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100'}`}38 >39 {currency === 'USD' && <Check className="h-3 w-3" />}40 <span>USD ($)</span>41 </button>42 <button43 onClick={() => setCurrency('INR')}44 className={`flex items-center gap-1 px-3 py-1 text-xs font-black rounded-xl border-2 border-slate-900 dark:border-slate-100 transition ${currency === 'INR' ? 'bg-amber-300 dark:bg-amber-400 text-slate-900' : 'bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100'}`}45 >46 {currency === 'INR' && <Check className="h-3 w-3" />}47 <span>INR (₹)</span>48 </button>49 <div className="h-5 w-0.5 bg-slate-900 dark:bg-slate-100 mx-1" />50 <button51 onClick={() => setPeriod('monthly')}52 className={`flex items-center gap-1 px-3 py-1 text-xs font-black rounded-xl border-2 border-slate-900 dark:border-slate-100 transition ${period === 'monthly' ? 'bg-slate-900 dark:bg-slate-100 text-white dark:text-slate-900' : 'bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100'}`}53 >54 {period === 'monthly' && <Check className="h-3 w-3" />}55 <span>MONTHLY</span>56 </button>57 <button58 onClick={() => setPeriod('yearly')}59 className={`flex items-center gap-1 px-3 py-1 text-xs font-black rounded-xl border-2 border-slate-900 dark:border-slate-100 transition ${period === 'yearly' ? 'bg-slate-900 dark:bg-slate-100 text-white dark:text-slate-900' : 'bg-white dark:bg-slate-800 text-slate-900 dark:text-slate-100'}`}60 >61 {period === 'yearly' && <Check className="h-3 w-3" />}62 <span>YEARLY [-20%]</span>63 </button>64 </div>65 </div>6667 <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">68 {plans.map((p, i) => (69 <div70 key={i}71 className={`rounded-3xl border-3 border-slate-900 dark:border-slate-100 p-6 min-h-[460px] flex flex-col justify-between transition-all ${p.color} text-slate-900 dark:text-slate-100 shadow-[6px_6px_0px_0px_#000] dark:shadow-[6px_6px_0px_0px_#fff] ${72 p.featured ? 'scale-[1.02]' : ''73 }`}74 >75 <div>76 <div className="flex items-center justify-between">77 <h3 className="text-lg font-black">{p.title}</h3>78 {p.featured && <span className="rounded-lg border-2 border-slate-900 dark:border-slate-100 bg-white dark:bg-slate-800 px-2 py-0.5 text-[10px] font-black">HOT</span>}79 </div>80 <div className="mt-4 flex items-baseline gap-1">81 <span className="text-3xl font-black">{symbol}{p.price.toLocaleString()}</span>82 <span className="text-xs font-bold text-slate-700 dark:text-slate-300">/{period === 'monthly' ? 'mo' : 'yr'}</span>83 </div>84 <div className="mt-6 space-y-2.5 border-t-2 border-slate-900 dark:border-slate-100 pt-4 text-xs font-black">85 {p.features.map((f, idx) => (86 <div key={idx} className="flex items-center gap-2">87 <Check className="h-4 w-4 shrink-0 stroke-[3]" />88 <span>{f}</span>89 </div>90 ))}91 </div>92 </div>93 <button className="mt-8 w-full rounded-2xl border-3 border-slate-900 dark:border-slate-100 bg-white dark:bg-slate-800 hover:bg-slate-900 hover:text-white dark:hover:bg-slate-100 dark:hover:text-slate-900 py-3 text-xs font-black shadow-[3px_3px_0px_0px_#000] dark:shadow-[3px_3px_0px_0px_#fff] transition">94 SELECT {p.title}95 </button>96 </div>97 ))}98 </div>99 </div>100 );101}Installation & Integration Guide
Step 1: Tailwind CSS v4 Setup
Tailwind DocsIf you do not have Tailwind installed yet, run this installation command:
Terminal
npm install tailwindcss @tailwindcss/postcss postcss
Then add the Tailwind directive to your main stylesheet (globals.css):
@import "tailwindcss";
Step 2: Install Icon Dependencies
npm install lucide-react react-icons
Step 3: Add Component File
Create a new file in your project at src/components/pricing/BrutalistPricing.tsx and paste the copied code from the source viewer above.
Step 4: Usage Example
ExamplePage.tsx
1import NeoBrutalist4ColorBlockPricing from '@/components/pricing/BrutalistPricing';23export default function ExamplePage() {4 return (5 <main className="p-8 flex items-center justify-center min-h-screen">6 <NeoBrutalist4ColorBlockPricing />7 </main>8 );9}