Skip to content

Panelica/pnlcs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

13 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

PNLCS

Open-source, self-hosted hosting billing platform β€” a free WHMCS alternative.
Client portal Β· invoicing Β· domain & SSL management Β· support tickets Β· reseller hosting.

Built with Laravel 13 Β· PHP 8.3+ Β· MySQL 8 Β· Alpine.js Β· Tailwind CSS 4

MIT License Laravel 13 PHP 8.3+ MySQL 8.0+ Stars

Docker Β· Installation Β· First Steps Β· Screenshots Β· Features Β· Modules Β· Contributing

Docker Pulls Docker Hub


About β€” Open-Source WHMCS Alternative

PNLCS is a free, open-source, self-hosted hosting billing platform and client portal β€” an open alternative to WHMCS for web hosting companies, reseller hosts, and infrastructure providers. It covers the full customer lifecycle: product catalog, checkout, recurring invoicing, domain registration, SSL certificate management, support tickets, knowledge base, and affiliate tracking.

If you have used WHMCS, you will feel at home: the data model, workflows, and module ecosystem (servers, gateways, registrars, SSL providers) are deliberately familiar. The difference is that PNLCS is MIT-licensed, self-hosted, and free to fork, study, and extend.

This project is built and maintained by the Panelica Server Management Panel team in our spare time, alongside our main product. We wanted an open, self-hosted billing system that integrates natively with Panelica and plays nicely with other control panels too β€” so we built one.

What works well today:

  • Client portal, admin panel, and core billing flows
  • Invoicing, orders, services, domains, tickets, knowledge base
  • The Panelica server module (fully tested against live servers)
  • Stripe payment gateway (tested in production)
  • Multi-language UI (30 locales, admin-editable translations)

What needs your help:

  • cPanel / Plesk / DirectAdmin / Proxmox server modules β€” code is in place but we have not tested them end-to-end. If you run one of these, please try it out and open an issue (or even better, a pull request) telling us what you found.
  • PayPal / Authorize.Net / Bank Transfer gateways β€” same story.
  • Enom domain registrar β€” API integration exists, needs real-world verification.
  • General bug reports, typos, translation improvements.

We read every issue, but because this is a side project our response time isn't always same-day. If you can include reproduction steps or a patch, it helps us enormously.


Screenshots β€” Admin Panel & Client Portal

Admin Panel

Admin Dashboard Admin dashboard with revenue, orders, and ticket overview

Language Manager Built-in translation editor β€” 30 locales, 2,232 translation keys, AI-assisted bulk translate

Appearance & Themes WordPress-style theme system with 15 built-in themes, logo/favicon upload, dark mode toggle, and homepage builder

Servers Configuration Server module management β€” connect Panelica, cPanel, Plesk, DirectAdmin, Proxmox, or custom servers

Support Tickets Ticket system with departments, priority routing, internal notes, and escalation rules

Client-Facing Site

Homepage (default theme) Customer-facing landing page with domain search, hosting plans, VPS servers, and FAQ β€” fully configurable

Homepage (Coral theme) Same site with a different built-in theme applied β€” one click to switch


Hosting Billing Features

πŸ’Ό Client Portal

  • Shop & checkout β€” browse plans, configure service, apply coupons, pay
  • Service management β€” upgrade, downgrade, cancel, auto-renew toggle
  • Domain management β€” register, transfer, renew, EPP code, WHOIS
  • Invoicing β€” view, pay online, download PDF, add-funds, credit balance
  • Support tickets β€” attachments, priority, department routing
  • Knowledge base & announcements β€” searchable, categorized
  • SSL certificates β€” CSR generation, approver emails, auto-install
  • Affiliate program β€” referral tracking, commission payouts
  • Account security β€” 2FA (TOTP), login alerts, session history

πŸ›‘οΈ Admin Panel

  • Dashboard β€” revenue, new signups, pending orders, open tickets at a glance
  • Client management β€” profiles, impersonation, notes, billing summary
  • Orders & invoices β€” manual create, bulk actions, mass mail, PDF export
  • Products & bundles β€” configurable options, addons, pricing matrices
  • Ticket system β€” internal notes, escalation rules, spam filter
  • Reports β€” revenue, conversion funnel, MRR, churn, affiliate stats
  • Bulk operations β€” mass email, bulk invoice, bulk service status update
  • Calendar β€” events, reminders, scheduled tasks
  • Quotes & projects β€” WHMCS-style pre-sales flow

🌐 Internationalization

  • 30 locales, English active by default
  • 2,232 translation keys for the core UI
  • In-browser editor β€” edit strings without touching files
  • AI-assisted bulk translate for missing keys
  • Export / import JSON per locale

🎨 Theme System

  • 15 built-in themes (Arctic, Aurora, Coral, Ember, Forest, Midnight, Mint, Neon, Ocean, Panelica, Royal, Slate, Starter, Sunset, and more)
  • WordPress-style install / activate / delete workflow
  • Homepage builder with reorderable sections
  • Per-site white-label options (logo, favicon, footer copyright)
  • Dark mode toggle per theme

πŸ” Security & Access Control

  • RBAC with over 45 fine-grained permissions
  • 2FA (TOTP) for both admin and client portals
  • Rate-limited login, 2FA verify, password reset, email resend
  • IP whitelisting for admin area (optional)
  • Session timeout and force logout support
  • Activity log β€” every admin action recorded
  • Banned IPs & emails at the application level

πŸ’³ Billing & Automation

  • Recurring billing β€” monthly, quarterly, semi-annually, annually, biennially
  • Auto-suspend unpaid services after configurable grace period
  • Late fees, promotions, coupons, tax rules (inclusive/exclusive)
  • Overage billing β€” disk / bandwidth metering, opt-in per product
  • Credit balances & add-funds flow
  • Automated reminders β€” invoice, payment, CC expiry, domain renewal
  • Auto-renew services and domains with billing integration

βš™οΈ Developer Features

  • REST API with API-key auth for external integrations
  • Webhooks β€” inbound (gateway callbacks) and outbound (events)
  • Queue workers for email and background jobs
  • Scheduled commands β€” invoice generation, reminders, polling
  • Modular architecture β€” add server / gateway / registrar modules without touching core
  • Eloquent everywhere β€” no raw SQL, no string concatenation

Requirements

Component Minimum
PHP 8.3 or 8.4
MySQL 8.0 (or MariaDB 10.6)
Node.js 18+
Composer 2.x
Web server Nginx or Apache with PHP-FPM
PHP extensions bcmath, curl, dom, fileinfo, gd, mbstring, mysqli, openssl, pdo_mysql, tokenizer, xml, zip

Optional but recommended: Redis (session/cache), SMTP server or relay (email delivery), supervisor (queue worker).


Quick Start with Docker

The fastest way to try PNLCS is the official Docker image panelica/pnlcs-runtime. It bundles PHP-FPM 8.4 + nginx + Node.js 20 + supervisor and clones the latest code from this repository on first start. No manual composer install or npm run build β€” the entrypoint handles everything.

docker network create pnlcs-net

docker run -d --name pnlcs-db --network pnlcs-net \
  -e MYSQL_ROOT_PASSWORD=changeme \
  -e MYSQL_DATABASE=pnlcs -e MYSQL_USER=pnlcs -e MYSQL_PASSWORD=changeme \
  mariadb:11

docker run -d --name pnlcs --network pnlcs-net -p 8090:80 \
  -e DB_HOST=pnlcs-db -e DB_DATABASE=pnlcs \
  -e DB_USERNAME=pnlcs -e DB_PASSWORD=changeme \
  -e APP_URL=http://localhost:8090 \
  panelica/pnlcs-runtime:1.2

Wait 3–5 minutes for the first start (composer install + npm build), then visit http://localhost:8090/install to run the in-app install wizard. The wizard guides you through requirements check, admin account creation (you choose username + password), and application settings β€” then locks itself permanently.

To pull the latest code from this repo into a running container:

docker exec pnlcs /usr/local/bin/update.sh

πŸ“¦ Full image documentation, environment variables, screenshots, and production deployment notes: πŸ‘‰ https://hub.docker.com/r/panelica/pnlcs-runtime


Self-Hosted Installation

1. Clone the repository

git clone https://github.com/Panelica/pnlcs.git
cd pnlcs

2. Install PHP dependencies

composer install --no-dev --optimize-autoloader

3. Create the database

CREATE DATABASE pnlcs CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'pnlcs'@'localhost' IDENTIFIED BY 'choose-a-strong-password';
GRANT ALL PRIVILEGES ON pnlcs.* TO 'pnlcs'@'localhost';
FLUSH PRIVILEGES;

4. Configure environment

cp .env.example .env

Open .env in your editor and set at least these values:

APP_NAME="Your Company"
APP_URL=https://billing.your-domain.com
APP_ENV=production
APP_DEBUG=false

DB_DATABASE=pnlcs
DB_USERNAME=pnlcs
DB_PASSWORD=choose-a-strong-password

MAIL_FROM_ADDRESS="noreply@your-domain.com"
MAIL_FROM_NAME="Your Company"

Note: DB_CONNECTION defaults to mysql β€” do not change it to sqlite unless you know what you're doing (some migrations use MySQL-specific SQL).

5. Generate the application key

php artisan key:generate

6. Build frontend assets

npm install
npm run build

7. Create the public storage symlink

php artisan storage:link

8. Cache configuration for production

php artisan optimize

9. Set directory permissions

chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache

(adjust the user to match your server β€” nginx, apache, or your panel user)

10. Point your web server to public/

Whatever you use β€” a control panel, raw Nginx, Apache, Caddy β€” make sure the document root is the public/ directory, not the project root.

11. Open the install wizard

With the web server up and pointing to public/, open in your browser:

https://billing.your-domain.com/install

The 5-step wizard:

  1. Requirements β€” verifies PHP version, extensions, writable directories
  2. Database β€” confirms your DB credentials and runs migrations
  3. Admin account β€” you choose the username, email, and password
  4. App settings β€” public URL, application name, default locale
  5. Done β€” wizard locks itself permanently and redirects to login

The wizard creates:

  • Your administrator account (credentials you choose, no defaults)
  • Four starter currencies (USD, EUR, GBP, TRY)
  • Ticket departments, statuses, email templates
  • 30 language entries (English active by default)
  • 2,232 English translation keys
  • Default homepage sections and domain pricing rows

Advanced / unattended install: if you cannot use the browser wizard (e.g. headless deploy, Ansible role), you can run the equivalent steps from the CLI: php artisan migrate --force && php artisan db:seed --force. This bootstraps a default admin / admin123 account that you must change on first login.

12. Schedule the cron runner

Add a single line to the web user's crontab (crontab -e):

* * * * * cd /path/to/pnlcs && php artisan schedule:run >> /dev/null 2>&1

This drives invoice generation, payment reminders, automatic suspensions, SSL polling, and other background tasks.

13. Run a queue worker (optional but recommended)

Email delivery and background jobs run through the queue. A simple supervisor entry:

[program:pnlcs-worker]
command=php /path/to/pnlcs/artisan queue:work database --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
user=www-data

First Steps After Installation

Once the site loads and you can reach /admin/login, do these in order:

1. Sign in to the admin panel

  • URL: https://billing.your-domain.com/admin/login
  • Use the username and password you chose during the install wizard
  • (If you ran the unattended CLI install: username admin, password admin123 β€” change this immediately under My Account β†’ Change Password)
  • (Recommended) Enable Two-Factor Authentication from My Account β†’ Security.

2. Configure General Settings

Settings β†’ General

  • Company name, support email, logo, favicon
  • Default language, currency, timezone
  • Date format, invoice pay terms, tax behavior

3. Configure Email Delivery

Settings β†’ Email (or edit .env directly)

  • Set MAIL_MAILER to smtp (default is log for testing)
  • Fill in MAIL_HOST, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWORD
  • Send a test email from the settings page to verify

Until this is done, emails are written to storage/logs/laravel.log only.

4. Customize Appearance

Settings β†’ Appearance

  • Pick a theme from the 15 built-in options
  • Upload your logo and favicon
  • Configure homepage sections (hero, features, pricing, testimonials)
  • Set up white-label footer text

5. Add Payment Gateways

Configuration β†’ Gateways

  • Stripe β€” paste your API keys, enable
  • PayPal β€” client ID + secret (sandbox or live)
  • Bank Transfer β€” set instructions shown to clients
  • Test each gateway with a small order before going live

6. Add Server Modules (if you sell hosting)

Configuration β†’ Servers

  • Add your Panelica / cPanel / Plesk / DirectAdmin server
  • Test the API connection from the server edit page
  • Assign servers to server groups if you have multiple

7. Create Your First Product

Products (main admin menu)

  • Create a product group (e.g. "Shared Hosting")
  • Create a product, link it to a server and a module
  • Set pricing for monthly / quarterly / annually
  • Enable auto-setup if you want provisioning on payment

8. Configure Domain Pricing (if you sell domains)

Configuration β†’ Domain Pricing

  • Add TLDs you sell (.com, .net, ...)
  • Set registration, transfer, and renewal prices
  • Link to a registrar module (or use Manual)

9. Set Up Tax Rules

Configuration β†’ Tax

  • Add country-level or state-level tax rules
  • Choose inclusive or exclusive tax display
  • Assign taxable flag to products individually

10. (Optional) Invite Staff and Define Roles

Configuration β†’ Admin Roles / Admins

  • Create custom roles (e.g. "Billing Manager", "Support Agent")
  • Pick permissions per role from the 45+ available
  • Add staff members and assign roles

11. Enable Email Verification for Signups (recommended)

Settings β†’ General β†’ Security

  • Toggle Require email verification on
  • New signups will receive a verification link before they can order

12. Test the Full Flow End-to-End

  • Open an incognito browser
  • Visit /client/register and create a test client
  • Place a test order for one of your products
  • Pay with the test mode of your gateway
  • Verify the invoice, service, and email flow all work

Upgrading

git pull
composer install --no-dev --optimize-autoloader
php artisan migrate --force
npm install
npm run build
php artisan optimize:clear
php artisan optimize

Always back up your database before pulling new migrations.


Modules β€” Servers, Payment Gateways & Domain Registrars

PNLCS ships with modular server, gateway, registrar, and SSL provider integrations under the modules/ directory. Add control-panel servers (cPanel, Plesk, DirectAdmin, Proxmox, Panelica), configure payment gateways (Stripe, PayPal, bank transfer), and connect domain registrars (Enom) without touching core code.

Module Type Status
Panelica Server βœ… Tested
cPanel Server ⚠️ Needs testing
Plesk Server ⚠️ Needs testing
DirectAdmin Server ⚠️ Needs testing
Proxmox Server ⚠️ Needs testing
Custom Server ⚠️ Needs testing
Stripe Gateway βœ… Tested
PayPal Gateway ⚠️ Needs testing
Authorize.Net Gateway ⚠️ Needs testing
BankTransfer Gateway ⚠️ Needs testing
Enom Registrar ⚠️ Needs testing
Manual Registrar βœ… Works
GoGetSSL SSL ⚠️ Needs testing
Sectigo SSL ⚠️ Needs testing
Manual SSL βœ… Works

If you run one of the "needs testing" integrations in production, please open an issue with what worked and what didn't. A short note is enough β€” we can iterate from there.

Adding a new module? Look at the existing ones as a reference; each module is a self-contained directory with a handler class and optional config view.


Internationalization

All UI strings live in the database (dynamic_translations table) and flat PHP files under lang/<locale>/. Translations are editable from the admin panel under Configuration β†’ Languages & Translations. Exporting to JSON, importing, and AI-assisted batch translation are supported out of the box.

If your language isn't covered yet, you can either submit a PR against the seeder or use the admin UI's export/import flow.


Security

  • All admin routes require authentication via the admin.auth middleware
  • Over 250 admin endpoints are gated by fine-grained permissions
  • CSRF protection on every form
  • Rate limiting on login, 2FA, password reset, and verification email resends
  • Webhook routes are CSRF-exempt but validated by HMAC signatures
  • Eloquent ORM everywhere (no raw SQL concatenation)

Please report security issues privately to security@panelica.com rather than opening a public GitHub issue.


Contributing

Issues and pull requests are welcome.

Ways to help:

  1. Test a module from the "Needs testing" list above and file an issue with what you found.
  2. Report a bug with reproduction steps β€” screenshots help a lot.
  3. Improve a translation via the admin UI's export, edit a JSON file, and send us a PR.
  4. Write documentation β€” installation on specific hosting panels, how to add a custom module, etc.

Please keep in mind:

  • This is a side project for the Panelica team. We'll get to issues as quickly as we can but same-day responses are rare.
  • PRs that include tests are prioritized.
  • Please match the existing coding style (Laravel Pint + conventional commits).

Support & Community

Need help, want to report a bug, or have a feature request?

We're happy to help from the forum or by email, but since this is a side project your patience is appreciated. For urgent matters, the forum tends to get the fastest community response.


Credits

  • Panelica Server Management Panel team β€” initial development and ongoing maintenance
  • Laravel by Taylor Otwell and the Laravel community
  • WHMCS β€” for inspiring much of the data model and workflow
  • Every contributor who opens an issue or a pull request

License

Released under the MIT License. See LICENSE for details.


Keywords: WHMCS alternative Β· open-source hosting billing Β· self-hosted billing platform Β· Laravel billing Β· PHP client portal Β· hosting management software Β· free WHMCS Β· invoicing system Β· reseller hosting software Β· domain management Β· SSL management Β· support ticket system Β· hosting CRM

About

🧾 Open-source WHMCS alternative β€” self-hosted hosting billing & client portal. Laravel 13 + MySQL. Invoicing, domains, SSL, tickets, reseller, multi-language (30 locales), 15 themes. Free & MIT-licensed.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors