Developing an E-commerce Store on Bagisto
Bagisto is a Laravel-based e-commerce framework built on Laravel 10+ and Vue.js 3. Unlike Magento or WooCommerce, it provides full code control without vendor lock-in and paid extensions. The architecture is modular: each component is a separate Laravel package connected via composer.json.
When Bagisto is justified
The platform is worthwhile for tasks where core-level customization is important:
- Non-standard business logic — complex pricing rules, multi-level discounts, group tariffs
-
Multi-vendor marketplaces — through the
bagisto/marketplacepackage or custom implementation - B2B portals — wholesale prices, credit limits, approval requests
- ERP/WMS integrations — 1C, SAP, custom systems via REST or event-driven approach
Project architecture
bagisto/
├── packages/
│ └── Vendor/
│ └── Module/
│ ├── src/
│ │ ├── Http/Controllers/
│ │ ├── Models/
│ │ ├── Repositories/
│ │ └── Providers/ModuleServiceProvider.php
│ └── composer.json
├── resources/
│ ├── themes/
│ │ └── default/views/
│ └── lang/
└── config/
└── bagisto.php
Each module is registered via ServiceProvider and adds routes, views, and configuration in isolation.
Development stages
1. Design (1-2 weeks)
Create a catalog map: number of attributes, configurable products, category structure. Determine sales channels — Bagisto supports multi-channel out of the box via channels.
2. Installation and basic configuration (2-3 days)
composer create-project bagisto/bagisto
php artisan bagisto:install
Configuration: multi-currency, localizations, tax classes, shipping methods (FlatRate, FedEx API, custom carriers).
3. Theme development (1-3 weeks)
Bagisto uses Blade + Vue.js. Standard approach — inherit from the default theme:
// config/themes.php
'shop' => [
'name' => 'Custom Theme',
'assets_path' => 'public/themes/shop/assets',
'views_path' => 'resources/themes/shop/views',
'vite' => [
'hot_file' => 'themes/shop/hot',
'build_directory' => 'themes/shop/build',
'package_assets_directory' => 'src/Resources/assets',
],
],
Vue components are registered globally and overridden at the theme level without modifying core.
4. Custom modules development (2-4 weeks)
Non-standard logic is extracted into packages. For example, 1C integration module:
// Service Provider
class ModuleServiceProvider extends ServiceProvider
{
public function boot(): void
{
$this->loadRoutesFrom(__DIR__.'/../Routes/api.php');
$this->loadMigrationsFrom(__DIR__.'/../Database/Migrations');
Event::listen('checkout.order.save.after', OrderSyncListener::class);
}
}
5. Payment integrations
Bagisto has a Payment abstraction for connecting payment gateways:
class CustomPayment extends Payment
{
public string $code = 'custom_payment';
public function getRedirectUrl(): string
{
return route('custom.payment.redirect', [
'order_id' => $this->getOrder()->id,
]);
}
}
Ready packages: bagisto/paypal, for CIS — integration with Sberbank, YuKassa, CloudPayments is implemented manually.
6. Performance optimization
| Component | Solution |
|---|---|
| Catalog (10k+ SKU) | Elasticsearch via bagisto/elasticsearch |
| Sessions and cache | Redis (CACHE_DRIVER=redis) |
| Queues | Laravel Horizon + Redis |
| CDN | Cloudflare R2 or AWS S3 for media |
| Full-page cache | Nginx FastCGI cache or Varnish |
7. SEO configuration
Bagisto generates meta tags, sitemap, and canonical URLs out of the box. Additionally configure: URL-friendly slugs for categories/products, hreflang for multilingual stores, structured data (Product schema) via custom Blade component.
Integrations
1C-Bitrix / 1C Enterprise — synchronization via CommerceML or REST API. Laravel queue processes incoming XML files:
dispatch(new SyncProductsFromXml($xmlPath))->onQueue('sync');
CRM (amoCRM, Bitrix24) — order submission via webhook or API on event checkout.order.save.after.
Shipping services — SDEK, Russian Post, DHL via custom Shipping methods with API calls to rate calculators.
Timeline and team
Typical medium-complexity store (up to 50k SKU, 5-10 custom modules):
| Stage | Timeline |
|---|---|
| Design + architecture | 1-2 weeks |
| Core + theme | 3-4 weeks |
| Modules and integrations | 3-6 weeks |
| Testing + deployment | 1-2 weeks |
| Total | 8-14 weeks |
Team: Laravel backend developer, Vue.js frontend, DevOps for Nginx/Redis/queues configuration.
Deployment
Production environment based on Laravel Forge or manual configuration:
server {
root /var/www/bagisto/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
Supervisor manages queue workers. For horizontal scaling — shared Redis and S3-compatible storage for sessions and media.







