misaf/vendra

The skeleton application for the Vendra framework.

Maintainers

Package info

github.com/misaf/vendra

Type:project

pkg:composer/misaf/vendra

Transparency log

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v1.10.0 2026-08-01 01:24 UTC

README

Vendra is a modular Laravel 13 application for commerce, content, customer management, and multi-tenant platform development. This repository contains the host application and every first-party Vendra package in one Composer monorepo.

Requirements

  • PHP 8.3+
  • Laravel 13
  • Composer
  • Node.js and npm
  • MySQL or another Laravel-supported database

Local Development

composer setup
composer dev

composer setup installs PHP and JavaScript dependencies, creates .env, generates the application key, runs migrations, and builds frontend multimedia. composer dev starts the web server, queue listener, logs, and Vite in watch mode.

Package Catalog

Packages are independently installable through Composer and are auto-discovered by Laravel unless their README says otherwise.

Area Packages
Foundation Support, API, Tenant, Testing
Standalone dependencies Email Validation, Emailable Driver
Catalog and sales Product, Attribute, Currency, Cart, Transaction, Subscription
Content and marketing Blog, Custom Page, FAQ, Multimedia, Tagger, Newsletter, Affiliate
Customers and access User, User Profile, Address, Phone, Document, Verification, Permission, Socialite
Operations and localization Activity Log, Authify Log, Developer Logins (development only), Language, Localization
API Platform modules Affiliate API, Attribute API, Blog API, Cart API, Custom Page API, FAQ API, Multimedia API, Product API

Domain packages depend on the provider-neutral contracts in Vendra Support. Installing Vendra Tenant activates tenant awareness by binding the concrete resolver; domain and API packages do not depend on the tenant provider.

The host exposes the package-owned API Platform resources below /api and publishes OpenAPI documentation at /api/docs. Frontend code should use the dedicated window.api fetch client configured in resources/js/bootstrap.js. Domain endpoints use /api/{admin-navigation-group}/{model-resource} so the public API follows the Filament admin structure, for example /api/catalog/products.

Docker

The docker/Dockerfile builds the production image (FrankenPHP, Composer install from the committed lock file, Vite asset build). Pushing a MAJOR.MINOR.PATCH tag publishes linux/amd64 and linux/arm64 images to ghcr.io/misaf/vendra (:1.0.0, :1.0, :latest).

Host lifecycle and storefront containers are owned by the standalone Go controller at vendra-controller. Operators need only Docker and its vendra binary; this Laravel repository contains no Compose stack or Docker-socket integration.

Laravel stores tenant and storefront business state. Its queued provisioning, retry, and reconciliation workflows call the controller's authenticated POST /v1/storefronts API. Configure that boundary with STOREFRONT_PROVISIONER_URL and STOREFRONT_PROVISIONER_TOKEN.

Module Development

Modules are developed locally through symlinked Composer path repositories in packages/*.

Typical workflow:

  1. Edit the module inside packages/<module-name>.
  2. Ensure the package is required in root composer.json.
  3. Run composer update <vendor/package> or composer dump-autoload when needed.
  4. Run the package's tests and static analysis as documented in its README.

For production builds, rely on installed Composer packages rather than local path repository workflows.

See UPGRADING.md before changing the host application's Vendra release line.

Documentation and AI Guidance

Every package maintains the same documentation set:

  • README.md is the user-facing contract for features, requirements, installation, usage, and package-level checks.
  • resources/boost/guidelines/core.blade.php contains concise, always-loaded package boundaries and invariants.
  • resources/boost/skills/*/SKILL.md contains the on-demand workflow and implementation guidance for that package.

Keep these files aligned with composer.json, the package source, and its tests. Describe optional integrations as optional, do not document behavior that is not implemented, and update all affected layers in the same change. The root AGENTS.md, CLAUDE.md, and .agents/skills files are generated by Laravel Boost and may be refreshed with:

php artisan boost:update --no-interaction

Testing

  • Run the smallest relevant test scope first, then expand to broader suites only when necessary.
  • Use php artisan test --parallel by default for targeted tests and full suites to minimize feedback time.
  • Omit --parallel only when debugging a failure, investigating race conditions or concurrency issues, using shared mutable state or external resources that cannot be isolated, or when the execution environment does not support parallel testing.
  • Keep intentionally non-parallel coverage, profiling, mutation testing, and benchmarking commands unchanged unless parallel execution is clearly safe.
php artisan test --parallel --compact
php artisan test --parallel --compact --filter=testName
vendor/bin/pint --dirty --format agent
composer stan

Troubleshooting

  • If package changes are not reflected, run composer dump-autoload.
  • If provider discovery seems stale, run php artisan package:discover.
  • If configuration values look outdated, run php artisan config:clear.
  • If frontend changes do not appear, run npm run dev or npm run build.

License

MIT. See LICENSE.