Every store eventually needs something no platform ships with: a local payment provider, a custom size chart, an ERP connection, a loyalty scheme or a storefront that looks unlike anyone else’s. That’s where an open-source platform earns its keep.
WentoCart is built on Laravel and React, two of the most widely used frameworks, so extending it uses skills many developers already have. This guide covers the main ways to customise WentoCart, how to structure your code so it survives upgrades, and how to test, package and share what you build.
Before you start WentoCart’s developer documentation covers its Laravel and React foundation and its published extension APIs, including the hooks and conventions specific to WentoCart. The examples in this guide use standard Laravel and React techniques that work in any Laravel application. Always check the developer guide for the WentoCart-specific way to register modules, themes and events in your release.
The Golden Rule: Don’t Edit Core Files
It’s tempting to open a core file and change a line. It works today and breaks tomorrow: the next update overwrites your change, or your change conflicts with the update. Instead:
- Keep customisations in separate modules or theme files, outside the core application code.
- Use the extension points the platform provides: its published APIs, events, configuration and
Laravel’s service container.
- Track everything in Git, so you always know what changed and why.
- If core genuinely needs a change, propose it upstream as an issue or pull request so everyone benefits.
Know the Architecture
Layer Technology What you extend there
Backend Laravel (PHP 8.3+) Business rules, integrations, admin features, scheduled jobs, APIs
Storefront and React components New UI elements, page sections, custom product displays admin UI
Styling Tailwind CSS Brand colours, typography, spacing and layout
Build tooling Vite Compiling your front-end changes for production
Data MySQL / MariaDB New tables for your module via migrations
The download package is prebuilt, so running a store doesn’t require Node.js. If you plan to change front-end source code, install Node.js and use the project’s Vite build scripts to compile your changes.
Set Up a Development Environment
☐ Install locally using the package’s install.sh (Linux, macOS) or Install.vbs (Windows), which starts the setup wizard on your computer. You’ll need PHP 8.3+.
☐ Use the bundled demo data so you have realistic products, orders and customers to develop against.
☐ Initialise a Git repository before changing anything.
☐ Install Node.js if you’ll be editing React components or styles.
☐ Keep a staging copy of any live store for testing before deployment.
Three Ways to Extend WentoCart
Approach Skills Good for
1. Configuration None Store settings, languages, currencies, taxes, shipping, offline payments, coupons
2. Theme and React, Tailwind CSS Branding, layouts, homepage sections, product page storefront design
3. Modules Laravel, PHP, Payment and shipping integrations, ERP and CRM sync, optionally React new admin features, custom business rules
Always start with the simplest option. If a setting does the job, you don’t need code.
Customising the Storefront
WentoCart’s storefront is built from React components styled with Tailwind CSS. A few principles keep theme work clean and fast:
- Start with design tokens. Define brand colours, fonts and spacing in one place, so changing your brand never means hunting through dozens of files.
- Compose, don’t copy. Build new sections from small, reusable components such as cards, badges and price blocks.
- Respect performance. Lazy-load heavy widgets, size images correctly and keep an eye on bundle size with every change.
- Keep it accessible. Sufficient colour contrast, keyboard navigation and descriptive alt text matter for shoppers and, in many markets, for compliance.
A small, reusable React component
// resources/js/components/SizeChart.jsx (illustrative) export default function SizeChart({ rows }) { return ( <table className=”w-full text-sm border-collapse”> <thead><tr><th>Size</th><th>Chest (cm)</th><th>Waist (cm)</th></tr></thead> <tbody> {rows.map((r) => ( <tr key={r.size}><td>{r.size}</td><td>{r.chest}</td><td>{r.waist}</td></tr> ))} </tbody> </table> ); }
Building a Module
In the Laravel world, reusable features are usually packaged as Composer packages with a service provider that registers routes, migrations, configuration and event listeners. A typical structure:
Example package layout (standard Laravel conventions)
packages/acme/size-chart/ composer.json config/size-chart.php database/migrations/ routes/web.php resources/js/components/ src/SizeChartServiceProvider.php src/Listeners/ tests/
A service provider registers your module with Laravel
<?php namespace AcmeSizeChart;
use IlluminateSupportServiceProvider;
class SizeChartServiceProvider extends ServiceProvider { public function register(): void { $this->mergeConfigFrom(__DIR__.’/../config/size-chart.php’, ‘size-chart’); }
public function boot(): void { $this->loadMigrationsFrom(__DIR__.’/../database/migrations’); $this->loadRoutesFrom(__DIR__.’/../routes/web.php’); } }
To develop the package inside your store, register it as a local Composer path repository, and let Laravel’s package auto-discovery load the service provider:
// composer.json of the package “extra”: { “laravel”: { “providers”: [“Acme\SizeChart\SizeChartServiceProvider”] } }
// composer.json of the store “repositories”: [{ “type”: “path”, “url”: “packages/acme/size-chart” }]
$ composer require acme/size-chart:@dev
Reacting to store events Laravel’s event system lets a module respond when something happens, such as sending order data to an ERP after checkout, without touching core code. Use the event names WentoCart documents for your release:
use IlluminateSupportFacadesEvent;
public function boot(): void { // Replace with the event WentoCart documents for completed orders
Event::listen(OrderCompletedEvent::class, SendOrderToErp::class);
}
For slow work such as API calls, dispatch a queued job from the listener, so shoppers never wait for an external system.
Module Ideas With Real Demand
- Payment gateways: local providers such as UPI-based gateways, Razorpay, Stripe or PayPal.
- Shipping integrations: live courier rates, label printing and tracking.
- Product tools: size charts, product options, bundles and gift messages.
- Business integrations: ERP, accounting, CRM and marketplace sync.
- Marketing: loyalty points, referrals, reviews and abandoned-cart reminders.
Testing, Versioning and Upgrades
☐ Write tests for your module’s logic with PHPUnit or Pest, and test critical UI with your preferred React testing tools.
☐ Follow PSR-12 coding standards for PHP, and keep code readable for the next developer.
☐ Use semantic versioning (major.minor.patch) and keep a changelog.
☐ State compatibility: list which WentoCart versions your module supports, and test against each new release.
☐ Migrations only add or change your own tables; never alter core tables directly.
☐ Test upgrades on staging before updating a live store.
Packaging and Sharing Your Work
- Document it: a clear README with installation steps, configuration options and screenshots.
- Choose a licence for your module, and understand how WentoCart’s OSL-3.0 licence applies to work built on top of it. Get legal advice if you plan to sell extensions.
- Publish through Composer (Packagist for public packages, or a private repository for client work).
- Support users: respond to issues and release fixes promptly. A well-maintained module builds your reputation.
Contributing to WentoCart
WentoCart is a young open-source project, which means your contributions can have a real impact. You can report bugs, improve documentation, suggest extension points, or submit fixes and features. The contribute page explains how to get involved.
Frequently Asked Questions
Do I need to know both Laravel and React? Not for everything. Backend modules need Laravel and PHP; storefront customisation needs React and Tailwind CSS. Full-stack features use both.
Will my customisations survive updates? They’re far more likely to if you keep them in separate modules and theme files, use documented extension points, and test each update on staging first.
Can I sell modules and themes I build? Many developers do. Review the licensing implications with a legal adviser first, and provide clear documentation and support.
The Bottom Line
Extending WentoCart means working with tools you probably already know: Laravel for logic, React for the interface, Tailwind for style and Vite for builds. Keep your work separate from core, use the documented extension points, test before you ship, and share what you build. That’s how a platform, and its community, grows.
Build something great with WentoCart. Download v1.0, read the developer guide and share your modules, themes and ideas with the community.