Developer Platform

Build on
ChargePanda

Create modules that extend the platform for thousands of users. Full Laravel package architecture, admin panel integration, account portal views, REST API access, and a marketplace to distribute your work.

module.json
{
  "name": "My Module",
  "slug": "my-module",
  "version": "1.0.0",
  "description": "Extends ChargePanda...",
  "provider": "Modules\\MyModule\\ServiceProvider",
  "author": "Your Name",
  "requires": {
    "core": ">=3.0.0"
  }
}
Full Laravel stack
Use any Composer package
Zero config deployment
ZIP upload from admin panel
Admin + account UI
Integrated views out of the box
Marketplace distribution
Reach all ChargePanda users

What is a ChargePanda module?

Modules are self-contained Laravel packages that integrate directly with the ChargePanda core — adding admin pages, account portal UI, database tables, background jobs, and API endpoints.

Self-contained package

Each module has its own migrations, service provider, views, and routes — all isolated from the core. Modules can't break each other.

Dependency system

Declare dependencies in module.json. The module manager resolves and validates them at activation — no broken installs.

Zero-downtime install

Customers upload a ZIP or click install. Migrations run automatically. Service provider registers. No server restart required.

Module anatomy

A module is a standard Laravel package with a ChargePanda manifest. If you can write a Laravel service provider, you can build a module.

Directory structure
modules/
└── my-module/
    ├── module.json          ← manifest
    ├── src/
    │   ├── MyModuleServiceProvider.php
    │   ├── Http/Controllers/
    │   ├── Models/
    │   └── Services/
    ├── database/migrations/
    ├── resources/views/
    │   ├── admin/           ← admin panel
    │   └── account/         ← customer portal
    └── routes/
        ├── admin.php
        └── account.php
module.json (full example)
{
  "name": "Payment Recovery",
  "slug": "payment-recovery",
  "version": "1.0.0",
  "description": "Dunning & failed payment recovery",
  "provider": "Modules\\PaymentRecovery\\ServiceProvider",
  "author": "Acme Dev",
  "author_url": "https://acmedev.com",
  "requires": {
    "core": ">=3.0.0"
  },
  "settings": [
    {
      "key": "retry_attempts",
      "type": "integer",
      "default": 3
    }
  ]
}
ServiceProvider.php — register hooks
namespace Modules\MyModule;

use App\Services\AdminNavService;
use App\Events\OrderPaid;
use Illuminate\Support\ServiceProvider;

class MyModuleServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        // Register admin nav entry
        AdminNavService::add('My Module', route('my-module.index'), icon: 'ti-plug');

        // Listen to core events
        Event::listen(OrderPaid::class, [MyOrderListener::class, 'handle']);

        // Load module routes, views, migrations
        $this->loadRoutesFrom(__DIR__.'/../routes/admin.php');
        $this->loadViewsFrom(__DIR__.'/../resources/views', 'my-module');
        $this->loadMigrationsFrom(__DIR__.'/../database/migrations');
    }
}

What you get access to

Everything you need to build a production-grade module without reinventing infrastructure.

Core events

OrderPaid, LicenseActivated, SubscriptionRenewed, SubscriptionCancelled, TicketCreated — all fired with full model data. Listen in your service provider, trigger anything.

Admin panel nav

Register sidebar entries, sub-nav sections, and dashboard widgets via AdminNavService. Your module feels native to the admin panel.

Account portal UI

Add pages to the customer-facing account portal. Customers see your module's UI alongside their orders, licenses, and subscriptions — same design system.

Background jobs

Dispatch jobs on the shared queue worker. Long-running tasks (AI processing, report generation, email sequences) run asynchronously without blocking requests.

REST API extension

Register new endpoints under /api/modules/{slug}/. Full middleware stack, authentication, and rate limiting inherited from the core.

Settings storage

Declare settings in module.json. ChargePanda auto-generates an admin settings UI and stores values in the settings table. No boilerplate.

Full Composer ecosystem

Your module is a standard Laravel package. Use any Composer dependency — Guzzle, Spatie, OpenAI PHP — without conflicts.

Migrations & rollback

Module migrations run on activation, roll back on deactivation. Clean installs and clean uninstalls, every time.

Study real modules

The existing free modules are open for inspection once installed. Use them as working reference implementations.

AI Agents Core
Free

The shared engine for AI-powered modules. Shows how to build async task runners, OpenAI integrations, billing integrations, and account-facing dashboards. The reference implementation for complex modules.

View in marketplace →
SEO Agents
Free

Six AI-powered SEO tools. Shows how to build multi-tool modules with tabbed admin UI, background job processing, result storage, and dependency management on AI Agents Core.

View in marketplace →

Submit your module to the marketplace

Reach all ChargePanda users. List your module in the marketplace and manage distribution, versioning, and updates through the platform.

Submission requirements

Valid module.json with all required fields
Compatible with ChargePanda 3.0.0+
Migrations are reversible (clean uninstall)
No hardcoded credentials or API keys
Admin panel views follow Bootstrap 5 conventions
Account portal views follow Tailwind v4 conventions
Documentation or inline comments on non-obvious code
Tested on PHP 8.1+ and Laravel 10+