T
Tenanto
Documentation / Codecanyon

Codecanyon

CodeCanyon Buyer Guide

Welcome to Tenanto! This guide is specifically designed for CodeCanyon marketplace buyers to help you get started quickly.

Table of Contents


Installation from CodeCanyon

Step 1: Download the Package

  1. Log in to your CodeCanyon account
  2. Go to Downloads section
  3. Find Tenanto and click Download
  4. Choose All files & documentation for the complete package

Step 2: Extract the Archive

# Extract to your projects directory
unzip tenanto-v1.0.0.zip -d /path/to/your/projects/

# Navigate to the project
cd /path/to/your/projects/tenanto

Step 3: Environment Setup

Option A: Docker (Recommended)

# Copy environment file
cp .env.example .env

# Start Docker containers (includes PHP, nginx, PostgreSQL, Redis, Horizon,
# scheduler, Mailhog, and the Vite dev server - 8 services total)
docker compose up -d

# Install PHP dependencies (frontend runs automatically in the vite container)
docker compose exec app composer install

# Generate application key
docker compose exec app php artisan key:generate

# Run migrations
docker compose exec app php artisan migrate --seed

No Node.js required on the host. The vite Docker service installs its own dependencies (npm ci) and serves frontend assets with hot module replacement at http://localhost:5273. Production builds (npm run build) are only needed when deploying without the vite service.

Option B: Traditional Server

Ensure your server meets requirements:

# Install dependencies
composer install --optimize-autoloader --no-dev
npm ci && npm run build

# Configure environment
cp .env.example .env
php artisan key:generate

# Configure database in .env, then:
php artisan migrate --seed

Step 4: DNS Configuration

Add entries to your hosts file:

Linux/macOS: /etc/hosts Windows: C:\Windows\System32\drivers\etc\hosts

127.0.0.1 tenanto.local
127.0.0.1 admin.tenanto.local
127.0.0.1 demo.tenanto.local
127.0.0.1 acme.tenanto.local

Step 5: Access Your Installation

The seeder creates accounts using the password from your DEMO_DEFAULT_PASSWORD env variable. With the unmodified .env.example, that value is ChangeMe-DemoPass!. Change it before going public - either edit .env and re-run php artisan migrate --seed, or run php artisan demo:reset-passwords after editing .env.

Panel URL Default Credentials
Marketing landing http://tenanto.local -
System Admin Panel http://admin.tenanto.local/admin [email protected] / ChangeMe-DemoPass!
Tenant Panel http://demo.tenanto.local/app [email protected] / ChangeMe-DemoPass!
API base URL http://tenanto.local/api/v1 (Bearer token after login)
Mailhog (test inbox) http://localhost:8025 -

If any URL fails with "site cannot be reached", your hosts file entries from Step 4 above are missing or wrong. Run getent hosts tenanto.local (Linux/macOS/WSL2) or Resolve-DnsName tenanto.local (PowerShell) to verify they resolve to 127.0.0.1.

Step 6: Verify Your Installation

Quick sanity check that your install is healthy:

# Health endpoint should return 200 "OK"
curl -i http://tenanto.local/health

# All 8 Docker services should be "Up" and healthy
docker compose ps

# Run the PHP test suite - every test should pass
docker compose exec app php artisan test

# Optional: run the full E2E suite (takes several minutes)
npx playwright test --project=chromium

If php artisan test is green and the health endpoint returns 200 OK, your installation is ready for customization.


License Activation (Optional)

License Types

License Sites Support Updates
Regular 1 end product 6 months Lifetime
Extended 1 SaaS product 12 months Lifetime

Activation Process

Tenanto includes an optional license system you can use for your own customers. It is disabled by default and does not enforce CodeCanyon purchase codes.

  1. Enable Licensing (Optional)

    # .env file
    LICENSE_ENABLED=true
    LICENSE_SECRET_KEY=your-very-long-secret-key-here
    LICENSE_VALIDATION_MODE=offline
    
  2. Generate a License

    docker compose exec app php artisan license:generate --tier=pro [email protected] --name="Customer Name"
    
  3. Validate a License

    docker compose exec app php artisan license:validate TENANTO-PRO-A1B2C3D4E5F6-XY7Z --domain=example.com
    

Multi-Site Licensing

If you need to deploy Tenanto on multiple sites:


Quick Start

Creating Your First Tenant

Via Admin Panel:

  1. Go to http://admin.tenanto.local
  2. Navigate to Tenants > Create
  3. Enter tenant name and slug (e.g., "Acme Corp" / "acme")
  4. The tenant will be accessible at http://acme.tenanto.local

There is no built-in tenant:create CLI command in the boilerplate. Create tenants through the admin panel or seed/import them through your own project workflow.

Setting Up Stripe Billing

  1. Create a Stripe account at https://stripe.com
  2. Get your API keys from Stripe Dashboard
  3. Configure in .env:
    STRIPE_KEY=pk_test_xxx
    STRIPE_SECRET=sk_test_xxx
    STRIPE_WEBHOOK_SECRET=whsec_xxx
    
  4. Create products/prices in Stripe and update:
    STRIPE_PRICE_BASIC=price_xxx
    STRIPE_PRICE_PRO=price_xxx
    STRIPE_PRICE_ENTERPRISE=price_xxx
    

Removing the Example Module

The Projects/Tasks module is provided as an example. To remove it:

# Remove migrations (before running migrate)
rm database/migrations/*_create_projects_table.php
rm database/migrations/*_create_tasks_table.php

# Remove domain code
rm -rf app/Domain/ExampleApp

# Remove Filament resources
rm -rf app/Filament/Tenant/Resources/ProjectResource*
rm -rf app/Filament/Tenant/Resources/TaskResource*

# Remove tests
rm -rf tests/Feature/ExampleApp
rm -rf tests/Unit/Domain/ExampleApp

# Remove API routes and controllers
# Edit routes/api.php to remove project/task routes
rm -rf app/Http/Controllers/Api/V1/ProjectController.php
rm -rf app/Http/Controllers/Api/V1/TaskController.php

Test Coverage & Quality Assurance

Tenanto is built with enterprise-grade quality assurance. Unlike many marketplace scripts, we include comprehensive test suites that you can run to verify your installation works correctly.

Automated Tests

Test Type Coverage Description
PHP Unit/Feature Tests 600+ test methods Backend logic, services, models
Tenant Isolation Tests 30+ dedicated tests Data never leaks between tenants
Playwright E2E Tests 480+ scenarios across 15 project configurations Full browser-based testing

What's Tested

Backend (PHPUnit):

Frontend (Playwright E2E):

Running Tests

# PHP tests
docker compose exec app php artisan test

# E2E tests (requires Node.js)
npx playwright install  # First time only
npx playwright test

# Interactive E2E mode
npx playwright test --ui

The buyer package includes the test source files and the required config files (tests/, e2e/, phpunit.xml, playwright.config.ts).

CI-Ready (for Teams)

If you use CI/CD, Tenanto is ready out of the box:

Why This Matters


Support Channels

Getting Help

Channel Response Time Best For
Email 24-48 hours General questions, bugs
CodeCanyon Comments 48-72 hours Pre-sale questions
Documentation Immediate How-to guides

Support Contact: publish your real support address and set SUPPORT_EMAIL in .env before distributing the package.

What's Included in Support

Covered:

Not Covered:

Reporting Bugs

When reporting a bug, please include:

  1. Environment details:

    • PHP version (php -v)
    • Laravel version (php artisan --version)
    • Database type and version
    • Docker or traditional setup
  2. Steps to reproduce:

    • Exact steps taken
    • Expected behavior
    • Actual behavior
  3. Error logs:

    • Check storage/logs/laravel.log
    • Browser console errors
    • Network tab responses

Frequently Asked Questions

Installation

Q: Docker containers won't start

Check if Docker Desktop is running and ports 80, 443, 5432 are available. See Troubleshooting Guide

Q: "Class not found" errors after installation

Run composer dump-autoload and clear caches:

php artisan config:clear
php artisan cache:clear
php artisan view:clear

Q: Database connection refused

Ensure PostgreSQL is running and credentials in .env match your setup. Docker users: use db as host, not localhost.

Configuration

Q: How do I change the default domain?

Edit config/tenancy.php:

'central_domains' => ['yourdomain.com'],

Update .env:

APP_URL=https://yourdomain.com

Q: Can I use MySQL instead of PostgreSQL?

Not currently. Tenanto uses PostgreSQL-specific features (e.g. jsonb columns), so MySQL is not supported out of the box.

Q: How do I enable custom domains for tenants?

Set in config/tenancy.php:

'mode' => 'both', // subdomain + domain

Then assign domains via Admin panel or database. Domain assignment is validated against the tenant's current plan, so the tenant must have the custom_domain feature enabled.

Billing

Q: How do I test Stripe integration?

Use Stripe test mode keys (pk_test_, sk_test_) and test card numbers:

  • Success: 4242 4242 4242 4242
  • Decline: 4000 0000 0000 0002

Q: How do I add custom subscription plans?

  1. Create price in Stripe Dashboard
  2. Add to config/billing.php:
'custom_plan' => [
    'stripe_price_id' => env('STRIPE_PRICE_CUSTOM'),
    'features' => [...],
],
  1. Add enum case in SubscriptionPlan.php

Customization

Q: How do I add a new tenant module?

See Example Module Guide for step-by-step instructions.

Q: How do I customize the admin panel theme?

Edit app/Providers/Filament/AdminPanelProvider.php:

->colors([
    'primary' => Color::Blue,
])
->brandLogo(asset('images/logo.svg'))

Q: How do I add API endpoints?

See API Documentation for patterns and examples.

Updates

Q: How do I update to a new version?

See Upgrading Guide for detailed instructions.

Q: Will updates break my customizations?

Core files may change. We recommend:

  • Keep customizations in separate files when possible
  • Use Laravel's extension points (Events, Observers, Middleware)
  • Review CHANGELOG.md before updating

Refund Policy

Tenanto follows CodeCanyon's standard refund policy:

Refund Eligible:

Not Refund Eligible:

For refund requests, contact CodeCanyon support directly through their Help Center.


Version History

See CHANGELOG.md for complete version history.

Additional Resources


Thank you for purchasing Tenanto!

If you find this product useful, please consider leaving a rating on CodeCanyon. Your feedback helps us improve and helps other developers discover Tenanto.