What the panel is
A self-hosted panel that turns a payment into an account, a license key, and a gated download.
The panel is a self-hosted application you install on your own server. It sits between your payment provider and your customers, and it owns everything that happens after the money arrives: creating the account, issuing the license key, tracking which domains that key is activated on, and deciding whether a given customer is still entitled to the version they are trying to download.
It is deliberately not a storefront. You sell through Paddle’s checkout overlay or through a lifetime-deal marketplace, and the panel reacts to what those systems tell it.
The two halves#
Every install contains two separate interfaces, each with its own layout, navigation, and access rules.
- The admin panel, at
/admin. Products, plans, versions, orders, subscriptions, users, redeem codes, referrals, refund requests, webhook logs, analytics, and settings. - The customer panel, at
/panel. Your customers sign in here to see their subscriptions, copy their license key, manage activated domains, download versions, review orders, request refunds, and track referral earnings.
What runs it#
| Framework | Laravel 13 |
|---|---|
| Language | PHP 8.3 or newer |
| Database | MySQL 8 or newer |
| Front end | Blade templates, Tailwind CSS, Alpine.js — server-rendered, no single-page framework |
| Payments | Paddle, as merchant of record |
| Interface languages | 11, switchable per user |
You get the full, readable PHP source. Nothing is obfuscated or compiled.
The core idea: Paddle is the source of truth#
The panel never takes a card number and never decides on its own that someone has paid. Every purchase, renewal, cancellation, pause, and refund arrives as a signed webhook from Paddle, and the panel updates its own records to match.
That has one consequence worth internalising early: if a subscription looks wrong in the panel, the answer is almost always in the webhook log, not in the database. See Webhook logs and retries.
What a sale looks like end to end#
- A buyer completes Paddle’s checkout on your marketing site.
- Paddle sends a
transaction.completedwebhook to your panel. - The panel finds or creates the user, records the order and transaction, and issues a subscription with a fresh license key.
- The buyer receives a welcome email with a signed link to set their password.
- They sign in to
/panel, copy their license key, and download the current version. - Your software calls the panel’s license API to verify that key and register the domain it is running on.
Steps 2 through 4 need no action from you.