# Installation Guide

## ZIP upload deployment for cPanel and shared hosting

1. Create the release ZIP locally:

```powershell
powershell -ExecutionPolicy Bypass -File scripts\package-cpanel-release.ps1
```

2. Upload the generated ZIP from the `release/` folder to your hosting account.
3. Extract the ZIP into the application directory for the domain or subdomain.
4. Point the document root to the extracted `public/` directory.
5. Create a MySQL database and grant a user full privileges from cPanel, hPanel, aaPanel, or your hosting control panel.
6. Open `/install` in the browser.
7. Complete the wizard:
   - Application: set the app name and public URL
   - Database: verify the MySQL connection
   - Security: save the API shared secret and activation policy
   - Administrator: create the first admin user and finalize the install
8. Add the cron job:

```bash
* * * * * php /home/username/public_html/artisan schedule:run
```

## What the installer configures

- Creates `.env` from `.env.example` when needed
- Generates and stores `APP_KEY`
- Saves production-safe defaults for file cache, database queues, and database sessions
- Tests the database credentials before saving them
- Runs Laravel migrations
- Creates the first administrator account
- Locks the installer after completion

## Shared-hosting notes

- `vendor/` is bundled in the release ZIP so Composer is not required on the server.
- The package avoids Redis, Supervisor, PM2, Docker, and SSH-only setup.
- Uploaded branding files are stored in `public/uploads/branding/`.
- If your host does not allow symlinks, this package still installs because it does not require `storage:link` for the core workflow.

## Recommended post-install checks

- Sign in to `/admin/dashboard`
- Update SMTP and branding in `Admin > Settings`
- Create at least one product with its `API Identifier`
- Generate or import license keys
- Test activate, verify, and deactivate from a connected client application
