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
- License Activation
- Quick Start
- Test Coverage & Quality Assurance
- Support Channels
- Frequently Asked Questions
- Refund Guidance
Installation from a Marketplace Download
Step 1: Download the Package
- Sign in to the marketplace where you purchased Tenanto
- Open your Downloads or Purchases area
- Find Tenanto
- 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
viteDocker service installs its own dependencies (npm ci) and serves frontend assets with hot module replacement athttp://localhost:5273. Production builds (npm run build) are only needed when deploying without theviteservice.
Option B: Traditional Server
Ensure your server meets requirements:
- PHP 8.3+ (8.4 recommended)
- PostgreSQL 16+
- Redis 7+
- Composer 2.x
- Node.js 20+ (required for
npm run buildduring production deploy) - PHP extensions: zip, intl, gd, pcntl, pdo_pgsql, redis
# 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) orResolve-DnsName tenanto.local(PowerShell) to verify they resolve to127.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.
-
Enable Licensing (Optional)
# .env file LICENSE_ENABLED=true LICENSE_SECRET_KEY=your-very-long-secret-key-here LICENSE_VALIDATION_MODE=offline -
Generate a License
docker compose exec app php artisan license:generate --tier=pro [email protected] --name="Customer Name" -
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:
- Each site requires a separate license
- Contact support for volume licensing options
Quick Start
Creating Your First Tenant
Via Admin Panel:
- Go to http://admin.tenanto.local
- Navigate to Tenants > Create
- Enter tenant name and slug (e.g., "Acme Corp" / "acme")
- 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
- Create a Stripe account at https://stripe.com
- Get your API keys from Stripe Dashboard
- Configure in
.env:STRIPE_KEY=pk_test_xxx STRIPE_SECRET=sk_test_xxx STRIPE_WEBHOOK_SECRET=whsec_xxx - 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:
- PHPUnit feature and unit tests
- Playwright E2E browser tests
- PHPStan level 8 static analysis
- Laravel Pint formatting checks
Support Channels
Use the contact channels you publish with the product:
- Support email: set
SUPPORT_EMAILin.env - Sales email: set
SALES_EMAILin.env - Security contact: publish a monitored disclosure channel
For technical support, include:
- proof of purchase or order reference from your marketplace
- environment details
- issue description
- steps to reproduce
- relevant logs or screenshots
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:
- review the refund rules of your marketplace
- prepare your order reference
- explain the issue clearly
- include reproducible evidence when relevant
If the marketplace requires direct seller contact before refund processing, use your published support address first.