CallMineAI Docs
Home
  • Introduction
  • Architecture
  • Installation
  • Web installer
  • Configuration
  • Deployment
  • Customer panel
  • Admin panel
  • Agents & Voices
  • Campaigns & Calls
  • Billing & Credits
  • Telephony (Twilio)
  • Voice & AI
  • SIP trunks
  • Messaging
  • REST API
Home
  • Introduction
  • Architecture
  • Installation
  • Web installer
  • Configuration
  • Deployment
  • Customer panel
  • Admin panel
  • Agents & Voices
  • Campaigns & Calls
  • Billing & Credits
  • Telephony (Twilio)
  • Voice & AI
  • SIP trunks
  • Messaging
  • REST API
  • Getting started

    • Introduction
    • Architecture
    • Installation
    • Web installer
    • Configuration
    • Deployment
  • Using CallMineAI

    • Customer Guide
    • Agents & Voices
    • Campaigns & Calls
    • Billing & Credits
  • Administration

    • Admin Guide
    • Roles & permissions
    • Localization
  • Integrations

    • Telephony (Twilio)
    • Voice & AI
    • SIP trunks
    • Messaging
    • REST API
  • Help

    • FAQ & troubleshooting

Web installer

CallMineAI ships with a browser-based installer — a guided wizard at /install that checks your server, tests your database, runs migrations and seeders, and creates your first super-admin account. It's the fastest way to go live and requires no shell access beyond uploading the files.

The installer is designed to run before a working database exists, so you can point it at a fresh, empty database and let it do the rest.

Prefer the command line?

Every step below has a CLI equivalent — see Installation. The two paths are interchangeable; the web installer simply automates the manual steps.

How the gate works

A single flag in .env controls everything:

APP_INSTALLED=false
APP_INSTALLEDBehaviour
false (or unset)The whole app redirects to /install. The wizard is open.
trueThe wizard returns 404; the application runs normally.

On the final step the installer writes APP_INSTALLED=true for you. To re-run the installer later (e.g. on a staging rebuild), set it back to false.

Warning

The gate runs before the database-backed session layer, so an un-installed site with no/invalid database credentials still reaches the wizard instead of crashing with a connection error.

Before you start

  1. Upload the built application to your server (or git clone + composer install + npm run build).
  2. Copy the environment file: cp .env.example .env. Leave APP_INSTALLED=false.
  3. Create an empty database and note its host, name, user and password.
  4. Ensure .env, storage/ and bootstrap/cache/ are writable by the web server.
  5. Visit https://your-domain.com/install.

Step 1 — Server requirements

The wizard checks your PHP version, required extensions, and that the key paths are writable. Every row must read OK before you can continue.

Installer — server requirements

Tips

If a row shows Missing, install the extension (or fix the folder permissions) and refresh. Common fixes: chmod -R ug+w storage bootstrap/cache and enabling ext-bcmath / ext-intl in your PHP build.

Step 2 — Application & database

Enter your application name, public URL and database credentials. MySQL/MariaDB, PostgreSQL and SQLite are supported.

Installer — application and database

When you press Test & continue, the installer opens a real connection with the details you entered. Nothing is written until the connection succeeds — a bad password simply shows an error and your .env is left untouched. On success, the values are saved to .env.

Step 3 — Build the database (and demo data)

This runs the migrations and seeds the essential reference data (RBAC roles & permissions, plans, currencies, locales, translations, email & prompt templates).

Here you choose whether to also load demo content:

Installer — fresh install vs import demo data

ChoiceWhat you get
Fresh install (recommended for production)Essential data only. You start with an empty workspace — no sample tenants, agents, calls or contacts.
Import demo dataA realistic sample tenant populated across every module, so you can explore the product immediately. Best for evaluation/staging.

What "Import demo data" includes

A single coherent tenant (Demo Customer, sign in at /login with customer@callmineai.com / 123456) with time-sequenced, cross-linked records:

AreaSample data
Calling2 agents, 2 campaigns, 20 contacts, 20 calls, a phone number, knowledge-base items
Contact lists3 lists with memberships
MessagingWhatsApp account, WhatsApp + email templates, conversations with messages
AppointmentsScheduled, completed and no-show bookings
SupportTickets with message threads
MarketingVouchers, a gift card, referrals + referral settings
AutomationAn active flow (with an execution + steps) and a draft flow
FormsA lead-capture form with submissions
TelephonyInbound route + SIP trunk
BillingClient subscription, credit purchase, invoices/payments, credit ledger
APIAPI keys (one revoked) with request audit logs
IntegrationsGoogle Sheet connection, Twilio/OpenAI/ElevenLabs settings
PlatformKYC documents, notifications

Not for production

Demo data uses placeholder credentials and fictitious records. Choose Fresh install for any real deployment.

Step 4 — Create your super admin

Create the account you'll use at /admin/login. This is separate from any demo customer account.

Installer — create super admin

Step 5 — Done

The installer sets APP_INSTALLED=true, disables itself, and hands you links to the admin panel and the public site.

Installer — installation complete

Harden before going live

The screenshot reminds you to finish production hardening in .env:

APP_ENV=production
APP_DEBUG=false

Then continue with post-install configuration — connect ElevenLabs, Twilio and OpenAI, and start a queue worker + scheduler.

CLI equivalent

The installer runs exactly these commands. You can reproduce it by hand:

php artisan key:generate            # if APP_KEY is empty
php artisan migrate --force         # schema
php artisan db:seed --force         # ESSENTIAL data only (DatabaseSeeder)

# Optional: the same demo dataset the installer's "Import demo data" loads
php artisan db:seed --class="Database\Seeders\DemoSeeder" --force

php artisan storage:link

Then set APP_INSTALLED=true in .env.

Seeder layout

DatabaseSeeder now contains only essential data. All sample content lives in DemoSeeder, which is opt-in from the installer or the --class flag above. This keeps production installs clean while giving evaluators a full dataset on demand.

Re-running or resetting

  • Re-open the wizard: set APP_INSTALLED=false in .env. (You may also want php artisan config:clear if you cache config.)
  • Start over completely: php artisan migrate:fresh drops and rebuilds the schema, then follow the steps above.

Troubleshooting

SymptomFix
/install redirects away / shows 404APP_INSTALLED is already true. Set it to false (and php artisan config:clear if config is cached).
"Could not write to the .env file"Make .env writable by the web-server user.
"Database connection failed"Re-check host/port/credentials; confirm the database exists and the user has privileges. The installer will not proceed until the connection works.
Requirements stuck on MissingInstall the flagged PHP extension or fix folder permissions, then refresh.
Blank page after "Run migrations & seed"Check storage/logs/laravel.log; a seeder or migration error is shown there.
Last Updated: 7/9/26, 8:33 AM
Prev
Installation
Next
Configuration