Skip to main content

Overview

Your pricing plans are configured in a simple PHP array that’s easy to customize. This guide shows you exactly how to modify plans, add features, and display them beautifully in your application.

Plans Configuration File

Location: lang/en/prices.php This file contains all your pricing plans for different payment providers (Stripe, LemonSqueezy, Paddle).

Plan Structure

Each plan is an array with these fields:

Complete Example

Field Explanations

Required Fields

name (string)

The display name of the plan shown to users. Examples:
  • “Free”
  • “Starter”
  • “Professional”
  • “Enterprise”

slug (string)

  • For Free plans: Just use 'free'
  • For Paid plans: Must match your Stripe Price ID exactly
  • Format: price_1ABC...xyz from Stripe dashboard
  • Important: This is how the system knows which Stripe price to charge!

description (string)

A short description that appears under the plan name. Tips:
  • Keep it under 60 characters
  • Focus on who the plan is for
  • Be clear and benefit-focused
Examples:
  • “Perfect for individuals”
  • “For growing teams”
  • “Enterprise-grade features”

price (number or string)

The monthly price in your currency. Examples:
  • 0 for free plans
  • '29.99' for $29.99/month
  • '99' for $99/month

interval (string)

The billing frequency. Options:
  • 'month' - Monthly billing
  • 'year' - Annual billing
Pro tip: Offer annual plans at a discount:

features (array)

List of features included in this plan. Best Practices:
  • Start with “Everything in [Previous Plan]” for higher tiers
  • Lead with most valuable features
  • Use clear, benefit-focused language
  • Keep each feature to one line
  • Use action verbs where possible

Optional Fields

bestseller (boolean)

Shows a “Most Popular” or “Recommended” badge on the plan card.
Only set this on ONE plan (usually your middle tier).

Customizing Plan Display

Adding Annual Plans

Create discounted annual versions of your plans:

Adding Addon/Per-Seat Pricing

For usage-based or per-seat pricing:
Then implement per-seat billing in Stripe with metered pricing.

Custom Plan Properties

Add any custom properties you need:
Then handle these in your Livewire component or Blade view.

Feature Writing Tips

Good Feature Examples

Clear and Benefit-Focused:
  • “Unlimited projects”
  • “Priority support (< 4hr response)”
  • “50GB file storage”
  • “Advanced analytics dashboard”
  • “SSO / SAML authentication”
Vague or Technical:
  • “More stuff”
  • “Better features”
  • “API endpoints”
  • “Enterprise capabilities”

Using Icons with Features

In your Blade view, you can add icons:

Displaying Plans

The plans are displayed via a Livewire component: Component: app/Livewire/Plans.php
View: resources/views/livewire/plans.blade.php You can customize the view to match your design.

Multiple Billing Intervals

To let users toggle between monthly and annual:

1. Add Both Intervals to Config

2. Add Toggle in Livewire Component

3. Add Toggle in View

Testing Your Plans

  1. Update the configuration file
  2. Clear config cache: php artisan config:clear
  3. Visit your pricing page: /pricing or wherever you display plans
  4. Verify:
    • All plans display correctly
    • Prices are formatted properly
    • Features lists look good
    • “Subscribe” buttons work

Best Practices

Pricing Strategy

  1. Three tiers is optimal - Free, Starter, Pro
  2. Make middle tier “Most Popular” - Anchors customers there
  3. Clear differentiation - Each tier should have obvious value jump
  4. Price anchoring - Show higher tier to make middle seem reasonable

Feature Organization

  1. Most important first - Lead with your best features
  2. Cumulative value - “Everything in Starter plus…”
  3. Specificity - “50GB storage” not “more storage”
  4. Benefits over features - “Priority support” not “dedicated queue”

Updating Plans

When changing plans:
  1. Update lang/en/prices.php
  2. Create new prices in Stripe (don’t modify existing)
  3. Update slug with new Price ID
  4. Clear cache: php artisan config:clear
  5. Test checkout flow
  6. Existing subscriptions stay on old prices (grandfathered)

Next Steps