SaaS revenue depends on flexibility — monthly, yearly, or lifetime plans.
SassyPack lets you integrate new plans easily through Stripe or Paystack.
Here’s the full setup.
1. Update Pricing Data (Frontend)
Open:
client/src/pages/Pricing.jsx
Add a new plan object:
{
category: "Payments and Billing Integrations",
name: "Team Plan",
price: "$149",
description: "For small teams launching SaaS apps",
features: ["5 team members", "Priority support", "Lifetime updates"],
link: "/checkout/team"
}
This updates your pricing UI instantly.
2. Create the Product in Stripe
In your Stripe Dashboard:
- Create a new Product → "Team Plan"
- Add a recurring or one-time price
- Copy the Price ID
Repeat the same in Paystack if you serve African markets.
3. Add Route for the New Plan
Open:
server/routes/paymentRoutes.js
Add:
router.post("/checkout/team", async (req, res) => {
const session = await stripe.checkout.sessions.create({
line_items: [
{
price: process.env.STRIPE_TEAM_PLAN_ID,
quantity: 1,
},
],
mode: "subscription",
success_url: `${process.env.CLIENT_URL}/success`,
cancel_url: `${process.env.CLIENT_URL}/cancel`,
});
res.json({ url: session.url });
});
4. Update Environment Variables
Add the new plan IDs:
STRIPE_TEAM_PLAN_ID=price_XXXXXXX
PAYSTACK_TEAM_PLAN_ID=plan_XXXXXXX
Redeploy your backend to apply.
5. Add Frontend Checkout Link
In Pricing.jsx:
<a href="/api/payment/checkout/team">
<button className="btn btn-primary">Choose Plan</button>
</a>
6. Confirm Payments
Stripe handles subscription webhooks automatically.
SassyPack includes a sample webhook route at:
server/routes/webhookRoutes.js
Edit it to trigger account upgrades or email notifications.
7. Optional: Add Lifetime License
Add a one-time charge route:
router.post("/checkout/lifetime", async (req, res) => {
const session = await stripe.checkout.sessions.create({
line_items: [
{ price: process.env.STRIPE_LIFETIME_PRICE_ID, quantity: 1 },
],
mode: "payment",
success_url: `${process.env.CLIENT_URL}/success`,
cancel_url: `${process.env.CLIENT_URL}/cancel`,
});
res.json({ url: session.url });
});
Final Thoughts
Monetization shouldn’t slow down shipping.
SassyPack keeps payment logic modular — add, remove, or switch plans in minutes.
Build features once. Get paid forever.