Hypercommerce Installation & Setup Guide
Everything you need to deploy your multi-vendor ecommerce platform — from server provisioning and the Laravel backend to the mobile apps, Firebase and Google Cloud.
What you'll set up
Hypercommerce ships as four products that share a single backend. Start with the backend, then connect each client app.
Backend, Admin & Seller Panel
The Laravel core that powers your store, admin dashboard and seller portal.
Customer App
The Flutter buyer app for Android & iOS, with push, maps and payments.
Seller AppSoon
Native seller companion app to manage orders, products and payouts on the go.
Customer WebSoon
Server-rendered storefront for browsers, sharing the same backend API.
Recommended order
Follow the guide top to bottom. Each section assumes the previous one is complete.
Before you begin
Make sure you have the following ready. Detailed specs live on the Server Requirements page.
License certificate & purchase code.Server Requirements
Hypercommerce runs on any standard LAMP/LEMP stack. Confirm your server meets the specs below before installing the backend.
Minimum requirements
| Component | Minimum | Recommended | Required |
|---|---|---|---|
| PHP | 8.4 | 8.4+ | Yes |
| MySQL / MariaDB | MySQL 8.0 / MariaDB 10.6 | MySQL 8.0 | Yes |
| Composer | 2.2 | 2.7+ | Yes |
| Web server | Apache 2.4 / Nginx 1.20 | Nginx 1.24 | Yes |
| RAM | 1 GB | 2 GB+ | Yes |
PHP extensions
The following PHP extensions must be enabled. Most are bundled with standard PHP installs.
GD or Imagick. Imagick produces sharper thumbnails and is preferred when available.Recommended hosting
Hypercommerce works on shared hosting, but a VPS or cloud server is strongly recommended for queues, cron and media storage.
The recommended setup. Full control over PHP, Nginx, Redis and cron — required for background jobs and push notifications.
- Ubuntu 22.04 LTS or 24.04 LTS, 2 vCPU, 2–4 GB RAM, 40 GB SSD
- Nginx + PHP-FPM 8.4 + MySQL 8.0
- Redis for queue driver (phpredis extension)
- Supervisor to keep queue workers alive
Supported for smaller stores. Ensure your panel exposes PHP 8.4 version selection, a MySQL database and cron jobs. Note that Redis (for queues) and persistent queue workers are typically unavailable on shared hosting.
- PHP 8.4 must be selectable — most shared hosts don't offer it yet, verify before purchasing
- Queue connection falls back to
databasedriver (less performant than Redis) - Use
queue:listenvia cron as a workaround for background jobs - Spatie Media Library requires writable
storage/and sufficient disk space
Platforms like Laravel Forge, Ploi or RunCloud provision the full stack automatically and are an easy path to production.
Verify your environment
SSH into your server and confirm the installed versions before continuing to installation.
# Confirm PHP version (must be 8.4+)php -v # List enabled PHP extensionsphp -m # Confirm Composer is installedcomposer --version # Confirm database connectivitymysql --version
Backend Installation
Install the Laravel core that powers your admin dashboard, seller panel and the API behind every Hypercommerce app.
.env editing or Artisan commands. Just upload, point it at a database, and finish setup in your browser.Using shared hosting? Follow a hosting-specific walkthrough:
Overview
At a high level, you upload the files and point your domain at the /public folder — then the built-in web installer handles everything else in the browser: licensing, requirement and permission checks, your database connection, and creating your admin account, running all migrations and seeders for you. Here's the full path:
- Upload & extract the package, then point the domain at
/public - Create an empty MySQL database and user (you'll enter these in the installer)
- Open
/installand complete the guided wizard - After install, schedule cron & the queue worker
Step-by-step installation
Upload & extract files
Upload hypercommerce.zip to your server's web root (e.g. /var/www/hypercommerce) and extract it. Point your domain or subdomain at the /public directory.
cd /var/wwwunzip hypercommerce.zip -d hypercommerce
vendor folder, so you don't need to run Composer. Only if you're installing from a fresh-source package should you run composer install --no-dev --optimize-autoloader./public folder — never the project root. On Apache the bundled .htaccess handles this; on Nginx set root /var/www/hypercommerce/public;.Create the database
Create an empty MySQL database and a user with full privileges on it. Keep these credentials handy for the next step.
CREATE DATABASE hypercommerce CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'hc_user'@'localhost' IDENTIFIED BY 'a-strong-password';GRANT ALL PRIVILEGES ON hypercommerce.* TO 'hc_user'@'localhost';FLUSH PRIVILEGES;
Run the installer
Install entirely from your browser — no terminal or manual configuration required. Open https://your-domain.com/install and the wizard guides you through each step in order:
- Welcome — confirm you're ready to begin.
- License — enter your Envato purchase code. It's verified online and your domain is registered automatically.
- Requirements — the installer checks your PHP version and required extensions.
- Permissions — it confirms
storageandbootstrap/cacheare writable. - Environment & Database — enter your database hostname, username, password and database name. The installer tests the connection and writes your
.envfor you. - Admin account — set your super-admin name, email, password and mobile.
- Install — migrations and seeders run automatically, then you're taken to the finished screen.




storage and bootstrap/cache must be writable (775).


Set file permissions
The installer's Permissions step checks this for you. If it flags storage or bootstrap/cache as not writable, set ownership to your web-server user (often www-data) and re-check.
# Give the web server ownershipsudo chown -R www-data:www-data storage bootstrap/cache # Apply write permissionssudo chmod -R 775 storage bootstrap/cache
Schedule cron & queue
Hypercommerce uses Laravel's task scheduler and a queue worker to process orders, payouts, notifications and currency-rate refreshes. The admin panel generates the exact commands for you — how you run them depends on your hosting.
schedule:run) and Queue Worker (queue:work) — each with a copy button and a live health indicator. It fills in your server's real PHP binary and project path for you.Shared hosting (cPanel, hPanel, etc.) — copy both commands from Cron Monitor and add each as a cron job set to run every minute. The leading * * * * * is what makes a job run once a minute, every minute:
# Task scheduler — runs every minute* * * * * /usr/bin/php /home/youruser/your-site/artisan schedule:run >> /home/youruser/your-site/storage/logs/schedule.txt 2>&1 # Queue worker — runs every minute* * * * * /usr/bin/php /home/youruser/your-site/artisan queue:work --stop-when-empty >> /home/youruser/your-site/storage/logs/cron-log.txt 2>&1
VPS or dedicated server — if you have shell access and can run long-lived processes, you don't need a per-minute cron at all. Run the scheduler and queue worker as persistent background processes instead, kept alive by Supervisor so they restart on crash or reboot:
# Run the scheduler continuously — replaces the every-minute cronphp artisan schedule:work # Process queued jobs continuouslyphp artisan queue:work --tries=3 --timeout=90
Define a Supervisor program for each so they stay running in the background:
[program:hypercommerce-scheduler]command=php /var/www/hypercommerce/artisan schedule:workautostart=trueautorestart=trueuser=www-data [program:hypercommerce-queue]command=php /var/www/hypercommerce/artisan queue:work --tries=3 --timeout=90autostart=trueautorestart=truenumprocs=1user=www-data
sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start all. Cron Monitor still shows live health for both tasks regardless of how they run.Post-install checklist
Once the installer finishes, confirm each item below before going live.
Troubleshooting
The most common installation issues and their fixes.
chmod from Step 4 and clear caches with php artisan optimize:clear.DB_* values in .env. On many hosts DB_HOST should be 127.0.0.1 rather than localhost.System Health report attached — it captures PHP version, extensions and folder permissions in one click.Hostinger Admin Panel Setup
Deploy Hypercommerce on Hostinger shared hosting using hPanel, File Manager, and the built-in web installer.
Create Website and Database
- Log in to your Hostinger account.
- Create a new website for the admin panel.
- Navigate to Hosting → Manage → Databases → MySQL Databases and create a new database and user.
- Note down the following credentials — they are required during the installation wizard:
localhostUpload and Extract Admin Panel Files
- Open Hostinger File Manager from hPanel.
- Navigate to the website's root directory — usually
public_html. - Upload the Admin Fresh Code ZIP file provided in the CodeCanyon package.
- Extract the ZIP file directly inside the root directory.
If ZIP Extraction Fails
Some large ZIP files may not extract properly through File Manager. In that case, use SSH:
- In hPanel, go to Advanced → SSH Access and enable SSH access.
- Set an SSH password and copy the SSH connection command provided by Hostinger.
- Open Terminal (macOS / Linux) or Command Prompt / PuTTY (Windows) and connect using the copied command.
- Navigate to the directory containing the uploaded ZIP:
cd /path/to/your/website
Then extract the archive — replace admin-panel.zip with the actual filename:
unzip admin-panel.zip
Run the Web Installer
- Open your website URL in a browser.
- The installation wizard will start automatically.
- Enter the database credentials created in Step 1.
- Complete the installation process by following the on-screen instructions.
- After installation is complete, log in to the admin panel using the credentials you configured.
Installation Complete
Your admin panel is now successfully installed and ready for use.
cPanel Setup
Deploy Hypercommerce on a cPanel server using the MySQL Database Wizard, File Manager, and the built-in web installer.
Create a MySQL database & user
- Log in to your cPanel account.
- Under Databases, open the MySQL® Database Wizard.
- Create a new database, then create a database user with a strong password.
- Add the user to the database and grant it ALL PRIVILEGES.
- Note these credentials — you'll enter them in the installer:
cpuser_dbnamecpuser_dbuserlocalhostUpload and extract the files
- Open File Manager from cPanel.
- Navigate to your domain's root —
public_htmlfor the primary domain, or the addon/subdomain folder. - Upload the Admin code ZIP from your CodeCanyon package.
- Select the archive and choose Extract.
If extraction fails
Large archives may not extract through File Manager. If your plan includes Terminal or SSH access, extract from the command line instead:
cd ~/public_htmlunzip admin-panel.zip
Point the domain at /public
Hypercommerce must be served from its /public folder — never the project root.
- Recommended: in Domains, set the domain or subdomain's Document Root to the extracted
…/publicdirectory. - If your plan can't change the document root, extract into
public_htmland move the contents ofpublic_html/publicup intopublic_html. The bundled.htaccesshandles routing on Apache.
/public only/public, your .env and source files become publicly accessible and the app won't load correctly.Run the web installer
- Open your website URL in a browser — you'll be taken to
/install. - Complete the wizard: license, requirements, permissions, the database credentials from Step 1, and your admin account.
- When it finishes, log in to your admin panel with the credentials you set.
Installation Complete
Your admin panel is installed and ready. Set up the scheduler and queue worker using cPanel's Cron Jobs — the exact commands are shown on the Backend Installation page (Step 5).
Firebase Setup
Hypercommerce manages Firebase entirely from the Admin Panel. Configure authentication and push notifications once, and they apply to the Customer Web and apps automatically — no .env editing required.
Connect your Firebase project
Create a Firebase project, register a Web App, then paste its configuration into the Admin Panel.
Create a Firebase project
Go to the Firebase Console and create a new project — or select an existing one to reuse.

Add a Web App
Inside the project, add a new Web App using the </> icon and give it a nickname.

</>) icon to add an app.
Copy your Firebase config
Open Project settings from the gear menu next to Project Overview.

Under your Web App, copy the SDK configuration values — apiKey, authDomain, databaseURL, projectId, storageBucket, messagingSenderId, appId and measurementId.

Save it in the Admin Panel
In your Admin Panel, go to Settings → Authentication → Firebase, turn on Enable Firebase, paste each value into its matching field (API Key, Auth Domain, Database URL, Project ID, Storage Bucket, Messaging Sender ID, App ID and Measurement ID), then click Save.

Enable push notifications
Generate the Web Push key and a service account key in Firebase, then add both to the Admin Panel.
Generate a Web Push (VAPID) key
In the Firebase Console go to Project Settings → Cloud Messaging. Under Web Push certificates, click Generate key pair and copy the generated VAPID key.

Download the service account key
Go to Project Settings → Service Accounts, click Generate New Private Key, and save the downloaded JSON file securely.

Configure notifications in the Admin Panel
In your Admin Panel, go to Settings → Notifications. Enter the VAPID key, upload the service account JSON file, and Save.

.env editing is required.Final checklist
Google Cloud & Maps
Set up the Google Cloud services that power Maps in the Admin Panel and storefront — a billing account, the required Maps APIs, an API key, and adding that key to the Admin Panel.
Step-by-step setup
Enable a billing account
Google Maps Platform APIs require a valid billing account on your Google Cloud project. Create one and make sure billing is active before continuing.

Enable the required APIs
Go to APIs & Services → Library, then search for and enable each one: Places API (New), Geocoding API and Maps JavaScript API.

Create & configure an API key
Go to APIs & Services → Credentials, then click Create credentials → API key.

Open the new key to configure it. Check whether it is restricted to specific domains, and that the Maps APIs above are allowed under API restrictions.

Add the API key to the Admin Panel
Log in to your Admin Panel and go to Settings → Web Settings. Under Support Information, paste your key into the Google Map Key field and click Submit.

Verify
Check that Google Maps loads correctly in the Admin Panel or Customer Website. If the map doesn't load, confirm the following:
Prerequisites
The Customer App is a feature-rich mobile application built with Flutter, giving your users a seamless shopping experience on iOS and Android.
Overview
The Customer App is the primary interface for users to interact with your platform on mobile. It's built with Flutter to deliver:
- Native performance on both iOS and Android
- A consistent experience across platforms
- Smooth animations and transitions
- Offline capability for basic features
- Real-time order tracking and updates
System requirements
For users
For developers
| Tool | Minimum |
|---|---|
| Flutter | 3.0+ |
| Dart SDK | 2.17+ |
| IDE | Android Studio or VS Code |
Developer & signing accounts
You can build and run the app locally for testing without any paid accounts. To publish to the public stores you'll need the platform developer accounts below — set these up before you reach the Build & Release step.
App Configuration
Point the Customer App at your backend and set its identity. Almost everything lives in one file — lib/config/constant.dart — plus a few native values for the app name, package ID and Maps keys.
/api/settings and configured in the Admin Panel — there's nothing to set in the app for payments.Core settings — constant.dart
Open lib/config/constant.dart and replace each placeholder with your own value.
class AppConstant { // Your backend API base URL — must end with a trailing slash static String baseUrl = 'https://your-domain.com/api/'; static String appName = 'Your App Name'; static String packageName = 'com.yourcompany.app'; // Google Maps keys (used for Places & Geocoding REST calls) static String androidMapKey = 'YOUR_ANDROID_MAP_KEY'; static String iosMapKey = 'YOUR_IOS_MAP_KEY'; // Google Sign-In server client ID (OAuth web client) static String serverClientId= 'YOUR_SERVER_CLIENT_ID';}
/api/baseUrl'${baseUrl}login', '${baseUrl}categories' and so on (see lib/config/api_routes.dart). A missing trailing slash breaks every request.Android identity
Update these native Android values to match your packageName and branding.
applicationId & namespace (default com.hyperCommerce.customer)android:label → your app namecom.google.android.geo.API_KEY → your Android Maps key<application android:label="Your App Name" …> <!-- Google Maps API Key --> <meta-data android:name="com.google.android.geo.API_KEY" android:value="YOUR_ANDROID_MAP_KEY" />
iOS identity
In Xcode (ios/Runner.xcworkspace) and the iOS files:
PRODUCT_BUNDLE_IDENTIFIER in Xcode → Signing & CapabilitiesCFBundleDisplayName & CFBundleName → your app nameGMSServices.provideAPIKey(...) → your iOS Maps keyGMSServices.provideAPIKey("YOUR_IOS_MAP_KEY")
Available customizations
Everything you can rebrand, and where each value lives in the project.
| Customization | Where | What to change |
|---|---|---|
| App color | lib/config/theme.dart | primaryColor hex |
| Package / Bundle ID | build.gradle · Xcode | applicationId / bundle identifier |
| App logo & icon | assets/images/app_launcher_logo/ · app_logos/ | Replace PNGs, regenerate icons |
| App name | constant.dart · Manifest · Info.plist | appName / label |
| Base URL | lib/config/constant.dart | baseUrl |
| Firebase (CLI) | flutterfire configure | See Firebase & Push |
| Server client ID | lib/config/constant.dart | serverClientId |
| Android Maps key | constant.dart · Manifest | androidMapKey / geo API_KEY |
| iOS Maps key | constant.dart · AppDelegate.swift | iosMapKey |
App color
The primary brand color is defined once in lib/config/theme.dart. Change the hex and it flows through buttons, the active nav bar, badges and accents.
class AppTheme { // Your brand color — default is amber 0xFFFFB616 static const Color primaryColor = Color(0xFFFFB616); …}
App logo & launcher icon
Two sets of images: the in-app logo and the home-screen launcher icon.
- In-app logo — replace
assets/images/app_logos/app-logo-light.pngandapp-logo-dark.png. - Launcher icon — replace
assets/images/app_launcher_logo/launcher_icon.png(used byflutter_launcher_iconsfor both Android and iOS, already configured inpubspec.yaml).
Then regenerate the platform icons:
flutter pub getdart run flutter_launcher_icons
launcher_icon.png at a high resolution (1024×1024). The generator handles the adaptive-icon foreground/background and every density automatically.Regenerate & run
After editing the values above, fetch packages and run the code generator, then launch the app.
# Install dependenciesflutter pub get # Run the code generator (Hive / models)flutter pub run build_runner build --delete-conflicting-outputs # Launch on a connected device or emulatorflutter run
Firebase & Push
To use authentication and push notifications in the Customer App you must set up Firebase for both Android and iOS. You can do this automatically with the FlutterFire CLI (recommended) or manually.
Method 1 — FlutterFire CLI Recommended
The fastest, most reliable way — it generates the correct configuration files for every platform automatically.
Install the Firebase CLI
# Install globally using npmnpm install -g firebase-toolsLog in to Firebase
firebase loginfirebase login --no-localhost if the machine has no browser.Install the FlutterFire CLI
# Activate the CLI globallyflutter pub global activate flutterfire_cliflutterfire runs from anywhere — on macOS/Linux that's usually ~/.pub-cache/bin.Configure the project
Run this from the root of the Flutter project — it's interactive:
flutterfire configureAnswer the interactive prompts:
- Project selection — pick your Firebase project from the list.
- Platform selection — toggle
androidandioswith the Spacebar. - Reuse existing firebase.json? — answer
no. - Overwrite
lib/firebase_options.dart? — answer Yes so it's updated with your project credentials.
✔ Firebase configuration file lib/firebase_options.dart generated successfully Platform Firebase App Idandroid 1:123456789012:android:xxxxxxxxxxxxxxxxios 1:123456789012:ios:xxxxxxxxxxxxxxxxMethod 2 — Manual setup
Prefer to place each native file yourself? Follow these steps instead.
Create the Firebase project
Go to the Firebase Console and create or select your project.

Add the Android app
Click Add app → Android, enter the Android package name (from android/app/src/main/AndroidManifest.xml), then download google-services.json and place it in android/app/.


google-services.json.
google-services.json placed in android/app/.Release keystore & SHA fingerprints
Google Sign-In and phone auth need your app's SHA fingerprints. Generate a release keystore (if you don't have one):
# Check if a keystore already existsls android/app/*.jks android/*.jks 2>/dev/null # Generate a new release keystore (example)keytool -genkeypair -v -keystore android/app/release-key.jks \ -alias upload -keyalg RSA -keysize 2048 -validity 10000Then print the fingerprints and add them in Firebase:
cd android./gradlew signingReportCopy the release (and debug, if you sign in on debug builds) SHA-1 and SHA-256 into Project settings → General → your Android app → Add fingerprint.

Add the iOS app
Click Add app → iOS, enter the iOS bundle ID (Xcode → Runner → General), download GoogleService-Info.plist and add it to ios/Runner/ in Xcode.


GoogleService-Info.plist.
GoogleService-Info.plist placed in ios/Runner/.iOS auth config: open ios/Runner/GoogleService-Info.plist, copy REVERSED_CLIENT_ID, then in Xcode update ios/Runner/Info.plist → CFBundleURLSchemes to match it.

CFBundleURLSchemes to your REVERSED_CLIENT_ID.Common steps (both methods)
Initialize Firebase in code
Ensure lib/main.dart initializes Firebase before the app runs:
import 'package:firebase_core/firebase_core.dart';import 'firebase_options.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); runApp(const MyApp());}Enable authentication providers
In Firebase Console → Authentication → Sign-in method, enable Phone, Google, Email/Password and Apple.


Server client ID (Google Sign-In)
The serverClientId you set in lib/config/constant.dart is the Web OAuth client ID — found as the client_id with client_type: 3 in your google-services.json (or under Google Cloud → Credentials → OAuth 2.0 Web client).

client_id (Web client) used for serverClientId.Final checklist
firebase_options.dart, google-services.json, GoogleService-Info.plist).Build & Release
Produce signed release builds and ship the Customer App to Google Play and the App Store. Make sure you've finished App Configuration and Firebase & Push first.
Set the version
Bump the version in pubspec.yaml before each release. The format is versionName+versionBuild — the build number after + must increase for every store upload.
# versionName + versionBuild (build number)version: 1.0.0+1Android release
Configure release signing
Using the release keystore you generated in Firebase & Push, create android/key.properties. The project's build.gradle already reads it for the release signing config.
storePassword=yourStorePasswordkeyPassword=yourKeyPasswordkeyAlias=upload# path to your .jks, relative to android/app/storeFile=release-key.jks.jks file and its passwords safe and out of source control. If you lose them you can't publish updates under the same app.Build a signed App Bundle
Google Play requires an Android App Bundle (.aab):
flutter build appbundle --release # output: build/app/outputs/bundle/release/app-release.aab # for a direct-install APK instead:flutter build apk --releaseUpload to Google Play
In the Google Play Console, create your app, upload the .aab to an Internal testing track first, then promote it to Production once verified.
iOS release
Set up signing in Xcode
Open ios/Runner.xcworkspace in Xcode. Under Runner → Signing & Capabilities, select your Team and confirm the Bundle Identifier matches your registered App ID.
Build & archive
flutter build ipa --release # or in Xcode: Product → ArchiveUpload to App Store Connect
Upload the build with the Xcode Organizer (Distribute App) or Transporter, then submit it for review from App Store Connect.
Store listings
Before either store will publish, prepare your listing assets and complete the required forms.