# Common Requirements

Before installing investra, make sure your system meets the following requirements.

These requirements apply to both local development and server environments (cPanel/VPS/Cloud).

## 🧾 General Requirements

- PHP Version: PHP 8.2 or higher for Laravel 12 (If you want to use other (v8.2+) php version you should delete composer.lock and run composer install.)
- Web Server: Apache, Nginx, or cPanel-based servers
- Database: MySQL 5.7+ or MariaDB
- RAM: 4 GB or more recommended
- Disk Space: 20 GB or more recommended

## ✅ Required PHP Extensions

Ensure these PHP extensions are enabled:

- `BCMath`
- `Ctype`
- `Fileinfo`
- `JSON`
- `Mbstring`
- `OpenSSL`
- `PDO`
- `Tokenizer`
- `XML`
- `Dom`
- `XMLReader`
- `XMLWriter`
- `cURL`
- `Zip`
- `gettext`
- `exif`
- `mysqli`
- `GD`
- `Intl` (for localization support)

## 🔐 Permissions

Make sure the following folders are writable:

    /storage
    /bootstrap/cache

For Linux or macOS, you can run:

    chmod -R 775 storage bootstrap/cache
    chown -R www-data:www-data storage bootstrap/cache

For Windows, make sure these directories allow write access via file explorer or CMD.

## 📁 Environment Configuration

Make sure to copy `.env.example` to `.env`:

    cp .env.example .env

Then generate the application key:

    php artisan key:generate

## 🕓 Cron Job (For Scheduled Tasks)

To run automated tasks, setup the following cron job:

    * * * * * /usr/bin/php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

Update `/usr/bin/php` and `/path-to-your-project/` according to your environment.

### What Runs on Cron

The Task Scheduler handles time-based automated operations:

Task | Frequency | Description
--- | --- | ---
ROI Distribution | Configured per project | Distributes returns to investor wallets
Report Generation | Daily/Hourly | Creates periodic reports
Currency Refresh | Hourly/Daily | Updates exchange rates
Project Status Updates | Daily | Updates project completion status
Deposit Expiry Check | Every 5 minutes | Marks pending deposits as expired
KYC Reminder | Daily | Sends pending KYC notifications

### What Runs on Queue

The Queue System handles asynchronous background jobs:

Job | Trigger | Description
--- | --- | ---
Email Notifications | User action | Sends transactional emails
SMS Notifications | User action | Sends SMS via configured provider
Push Notifications | User action | Firebase push notifications
Payment Webhooks | Gateway callback | Processes payment confirmations
Deposit Processing | Cron or webhook | Approves/rejects deposits
Withdrawal Processing | Admin approval | Processes withdrawal requests

### Queue Worker Setup

For production, you should run a queue worker process:

    php artisan queue:work --queue=default

For production stability, use a process manager like Supervisor to keep the queue worker running:

    [program:investra-worker]
    command=php /path-to-your-project/artisan queue:work --queue=default --tries=3 --timeout=120
    numprocs=2
    autostart=true
    autorestart=true

See the cPanel Installation Guide for cron job configuration examples.

## 🌐 Browser Support

investra supports all major modern browsers:

- Chrome (latest 3 versions)
- Firefox
- Safari
- Edge

If you face any issues with missing extensions or setup errors, please refer to the installation section or contact support.