geniusCommerz

Complete documentation for your e-commerce platform. Learn how to set up, configure, and manage your store.

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
Development Mode For development, use: 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 public directory

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
Email admin@example.com
Password password
URL http://localhost:8000/admin/login
Security Notice Change the default password immediately after first login.

Change Password

  1. Log in to the admin panel
  2. Click your profile avatar in the top-right
  3. Select "Profile Settings"
  4. Click "Change Password"
  5. Enter current password and new password
  6. 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

  1. Click "Add Product" button
  2. Fill in product details (Name, Description, Price)
  3. Add categories and brands
  4. Set inventory and SKU
  5. 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

  1. Click "Add Category"
  2. Enter category name
  3. Add description (optional)
  4. Set parent category if needed
  5. 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

  1. Go to AWS Console → EC2 → Instances
  2. Click "Launch Instances"
  3. Choose Ubuntu 22.04 LTS AMI
  4. Select instance type: t3.medium or higher
  5. Configure security group (open ports 80, 443, 22)
  6. Create/select key pair for SSH access
  7. 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
Deployment Complete Your app should now be accessible at https://yourdomain.com

Deploy on DigitalOcean

Step 1: Create Droplet

  1. Go to DigitalOcean Console → Create → Droplets
  2. Choose Ubuntu 22.04 LTS
  3. Select plan: $12/month (2GB RAM) or higher
  4. Select region closest to your users
  5. Add SSH key
  6. 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

  1. Using File Manager or FTP, upload all files to public_html
  2. The public folder contents go to public_html
  3. Other folders go one level above public_html (usually root home)

Step 2: Create Database

  1. Go to cPanel → MySQL Databases
  2. Create new database: username_geniuscommerz
  3. Create user and assign to database
  4. 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

  1. Go to cPanel → Addon Domains or Domains
  2. Set document root to public_html/public
  3. Update DNS to point to your server

Step 7: Setup SSL

  1. Go to cPanel → SSL/TLS
  2. Click "Auto-configure"
  3. Choose your domain
  4. Install Let's Encrypt certificate
Note: cPanel may not support Node.js build. Build assets locally and upload compiled files, or use a provider that supports Node.js.

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
Deployment Complete! Your application should be live at https://yourdomain.com

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.

Currency gating. Each gateway declares the currencies and countries it can actually settle. A gateway is never offered for a payment it would reject — Midtrans only appears for IDR orders, Paystack only for NGN, GHS, ZAR and KES.

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

  1. The customer picks a gateway and the order is created as pending
  2. They are sent to the gateway — by redirect, by a signed form post, or by a prompt on their phone
  3. The gateway notifies us by webhook, which is signature-verified before anything is written
  4. Only then is the order marked paid
The return URL never marks an order paid. When a customer comes back from a hosted page, that only triggers a server-to-server verify — the redirect itself proves nothing. Repeated webhooks are dropped by a unique event index, so an order cannot be paid twice.

Setting up a gateway

  1. Go to Admin → Payment Gateways
  2. Click Credentials on the gateway you want
  3. 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
  4. Point the gateway's webhook at https://your-domain/api/payments/webhook/{provider}
  5. Place a test order end to end, then switch to Live and repeat
  6. Return to Payment Gateways, click Enable, and set the checkout order
A gateway will refuse to enable while a required credential is missing, rather than appearing at checkout and failing in front of a customer.

Shipping

Shipping is resolved server-side in a fixed order, so the price quoted is always the price charged.

How a rate is chosen

  1. Live courier quote — the Bangladeshi couriers, when zone charging is on
  2. Live carrier rate — DHL, Shiprocket, Aramex and the rest; a rating outage falls through rather than blocking checkout
  3. Shipping zone rate — your configured weight and order-value bands
  4. 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
Templates. Rather than building zones by hand, apply a template: domestic flat rate, domestic weight bands, Europe, North America, Gulf, or a rest-of-world fallback. Applying a template skips any zone you already have, so it is safe to re-apply after adding countries.

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.

Live carrier rates need a ship-from address. Set it on the Shipping Zones page. Without it, carriers cannot rate and the system falls through to your zone rates.

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.

Templates. EU VAT (27 member states), UK VAT, US sales tax (46 state base rates), Canada GST/HST/PST, and single-rate countries covering the Gulf, APAC and Africa. Applying a template skips zones you already have, so your tuned rates survive a re-apply.
Templates are a starting point, not tax advice. Rates change, and you are responsible for confirming them against your own registrations. The US template carries state base rates only — counties and cities add their own, and nexus rules decide where you must collect at all. EU B2B reverse charge is not implemented; if you sell B2B into the EU, use a merchant-of-record gateway such as Paddle or 2Checkout.

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.

Changing base currency. Existing orders keep the base currency they were placed in, which is correct — but reports that sum order totals will mix currencies afterwards. Plan for that if you switch.

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.

Sender IDs need registering with the provider. India requires DLT-approved sender IDs and templates; Saudi Arabia requires locally-registered sender names. That happens with the provider, not here.

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

  1. Go to Admin → Integrations and pick the provider
  2. Enter its credentials — the form shows exactly which fields that provider needs, with a link to its documentation
  3. Choose sandbox or live, if the provider supports both
  4. Save, then activate it
  5. For SMS and fraud, set one as the default; for payments, enable as many as you like and order them
Nothing needs seeding. A provider's record is created the first time you save its credentials.

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:

  1. Check database credentials in .env
  2. Ensure database server is running
  3. Verify database user has necessary permissions

File Upload Error

Error: "The file could not be uploaded"

Solution:

  1. Check storage folder permissions (should be 775)
  2. Verify PHP max_upload_size in php.ini (minimum 50MB)
  3. Ensure storage directory is writable

Blank Admin Panel

Error: Admin panel shows blank page

Solution:

  1. Run: php artisan cache:clear
  2. Run: php artisan view:clear
  3. Rebuild assets: npm run build
  4. Check application logs in storage/logs

Mail Not Sending

Error: Emails not being sent

Solution:

  1. Check MAIL_DRIVER in .env
  2. Verify SMTP credentials are correct
  3. Ensure mail server is running
  4. Check storage/logs for detailed errors
Still having issues? Check the application logs in storage/logs/laravel.log for detailed error messages.