Tech stack: Laravel 12 · PHP 8.2 · React 19 · TypeScript · Inertia.js · Tailwind CSS 4 · Stripe · Laravel Reverb (WebSockets) · Meilisearch · Twilio · Pest
EVB Marketplace is a full-stack B2B marketplace for buying, selling and auctioning used industrial electric vehicle (EV) batteries. I designed and built the platform end to end. Verified vendors list their battery stock, buyers find it with fast filtered search, and deals close through product enquiries or live online auctions. The platform supports the circular economy by giving second-life EV batteries a reliable place to be traded.
Multi-vendor marketplace with tenant isolation The public storefront and the vendor/admin portal run on separate domains (www and app subdomains). Each vendor manages its own products, enquiries, orders, customers and company settings in a tenant-scoped workspace. Platform administrators get oversight of every vendor.
Real-time online auctions I built a live bidding system on Laravel Reverb WebSockets, so bids appear instantly for every participant without reloading the page. Domain actions handle creating auctions, placing bids, and closing or ending auctions. A scheduled background job finds expired auctions and settles them automatically. Bidders receive email notifications.
Lightning-fast product search Product discovery runs on Laravel Scout and Meilisearch, giving typo-tolerant, filterable search across battery categories, models and specifications. Product pages use SEO-friendly slug URLs and server-side rendering (Inertia SSR) to help them get indexed and load quickly.
Lead generation and enquiry management Buyers can send product enquiries straight to vendors. Vendors get branded email lead notifications and can track and manage leads from their dashboard.
Stripe subscriptions and payments Vendor subscription plans are built on Laravel Cashier, with free trials, upgrades and downgrades, cancellation and resumption. Webhooks keep each subscription in sync with Stripe. Middleware gates features by plan, such as product limits and API access. Checkout, order tracking and PDF invoices (DomPDF) cover the full order lifecycle.
Secure authentication and verification
Mobile number verification with one-time passwords (OTP), using a pluggable SMS layer that supports Twilio and Teletopia
Two-factor authentication (2FA) through Laravel Fortify
Role-based access control with Spatie Permission
A full audit trail of user actions with Spatie Activity Log
Third-party inventory integration An infrastructure layer connects to an external inventory system (Orion). Vendors can import products through queued background jobs, which keeps catalogue syncing reliable at scale.
Admin dashboard A modern React and TypeScript admin panel manages products, vendors, users, customers, enquiries, orders, auctions and audit logs. It's built from accessible Radix UI components and supports light and dark themes.
Domain-Driven Design (DDD): The business logic is split into bounded domains (Product, Vendor, Auction, Order, Enquiry, Subscription, Customer and User). Each domain has its own Models, Actions, DTOs, Events, Listeners, Policies, Jobs and Notifications, which keeps the codebase maintainable and easy to test.
Event-driven workflows: Domain events and queued listeners handle emails, notifications and integrations asynchronously, so pages stay fast.
Type-safe full stack: Laravel Wayfinder generates TypeScript route helpers, keeping the React frontend in sync with backend routes.
Media management: Spatie Media Library handles product images and documents.
Automated testing: The test suite uses Pest PHP, and code style is enforced with Laravel Pint, ESLint and Prettier.
Built with