_____ _____ ___ _ _ _____
/ ____| __ \ |__ \| || | |___ |
| | __| |__) | ) | || |_ / /
| | |_ | ___/ / /|__ _| / /
| |__| | | / /_ | | / /
\_____|_| |____| |_| /_/
🌐 Language: 🇬🇧 English (current) · 🇻🇳 Tiếng Việt
S-Cart
The free, open-source e-commerce platform for everyone — businesses, individuals, developers, and students. Built on the GP247 ecosystem (Laravel) with a clean, AI-agent-friendly structure.
composer create-project gp247/s-cart
🏠 Homepage · 🚀 Live demo · 📚 Documentation · 🤖 Agent skills · 💬 Facebook group
📖 Table of contents
🎯 Overview
S-Cart is the best free e-commerce website project for individuals and businesses, built on the GP247 ecosystem (the Laravel Framework) and the latest technologies.
Our mission is "Effective and friendly for everyone":
| Principle | What it means |
|---|---|
| Effective | Meets even the smallest customer requirements. |
| Friendly | Easy to use, easy to maintain, easy to extend. |
| Everyone | Businesses, individuals, developers, students. |
| AI-agent-friendly | Clear structure and standardized docs/skills so AI agents can understand the project and assist development. |
S-Cart 2.x tech stack
| Layer | Technology |
|---|---|
| Ecosystem | GP247 |
| Framework | Laravel 13.x |
| UI | Tailwind CSS 4 |
🖼️ Screenshots


✨ Features
🧩 Platform & developer experience
- Plugin packages built on the HMVC pattern
- Command-line upgrades and patches for S-Cart
- Full documentation for developers and customers
- Online marketplace for plugins and templates
- Secured API for apps and mobile integrations
🛒 Storefront
| Area | Capabilities |
|---|---|
| Commerce | Shopping cart, orders, products, customers |
| Localization | Multi-language, multi-currency |
| Content (CMS) | Categories, news, content pages |
| Extensions | Payment plugins, shipping methods, discount system, tax calculation |
| Pro plugins | Multi-vendor, Multi-store |
🛠️ Administration
| Area | Capabilities |
|---|---|
| Access & security | Role-based permissions (admin, manager, marketing…), full audit logging, access control, authentication, CAPTCHA |
| Business tools | Product management, order processing, customer management, analytics & reporting, activity tracking |
🚀 Quick start
In a hurry? Go with Method 1 (Composer) — one command, no local server setup required beyond PHP + MySQL.
Method 1 — Composer (recommended)
# 1. Create the project
composer create-project gp247/s-cart
# 2. Check .env (DB settings). Generate the app key if missing:
php artisan key:generate
# 3. Install S-Cart
php artisan gp247:install
# 4. (Optional) Install sample data
php artisan gp247:shop-sample
Method 2 — Git clone
# 1. Clone
git clone https://github.com/gp247net/s-cart.git
cd s-cart
# 2. Set up env & dependencies
cp .env.example .env
php artisan key:generate
composer install
Configure the database in .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
Then install:
php artisan gp247:install
php artisan gp247:shop-sample # optional, sample data
Method 3 — Docker
Supported from S-Cart 2. No need to install PHP/Composer/MySQL on your machine — Docker is all you need. There are two clearly separate compose files; always use the right one for the environment:
| File | Environment |
|---|---|
docker-compose.yml |
dev (your local machine) |
docker-compose.prod.yml |
prod (your server) |
DEV setup
git clone https://github.com/gp247net/s-cart.git
cd s-cart
cp .env.example .env
docker compose up -d --build
docker compose exec app php artisan key:generate
docker compose exec app php artisan gp247:install --force=1
docker compose exec app php artisan gp247:shop-sample # optional
Open the site: http://localhost:8000
PROD setup
git clone https://github.com/gp247net/s-cart.git
cd s-cart
cp .env.example .env
# Configure .env for prod: APP_ENV, DB_*, SC_DOCKER_WWWUSER/SC_DOCKER_WWWGROUP — see DOCKER.md
docker compose -f docker-compose.prod.yml up -d --build
docker compose -f docker-compose.prod.yml exec app php artisan key:generate
docker compose -f docker-compose.prod.yml exec app php artisan gp247:install --force=1
docker compose -f docker-compose.prod.yml exec app php artisan gp247:shop-sample # optional
docker compose -f docker-compose.prod.yml run --rm node # build CSS/JS assets
⚠️ Always include
-f docker-compose.prod.ymlon prod — forgetting it accidentally applies the dev config (debug mode on, runs as root, installs Xdebug…). See the Q&A in DOCKER.md for that failure mode in detail.
For the full step-by-step guide and a detailed troubleshooting Q&A covering both dev and prod, see DOCKER.md.
🔐 Folder permissions
If you installed with Method 1 or 2 (no Docker), make sure the following folders are writable — otherwise installation and various features won't work correctly:
app/GP247 · public/GP247 · public/vendor · resources/views/vendor · storage · vendor
📂 Project structure
Folder layout for a GP247-based website ((+) = created/managed by GP247):
Website-folder/
│
├── app
│ └── GP247
│ ├── Core(+) // Override Core controllers
│ ├── Helpers(+) // Auto-loads Helpers/*.php into the system
│ ├── Front(+) // Override GP247/Front controllers
│ ├── Shop(+) // Override GP247/Shop controllers
│ ├── Plugins(+) // php artisan gp247:make-plugin --name=NameOfPlugin
│ └── Templates(+) // php artisan gp247:make-template --name=NameOfTemplate
├── public
│ └── GP247
│ ├── Core(+)
│ ├── Plugins(+)
│ └── Templates(+)
├── resources
│ └── views/vendor
│ ├── gp247-admin(+) // Core view overrides
│ ├── gp247-shop-admin(+) // Shop view overrides
│ └── gp247-front-admin(+) // Front view overrides
├── vendor
│ ├── gp247/core
│ ├── gp247/front
│ └── gp247/shop
└── ...
❓ FAQ
📖 Full command-line reference. The commands below cover the common cases. For every GP247 artisan command, its options and examples, see the official reference: English · Tiếng Việt.
How do I check the installed S-Cart version?
php artisan gp247:info
How do I update S-Cart?
Update each package with Composer:
composer update gp247/core
composer update gp247/front
composer update gp247/shop
Then run the safe, non-destructive refresh (updates core, updates the shop schema when the shop module is installed, and rebuilds the caches):
php artisan gp247:update
Optional — refresh language files. By default gp247:update leaves your
translations untouched. Add --overwrite-lang to also run
gp247:language-update, which pulls the latest translations and overwrites
any language strings you edited:
php artisan gp247:update --overwrite-lang
Optional — refresh published assets/views to the latest version.
composer update and gp247:update only refresh the code under vendor/; the
files already copied to public/GP247 and app/GP247 are not overwritten
automatically. If a new release ships updated compiled CSS/JS or default
template/views and you want them on your site, re-publish with --force:
php artisan vendor:publish --tag=gp247:core-public --force # -> public/GP247 (admin build: CSS/JS, ...)
php artisan vendor:publish --tag=gp247:front-public --force # -> public/GP247/Templates/GP247Front (storefront CSS/JS)
php artisan vendor:publish --tag=gp247:front-view --force # -> app/GP247/Templates/GP247Front (default template views)
⚠️
--forceoverwrites the destination files — including any local customizations you made there (custom logo/images, edited template Blade files, etc.). Back uppublic/GP247andapp/GP247first, and publish only the tag you actually need.
You can also fold the re-publish into the refresh itself with the opt-in
--publish=<tokens> option (default publishes nothing). Only core-public is
safe (compiled admin assets); the view/template tokens overwrite your
customizations, so back up first:
php artisan gp247:update --publish=core-public # safe: refresh admin CSS/JS
php artisan gp247:update --publish=core-public,front-view # also overwrite storefront templates (DESTRUCTIVE)
There is no --force flag on gp247:update — typing a destructive token is
the consent, and an interactive run still warns and asks to confirm. See the
CLI reference for the full
token → destination → impact table.
How do I create a new plugin?
php artisan gp247:make-plugin --name=PluginName
Also generate a zip file for distribution:
php artisan gp247:make-plugin --name=PluginName --download=1
How do I create a new template?
php artisan gp247:make-template --name=TemplateName
Also generate a zip file for distribution:
php artisan gp247:make-template --name=TemplateName --download=1
How do I customize the upload (lfm) configuration?
php artisan vendor:publish --tag=config-lfm
How do I customize the admin UI?
Each package publishes its admin views into its own views/vendor/<namespace>
folder — publish only the tag you actually need to override:
php artisan vendor:publish --tag=gp247:core-view # -> views/vendor/gp247-admin
php artisan vendor:publish --tag=gp247:front-admin # -> views/vendor/gp247-front-admin
php artisan vendor:publish --tag=gp247:shop-view-admin # -> views/vendor/gp247-shop-admin
Add --force if you need to overwrite files already published there.
How do I customize the default template?
php artisan vendor:publish --tag=gp247:front-view # -> app/GP247/Templates/GP247Front
php artisan vendor:publish --tag=gp247:front-public # -> public/GP247/Templates/GP247Front
php artisan vendor:publish --tag=gp247:shop-view-front # -> app/GP247/Templates/GP247Front
Add --force if you need to overwrite files already published there.
How do I override the gp247_* helper functions?
- Add the list of functions you want to override to
config/gp247_functions_except.php - Create new PHP files containing the new functions in
app/GP247/Helpers, e.g.app/GP247/Helpers/myfunction.php
How do I override controllers in GP247/Core, GP247/Front, or GP247/Shop?
S-Cart lets you override any controller (including API controllers) in
GP247/Core, GP247/Front, and GP247/Shop using the same mechanism:
create the corresponding controller in app/GP247/{Core|Front|Shop},
extend the original controller, and prepend App to the original
namespace.
Example, overriding a Core controller:
- Create the matching file under
app/GP247/Core/Controllers/...(keep the same sub-path and filename as in the original package). - Make the new controller
extendthe original controller fromvendor/gp247/core/.... - Change the namespace from
GP247\Core\ControllerstoApp\GP247\Core\Controllers(just prependApp, keep the rest as-is).
The same pattern applies to GP247\Front\* and GP247\Shop\* (becoming
App\GP247\Front\* and App\GP247\Shop\*) and to API controllers
(GP247\Core\Api\Controllers becomes App\GP247\Core\Api\Controllers).
How do I add new routes for the admin area?
Use the GP247_ADMIN_PREFIX and GP247_ADMIN_MIDDLEWARE prefix/middleware
constants in your route declarations.
Reference: https://github.com/gp247net/core/blob/master/src/routes.php
What environment variables in .env should I know about?
Disable the API:
GP247_API_MODE=1 // set to 0 to disable
Database table prefix (cannot be changed after gp247 is installed):
GP247_DB_PREFIX=gp247_
Admin page path prefix:
GP247_ADMIN_PREFIX=gp247_admin
Made with the ❤️ GP247 ecosystem — gp247.net