T
Tenanto
Documentation / Buyer Guide

Buyer Guide

Marketplace Buyer Guide

Welcome to Tenanto! This guide is designed for marketplace buyers who want to install, validate, and customize the package quickly.

Table of Contents


Installation from a Marketplace Download

Step 1: Download the Package

  1. Sign in to the marketplace where you purchased Tenanto
  2. Open your Downloads or Purchases area
  3. Find Tenanto
  4. Download the full package archive with documentation

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 marketplace 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*

Test Coverage & Quality Assurance

Tenanto includes automated quality checks you can run after installation:

php artisan test
vendor/bin/phpstan analyse --memory-limit=512M
vendor/bin/pint --test

Included QA tooling:


Support Channels

Use the contact channels you publish with the product:

For technical support, include:


Frequently Asked Questions

Does this include a hosted SaaS?

No. Tenanto is a source code product you install and run yourself.

Is Stripe required?

Only if you want live billing checkout. The rest of the app can be installed without activating Stripe.

Is multi-tenancy already implemented?

Yes. Tenant routing, tenant-aware resources, policies, scoping, and API flows are already included.

Can I use MySQL instead of PostgreSQL?

Not out of the box. The current package is PostgreSQL-first and uses features such as jsonb.

Are tests included?

Yes. Backend tests, static analysis, formatting checks, and browser tests are part of the package.


Refund Guidance

Refund handling depends on the marketplace where you purchased Tenanto.

If you need a refund:

If the marketplace requires direct seller contact before refund processing, use your published support address first.