GROWTH PATTERN

Implementing Usage-Based Billing with Chargebee

While Chargebee handles billing correctly, it doesn't monitor feature usage or enforce subscription-based feature gating.

Chargebee

Last updated:

What's Missing in Standard Chargebee Architecture

Chargebee handles payments correctly, but there's no system to track usage and automatically enforce subscription-based feature limits.

Standard Chargebee Flow vs Optimized Skene Flow

Standard Flow
1

User subscribes via Chargebee

2

Subscription active but no usage limits enforced

3

Free users can access all features without limits

Skene Flow
1

Monitor usage in database and Chargebee subscription status

2

Detect when free tier user hits usage limit

3

Block feature access and trigger upgrade prompt email

4

Track conversion from free to paid

Visual comparison of the flows:

Loading diagram...

How Skene Fixes This

The Skene setup for Chargebee monitors usage metrics and subscription status, automatically blocking features and sending upgrade prompts when free tier users exceed their limits.

Implementation Comparison

Using Skene Infrastructure

Install via Prompt

cursor.mdc
@task: Initialize Skene.
@action: Analyze my local code, validating subscription via `npx skene login`, and generate `skene.config.ts` to implement the Freemium Gating pattern for Chargebee.

Copy Skene Prompt for Cursor

Generated skene.config.ts

skene.config.ts
// skene.config.ts - The Automated Way
import { defineLoop } from '@skene/sdk';

export default defineLoop({
  type: 'freemium',
  opinion: 'Enforce usage limits for free tier users and trigger upgrade prompts',
  steps: [
    {
      trigger: {
        type: 'api',
        endpoint: '/api/features/*',
        method: 'POST'
      },
      condition: {
        type: 'usage',
        limit: {
          free: 100,
          paid: Infinity
        },
        period: '30d'
      },
      action: {
        type: 'block',
        message: 'You've reached your free tier limit. Upgrade to continue.',
        upgradePrompt: {
          type: 'email',
          provider: 'resend',
          template: 'upgrade_prompt'
        }
      }
    }
  ],
  recovery: {
    retries: 0 // No retries for blocking actions
  }
});

Frequently asked questions