Welcome to geniusCommerz
geniusCommerz is a modern e-commerce platform built with Laravel and React. It ships with 98 provider integrations — payments, SMS, fraud screening, shipping carriers, exchange rates and AI — and handles the parts of selling internationally that are usually painful: per-country addresses, currency conversion recorded per order, destination tax, and shipping zones.
Key Features
- Admin panel with Blade + Alpine.js
- Storefront with Inertia v3 + React 19
- Dual authentication (Admin & Customer)
- Real-time analytics and reporting
- Sell worldwide — 213 countries, with address forms and dial codes that adapt per country
- Multi-currency, with the rate frozen onto each order and refreshed automatically
- Destination-based tax — VAT, GST and sales tax, inclusive or exclusive
- Shipping zones with weight and order-value bands, plus live carrier rates
- 39 payment gateways across every major region
- 20 SMS gateways — global, Bangladesh, India, Gulf and Africa
- 11 fraud checkers on one shared risk scale
- 19 shipping carriers plus 3 Bangladeshi couriers
- AI content generation (OpenAI, Claude, Gemini, DeepSeek)
- One-click templates for tax and shipping configuration
Installation
Prerequisites
Before installing geniusCommerz, ensure you have the following installed on your system:
- PHP 8.2 or higher
- MySQL 8.0 or PostgreSQL 12+
- Node.js 18+ and npm
- Composer
- Git
Step 1: Clone Repository
git clone https://github.com/XgeniousLLC/geniusCommerz.git
cd geniusCommerz
Step 2: Install PHP Dependencies
composer install
Step 3: Environment Setup
cp .env.example .env
php artisan key:generate
Edit your .env file and configure:
- Database connection (DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD)
- App URL (APP_URL)
- Mail configuration (MAIL_DRIVER, MAIL_FROM_ADDRESS)
Step 4: Create Database
php artisan migrate
php artisan db:seed
Step 5: Install Node Dependencies
npm install
Step 6: Build Frontend Assets
npm run build
npm run dev to watch for changes
Step 7: Start Development Server
php artisan serve
Your application will be available at http://localhost:8000
Server Requirements
Minimum Requirements
| Component | Minimum Version | Recommended |
|---|---|---|
| PHP | 8.2 | 8.3 or later |
| MySQL | 8.0 | 8.1 or later |
| PostgreSQL | 12 | 15 or later |
| Node.js | 18 | 20 or later |
| Composer | 2.0 | Latest |
PHP Extensions Required
- BCMath
- Ctype
- Fileinfo
- JSON
- Mbstring
- OpenSSL
- PDO
- Tokenizer
- XML
- Zip
- GD (for image processing)
Server Configuration
- Memory Limit: Minimum 256MB (Recommended 512MB)
- Max Upload Size: Minimum 50MB
- Max Execution Time: Minimum 30 seconds
- Document Root: Point to
publicdirectory
Recommended Web Server Configuration
For Apache, ensure .htaccess is supported and mod_rewrite is enabled:
a2enmod rewrite
systemctl restart apache2
For Nginx, configure your server block properly to route requests to public/index.php
File Permissions
Set proper permissions for storage and cache directories:
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Login & Account Access
Default Admin Account
| Field | Value |
|---|---|
admin@example.com |
|
| Password | password |
| URL | http://localhost:8000/admin/login |
Change Password
- Log in to the admin panel
- Click your profile avatar in the top-right
- Select "Profile Settings"
- Click "Change Password"
- Enter current password and new password
- Click "Update"
Dashboard
The dashboard provides an overview of your store's performance with key metrics and charts.
Key Metrics
- Total Revenue: Sales revenue for selected period
- Total Orders: Number of orders placed
- Average Order Value: Average revenue per order
- New Customers: Newly registered customers
Dashboard Widgets
- Revenue Chart: Visual trend of sales over time
- Order Status: Breakdown of orders by status
- Recent Orders: Latest orders with quick actions
- Top Products: Best-selling products
Products
Managing Products
Navigate to Admin → Catalog → Products to manage your products.
Add New Product
- Click "Add Product" button
- Fill in product details (Name, Description, Price)
- Add categories and brands
- Set inventory and SKU
- Click "Save & Publish"
Product Information
- Name: Product display name
- Description: Detailed product information
- Price: Product selling price
- SKU: Unique identifier for inventory
- Category: Product category
- Brand: Product brand
- Stock: Available quantity
Orders
Order Management
Navigate to Admin → Orders to manage customer orders.
Order Status Flow
- Pending: Order received, awaiting confirmation
- Confirmed: Order verified and ready
- Processing: Items being prepared
- Shipped: With courier
- Delivered: Received by customer
- Cancelled: Order cancelled
Order Actions
- View order details
- Update order status
- Print invoice
- Send tracking information
- Process refund if needed
Categories
Managing Categories
Navigate to Admin → Catalog → Categories to organize your products.
Add Category
- Click "Add Category"
- Enter category name
- Add description (optional)
- Set parent category if needed
- Click "Save"
Deployment Guide
Choose your deployment platform below for step-by-step instructions.
Supported Platforms
- AWS EC2: Scalable cloud hosting
- DigitalOcean: Affordable VPS hosting
- cPanel: Shared hosting with control panel
- Docker: Containerized deployment
- Custom VPS: Linode, Vultr, Hetzner, etc.
Pre-Deployment Checklist
- Domain name registered and pointing to server
- SSL certificate (free with Let's Encrypt)
- Database backups configured
- Email service configured
- Payment gateway credentials ready
- Storage space for uploads (50GB+ recommended)
Deploy on AWS EC2
Step 1: Launch EC2 Instance
- Go to AWS Console → EC2 → Instances
- Click "Launch Instances"
- Choose Ubuntu 22.04 LTS AMI
- Select instance type:
t3.mediumor higher - Configure security group (open ports 80, 443, 22)
- Create/select key pair for SSH access
- Launch instance
Step 2: Connect to Instance
ssh -i your-key.pem ubuntu@your-instance-ip
Step 3: Install Dependencies
sudo apt update
sudo apt install -y php8.3 php8.3-{fpm,mysql,zip,gd,mbstring,curl,xml}
sudo apt install -y mysql-server nginx
sudo apt install -y nodejs npm
sudo apt install -y git composer
Step 4: Configure MySQL
sudo mysql_secure_installation
sudo mysql -u root -p
CREATE DATABASE geniuscommerz;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON geniuscommerz.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Step 5: Clone Repository
cd /var/www
sudo git clone https://github.com/XgeniousLLC/geniusCommerz.git
sudo chown -R ubuntu:ubuntu geniusCommerz
cd geniusCommerz
Step 6: Setup Application
composer install
cp .env.example .env
php artisan key:generate
npm install
npm run build
Step 7: Configure .env
Edit .env with your database credentials:
APP_URL=https://yourdomain.com
DB_HOST=localhost
DB_DATABASE=geniuscommerz
DB_USERNAME=appuser
DB_PASSWORD=strong_password
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=587
MAIL_USERNAME=your_email
MAIL_PASSWORD=your_password
Step 8: Run Migrations
php artisan migrate
php artisan db:seed
Step 9: Configure Nginx
sudo nano /etc/nginx/sites-available/default
Replace with this configuration:
server {
listen 80;
server_name yourdomain.com;
root /var/www/geniusCommerz/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Step 10: Enable SSL with Let's Encrypt
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
Step 11: Set Permissions
sudo chown -R www-data:www-data /var/www/geniusCommerz
chmod -R 775 /var/www/geniusCommerz/storage
chmod -R 775 /var/www/geniusCommerz/bootstrap/cache
Step 12: Start Services
sudo systemctl restart nginx
sudo systemctl restart php8.3-fpm
sudo systemctl restart mysql
Deploy on DigitalOcean
Step 1: Create Droplet
- Go to DigitalOcean Console → Create → Droplets
- Choose Ubuntu 22.04 LTS
- Select plan: $12/month (2GB RAM) or higher
- Select region closest to your users
- Add SSH key
- Create Droplet
Step 2: Connect via SSH
ssh root@your-droplet-ip
Step 3: Update System
apt update
apt upgrade -y
Step 4: Install Stack
apt install -y php8.3 php8.3-{fpm,mysql,zip,gd,mbstring,curl,xml}
apt install -y mysql-server nginx
apt install -y nodejs npm git composer
apt install -y certbot python3-certbot-nginx
Step 5: Configure MySQL
mysql -u root
CREATE DATABASE geniuscommerz;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON geniuscommerz.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Step 6: Clone & Setup
cd /var/www
git clone https://github.com/XgeniousLLC/geniusCommerz.git
cd geniusCommerz
composer install
npm install
npm run build
cp .env.example .env
php artisan key:generate
php artisan migrate --seed
Step 7: Configure Nginx
Create nginx config file:
nano /etc/nginx/sites-available/geniuscommerz
Add this configuration:
server {
listen 80;
server_name yourdomain.com;
root /var/www/geniusCommerz/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
Step 8: Enable Site
ln -s /etc/nginx/sites-available/geniuscommerz /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx
Step 9: Setup SSL
certbot --nginx -d yourdomain.com
Step 10: Fix Permissions & Start
chown -R www-data:www-data /var/www/geniusCommerz
chmod -R 775 /var/www/geniusCommerz/storage
systemctl restart php8.3-fpm mysql nginx
Deploy on cPanel Shared Hosting
Requirements
- PHP 8.2+ installed
- MySQL database
- SSH access enabled
- Composer installed
- Node.js support (if available)
Step 1: Upload Files
- Using File Manager or FTP, upload all files to
public_html - The
publicfolder contents go topublic_html - Other folders go one level above public_html (usually root home)
Step 2: Create Database
- Go to cPanel → MySQL Databases
- Create new database:
username_geniuscommerz - Create user and assign to database
- Note the credentials
Step 3: Configure .env
Via SSH or File Manager, edit .env:
APP_URL=https://yourdomain.com
DB_CONNECTION=mysql
DB_HOST=localhost
DB_DATABASE=username_geniuscommerz
DB_USERNAME=username_user
DB_PASSWORD=password
Step 4: Run via SSH
cd public_html
php artisan migrate
php artisan db:seed
php artisan cache:clear
php artisan config:cache
Step 5: Fix File Ownership
chmod 755 storage
chmod 755 bootstrap/cache
find storage -type f -exec chmod 644 {} \;
find bootstrap/cache -type f -exec chmod 644 {} \;
Step 6: Configure Document Root
- Go to cPanel → Addon Domains or Domains
- Set document root to
public_html/public - Update DNS to point to your server
Step 7: Setup SSL
- Go to cPanel → SSL/TLS
- Click "Auto-configure"
- Choose your domain
- Install Let's Encrypt certificate
Deploy with Docker
Prerequisites
- Docker installed
- Docker Compose installed
- Docker Hub account (optional)
Step 1: Create Dockerfile
Create Dockerfile in project root:
FROM php:8.3-fpm
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip \
mysql-client
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
WORKDIR /app
COPY . .
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer install
RUN chown -R www-data:www-data /app
EXPOSE 9000
CMD ["php-fpm"]
Step 2: Create Docker Compose
Create docker-compose.yml:
version: '3.8'
services:
app:
build: .
container_name: geniuscommerz_app
working_dir: /app
volumes:
- ./:/app
networks:
- geniuscommerz
mysql:
image: mysql:8.0
container_name: geniuscommerz_mysql
environment:
MYSQL_DATABASE: geniuscommerz
MYSQL_ROOT_PASSWORD: root_password
MYSQL_PASSWORD: app_password
MYSQL_USER: appuser
volumes:
- mysql_data:/var/lib/mysql
networks:
- geniuscommerz
nginx:
image: nginx:latest
container_name: geniuscommerz_nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./:/app
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
networks:
- geniuscommerz
networks:
geniuscommerz:
driver: bridge
volumes:
mysql_data:
driver: local
Step 3: Create Nginx Configuration
Create nginx.conf:
server {
listen 80;
server_name localhost;
root /app/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
Step 4: Build & Run
docker-compose up -d --build
Step 5: Run Migrations
docker-compose exec app php artisan migrate --seed
Step 6: Build Assets
docker-compose exec app npm install
docker-compose exec app npm run build
Useful Docker Commands
# View logs
docker-compose logs app
# Access shell
docker-compose exec app bash
# Run artisan commands
docker-compose exec app php artisan cache:clear
# Stop containers
docker-compose down
# Rebuild
docker-compose up -d --build
Deploy on Custom VPS
Works with Linode, Vultr, Hetzner, OVH, and other VPS providers
Step 1: Choose OS & Create VPS
- Recommended: Ubuntu 22.04 LTS (2GB RAM minimum)
- Choose region close to your audience
- Enable SSH key (not password)
Step 2: Initial Server Setup
ssh root@your-vps-ip
# Update system
apt update && apt upgrade -y
# Install curl and wget
apt install -y curl wget
# Create non-root user
adduser deployer
usermod -aG sudo deployer
# Copy SSH key to new user
su - deployer
mkdir -p ~/.ssh
echo "your-public-key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
exit
# Disable root SSH login
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd
Step 3: Install Dependencies
sudo apt install -y \
php8.3 \
php8.3-fpm \
php8.3-mysql \
php8.3-zip \
php8.3-gd \
php8.3-mbstring \
php8.3-curl \
php8.3-xml \
php8.3-bcmath \
nginx \
mysql-server \
nodejs \
npm \
git \
composer \
certbot \
python3-certbot-nginx
Step 4: Secure MySQL
sudo mysql_secure_installation
sudo mysql -u root -p
CREATE DATABASE geniuscommerz;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'VeryStrongPassword123!';
GRANT ALL PRIVILEGES ON geniuscommerz.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Step 5: Setup Web Directory
sudo mkdir -p /var/www/geniuscommerz
sudo chown deployer:deployer /var/www/geniuscommerz
cd /var/www/geniuscommerz
Step 6: Clone Repository
git clone https://github.com/XgeniousLLC/geniusCommerz.git .
composer install --no-dev
npm install
npm run build
Step 7: Configure Application
cp .env.example .env
php artisan key:generate
# Edit .env with your details
nano .env
Required .env settings:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://yourdomain.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=geniuscommerz
DB_USERNAME=appuser
DB_PASSWORD=VeryStrongPassword123!
Step 8: Run Migrations
php artisan migrate
php artisan db:seed
php artisan cache:clear
php artisan config:cache
php artisan route:cache
Step 9: Configure Nginx
sudo nano /etc/nginx/sites-available/geniuscommerz
Add this configuration:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/geniuscommerz/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
}
Step 10: Enable Site
sudo ln -s /etc/nginx/sites-available/geniuscommerz /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl restart nginx
Step 11: Setup SSL with Let's Encrypt
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
sudo systemctl restart nginx
Step 12: Set Permissions
sudo chown -R www-data:www-data /var/www/geniuscommerz
sudo chmod -R 775 /var/www/geniuscommerz/storage
sudo chmod -R 775 /var/www/geniuscommerz/bootstrap/cache
Step 13: Configure PHP
sudo nano /etc/php/8.3/fpm/php.ini
Update these settings:
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300
memory_limit = 512M
Step 14: Restart Services
sudo systemctl restart php8.3-fpm
sudo systemctl restart nginx
sudo systemctl restart mysql
Step 15: Setup Automated Backups (Optional)
sudo crontab -e
# Add this line for daily backups at 2 AM
0 2 * * * mysqldump -u appuser -p'VeryStrongPassword123!' geniuscommerz | gzip > /backups/geniuscommerz_$(date +\%Y\%m\%d).sql.gz
Store Settings
General Settings
Navigate to Admin → Settings to configure your store.
Configuration Options
- Store Name: Your business name
- Store URL: Your website domain
- Email: Contact email address
- Phone: Business phone number
- Address: Business address
- Store Country: Where you ship from — drives tax, shipping and phone dial-code defaults
- Currency: Base currency. Order totals are recorded in it, and every report sums it
- Timezone: Server timezone
Payment Gateways
39 gateways are available, covering every major region. Configure them at Admin → Payment Gateways, where you enable the ones you want and drag them into the order customers see at checkout.
Worldwide
- Stripe: cards, wallets and roughly 50 local payment methods through one integration
- PayPal: Orders v2, 23 settlement currencies
- Adyen: enterprise coverage via Pay by Link
- Authorize.Net: Accept Hosted, large US install base
- Paddle and 2Checkout: merchant of record — they become the seller and remit EU VAT and US sales tax themselves
- Cash on Delivery: a real driver, so checkout has one code path
Bangladesh
- SSLCOMMERZ: cards, mobile banking and net banking
- bKash: tokenized checkout
- Nagad: RSA-signed two-leg checkout
- aamarPay and ShurjoPay
India and Pakistan
- Razorpay, Cashfree, PayU India, PhonePe, Paytm: cards, UPI and netbanking
- Easypaisa and JazzCash for Pakistan
Gulf, MENA and Africa
- PayTabs, Tap Payments, Moyasar: KNET, mada, Benefit, Apple Pay, STC Pay
- Fawry: Egypt, including cash at Fawry outlets
- Paystack, Flutterwave, Monnify: Nigeria and pan-African
- M-Pesa (Kenya) and MTN MoMo: mobile money approved on the customer's handset
- Yoco and Peach Payments: South Africa
Europe, LatAm and APAC
- Mollie: iDEAL, Bancontact, SEPA and cards
- iyzico (Türkiye), Vipps MobilePay (Nordics)
- MercadoPago and Pagar.me: LatAm, with Pix as the default Brazilian method
- Midtrans, Xendit: Indonesia and the Philippines
- Square (US, CA, GB, AU, JP), KakaoPay (Korea)
How payment is settled
- The customer picks a gateway and the order is created as pending
- They are sent to the gateway — by redirect, by a signed form post, or by a prompt on their phone
- The gateway notifies us by webhook, which is signature-verified before anything is written
- Only then is the order marked paid
Setting up a gateway
- Go to Admin → Payment Gateways
- Click Credentials on the gateway you want
- Choose Sandbox, enter the test keys and save — sandbox and live keys are stored separately, so switching back and forth never overwrites the other set
- Point the gateway's webhook at
https://your-domain/api/payments/webhook/{provider} - Place a test order end to end, then switch to Live and repeat
- Return to Payment Gateways, click Enable, and set the checkout order
Shipping
Shipping is resolved server-side in a fixed order, so the price quoted is always the price charged.
How a rate is chosen
- Live courier quote — the Bangladeshi couriers, when zone charging is on
- Live carrier rate — DHL, Shiprocket, Aramex and the rest; a rating outage falls through rather than blocking checkout
- Shipping zone rate — your configured weight and order-value bands
- Flat rate — the final fallback
Products marked shipping included always ship free. Cart weight is calculated from real product weights on the server, so it cannot be understated by the browser.
Shipping zones
Configure at Admin → Shipping Zones. A zone matches on country, then state, then postal pattern — the most specific match wins, so a city zone beats a country-wide one. Each zone holds rates with:
- A base price, and optionally a per-kg charge above the band floor
- Weight bands and order-value bands
- A free-above threshold
- A delivery estimate shown to the customer
Carriers (19)
- Worldwide: DHL Express, FedEx, UPS, EasyPost, Shippo
- India: Delhivery, Shiprocket, Blue Dart
- Nigeria and Africa: Sendbox, GIG Logistics, Kwik Delivery, Bob Go
- Brazil: Melhor Envio, Correios, Loggi
- Gulf: Aramex, SMSA Express, Naqel Express, Torod
Bangladeshi couriers (3)
Pathao, RedX and Steadfast use a separate contract built around their city → zone → area location tree, which is how they actually price. They are dispatched from the order detail page.
Tax
Tax is calculated from the shipping address at Admin → Tax Zones. It is off by default; enable it once your zones are in place.
How zones match
Country, then state, then postal pattern — most specific wins. A San Francisco postal zone beats a statewide California zone, which beats a country-wide US zone. Several rates can apply in one zone and are added together, which is how US state plus county and Canadian GST plus PST are actually charged.
Tax classes
Each product carries a class — standard, reduced or zero — because EU rates differ for food, books and children's clothing. A zone that says nothing about a class does not tax it, which is what makes zero-rated goods genuinely zero.
Inclusive or exclusive pricing
With prices include tax off, tax is added to the total. With it on, the customer pays the listed price and the tax is the portion of it owed — extracted, not added again.
Invoices
The tax breakdown is frozen onto the order when it is placed, and the invoice reads that stored figure rather than recalculating. The invoice and the amount charged therefore cannot disagree, even after you change a rate.
Currencies
Set your base currency at Admin → Settings → General. Additional currencies and their rates live at Admin → Currencies.
How money is recorded
Every order stores money twice: once in your base currency, which every report sums, and once in the currency the customer actually saw, alongside the exchange rate used. The rate is frozen at order time, so the figures stay reconstructible years later after rates move.
Automatic rates
- Set a currency's source to Auto for it to be refreshed hourly
- A free keyless provider is used by default; ExchangeRate-API is available for paid tiers
- A rate that moves more than 15% in one refresh is rejected and flagged rather than applied
- A failed fetch keeps the previous rate — it never zeroes one
- Add a markup percentage per currency to cover FX spread and cross-currency fees
Rates are also pinned per browsing session, so a scheduled refresh cannot change a customer's total mid-visit. If a rate has moved by the time they submit, checkout re-quotes rather than silently charging the new one.
Automatic refresh needs the scheduler running:
* * * * * cd /path/to/app && php artisan schedule:run >> /dev/null 2>&1
Integrations
98 providers across seven groups, all managed from Admin → Integrations or their own dedicated pages. Credentials are encrypted at rest and stored separately per environment, so sandbox testing can never overwrite your live keys.
SMS gateways (20)
Managed at Admin → SMS Gateways, where you can also send a test message and check your balance.
- Worldwide: Twilio, Vonage, MessageBird, Plivo, Amazon SNS, Infobip, Sinch, Telnyx
- Bangladesh: BulkSMSBD, SMS.BD, MRAM
- India: MSG91, Gupshup, Fast2SMS
- Gulf and MENA: Unifonic, Taqnyat, Cequens
- Africa: Africa's Talking, Termii, Clickatell
Numbers are normalised to international format once, and each gateway reshapes from there —
Bangladeshi gateways receive a local 01… number, Fast2SMS a bare 10-digit Indian
number, and most others E.164.
Fraud checks (11)
Managed at Admin → Fraud Checks, where you can run a live check on any number and see recent results.
- Worldwide: IPQualityScore, SEON, Sift, MaxMind minFraud
- Europe: Ravelin
- India: Bureau — mobile tenure and porting history
- Gulf: Uqudo
- Africa: Smile ID, Youverify
- Bangladesh: FraudBD, BDCourier — courier delivery history
Every provider is reduced to one risk vocabulary — safe, low, mid or high risk with a score out of 100 — so the admin reads the same whichever you use. A checker is skipped entirely when it does not serve the destination country: a Bangladeshi courier-history service cannot score a US order, and sending it that customer's number would be pointless.
AI providers (4)
OpenAI, Anthropic Claude, Google Gemini and DeepSeek, configured at Admin → AI Settings. Used for product descriptions, blog content, meta descriptions, content translation and price suggestions.
Exchange rates (2)
A free keyless provider and ExchangeRate-API, managed from the Currencies page.
Setting up any integration
- Go to Admin → Integrations and pick the provider
- Enter its credentials — the form shows exactly which fields that provider needs, with a link to its documentation
- Choose sandbox or live, if the provider supports both
- Save, then activate it
- For SMS and fraud, set one as the default; for payments, enable as many as you like and order them
Frequently Asked Questions
Installation & Setup
Q: What PHP version is required?
A: PHP 8.2 or higher is required. We recommend PHP 8.3 for best performance.
Q: Can I use SQLite instead of MySQL?
A: SQLite is not recommended for production. Use MySQL 8.0+ or PostgreSQL 12+.
Q: How do I reset the database?
php artisan migrate:refresh --seed
Admin Panel
Q: How do I add a new admin user?
A: Use the artisan command:
php artisan tinker
>>> \App\Models\Admin::create(['name' => 'Name', 'email' => 'email@example.com', 'password' => bcrypt('password')]);
Q: How do I export orders?
A: Go to Orders page and click the Export button. You can export as CSV or Excel.
Products & Inventory
Q: How do I manage product variants?
A: When editing a product, go to the Variants section. Add variants with different options (size, color, etc.).
Q: Can I bulk import products?
A: Yes, go to Products page and use the Import feature to upload CSV file.
Troubleshooting
Database Connection Error
Error: "SQLSTATE[HY000]: General error: 1030 Got error"
Solution:
- Check database credentials in
.env - Ensure database server is running
- Verify database user has necessary permissions
File Upload Error
Error: "The file could not be uploaded"
Solution:
- Check storage folder permissions (should be 775)
- Verify PHP max_upload_size in php.ini (minimum 50MB)
- Ensure storage directory is writable
Blank Admin Panel
Error: Admin panel shows blank page
Solution:
- Run:
php artisan cache:clear - Run:
php artisan view:clear - Rebuild assets:
npm run build - Check application logs in
storage/logs
Mail Not Sending
Error: Emails not being sent
Solution:
- Check MAIL_DRIVER in
.env - Verify SMTP credentials are correct
- Ensure mail server is running
- Check storage/logs for detailed errors