Kanvas was born out of years spent building complex backend systems for modern commerce. As an agency, we kept running into the same problems — slow integrations, disconnected systems, repetitive workflows, and custom logic that had to be rebuilt for every project.
We realized there was a better way.
Kanvas is your operational engine — a modular backend designed to unify your systems, automate your workflows, and power the next generation of commerce applications.
Kanvas gives you APIs, workflows, and agent-ready infrastructure — so you can launch faster, integrate better, and scale smarter.
- Ecosystem: Dive into authentication and teams (or multi-tenant) management.
- Inventory: Manage products, their variants, and distribution channels efficiently.
- Social: Engage with features like follows, comments, reactions, and messaging.
- CRM: Navigate through leads, deals, and pipelines with ease.
- Workflow: Seamlessly connect your app with other systems.
Kanvas isn’t trying to be your monolithic platform. It connects the stack you already use — NetSuite, Shopify, Salesforce, custom apps — and becomes your operational layer in the middle.
Unlike typical low-code automation tools, Kanvas is designed to be part of your core product architecture. Built with Laravel + GraphQL, it supports scalable APIs and deep system integrations.
🛍️ Marketplaces – With built-in vendor, product, and order logic
🚘 Dealer platforms – CRM, inventory, and lead routing included
🧩 Product bundlers – Dynamic SKUs + inventory syncing
🏪 B2B commerce portals – Multi-user pricing, approvals, and logic
📱 B2C apps – Headless APIs to power custom frontends
- PHP ^8.3
- Laravel ^11.0
-
Use the
docker compose up --build -d
to bring up the containers. Make sure to have Docker Desktop active and have no other containers running that may cause conflict with this project's containers(There may be conflicts port wise if more than one container uses the same ports). -
Check the status of containers using the command
docker-compose ps
. Make sure they are running and services are healthy. -
Get inside the database container using
docker exec -it mysqlLaravel /bin/bash
. Then, create 7 databases:inventory
,social
,crm
,workflow
,commerce
,action_engine
,event
. -
Set up your .env: You can start by copying the
.env.example setup
. Next, update it with the database and Redis connection info, making sure that the host values match your container's name. -
Get inside the php container using
docker exec -it phpLaravel bash
. -
Generate app keys with
php artisan key:generate
. Note: Confirm that your app key is correctly registered in theapps
table within thekanvas_laravel
database. -
Update the app variables in your .env
APP_JWT_TOKEN
,APP_KEY
,KANVAS_APP_ID
before running the setup-ecosystem. Note: You can use the default values provided intests.yml
. -
Use the command
php artisan kanvas:setup-ecosystem
to run the kanvas setup. -
If you're presenting some errors after running the command from before, drop all the tables from the schema
kanvas_laravel
and run it again. -
To check if the API is working just make a GET request to
http://localhost:80/v1/
and see if the response returns"Woot Kanvas"
.
- composer migrate-inventory
- Set env var in .env
DB_INVENTORY_HOST=mysqlLaravel
DB_INVENTORY_PORT=3306
DB_INVENTORY_DATABASE=inventory
DB_INVENTORY_USERNAME=root
DB_INVENTORY_PASSWORD=password
php artisan inventory:setup
to create and initialize the inventory module for a current company
- composer migrate-social
- Set env var in .env
DB_SOCIAL_HOST=mysqlLaravel
DB_SOCIAL_PORT=3306
DB_SOCIAL_DATABASE=social
DB_SOCIAL_USERNAME=root
DB_SOCIAL_PASSWORD=password
php artisan social:setup
to create and initialize the social module for a current company
- composer migrate-crm
- Set env var in .env
DB_CRM_HOST=mysqlLaravel
DB_CRM_PORT=3306
DB_CRM_DATABASE=cr
DB_CRM_USERNAME=root
DB_CRM_PASSWORD=password
php artisan guild:setup
to create and initialize the crm module for a current company
After doing all the steps above, you could run the project with Laravel Octane by using the command php artisan octane:start --server=swoole --host=0.0.0.0 --port=8000
.
Use --watch
in development allowing you to refresh modified files, this works assuming to have npm install chokidar
installed in the project.
Note:
- To install Swoole you can use the command
pecl install swoole
- For production remove
--watch
from the command. - roles_kanvas_legacy will be deleted in the future